Мазмуну:

Аба ырайы Web App Esp8266 колдонуу: 7 кадам
Аба ырайы Web App Esp8266 колдонуу: 7 кадам

Video: Аба ырайы Web App Esp8266 колдонуу: 7 кадам

Video: Аба ырайы Web App Esp8266 колдонуу: 7 кадам
Video: ESP8266 Project: How to control 2 AC bulb or load using 2 Relay with NodeMCU and D1 Mini over WiFi 2024, Май
Anonim
Esp8266 менен аба ырайы желе колдонмосу
Esp8266 менен аба ырайы желе колдонмосу

SHT 31 - бул Sensirion тарабынан жасалган температура жана нымдуулук сенсорлору. SHT31 ± 2% RH айланасында тактыктын жогорку деңгээлин камсыздайт. Анын нымдуулук диапазону 0дөн 100% га чейин жана температуранын диапазону -40тан 125 ° Сге чейин. Бул 8 сек сенсордун жооп берүү убактысы менен алда канча ишенимдүү жана тез. Анын функционалдуулугу жакшыртылган сигналды иштетүүнү жана I2C шайкештигин камтыйт. Анын энергияны үнөмдүү кылган ар кандай операция режимдери бар.

Бул үйрөткүчтө биз SHT 31ди Adafruit Huzzah тактасы менен байланыштырдык. Температура жана нымдуулук баалуулуктарын окуу үчүн биз ESP8266 I2C калканчын колдондук. Бул адаптер бардык казыктарды колдонуучуга жеткиликтүү кылат жана колдонуучуга ыңгайлуу I2C чөйрөсүн сунуштайт.

1 -кадам: Аппараттык камсыздоо талап кылынат

Аппараттык камсыздоо талап кылынат
Аппараттык камсыздоо талап кылынат
Аппараттык камсыздоо талап кылынат
Аппараттык камсыздоо талап кылынат
Аппараттык камсыздоо талап кылынат
Аппараттык камсыздоо талап кылынат

Бул тапшырманы аткаруу үчүн колдонулган жабдыктар:

1. SHT31

2. Adafruit Huzzah ESP8266

3. ESP8266 I2C адаптери

4. I2C кабели

2 -кадам: Аппараттык туташуулар

Аппараттык туташуулар
Аппараттык туташуулар
Аппараттык туташуулар
Аппараттык туташуулар

Бул кадамга аппараттык туташуу көрсөтмөсү кирет. Бул бөлүм негизинен сенсор менен ESP8266 ортосунда талап кылынган зым байланыштарын түшүндүрөт. Байланыштар төмөнкүчө.

  1. SHT31 I2C үстүндө иштейт. Жогорудагы сүрөт ESP8266 жана SHT31 модулунун ортосундагы байланышты көрсөтөт. Биз I2C кабелин колдонуп жатабыз, же 4 F дан F секирүүчү зымдарын колдоно алабыз.
  2. бир зым Vcc үчүн колдонулат, экинчи зым GND үчүн, экинчиси SDA жана SCL үчүн.
  3. I2C адаптерине ылайык pin2 жана ESP8266 тактасынын 14 пини SDA жана SCL катары колдонулат.

3 -кадам: Тапшырмаларды пландоо коду

Бул окуу куралында биз үч операцияны аткарып жатабыз

  • I2C протоколун колдонуп SHT11ден маалыматтарды окуңуз
  • веб -серверди жайгаштырыңыз жана сенсордун окуусун веб -баракчага жайгаштырыңыз
  • сенсордун окуусун ThingSpeak APIге жайгаштыруу

Бул үчүн биз TaskScheduler китепканасын колдонобуз. Биз үч башка контролдук операцияга таандык үч башка тапшырманы пландаштырдык. бул төмөнкүчө жасалат

  • 1 -тапшырма сенсордун маанисин окуу үчүн, бул тапшырма 1 секундага созулат, ал 10 сек убактысына жетет.
  • Task1 өз мөөнөтүнө жеткенде, Task 2 иштетилет жана Task1 өчүрүлөт.
  • Биз бул кайра чалууда APге туташабыз, эки логикалык өзгөрмө STA менен APнын которулушуна кам көрүү үчүн кабыл алынат.
  • 2 -тапшырмада биз 192.168.1.4 веб -серверин жайгаштырабыз. Бул тапшырманы аткаруу убактысы 50 секундга жеткенге чейин ар бир 5 секундда иштейт
  • 2 -тапшырма күтүү убактысына жеткенде, 3 -тапшырма иштетилип, 2 -тапшырма өчүрүлгөн.
  • Бул кайра чалууда STAга (жергиликтүү IP) туташабыз
  • 3 -тапшырмада сенсордун окуусун ThingSpeak API булутуна жайгаштырабыз
  • 3 -тапшырма ар бир беш секундда иштейт, башкача айтканда 50 секунд
  • Task3 өз мөөнөтүнө жеткенде, Task 1 кайра иштетилет жана Task3 өчүрүлөт.
  • Эч кандай кайра чалуу же түзмөк бош турганда Light Sleep режимине өтөт, ошондо кубатты үнөмдөйт.

Scheduler ts;

// i2c үчүн тапшырмалар, веб -серверди жайгаштыруу жана нерселер боюнча пост

Милдет tI2C (1 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL, & taskI2CDisable); TAP тапшырмасы (5*TASK_SECOND, TASK_FOREVER, & taskAPCallback, & ts, false, NULL, & taskAPDisable); Милдет tWiFi (5* TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL, & taskWiFiDisable); // тапшырмаларды аткаруу убактысы tI2C.setTimeout (10 * TASK_SECOND); tAP.setTimeout (50 * TASK_SECOND); tWiFi.setTimeout (50 * TASK_SECOND); // иштетүү I2C тапшырма tI2C.enable ();

4 -кадам: Температураны жана нымдуулукту окуу коду

Биз Wire.h китепканасын температура жана нымдуулук баалуулуктарын окуу үчүн колдонобуз. Бул китепкана сенсор менен башкы түзмөктүн ортосундагы i2c байланышын жеңилдетет. 0x44 SHT31 үчүн I2C дареги.

SHT31 иштөөнүн башка режиминде иштейт. Бул үчүн маалымат барагына кайрылсаңыз болот.

Биз 0x2C жана 0x06ны MSB жана LSB катары бир ок операциясы үчүн колдонобуз.

// I2C тапшырмасын кайра чакыруу жараксыз милдетI2CCallback ()

{Serial.println ("taskI2CStarted"); белгисиз int тамыры [6]; // берүүнү 0x44төн баштоо; Wire.beginTransmission (Addr); // бир кайталоо жөндөмдүүлүгү менен биз 0x2C (MSB) жана 0x06 (LSB) Wire.write (0x2C) колдонобуз; Wire.write (0x06); // берүүнү токтотуу Wire.endTransmission (); // 0x44 Wire.beginTransmission (Addr) дан байт сураңыз; Wire.endTransmission (); Wire.requestFrom (Addr, 6); if (Wire.available () == 6) {// data [0] жана data [1] 16 бит температураны камтыйт. root [0] = Wire.read (); root [1] = Wire.read (); // маалыматтар [2] 8 бит CRC тамырынан турат [2] = Wire.read (); // маалыматтар [3] жана маалыматтар [4] 16 бит нымдуулук тамырын камтыйт [3] = Wire.read (); root [4] = Wire.read (); // маалыматтар [5] 8 бит CRC тамырынан турат [5] = Wire.read (); } int temp = (root [0] * 256) + root [1]; // MSBди 8 битке жылдыруу LSB float cTemp = -45.0 + (175.0 * temp /65535.0) кошуу; float fTemp = (cTemp * 1.8) + 32.0; // MSBди 8 битке жылдырыңыз, LSBди толук чечилиши менен бөлүңүз жана * 100 нымдуулуктун пайыздык ылдамдыгы үчүн = (100.0 * ((root [3] * 256.0) + root [4])) /65535.0;

tempC = cTemp;

tempF = fTemp; нымдуу = нымдуулук; Serial.print ("Температура С: / т"); Serial.println (String (cTemp, 1)); Serial.print ("Температура F: / t"); Serial.println (String (fTemp, 1)); Serial.print ("Нымдуулук: / t"); Serial.println (String (нымдуулук, 1)); }

5 -кадам: Веб -серверди хостинг үчүн код

Веб -серверди хостинг үчүн код
Веб -серверди хостинг үчүн код
Веб -серверди хостинг үчүн код
Веб -серверди хостинг үчүн код

Биз статикалык IPде түзмөгүбүздөн веб -серверди өткөрдүк.

  • ESP8266WebServer китепканасы веб -серверди жайгаштыруу үчүн колдонулат
  • Биринчиден, статикалык IPибизди түзүү үчүн IP дарегин, шлюзду жана субнет маскасын жарыялашыбыз керек
  • Эми ssid жана кирүү чекитиңиз үчүн сырсөздү жарыялаңыз.
  • Кирүү чекитине каалаган STA түзмөгүнөн туташыңыз
  • серверди интернет байланыш протоколу үчүн демейки порт болгон 80 портунда жайгаштыруу, гипертекстти өткөрүп берүү протоколу (HTTP)
  • кирүү веб баракчасы үчүн веб браузериңизге 192.168.1.4 киргизиңиз жана 192.168.1.4/ Веб баракты сенсор окуу үчүн

// AP үчүн статикалык Ip

IPAddress ap_local_IP (192, 168, 1, 4);

IPAddress ap_gateway (192, 168, 1, 254);

IPAddress ap_subnet (255, 255, 255, 0); // STA режиминде жергиликтүү WiFi үчүн ssid жана AP

const char WiFissid = "*********";

const char WiFipass = "*********";

// ssid жана AP үчүн өтүү

const char APssid = "********";

const char APpass = "********";

ESP8266WebServer сервери (80);

жараксыз орнотуу {

server.on ("/", onHandleDataRoot);

server.on ("/Value", onHandleDataFeed);

server.onNotFound (onHandleNotFound);

}

Void taskAPCallback () {

Serial.println ("taskAP башталды");

server.handleClient ();

}

void onHandleDataRoot () {server.send (200, "text/html", PAGE1); }

void onHandleDataFeed () {

server.send (200, "text/html", PAGE2); }

void onHandleNotFound () {

String message = "Файл табылган жок / n / n";

message += "URI:";

билдирүү += server.uri ();

билдирүү += "\ nУсулу:";

message += (server.method () == HTTP_GET)? "GET": "POST";

message += "\ nАргументтер:";

билдирүү += server.args ();

билдирүү += "\ n";

server.send (404, "текст/жөнөкөй", билдирүү);}

Void reconnectAPWiFi () {

WiFi.mode (WIFI_AP_STA);

кечиктирүү (100);

WiFi.disconnect ();

логикалык абал = WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);

if (status == true) {

Serial.print ("Soft-AP орнотулууда …");

логикалык ap = WiFi.softAP (APssid, APpass);

if (ap == true) {

Serial.print ("туташкан: / t");

// IPAddress myIP = WiFi.softAPIP ();

Serial.println (WiFi.softAPIP ());

}

server.begin ();

}

}

6 -кадам: Thing Speak үчүн маалыматтарды жайгаштыруу коду

Thing Speak үчүн маалыматтарды жайгаштыруу коду
Thing Speak үчүн маалыматтарды жайгаштыруу коду
Thing Speak үчүн маалыматтарды жайгаштыруу коду
Thing Speak үчүн маалыматтарды жайгаштыруу коду
Thing Speak үчүн маалыматтарды жайгаштыруу коду
Thing Speak үчүн маалыматтарды жайгаштыруу коду
Thing Speak үчүн маалыматтарды жайгаштыруу коду
Thing Speak үчүн маалыматтарды жайгаштыруу коду

Бул жерде биз сенсордун окууларын Thing Speakка жайгаштырып жатабыз. бул тапшырманы аткаруу үчүн төмөнкү кадамдар керек-

  • Аккаунтуңузду түз сүйлөңүз
  • Сенсорлоруңузду сактоо үчүн каналдар менен талааларды түзүңүз
  • биз ESPтен маалыматтарды toSpeakке жана тескерисинче GET жана POST өтүнүчтөрүн колдонуп, apiге жөнөтө алабыз.
  • биз маалыматты ThingSpeakка төмөндөгүдөй жайгаштыра алабыз

Void taskWiFiCallback () {

WiFiClient wifiClient; if (wifiClient.connect (hostId, 80)) {String postStr = apiKey; postStr += "& field1 ="; postStr += сап (нымдуу); postStr += "& field2 ="; postStr += Сап (tempC); postStr += "& field3 ="; postStr += Сап (tempF); postStr += "\ r / n / r / n"; wifiClient.print ("POST /update HTTP /1.1 / n"); wifiClient.print ("Алуучу: api.thingspeak.com / n"); wifiClient.print ("Туташуу: жабуу / n"); wifiClient.print ("X-THINGSPEAKAPIKEY:"+apiKey+"\ n"); wifiClient.print ("Content-Type: application/x-www-form-urlencoded / n"); wifiClient.print ("Content-Length:"); wifiClient.print (postStr.length ()); wifiClient.print ("\ n / n"); wifiClient.print (postStr); } wifiClient.stop (); }

7 -кадам: Жалпы код

Жалпы код менин github репозиторийимде жеткиликтүү

Кредиттер:

  • Arduino JSON: ArduinoJson
  • ESP826WebServer
  • Task Scheduler
  • SHT 31
  • I2C сканерлөө
  • HIH6130 үйрөткүч окуу куралы
  • Wire Arduino
  • NCD.io

Сунушталууда: