Пребарување код

Лекција 31/31: Мерење температура и влажност преку Wi-Fi користејќи DHT11 и ESP01 SunFounder комплет

Лекција 31/31: Мерење температура и влажност преку Wi-Fi користејќи DHT11 и ESP01 SunFounder комплет

Овој проект водич ве води низ изградба на безжичен систем за следење на температура и влажност користејќи ESP8266 (ESP-01) модул и DHT11 сензор. До крајот, ќе имате уред кој создава свој веб-сервер, овозможувајќи ви да ги гледате отчитувањата во реално време на кој било уред поврзан на вашата локална мрежа, како паметен телефон, таблет или компјутер. Ова е основен IoT проект кој демонстрира како да се поврзе физичкиот свет на сензорите со дигиталниот свет на веб-интерфејси.

ESP8266 ESP01 модул

Вештините што ќе ги научите овде се високо преносливи. Оваа точна поставка може да се прилагоди за широк опсег на практични апликации, вклучувајќи:

  • Изградба на далечинска станица за следење на стаклена градина или градина за да се обезбедат оптимални услови за раст.
  • Креирање на едноставен систем за домашна автоматизација за следење на климата во одредена просторија, како визба за вино или детска соба.
  • Поставување на евтин дневник за податоци од околината за училишен научен проект.
  • Развивање на основен безбедносен или систем за предупредување кој може да ве извести за ненадејни температурни промени.

Хардвер и компоненти

За да го следите овој проект, ќе ви требаат следниве компоненти. Примарните компоненти се ESP8266 модулот и DHT11 сензорот, но останатите се основни за програмирање и напојување на модулот.

  • ESP8266 (ESP-01S) модул: Основен микроконтролер со вградена Wi-Fi способност.
  • DHT11 сензор за температура и влажност: Сензорот кој ги мери податоците од околината.
  • Arduino Uno плоча (за USB-на-сериски конверзија): Во овој проект, главната Arduino плоча не се користи за нејзината процесорска моќ. Наместо тоа, нејзиниот USB-на-сериски чип се користи за програмирање на ESP8266 модулот.
  • 330-омски отпорник: Се користи за почетниот LED тест за трепкање за ограничување на струјата.
  • 1k-омски до 10k-омски отпорник: Pull-up отпорник за податочната линија на DHT11 сензорот.
  • LED и жици за поврзување: За фазата на тестирање и за правење на сите потребни врски.
  • Прототипна плоча (Breadboard): За креирање на колата и врските.

Водич за поврзување

esp8266 ESP01 и DHT11 поврзување за лекција 31 Sunfounder 3-во-1 курс

Процесот на поврзување се прави во фази. Прво, ќе го поставиме основниот коло за програмирање на ESP-01. Ова вклучува користење на Arduino Uno како програмер. Видеото ја демонстрира оваа поставка јасно. Клучните врски се следниве:

За да влезете во режим на програмирање, мора да го поврзете IO1 (GPIO1) пин на Ground (GND). Ова му кажува на ESP8266 да чека нов фирмвер. Останатите врски за програмирање се:

  • VCC (3.3V) на EN (Enable): Ова го овозможува модулот.
  • GND на GND: Заедничка земја за колото.
  • VCC (5V) на VCC (5V): За напојување на програмерската плоча.
  • RX (ESP) на TX (Arduino): За сериска комуникација од програмерот до модулот.
  • TX (ESP) на RX (Arduino): За сериска комуникација од модулот до програмерот.
  • RST (Reset) на GND: Ова е привремена врска што се користи за ресетирање на модулот по програмирањето.

Откако ESP-01 ќе биде програмиран, поврзувањето за сензорот е едноставно. DHT11 сензорот бара pull-up отпорник на неговата податочна линија за да се обезбеди стабилна комуникација.

За поставувањето на сензорот, поврзувањето е следново:

  • DHT11 VCC (Пин 1) на 3.3V: Напојување за сензорот.
  • DHT11 DATA (Пин 2) на GPIO2 (IO2) на ESP-01: Податочна линија за отчитувања од сензорот. 1k-омски до 10k-омски pull-up отпорник треба да се поврзе помеѓу оваа податочна линија и 3.3V линијата за напојување.
  • DHT11 GND (Пин 4) на GND: Заедничка земја за сензорот.

Подготовка на Arduino IDE

За да го програмирате ESP8266, прво мора да ја додадете неговата поддршка за плоча во вашиот Arduino IDE. Ова се прави во два чекори:

  1. Додадете ја URL-адресата за Board Manager: Одете на File > Preferences. Во полето "Additional Boards Manager URLs", залепете ја следнава URL-адреса: http://arduino.esp8266.com/stable/package_esp8266com_index.json и кликнете "OK".
  2. Инсталирајте го ESP8266 пакетот за плоча: Одете на Tools > Board > Boards Manager.... Пребарајте "esp8266", пронајдете "esp8266 by ESP8266 Community", и кликнете "Install". По инсталацијата, можете да ја изберете плочата со одење на Tools > Board > ESP8266 Boards > Generic ESP8266 Module.

Инсталирање на DHT сензор библиотеката

Кодот се потпира на библиотека за комуникација со DHT11 сензорот. Оваа библиотека мора да биде инсталирана во вашиот Arduino IDE.

  1. Одете на Tools > Manage Libraries....
  2. Пребарајте "DHT sensor library".
  3. Пронајдете ја библиотеката од Adafruit и кликнете "Install". Оваа библиотека го поедноставува процесот на читање податоци од сензорот.

Проект 1: LED тест за трепкање

Пред да навлеземе во сензорот, клучно е да потврдите дека можете успешно да го програмирате ESP-01. Ова се прави со класичниот пример „Blink“. Видеото прикажува процес на извоз на компајлираната бинарна датотека и користење на посебна batch-датотека за нејзино запишување, што е решение за специфичната USB-на-сериска поставеност. Целта е да видите како вградената LED трепка, потврдувајќи дека програмскиот синџир работи. За да го стартувате модулот по програмирањето, мора да ја исклучите жицата што го поврзува IO1 со GND, а потоа кратко да го поврзете пинот RST со GND за да го ресетирате модулот.

Проект 2: Читање на DHT11 на серискиот монитор

Откако ќе се потврди програмирањето, следниот чекор е да го поврзете сензорот DHT11 и да ги читате неговите податоци. Овој проект го користи примерот DHTtester од библиотеката за DHT сензори на Adafruit. Кодот е конфигуриран да го користи точниот пин и типот на сензорот. По запишувањето на оваа програма, можете да го отворите серискиот монитор (поставен на 9600 бауди) за да ги видите отчитувањата на температурата и влажноста.

Проект 3: Поставување на веб-серверот

Последниот проект комбинира сè. ESP8266 е програмиран да се поврзе на вашата локална Wi-Fi мрежа и да води едноставна веб-страница. Оваа страница ги прикажува живите отчитувања на температурата и влажноста. Кодот е изменета верзија на примерот „HelloServer“ на ESP8266. Видеото демонстрира како да пристапите до овие податоци со внесување на IP-адресата на уредот или неговото mDNS име (на пр., robojaxDHT.local) во веб-прелистувач на кој било уред поврзан на истата мрежа.

Објаснување на кодот

Бидејќи целата програма е достапна за преземање, овој дел се фокусира на клучните променливи што корисникот може да ги конфигурира, а кои ќе треба да ги прилагодите за вашата мрежа и преференции. Кодот е изменета верзија на примерот „HelloServer“ на ESP8266. Основната логика вклучува читање на сензорот и форматирање на HTML-страница за прикажување на податоците.

Еве ги критичните делови од кодот што ќе треба да ги измените:

// Wi-Fi акредитиви - МОРА ДА ГИ ПРОМЕНИТЕ
const char* ssid = "YourWiFiSSID"; // Заменете со името на вашата Wi-Fi мрежа
const char* password = "YourWiFiPassword"; // Заменете со лозинката на вашата Wi-Fi мрежа

Ова е најважниот дел што треба да го промените. Променливите ssid и password мора точно да одговараат на вашата локална Wi-Fi мрежа. Името на Wi-Fi е чувствително на големи и мали букви, затоа проверете дали сте го внеле правилно.

// Конфигурација на DHT11 сензорот
#define DHTPIN 2     // Дигитален пин поврзан со DHT сензорот (GPIO2)
#define DHTTYPE DHT11   // Тип на DHT 11 сензор

Овие дефиниции го поставуваат сензорот. DHTPIN е GPIO пинот на ESP8266 на кој е поврзана линијата за податоци на сензорот (во овој водич тоа е GPIO2). DHTTYPE го дефинира специфичниот модел на сензорот. Ако користевте DHT22 сензор, ќе треба да ја откоментирате линијата за DHT22 и да ја коментирате онаа за DHT11.

// Променливи што може да се конфигурираат
const long interval = 3000; // милисекунди помеѓу отчитувањата на сензорот
char temperature[] = "00.0";
char humidity[] = "00.0";

Променливата interval контролира колку често се чита сензорот и се ажурира веб-страницата. Стандардно е 3000 милисекунди (3 секунди). Можете да ја зголемите на повисока вредност како 5000 или 10000 за да ја намалите фреквенцијата на ажурирања.

Кодот исто така вклучува функција што го форматира отчитувањето на температурата. Можете да изберете да ја прикажете температурата во Целзиусови или Фаренхајтови степени со измена на логиката во функцијата sendTemperature(). Видеото објаснува дека променливата Tvalue е поставена да ја држи вредноста во Целзиусови, но можете да ја промените за да ја користите променливата за Фаренхајт F наместо тоа.

Демонстрација на живиот проект

Во видеото е демонстриран завршениот проект. Откако кодот е запишан и модулот е ресетиран, тој се поврзува на Wi-Fi мрежата. Серискиот монитор ја прикажува статусот на поврзување и IP-адресата на уредот. Со навигација до оваа IP-адреса во веб-прелистувач, можете да видите едноставна страница што ги прикажува моменталната температура и влажност. Демонстрацијата покажува како отчитувањата се ажурираат во реално време. Кога DHT11 сензорот се загрева со топлински пиштол, отчитувањето на температурата на веб-страницата соодветно се зголемува. Ако жицата за податоци на сензорот е исклучена, страницата прикажува „None“ за вредностите на сензорот, што е корисна функција за решавање проблеми.

Поглавја

  • [00:00] Вовед во проектот
  • [01:33] Разбирање на ESP8266 и веб-серверите
  • [05:47] Поврзување на ESP-01 за програмирање
  • [08:51] Инсталирање поддршка за ESP8266 плоча во Arduino IDE
  • [11:47] Проект 1: Трепкање на LED со ESP8266
  • [20:28] Поврзување на DHT11 сензорот
  • [22:34] Инсталирање на библиотеката за DHT сензори
  • [23:13] Проект 2: Читање на DHT11 на серискиот монитор
  • [30:10] Објаснување на кодот за веб-сервер проектот
  • [36:14] Проект 3: Запишување на веб-сервер кодот
  • [38:42] Демонстрација: Преглед на температура преку Wi-Fi
  • [41:43] Заклучок и решавање проблеми

Слики

ESP8266 ESP01 module
ESP8266 ESP01 module
ESP8266 ESP01 and DHT11 wiring for lesson 31 Sunfounder 3-in-1 course
ESP8266 ESP01 and DHT11 wiring for lesson 31 Sunfounder 3-in-1 course
895-Lesson 31/31: DHT11 and ESP01 over WiFi code
Јазик: C++

 /*
 * Display temperature using DHT11, DHT22 with NodeMCU ESP8266 
 * over WiFi in local network on computer o mobile devices
 * 
 * Written by Ahmad Shamshiri on Sep 27, 2019
 * in Ajax, Ontario, Canada
 * Watch video instruciton for this video: https://youtu.be/1A4-6hDARQc
 * 
 * I have combined DHT library of Adafruit with ESP8266 WebServer both links 
 * Adafruit DHT library on GitHub: https://github.com/adafruit/DHT-sensor-library
 * and 
 * ESP8266 on GitHub : https://github.com/esp8266/Arduino
 * Download and resource page https://robojax.com/RJT614

 * 
Get this code and other Arduono codes from Robojax.com


 * Code is available at https://robojax.com/RJT614
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been download from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>. 

*/

const int refresh=3;//3 seconds
// DHT settings starts
#include "DHT.h"
#define DHTPIN 2     // what digital pin we're connected to
// Uncomment whatever type you're using!
//#define DHTTYPE DHT11   // DHT 11
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);
float tValue, hValue;// 
char *simipleName="robojaxDHT";//android
// ****** DHT settings end (Robojax.com )


#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>

#ifndef STASSID
#define STASSID "Robojax" // Your WiFi SSID
#define STAPSK  "100%Right" //Your WiFi password
#endif

const char* ssid = STASSID;
const char* password = STAPSK;

ESP8266WebServer server(80);


void sendTemp() {

  String page = "<!DOCTYPE html>";
  page +="    <meta http-equiv='refresh' content='";
  page += String(refresh);// how often temperature is read
  page +="'/>";  
  page +="<html dir=\"rtl\">";
  page +="<body>"; 
  page +="<h1>&#1585;&#1591;&#1608;&#1576;&#1578; &#1608; &#1581;&#1585;&#1575;&#1585;&#1578; &#1578;&#1608;&#1587;&#1591; &#1583;&#1740; &#1575;&#1670; &#1578;&#1740;</h1>";
      
  page +="<p style=\"font-size:150px;\">&#1581;&#1585;&#1575;&#1585;&#1578;<br/>";  
  page +="<span style=\"color:red; font-size:150px;\">";
  page += String(tValue, 2);
  page +="&#176C</p>";

  page +="<p style=\"font-size:150px;\">&#1585;&#1591;&#1608;&#1576;&#1578;<br/>";  
  page +="<span style=\"color:red; font-size:150px;\">";
  page += String(hValue, 2);
  page +="%</p>";  
      
  page +="</body>";  
  page +="</html>";  
 server.send(200,  "text/html",page);

}

void handleNotFound() {
 
  String message = "File Not Found";
  message += "URI: ";
  message += server.uri();
  message += "Method: ";
  message += (server.method() == HTTP_GET) ? "GET" : "POST";
  message += "Arguments: ";
  message += server.args();
  message += "";
  for (uint8_t i = 0; i < server.args(); i++) {
    message += " " + server.argName(i) + ": " + server.arg(i) + "";
  }
  server.send(404, "text/plain", message);

}

void setup(void) {
  // Robojax.com code for ESP8266 and DHT11 DHT22
   dht.begin();
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  if (WiFi.status() == WL_CONNECTED)
  {
    uint8_t macAddr[6];
    WiFi.macAddress(macAddr);
    Serial.printf("Connected, mac address: %02x:%02x:%02x:%02x:%02x:%02x", macAddr[0], macAddr[1], macAddr[2], macAddr[3], macAddr[4], macAddr[5]);
  }  
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  if (MDNS.begin(simipleName)) {
    Serial.print("or view http://");
    Serial.println(simipleName);
  }

  server.on("/", sendTemp);

  server.on("/inline", []() {
    server.send(200, "text/plain", "this works as well");
  });

  server.onNotFound(handleNotFound);

  server.begin();
  Serial.println("HTTP server started");
}

void loop(void) {
  // Robojax.com code for ESP8266 and DHT11 DHT22
  server.handleClient();
  MDNS.update();//multicast DNS
  float c = dht.readTemperature();// Read temperature as Celsius (the default)
  float h = dht.readHumidity();// Reading humidity 
  float f = dht.readTemperature(true);// Read temperature as Fahrenheit (isFahrenheit = true)
    Serial.print(c);
    Serial.println(F("°C "));
 tValue =c;//save temperature for display
 hValue =h;//save humidity for display
  delay(300);// change this to larger value (1000 or more) if you don't need very often reading
  // Robojax.com code for ESP8266 and DHT11 DHT22
}

Ресурси и референци

Сè уште нема ресурси.

Датотеки📁

Arduino код (.ino)

Fritzing датотека

Упатство за корисникот