Съдържание:

Уеб приложение за времето с помощта на Esp8266: 7 стъпки
Уеб приложение за времето с помощта на Esp8266: 7 стъпки

Видео: Уеб приложение за времето с помощта на Esp8266: 7 стъпки

Видео: Уеб приложение за времето с помощта на Esp8266: 7 стъпки
Видео: Air crew (drama, directed by Alexander Mitta, 1979) 2024, Може
Anonim
Уеб приложение за времето с помощта на Esp8266
Уеб приложение за времето с помощта на Esp8266

SHT 31 е сензор за температура и влажност, произведен от Sensirion. SHT31 осигурява високо ниво на точност около ± 2% относителна влажност. Диапазонът на влажност е между 0 до 100%, а температурният диапазон е между -40 до 125 ° C. Той е много по -надежден и бърз с 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 и pin 14 на платка ESP8266 се използват съответно като SDA и SCL

Стъпка 3: Код за планиране на задачи

В този урок изпълняваме три операции

  • Прочетете данните от SHT11, използвайки I2C протокол
  • хоствайте уеб сървъра и публикувайте показанията на сензора на уеб страницата
  • публикувайте показанията на сензора в ThingSpeak API

За да постигнем това, използваме библиотеката TaskScheduler. Планирали сме три различни задачи, отнасящи се до три различни контролни операции. това се прави по следния начин

  • Задача 1 е за отчитане на стойността на сензора, тази задача се изпълнява за 1 секунда, докато достигне таймаут от 10 секунди.
  • Когато Task1 достигне времето за изчакване, Task 2 е активиран и Task1 е деактивиран.
  • Ние се свързваме с AP в това обратно извикване. Две булеви променливи са взети, за да се погрижат за превключването между STA и AP
  • В задача 2 ние хостваме уеб сървър на адрес 192.168.1.4. Тази задача се изпълнява на всеки 5 секунди, докато достигне времето за изчакване, което е 50 секунди
  • Когато задача 2 достигне таймаут, задача 3 е активирана и задача 2 е деактивирана.
  • Ние се свързваме със STA (локален IP) при това обратно обаждане
  • В задача 3 публикуваме четенето на сензора в облачния ThingSpeak API
  • Задача 3 се изпълнява на всеки пет секунди, докато достигне времето за изчакване, т.е. 50 секунди
  • Когато Task3 достигне времето за изчакване, Task 1 се активира отново и Task3 е деактивиран.
  • Когато не се извиква обратно повикване или устройството не работи, то преминава в Light Sleep, като по този начин пести енергия.

Планировчик ts;

// Задачи за i2c, хостинг на уеб сървър и публикуване на thingspeak

Задача tI2C (1 * TASK_SECOND, TASK_FOREVER и & taskI2CCallback, & ts, false, NULL, & taskI2CDisable); Task 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 е I2C адресът за SHT31.

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) {// данни [0] и данни [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 поплавък cTemp = -45.0 + (175.0 * temp /65535.0); float fTemp = (cTemp * 1.8) + 32.0; // изместване на MSB с 8 бита добавяне на LSB към него разделяне с пълна разделителна способност и * 100 за процент влажност на плаващия = (100.0 * ((корен [3] * 256.0) + корен [4])) /65535.0;

tempC = cTemp;

tempF = fTemp; влажен = влажност; Serial.print ("Температура в C: / t"); Serial.println (Низ (cTemp, 1)); Serial.print ("Температура в F: / t"); Serial.println (String (fTemp, 1)); Serial.print ("Влажност: / t"); Serial.println (Низ (влажност, 1)); }

Стъпка 5: Код за хостване на уеб сървър

Код за хостване на уеб сървър
Код за хостване на уеб сървър
Код за хостване на уеб сървър
Код за хостване на уеб сървър

Ние сме хоствали уеб сървър от нашето устройство на статичен IP адрес.

  • Библиотеката ESP8266WebServer се използва за хостване на уеб сървъра
  • Първо трябва да декларираме IP адрес, шлюз и подмрежова маска, за да създадем нашия статичен IP
  • Сега обявете ssid и парола за вашата точка за достъп.
  • свържете се с точката за достъп от всяко STA устройство
  • хоствайте сървъра на порт 80, който е порт по подразбиране за интернет комуникационен протокол, протокол за прехвърляне на хипертекст (HTTP)
  • въведете 192.168.1.4 във вашия уеб браузър за въвеждане на уеб страница и 192.168.1.4/Value за уеб страница за четене на сензори

// статичен IP за AP

IP Адрес ap_local_IP (192, 168, 1, 4);

IP Адрес ap_gateway (192, 168, 1, 254);

IPAddress ap_subnet (255, 255, 255, 0); // ssid и AP за локален WiFi в режим STA

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

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

// ssid и pass за AP

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

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

ESP8266WebServer сървър (80);

void setup {

server.on ("/", onHandleDataRoot);

server.on ("/Стойност", onHandleDataFeed);

server.onNotFound (onHandleNotFound);

}

void taskAPCCallback () {

Serial.println ("taskAP стартиран");

server.handleClient ();

}

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

void onHandleDataFeed () {

server.send (200, "текст/html", PAGE2); }

void onHandleNotFound () {

String message = "Файл не е намерен / n / n";

message += "URI:";

съобщение += server.uri ();

съобщение += "\ nМетод:";

съобщение += (server.method () == HTTP_GET)? "GET": "POST";

съобщение += "\ nАргументи:";

съобщение += server.args ();

съобщение += "\ n";

server.send (404, "текст/обикновен", съобщение);}

void повторно свързване APWiFi () {

WiFi.mode (WIFI_AP_STA);

забавяне (100);

WiFi.disconnect ();

логическо състояние = WiFi.softAPCConfig (ap_local_IP, ap_gateway, ap_subnet);

if (status == true) {

Serial.print ("Настройка на soft-AP …");

булева ap = WiFi.softAP (APssid, APpass);

ако (ap == true) {

Serial.print ("свързан с: / t");

// IP Адрес myIP = WiFi.softAPIP ();

Serial.println (WiFi.softAPIP ());

}

server.begin ();

}

}

Стъпка 6: Код за публикуване на данни, за да говорите

Код за публикуване на данни, за да говорите
Код за публикуване на данни, за да говорите
Код за публикуване на данни, за да говорите
Код за публикуване на данни, за да говорите
Код за публикуване на данни, за да говорите
Код за публикуване на данни, за да говорите
Код за публикуване на данни, за да говорите
Код за публикуване на данни, за да говорите

Тук публикуваме показанията на сензора в Thing Speak. за изпълнение на тази задача са необходими следните стъпки-

  • Създайте своя акаунт в нещо говори
  • Създавайте канали и полета, за да съхранявате вашите сензорни данни
  • можем да получим и публикуваме данните от ESP в thingSpeak и обратно, като използваме 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 ("Тип съдържание: 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
  • Планировчик на задачи
  • SHT 31
  • I2C сканиране
  • HIH6130 инструкции за употреба
  • Wire Arduino
  • NCD.io

Препоръчано: