Мазмұны:

ThingSpeak MQTT және IFTTT апплеттерінің көмегімен ауа райы туралы есеп: 8 қадам
ThingSpeak MQTT және IFTTT апплеттерінің көмегімен ауа райы туралы есеп: 8 қадам

Бейне: ThingSpeak MQTT және IFTTT апплеттерінің көмегімен ауа райы туралы есеп: 8 қадам

Бейне: ThingSpeak MQTT және IFTTT апплеттерінің көмегімен ауа райы туралы есеп: 8 қадам
Бейне: Глобальные тренды 2020 — от Agile до IoT / Java Tech Talk 2024, Шілде
Anonim
ThingSpeak MQTT және IFTTT апплеттерінің көмегімен ауа райы туралы есеп
ThingSpeak MQTT және IFTTT апплеттерінің көмегімен ауа райы туралы есеп

Кіріспе

Бұлтқа негізделген ауа райы қосымшасы электронды хабарлама ретінде күнделікті ауа райы туралы есеп береді. Бұл веб -бағдарлама температура мен ылғалдылықты SHT25 және Adafruit Huzzah ESP8266 көмегімен өлшейді. Ол бізге нақты уақыттағы температура мен ылғалдылық туралы мәліметтерді және сағаттық аналитиканы ұсынады. Деректер ThingSpeak MQTT API көмегімен жіберіледі, ал кейінірек температура IFTTT протоколы арқылы белгіленген шекті деңгейге жеткенде пайдаланушыға электрондық пошта арқылы хабарландыру береміз. SHT25 - бұл Sensirion жасаған температура мен ылғалдылық сенсорлары. SHT25 ± 2% RH айналасында дәлдіктің жоғары деңгейін қамтамасыз етеді. Ылғалдылық диапазоны 0 -ден 100% -ға дейін, ал температура диапазоны -40 -тан 125 ° C -қа дейін. Бұл сенсордың 8 секундтық жауап беру уақытымен әлдеқайда сенімді және жылдам.

Мүмкіндіктер

  • Thing Speak MQTT API көмегімен нақты уақыттағы талдаулар мен статистиканы ұсынады
  • Пайдаланушыға белгіленген уақытта IFTTT көмегімен электрондық хабарландыру беріледі
  • Тапсырмалар жоспарлағышы сенсорлардан деректерді алу, сенсор көрсеткіштерін жариялау, MQTT тақырыбына жазылу сияқты тапсырмаларды жоспарлау үшін қолданылады.
  • Ол дәлірек, кеңейтілетін және масштабталатын сенсордың оқуын алу үшін I2C протоколын қолданады
  • құрылғы жұмыс істемей тұрғанда немесе қайта қоңырау шалу кезінде ұйқы режимі.
  • тапсырмаларды тиімді жоспарлау қиындықсыз пайдалануды қамтамасыз етеді
  • Бөлек веб -бет орналастырылған, онда пайдаланушы басқа Wi -Fi желілеріне қол жетімді болған кезде құрылғыны жыпылықтамау үшін пайдаланушы тіркелгі деректерін ұсынуы керек.
  • SPIFFS - бұл біздің веб -бетті сақтау үшін, біздің кодты оқуға жеңіл және ыңғайсыз етеді

1 -қадам: Жабдықтар мен бағдарламалық қамтамасыз етудің сипаттамасы

Аппараттық және бағдарламалық қамтамасыз етудің сипаттамасы
Аппараттық және бағдарламалық қамтамасыз етудің сипаттамасы
Аппараттық және бағдарламалық қамтамасыз етудің сипаттамасы
Аппараттық және бағдарламалық қамтамасыз етудің сипаттамасы

Жабдық сипаттамасы

  • Adafruit esp8266 Huzzah тақтасы
  • Хузза тақтасы қалқаны
  • SHT25 сенсорлық модулі
  • I2C кабелі

Бағдарламалық қамтамасыз ету ерекшелігі

  • Arduino IDE
  • IFTTT сөйлейтін сөзі
  • MQTT API

2 -қадам: пайдаланушы тіркелгі деректерін сақтау

Пайдаланушы тіркелгі деректерін сақтау
Пайдаланушы тіркелгі деректерін сақтау
Пайдаланушы тіркелгі деректерін сақтау
Пайдаланушы тіркелгі деректерін сақтау

Мұнда біз температура мен салыстырмалы ылғалдылықтың нақты уақытын оқу үшін SHT25 I2C сенсорын қолданамыз және бұл мәнді бұлтқа орналастырамыз. Уақыт өте келе сенсордың жаңартылған мәнін алу және осы жаңартуларды бір уақытта орналастыру үшін біз Arduino тапсырмалар кестесінің кітапханасын қолданамыз. Бұлтты операциялар үшін біз ThingSpeak MQTT API қолданамыз. Кейінірек біз пайдаланушыға IFTTT апплеттерін қолдана отырып, нақты уақыттағы ауа райы туралы есеп береміз. Сіз метеостанцияны өзіңіз жасау үшін мына қадамдарды орындауға болады. Сонымен, DIY.

Әрі қарай жалғастырмас бұрын. Біз пайдаланушының тіркелгі деректерін сақтауымыз керек. Осы мақсатта біз 192.169.1.4 мекен -жайында веб -серверді орналастырамыз. Біз веб -форманы SPIFFS -те сақтадық. Құрылғы іске қосылғаннан кейін 60 секунд ішінде веб -серверге ие болады. Пайдаланушы осы қадамдарды орындауы керек.

  • AP ESPuser -ге қосылыңыз, бұл қол жетімді Wi -Fi желілерінің тізімінде көрсетілген. Осы AP -ге қосылыңыз және «*******» құпия сөзін енгізіңіз.
  • Қосылғаннан кейін шолғышқа өтіңіз, IP 192.168.1.4 енгізіңіз.
  • Кіріс өрістеріне жергілікті WiFi -дің SSID мен құпия сөзін енгізіп, ЖІБЕРУДІ енгізіңіз
  • Бұл тіркелгі деректері EEPROM -де сақталады
  • 60 секундтан кейін құрылғы автоматты түрде кіру нүктесінен ажыратылады
  • Келесі жолы құрылғыны қосқан кезде, пайдаланушыға бұл процедураны орындаудың қажеті жоқ, құрылғы пайдаланушының тіркелгі деректерін EEPROM -дан автоматты түрде алады және сенсордың көрсеткіштерін I2C интерфейсінен алуды және оны бұлтқа жіберуді жалғастырады.

// --------- AP конфигурациясы ------------ // IPAddress ap_local_IP (192, 168, 1, 4); IPAddress ap_gateway (192, 168, 1, 254); IPAddress 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 = миллис ();

while (millis ()-APTimer <APInterval) {

server.handleClient ();

}

// **************************** ҚОЛДЫҚ ТҮМІР ****************** ********* // void handleRoot () {

if (server.hasArg («ssid») && server.hasArg («құпия сөз»))

{

// Егер барлық пішін өрістерінде деректер қоңырауы болса

handelSubmit ()

handleSubmit (); }

басқа {

// Пішінді қайта көрсетіңіз

// спифтердегі файлды оқу

Файлдық файл = SPIFFS.open («/webform.html», «r»);

server.streamFile (файл, «мәтін/html»);

// файлды жабуды ұмытпаңыз

file.close ();

}}

// ssid және құпия сөз аргументтері бар күйді тексеріңіз

// Содан кейін тіркелгі деректерін ROM -ға жазыңыз

ROMwrite (String (server.arg («ssid»)), String (server.arg («құпия сөз»))))

3 -қадам: веб -пішінді SPIFFS -те орнату

SPIFFS

Сериялық перифериялық интерфейстің Flash файлдық жүйесі немесе қысқаша SPIFFS. Бұл SPI флэш-чипі бар микроконтроллерлерге арналған жеңіл файлдық жүйе. ESP8266 борттық флэш -чипінде сіздің веб -беттеріңіз үшін көп орын бар, әсіресе егер сізде 1MB, 2MB немесе 4MB нұсқасы болса. Біз сонымен қатар веб -бетті Flash жүйесінде сақтадық. Деректерді спифтерге жүктеу үшін біз бірнеше қадамдарды орындауымыз керек

  1. Құралды жүктеп алыңыз:
  2. Arduino эскиздер каталогында, егер ол әлі жоқ болса, құралдар каталогын жасаңыз
  3. Құралды құралдар каталогына ораңыз (жол /Arduino/tools/ESP8266FS/tool/esp8266fs.jar сияқты болады)
  4. Arduino IDE қайта іске қосыңыз
  5. Эскизді ашыңыз (немесе жаңасын жасаңыз және сақтаңыз)
  6. Эскиз каталогына өтіңіз (эскиз> эскиз қалтасын көрсету тармағын таңдаңыз)
  7. Деректер деп аталатын каталог жасаңыз және сол жерде файлдық жүйеде қажет файлдар. Біз webform.html атауымен HTML бетін жүктедік
  8. Тақта, порт және жабық сериялық мониторды таңдағаныңызға көз жеткізіңіз
  9. Құралдар> ESP8266 деректерді жүктеудің эскизін таңдаңыз. Бұл файлдарды ESP8266 флэш -файлдық жүйесіне жүктеуді бастау керек. Аяқтағаннан кейін IDE күй жолағында SPIFFS кескіні жүктелген хабар көрсетіледі.

Файлдық файл = SPIFFS.open («/webform.html», «r»);

server.streamFile (файл, «мәтін/html»);

// файлды жабуды ұмытпаңыз

file.close ();

4 -қадам: тапсырмаларды жоспарлау

Бұл оқулықта біз екі операцияны орындаймыз:

  • I2C протоколының көмегімен SHT25 деректерін оқыңыз
  • ThingSpeak MQTT API көмегімен жаңартылған деректерді бұлтқа жіберіңіз

Бұл үшін біз TaskScheduler кітапханасын қолданамыз. Біз екі түрлі басқару операцияларына қатысты екі түрлі тапсырманы жоспарладық. бұл келесідей орындалады

  • Тапсырма 1 сенсордың мәнін оқуға арналған, бұл тапсырма 10 секунд күтуге жеткенше 1 секунд жұмыс істейді.
  • Task1 күту уақыты аяқталғанда, біз жергілікті WiFi мен MQTT брокеріне қосыламыз.
  • Енді 2 -тапсырма қосылды және біз өшіріп жатырмыз 1 -тапсырма - сенсорлық мәліметтерді Thing Speak MQTT брокеріне жариялау үшін бұл тапсырма 20 секунд ішінде 20 секундқа дейін созылады.
  • Тапсырма2 күту уақытына жеткенде, 1 -тапсырма қайтадан қосылады және 2 -тапсырма өшіріледі. мұнда біз жаңартылған мәнді аламыз және процесс жалғасады
  • Қайта қоңырау шалу немесе құрылғы бос тұрғанда, ол Light Sleep режиміне өтеді, осылайша қуатты үнемдейді.

// --------- тапсырманы кері шақырудың прототипі ------------ //

жарамсыз міндетI2CCallback ();

жарамсыз тапсырмаI2CDisable ();

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 -ге орнатылса, онда негізгі құрылғы қосалқы I2C құрылғысынан оқиды. I2C әлдеқайда сенімді, масштабталатын және жылдам, тіпті оның көптеген жұмыс режимдері бар, бұл оны энергияны үнемдеуге мүмкіндік береді.

Біз Wire.h кітапханасын температура мен ылғалдылық мәндерін оқу үшін қолданамыз. Бұл кітапхана сенсор мен негізгі құрылғы арасындағы i2c байланысын жеңілдетеді. 0x44 - SHT25 үшін I2C мекенжайы. SHT25 әр түрлі жұмыс режимінде жұмыс істейді. Ол үшін мәліметтер парағына жүгіне аласыз. Біз 0x2C және 0x06 сәйкесінше MSB және LSB ретінде қолданамыз

6 -қадам: ThingSpeak MQTT API көмегімен ThingSpeak мәндерін жариялау

ThingSpeak MQTT API көмегімен ThingSpeak мәндерін жариялау
ThingSpeak MQTT API көмегімен ThingSpeak мәндерін жариялау

Температура мен ылғалдылықты бұлтқа орналастыру үшін біз ThingSpeak MQTT API қолданамыз. ThingSpeak - бұл IoT платформасы. ThingSpeak - бұлттағы сенсорлық мәліметтерді жинауға және сақтауға мүмкіндік беретін ақысыз веб -қызмет. MQTT-төменгі деңгейлі құрылғылар мен сенсорларды қосу үшін IoT жүйелерінде қолданылатын ортақ хаттама. MQTT брокерге қысқа хабарламаларды жіберу үшін қолданылады. ThingSpeak жақында MQTT брокерін қосты, сондықтан құрылғылар ThingSpeak -ке хабар жібере алады. Бұл жазбадан ThingSpeak арнасын орнату процедурасын орындауға болады

ThingSpeak MQTT

MQTT-бұл өткізу қабілеті мен қуаты шектеулі құрылғыларды сымсыз желілер арқылы қосу үшін әзірленген жариялау/жазылу архитектурасы. Бұл TCP/IP розеткаларында немесе WebSockets -те жұмыс істейтін қарапайым және жеңіл хаттама. WebSockets арқылы MQTT SSL арқылы қорғалған болуы мүмкін. Жариялау/жазылу архитектурасы хабарламаларды клиенттік құрылғыларға жіберуге мүмкіндік береді, бұл құрылғы серверді үздіксіз сауалдамайды. Клиент - бұл брокерге қосылатын және ақпаратқа қол жеткізу үшін тақырыптарды жариялай алатын немесе жазылатын кез келген құрылғы. Тақырып брокерге арналған маршруттау ақпаратын қамтиды. Хабарлама жібергісі келетін әрбір клиент оларды белгілі бір тақырыпта жариялайды, ал хабарлама алғысы келетін әрбір клиент белгілі бір тақырыпқа жазылады.

ThingSpeak MQTT көмегімен жариялаңыз және жазылыңыз

  • Арна арнасына жіберу /жариялау /
  • Белгілі бір өріс арналарында жариялау/жариялау/өрістер/өріс/
  • Каналға жазылыңыз өріс арналары/жазылыңыз //
  • Жеке арнаның арна арналарына жазылу // жазылу/өрістер/өріс/
  • Арнаның барлық өрістеріне жазылыңыз. арналар // жазылу/өрістер/feild/

жарамсыз тапсырмаWiFiCallback ()

{

Serial.println («taskWiFiCallbackStarted»);

Serial.print («бұл тапсырманың күту уақыты: / t»);

Serial.println (tWiFi.getTimeout ());

егер (! mqttCli.connected ())

{

Serial.println («Клиент қосылмаған»);

Қайта қосу MQTT ();

}

String topicString = «арналар/»+Жол (канал ID)+«/жариялау/»+Жол (жазуAPIKey);

int topicLength = topicString.length ()+1;

char topicBuffer [topicLength];

topicString.toCharArray (topicBuffer, topicLength+1);

Serial.println (topicBuffer);

String dataString = Жол («өріс1 =» + Жол (tempC, 1) + «& өріс2 =» + Жол (tempF, 1) + «& өріс3 =» + Жол (ылғалды, 1));

int dataLength = dataString.length ()+1;

байт dataBuffer [dataLength];

dataString.getBytes (dataBuffer, dataLength);

mqttCli.beginPublish (topicBuffer, dataLength, false);

Serial.println (mqttCli.write (dataBuffer, dataLength)? «Published»: «жарияланбады»);

mqttCli.endPublish ();

//mqttCli.loop ();

}

7 -қадам: Ауа райы туралы электрондық пошта хабарламасы

Ауа райы туралы электрондық пошта хабарламасы
Ауа райы туралы электрондық пошта хабарламасы
Ауа райы туралы электрондық пошта хабарламасы
Ауа райы туралы электрондық пошта хабарламасы

Біз пайдаланушыға нақты уақыттағы ауа райы туралы электрондық пошта хабарламасын беру үшін IFTTT апплеттерін қолданамыз. Сонымен, біз оны ThingSpeak арқылы жүзеге асырдық. Біз орташа температура мен ылғалдылықтың 5 фай мәндерін аламыз. Соңғы жазбаның мәні орташа мәннен үлкен болған кезде. Ол «бұл ыстық күн» электрондық поштасына хабарлама жібереді. және ол орташа мәннен төмен болғанда. Ол «Қандай тамаша күн» электрондық поштасына хабарлама жібереді. Күн сайын сағат 10.00 -де (IST) электронды түрде хабарлама аламыз

channelID = ******;

iftttURL = 'https://maker.ifttt.com/**************';

moistData = thingSpeakRead (channelID, 'Өрістер', 3, 'NumDays', 5); tempData = thingSpeakRead (channelID, 'Өрістер', 1, 'NumDays', 5);

perHumid = max (moistData) -min (moistData);

humidValue = 0.1*perHumid+min (moistData);

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

Ұсынылған: