Съдържание:
- Стъпка 1: Спецификация на хардуера и софтуера
- Стъпка 2: Съхраняване на потребителски идентификационни данни
- Стъпка 3: Настройка на вашата уеб форма в SPIFFS
- Стъпка 4: Планиране на задачи
- Стъпка 5: Отчитане на стойностите на температурата и влажността от SHT25
- Стъпка 6: Публикуване на стойности в ThingSpeak чрез ThingSpeak MQTT API
- Стъпка 7: Известие по имейл за доклада за времето
- Стъпка 8: Общ код
Видео: Прогноза за времето с помощта на аплети на ThingSpeak MQTT и IFTTT: 8 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:52
Въведение
Облачно приложение за времето, осигуряващо ежедневни метеорологични отчети като известие по имейл. Това уеб приложение измерва температурата и влажността с помощта на SHT25 и Adafruit Huzzah ESP8266. Той ни предоставя данни за температурата и влажността в реално време и почасови анализи. Данните се изпращат чрез ThingSpeak MQTT API и по -късно ние предоставяме имейл известие на потребителя, когато температурата достигне зададения праг, използвайки протокола IFTTT. SHT25 е сензор за температура и влажност, произведен от Sensirion. SHT25 осигурява високо ниво на точност около ± 2% относителна влажност. Диапазонът на влажност е между 0 до 100%, а температурният диапазон е между -40 до 125 ° C. Той е много по -надежден и бърз с 8 секунди време за реакция на сензора.
Характеристика
- Предоставя ви анализи и статистики в реално време, използващи Thing Speak MQTT API
- Известие по имейл се предоставя на потребителя в определено време с помощта на IFTTT
- Планировчикът на задачи се използва за планиране на задачата като извличане на данни от сензори, Публикуване на показанията на сензора, Абониране за тема MQTT
- Той използва протокол I2C, за да извлече показанията на сензора, които са по -точни, разширяеми и мащабируеми
- спящ режим, когато устройството е в режим на готовност или няма извикване на задача.
- ефективното планиране на задачите осигурява безпроблемно използване
- Хоства се отделна уеб страница, където потребителят трябва да предостави своите потребителски данни, за да избегне мигането на вашето устройство всеки път, когато е в обсега на други wifi мрежи
- SPIFFS се използва за съхраняване на нашата уеб страница, за да направи кода ни четим и по -малко тромав
Стъпка 1: Спецификация на хардуера и софтуера
Спецификация на хардуера
- Adafruit esp8266 дъска Huzzah
- Щит на борда на Huzzah
- Сензорен модул SHT25
- I2C кабел
Спецификация на софтуера
- Arduino IDE
- IFTTT Thing Speak
- MQTT API
Стъпка 2: Съхраняване на потребителски идентификационни данни
Тук използваме сензор SHT25 I2C, за да прочетем стойността на температурата и относителната влажност в реално време и да публикуваме тези стойности в облака. За да получаваме актуализираната стойност на сензора от време на време и да публикуваме тези актуализации едновременно, използваме библиотеката за планиране на задачи на Arduino. За облачни операции използваме ThingSpeak MQTT API. По-късно предоставяме на потребителя отчет за времето в реално време, използвайки аплети на IFTTT. Можете да изпълните тези стъпки, за да направите своя собствена метеорологична станция. Така че, направи си сам.
Преди да продължите по -нататък. Трябва да запазим идентификационните данни на потребителя. За тази цел ние хостваме уеб сървър на адрес 192.169.1.4. Съхранихме нашия уеб формуляр в SPIFFS. След като устройството се стартира, то хоства уеб сървър за 60 секунди. Потребителят трябва да следва тези стъпки.
- Свържете се с AP ESPuser, Това е посочено в списъка ви с налични wifi мрежи. Свържете се с тази точка за достъп и въведете паролата „*******“
- След като се свърже, отидете в браузъра си, въведете IP 192.168.1.4.
- Въведете SSID и паролата на вашия локален WiFi в полетата за въвеждане и въведете SUBMIT
- Тези идентификационни данни ще бъдат записани в EEPROM
- След 60 секунди устройството автоматично ще се изключи от точката за достъп
- Следващия път, когато включите устройството, Потребителят не трябва да следва тази процедура, Устройството автоматично ще извлече идентификационните данни на потребителя от EEPROM и ще продължи да получава показанията на сензора от I2C интерфейса и да го публикува в облака
// --------- Конфигурация на AP ------------ // IP Адрес ap_local_IP (192, 168, 1, 4); IP Адрес ap_gateway (192, 168, 1, 254); IP Адрес ap_subnet (255, 255, 255, 0);
Serial.print ("Конфигуриране на точка за достъп …");
WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);
Serial.print ("Настройване на потребителски идентификационни данни");
WiFi.softAP (ssidAP, passAP);
server.on ("/", handleRoot);
server.onNotFound (onHandleNotFound);
server.begin ();
APTimer = millis ();
while (millis ()-APTimer <APInterval) {
server.handleClient ();
}
// **************************** РЪЧЕН КОРЕН ****************** ********* // void handleRoot () {
if (server.hasArg ("ssid") && server.hasArg ("парола"))
{
// Ако всички полета на формуляр съдържат повикване на данни
handelSubmit ()
handleSubmit (); }
иначе {
// Повторно показване на формуляра
// прочетете файла, съдържащ се в spiffs
Файлов файл = SPIFFS.open ("/webform.html", "r");
server.streamFile (файл, "текст/html");
// не забравяйте да затворите файла
file.close ();
}}
// Проверете състоянието, че има аргументите ssid и парола
// След това запишете идентификационните данни в ROM
ROMwrite (String (server.arg ("ssid")), String (server.arg ("password")))
Стъпка 3: Настройка на вашата уеб форма в SPIFFS
SPIFFS
Flash File System на сериен периферен интерфейс или накратко SPIFFS. Това е лека файлова система за микроконтролери със SPI флаш чип. Вграденият флаш чип на ESP8266 има много място за вашите уеб страници, особено ако имате версия 1MB, 2MB или 4MB. Съхранихме и нашата уеб страница във Flash System. Има няколко стъпки, които трябва да следваме, за да качим данни в спифове
- Изтеглете инструмента:
- Във вашата директория за скици на Arduino създайте директория с инструменти, ако все още не съществува
- Разопаковайте инструмента в директорията с инструменти (пътят ще изглежда като /Arduino/tools/ESP8266FS/tool/esp8266fs.jar)
- Рестартирайте Arduino IDE
- Отворете скица (или създайте нова и я запазете)
- Отидете в директорията за скици (изберете Sketch> Show Sketch Folder)
- Създайте директория с име data и всички файлове, които искате във файловата система там. Качихме нашата HTML страница с име webform.html
- Уверете се, че сте избрали платка, порт и затворен сериен монитор
- Изберете Инструменти> ESP8266 Качване на данни за скици. Това трябва да започне качването на файловете във флаш файловата система ESP8266. Когато приключи, лентата на състоянието на IDE ще покаже съобщение SPIFFS Image Uploaded.
Файлов файл = SPIFFS.open ("/webform.html", "r");
server.streamFile (файл, "текст/html");
// не забравяйте да затворите файла
file.close ();
Стъпка 4: Планиране на задачи
В този урок изпълняваме две операции:
- Прочетете данните от SHT25, използвайки I2C протокол
- Публикувайте актуализираните данни в облака, използвайки ThingSpeak MQTT API
За да постигнем това, използваме библиотеката TaskScheduler. Планирали сме две различни задачи, отнасящи се до две различни контролни операции. това се прави по следния начин
- Задача 1 е за отчитане на стойността на сензора, тази задача се изпълнява за 1 секунда, докато достигне таймаут от 10 секунди.
- Когато Task1 изтече, свързваме се с локален Wifi и MQTT брокер.
- Сега задача 2 е активирана и деактивираме Задача 1 Задача 2 е за публикуване на сензорните данни в Thing Speak MQTT брокер, тази задача се изпълнява за 20 секунди, докато достигне таймаут от 20 секунди
- Когато Task2 достигне времето за изчакване, Task 1 се активира отново и Task2 е деактивиран. тук отново получаваме актуализираната стойност и процесът продължава
- когато не се извиква обратно повикване или устройството е в режим на готовност, то преминава към Light Sleep, като по този начин пести енергия.
// --------- прототип за извикване на задача ------------ //
void taskI2CCallback ();
void taskI2CDisable ();
void taskWiFiCallback ();
void taskWiFiDisable ();
// --------- Задачи ------------ //
Задача tI2C (2 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL, & taskI2CDisable);
Задача tWiFi (20* TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL, & taskWiFiDisable);
// разрешаване на tI2C tI2C.enable ();
Стъпка 5: Отчитане на стойностите на температурата и влажността от SHT25
I2C е двужичен интерфейс, който използва само два проводника за комуникация с главното устройство. Единият е SCL (сериен часовник), а другият е SDA (серийни данни). Всяко подчинено устройство има уникален адрес. SHT 25 също има 8-битов адрес и може да бъде достъпен чрез адрес 0x44. той има 8 бита от адреса, където 7 бита са действителни адреси и докато най -десният LSB бит 0 се използва за сигнализиране на четене от или запис на устройството. Ако бит 0 е зададен на 1, главното устройство ще чете от подчиненото I2C устройство. I2C е много по -надежден, мащабируем и бърз и дори има много режими на работа, което го прави много по -енергийно ефективен
Използваме библиотеката Wire.h, за да четем стойностите на температурата и влажността. Тази библиотека улеснява i2c комуникацията между сензора и главното устройство. 0x44 е I2C адресът за SHT25. SHT25 работи в различен режим на работа. Можете да се обърнете към листа с данни за това. Използваме 0x2C и 0x06 като съответно MSB и LSB за единична операция
Стъпка 6: Публикуване на стойности в ThingSpeak чрез ThingSpeak MQTT API
За публикуване на нашите стойности на температура и влажност в облака използваме ThingSpeak MQTT API. ThingSpeak е IoT платформа. ThingSpeak е безплатна уеб услуга, която ви позволява да събирате и съхранявате сензорни данни в облака. MQTT е общ протокол, използван в IoT системите за свързване на устройства и сензори на ниско ниво. MQTT се използва за предаване на кратки съобщения до и от брокер. ThingSpeak наскоро добави MQTT брокер, така че устройствата да могат да изпращат съобщения до ThingSpeak. Можете да следвате процедурата за настройка на ThingSpeak Channel от тази публикация
ThingSpeak MQTT
MQTT е архитектура за публикуване/абониране, разработена предимно за свързване на честотна лента и устройства с ограничена мощност през безжични мрежи. Това е прост и лек протокол, който работи през TCP/IP сокети или WebSockets. MQTT през WebSockets може да бъде защитен със SSL. Архитектурата за публикуване/абониране позволява съобщенията да се изпращат до клиентските устройства, без устройството да се нуждае от непрекъснато анкетиране на сървъра. Клиент е всяко устройство, което се свързва с брокера и може да публикува или да се абонира за теми за достъп до информацията. Тема съдържа информация за маршрутизиране на брокера. Всеки клиент, който иска да изпраща съобщения, ги публикува в определена тема и всеки клиент, който иска да получава съобщения, се абонира за определена тема
Публикувайте и се абонирайте с помощта на ThingSpeak MQTT
- Публикуване в канали за емисии на канали /публикуване /
- Публикуване в конкретни полеви канали/публикация/полета/поле/
- Абонирайте се за полевите канали на канала/абонирайте се //
- Абонирайте се за каналите за емисии на частни канали // абонирайте се/полета/поле/
- Абонирайте се за всички полета на канал. канали // абониране/полета/feild/
void taskWiFiCallback ()
{
Serial.println ("taskWiFiCallbackStarted");
Serial.print ("таймаут за тази задача: / t");
Serial.println (tWiFi.getTimeout ());
ако (! mqttCli.connected ())
{
Serial.println ("Клиентът не е свързан");
свържете отново MQTT ();
}
Низ topicString = "канали/"+Низ (channelID)+"/публикуване/"+Низ (writeAPIKey);
int topicLength = topicString.length ()+1;
char topicBuffer [topicLength];
topicString.toCharArray (topicBuffer, topicLength+1);
Serial.println (topicBuffer);
String dataString = String ("field1 =" + String (tempC, 1) + "& field2 =" + String (tempF, 1) + "& field3 =" + String (влажен, 1));
int dataLength = dataString.length ()+1;
байт dataBuffer [dataLength];
dataString.getBytes (dataBuffer, dataLength);
mqttCli.beginPublish (topicBuffer, dataLength, false);
Serial.println (mqttCli.write (dataBuffer, dataLength)? "Published": "published failed");
mqttCli.endPublish ();
//mqttCli.loop ();
}
Стъпка 7: Известие по имейл за доклада за времето
Ние използваме аплети на IFTTT, за да предоставяме на потребителя известие по имейл в реално време. И така, ние го реализирахме чрез ThingSpeak. Ние осредняваме 5-файните стойности на температурата и влажността. Винаги, когато стойността на последния запис е по -голяма от средната стойност. Той ще задейства известие по имейл „горещ ден е“. и когато тя е по -малка от средната стойност. Той ще задейства известие по имейл „Какъв красив ден“. Всеки ден около 10:00 ч. (IST) ще получаваме известие по имейл
channelID = ******;
iftttURL = 'https://maker.ifttt.com/**************';
moisData = thingSpeakRead (channelID, 'Fields', 3, 'NumDays', 5); tempData = thingSpeakRead (channelID, 'Fields', 1, 'NumDays', 5);
perHumid = max (влажностДата) -мин (влагаДани);
humidValue = 0,1*perHumid+min (влажностДанни);
perTemp = max (tempData) -min (tempData);
tempValue = 0,1*perTemp+min (tempData);
urlTemp = strcat ('https://api.thingspeak.com/channels/', низ (channelID), '/fields/1/last.txt');
urlHumid = strcat ('https://api.thingspeak.com/channels/', низ (channelID), '/fields/3/last.txt'); lastTempValue = str2num (webread (urlTemp)); lastHumidValue = str2num (webread (urlHumid));
if (lastTempValue
if (lastTempValue> tempValue || lastHumidValue> humidValue)
plantMessage = 'Горещ ден е.'; webwrite (iftttURL, 'value1', plantMessage, 'value2', lastTempValue, 'value3', lastHumidValue); край
Стъпка 8: Общ код
Общ код
Общият код е достъпен в това хранилище на GitHub
Ограничения
- Има някои проблеми с публикуването на данните чрез публикуване на метод за голямата част от данните. За да разрешим този проблем, използваме функцията write ()
- SPIFFS трябва да бъде форматиран, преди да качите новите данни в SPIFFS.
- Не трябва да използвате функцията delay (). delay () възпрепятства фоновата операция. Вместо това създавайте закъснения с помощта на millis () само ако е необходимо
Кредити
- ESP826WebServer
- Планировчик на задачи
- SHT 25
- ThingSpeak MQTT API
- IFTTT
- PubSubClient
Препоръчано:
Дисплей за прогноза за времето в арт деко: 9 стъпки (със снимки)
Дисплей за прогноза за времето в арт деко: Здравейте приятели, в тази инструкция ще видим горещо, за да изградим този дисплей за прогноза за времето. Той използва мини платка Wemos D1 заедно с 1,8”цветен TFT екран за показване на прогнозата за времето. Също така проектирах и отпечатах 3D корпус за
WunderThing: батерия, магнитна, ESP8266 прогноза за времето IoThing!: 6 стъпки
WunderThing: Захранване от батерии, магнитно, ESP8266 Прогноза за времето IoThing !: Здравейте, За първата ми инструкция нека ви разкажа за A Wunderful Thing. Това беше сравнително скорошен проект, при който целта ми беше да изградя магнит за хладилник с прогноза за времето! Избраният контролер за този проект беше Sparkfun's Thing
Сигнал за прогноза за времето: 4 стъпки (със снимки)
Beacon за прогноза за времето: В този проект представям модел от локален метеорологичен фар, който направих с помощта на 3D печат, LED ленти, захранване и дъска Arduino с wifi връзка, за да получите достъп до прогнозата за времето на следващия ден. Основната цел на
Облачна прогноза за времето: 11 стъпки (със снимки)
Weather Forecast Cloud: Този проект създава облак за времето с помощта на Raspberry Pi Zero W. Той се свързва с API на Yahoo Weather и в зависимост от прогнозата за следващия ден променя цветовете. Бях вдъхновен от газовата сграда на Уисконсин, която има пламък на покрива, който се променя
Часовник с прогноза за времето с помощта на старата аларма и Arduino: 13 стъпки (със снимки)
Часовник с прогноза за времето с помощта на Old Alarm и Arduino: Имах счупен будилник, който лежеше наоколо и ми хрумна идеята да го преобразувам в часовник и станция за прогнозиране на времето. За този проект ще ви трябва: Стар кръгов будилник Arduino Nano BME280 сензорен модул ( температура, влажност, налягане) LCD дисплей