Съдържание:
- Стъпка 1: Изисква се хардуер
- Стъпка 2: Хардуерни връзки
- Стъпка 3: Код за планиране на задачи
- Стъпка 4: Код за отчитане на стойностите на температурата и влажността
- Стъпка 5: Код за хостване на уеб сървър
- Стъпка 6: Код за публикуване на данни, за да говорите
- Стъпка 7: Общ код
Видео: Уеб приложение за времето с помощта на Esp8266: 7 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:51
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. Връзките са както следва.
- SHT31 работи през I2C. Горното изображение демонстрира връзката между модула ESP8266 и SHT31. Използваме I2C кабел за него или можем да използваме 4 F до F джъмперни проводници.
- един проводник се използва за Vcc, вторият проводник за GND и други два съответно за SDA и SCL.
- Според адаптера 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
Препоръчано:
ESP8266 Уеб сървър за мониторинг на времето (без Arduino): 4 стъпки
ESP8266 Уеб сървър за мониторинг на времето (без Arduino): „Интернет на нещата“(IoT) се превръща във все по -нарастваща тема за разговори всеки ден. Това е концепция, която не само има потенциал да повлияе на начина, по който живеем, но и как работим. От промишлени машини до носими устройства - използвайки вградени
Показване на времето и времето на Arduino 3 в 1: 11 стъпки
Arduino 3-в-1 дисплей за времето и времето: Харесвам PIC микроконтролерите и харесвам програмирането на асемблер. Всъщност през последните няколко години публикувах около 40 проекта на моя уебсайт въз основа на тази комбинация. Наскоро поръчах някои части от един от любимите ми американски
Използвайте повторно модул за уеб камера HP WebCam 101 Aka 679257-330 като обща USB уеб камера: 5 стъпки
Използвайте повторно модул на уеб камера HP WebCam 101 Aka 679257-330 като обща USB уеб камера: Искам да подправя 14-годишния си Panasonic CF-18 с чисто нова уеб камера, но Panasonic вече не поддържа тази прекрасна машина, затова трябва да използвайте сивото вещество за нещо по -лесно от b & b (бири и бургери). Това е първата част
Свързан към мрежата SMART LED анимационен часовник с уеб базиран контролен панел, синхронизиран сървър на времето: 11 стъпки (със снимки)
Свързан с мрежата SMART LED анимационен часовник С уеб-базиран контролен панел, синхронизиран сървър на времето: Историята на този часовник датира от далечен път-повече от 30 години. Баща ми беше пионер в тази идея, когато бях само на 10 години, много преди революцията на светодиодите - тогава, когато светодиодите бяха 1/1000 от яркостта на техния ослепяващ блясък. Истина
Урок за IO на уеб драйвер Използване на уеб сайт на живо и примери за работа: 8 стъпки
Урок за IO на уеб драйвер Използване на уеб сайт на живо и примери за работа: Урок за IO на уеб драйвер Използване на уеб сайт на живо и работещи примери Последна актуализация: 26.07.2015 г. (Проверявайте често, докато актуализирам тези инструкции с повече подробности и примери) Предистория интересно предизвикателство ми беше представено. Трябваше да