Съдържание:

Прогноза за времето с помощта на аплети на ThingSpeak MQTT и IFTTT: 8 стъпки
Прогноза за времето с помощта на аплети на ThingSpeak MQTT и IFTTT: 8 стъпки

Видео: Прогноза за времето с помощта на аплети на ThingSpeak MQTT и IFTTT: 8 стъпки

Видео: Прогноза за времето с помощта на аплети на ThingSpeak MQTT и IFTTT: 8 стъпки
Видео: Что нас ждёт в 2024 году? Прогноз на 2024 год. What awaits us in 2024 Forecast for 2024 2024, Ноември
Anonim
Прогноза за времето с помощта на аплети на ThingSpeak MQTT и IFTTT
Прогноза за времето с помощта на аплети на ThingSpeak MQTT и IFTTT

Въведение

Облачно приложение за времето, осигуряващо ежедневни метеорологични отчети като известие по имейл. Това уеб приложение измерва температурата и влажността с помощта на 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. Има няколко стъпки, които трябва да следваме, за да качим данни в спифове

  1. Изтеглете инструмента:
  2. Във вашата директория за скици на Arduino създайте директория с инструменти, ако все още не съществува
  3. Разопаковайте инструмента в директорията с инструменти (пътят ще изглежда като /Arduino/tools/ESP8266FS/tool/esp8266fs.jar)
  4. Рестартирайте Arduino IDE
  5. Отворете скица (или създайте нова и я запазете)
  6. Отидете в директорията за скици (изберете Sketch> Show Sketch Folder)
  7. Създайте директория с име data и всички файлове, които искате във файловата система там. Качихме нашата HTML страница с име webform.html
  8. Уверете се, че сте избрали платка, порт и затворен сериен монитор
  9. Изберете Инструменти> 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

Отчитане на температурата и стойностите на влажност от SHT25
Отчитане на температурата и стойностите на влажност от 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 чрез ThingSpeak MQTT API
Публикуване на стойности в 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

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