Мазмуну:

ThingSpeak MQTT жана IFTTT апплеттерин колдонуу менен аба ырайы отчету: 8 кадам
ThingSpeak MQTT жана IFTTT апплеттерин колдонуу менен аба ырайы отчету: 8 кадам

Video: ThingSpeak MQTT жана IFTTT апплеттерин колдонуу менен аба ырайы отчету: 8 кадам

Video: ThingSpeak MQTT жана IFTTT апплеттерин колдонуу менен аба ырайы отчету: 8 кадам
Video: Как использовать DHT11 DHT22 с NodeMCU ESP8266 для считывания температуры через Wi-Fi - IoT 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 ° Сге чейин. Бул 8 сек сенсордун жооп берүү убактысы менен алда канча ишенимдүү жана тез.

Өзгөчөлүктөрү

  • Thing Speak MQTT API аркылуу сизге реалдуу убакытта аналитика жана статистика берилет
  • Электрондук почта билдирүүсү колдонуучуга белгиленген убакта IFTTT аркылуу берилет
  • Тапшырмаларды пландаштыруу сенсорлордон маалыматтарды алуу, сенсорлорду жарыялоо, MQTT темасына жазылуу сыяктуу тапшырманы пландаштыруу үчүн колдонулат.
  • Бул I2C протоколун колдонуп, сенсордун тактыгын, кеңейтилишинин жана масштабдуулугунун көрсөткүчүн алуу үчүн
  • түзмөк бош турганда же эч кандай кайра чалуу чакырылганда уйку режими.
  • натыйжалуу иш планы кыйынчылыксыз колдонууну камсыз кылат
  • Өзүнчө веб -баракча жайгаштырылган, анда колдонуучу башка wifi тармактары жеткиликтүү болгондо, түзмөгүңүздүн жарк этип кетпеши үчүн колдонуучунун ишеним грамоталарын бериши керек.
  • SPIFFS биздин веб -баракчаны кодубузду окуу үчүн жана анча ыңгайсыз кылуу үчүн колдонулат

1 -кадам: Аппараттык жана программалык камсыздоонун өзгөчөлүгү

Аппараттык жана программалык камсыздоонун спецификасы
Аппараттык жана программалык камсыздоонун спецификасы
Аппараттык жана программалык камсыздоонун спецификасы
Аппараттык жана программалык камсыздоонун спецификасы

Аппараттык мүнөздөмө

  • Adafruit esp8266 Huzzah тактасы
  • Huzzah Board Shield
  • SHT25 Sensor модулу
  • I2C кабели

Программалык камсыздоонун өзгөчөлүгү

  • Arduino IDE
  • IFTTT Thing Speak
  • MQTT API

2 -кадам: Колдонуучунун грамоталарын сактоо

Колдонуучунун грамоталарын сактоо
Колдонуучунун грамоталарын сактоо
Колдонуучунун грамоталарын сактоо
Колдонуучунун грамоталарын сактоо

Бул жерде биз SHT25 I2C сенсорун колдонуп, температуранын жана салыштырмалуу нымдуулуктун реалдуу убактысын окуп, бул маанини булутка жайгаштырабыз. Мезгил -мезгили менен жаңыртылган сенсордун маанисин алуу үчүн жана бул жаңыртууларды бир убакта жайгаштыруу үчүн биз Arduino's Task Scheduler Library колдонобуз. Булут операциялары үчүн биз ThingSpeak MQTT API колдонобуз. Кийинчерээк биз IFTTT апплетин колдонуп, колдонуучуга реалдуу убакытта аба ырайы тууралуу отчет берип жатабыз. Сиз өз метеостанциясын жасоо үчүн бул кадамдарды аткарсаңыз болот. Ошентип, DIY.

Андан ары улантуудан мурун. Биз колдонуучунун грамоталарын сакташыбыз керек. Бул үчүн биз 192.169.1.4 веб -серверин жайгаштырып жатабыз. Биз веб формабызды SPIFFSте сактадык. Түзмөк башталгандан кийин, ал 60 секундага веб -серверге ээ болот. Колдонуучу бул кадамдарды аткарышы керек.

  • AP ESPuserге туташыңыз, бул сиздин жеткиликтүү wifi тармагыңыздын тизмесинде көрсөтүлгөн. Бул APга туташыңыз жана "*******" сырсөзүн киргизиңиз
  • Ал туташкандан кийин, браузериңизге IP 192.168.1.4 кирет.
  • Кириш талааларына жергиликтүү WiFiңыздын SSID жана сырсөзүн киргизип, ЖӨНӨТҮҢҮЗДҮ киргизиңиз
  • Бул грамоталар EEPROMда сакталат
  • 60 секунддан кийин Түзмөк APден автоматтык түрдө ажыратылат
  • Кийинки жолу сиз аппаратты күйгүзгөнүңүздө, колдонуучу бул процедураны аткаруунун кажети жок, түзмөк колдонуучунун грамоталарын 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 = millis ();

while (millis ()-APTimer <APInterval) {

server.handleClient ();

}

// **************************** КОЛДУН ТҮБҮ ****************** ********* // void handleRoot () {

эгер (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 ("сырсөз"))))

3 -кадам: Webformду SPIFFSке орнотуу

SPIFFS

Сериялык перифериялык интерфейс Flash File System, же кыскача айтканда 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 Image Uploaded билдирүүсүн көрсөтөт.

Файл файлы = SPIFFS.open ("/webform.html", "r");

server.streamFile (файл, "текст/html");

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

file.close ();

4 -кадам: Тапшырмаларды пландаштыруу

Бул үйрөткүчтө биз эки операцияны аткарып жатабыз:

  • I2C протоколун колдонуп SHT25тен маалыматтарды окуңуз
  • 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 (Serial Clock), экинчиси SDA (Serial Data). Ар бир кулдук аппараттын уникалдуу дареги бар. SHT 25 дагы 8-бит дарегине ээ жана ага 0x44 дареги аркылуу кирүүгө болот. анын 8 бит дареги бар, анда 7 бит чыныгы дарек, ал эми LSB бит 0 түзмөктөн окуу же жазуу үчүн сигнал берүү үчүн колдонулат. Эгерде бит 0 1ге коюлса, анда башкы түзмөк кул 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/

Void taskWiFiCallback ()

{

Serial.println ("taskWiFiCallbackStarted");

Serial.print ("бул тапшырманы аткаруу убактысы: / t");

Serial.println (tWiFi.getTimeout ());

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

{

Serial.println ("Кардар туташкан жок");

reconnectMQTT ();

}

String 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 (humid, 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, 'Fields', 3, 'NumDays', 5); tempData = thingSpeakRead (channelID, 'Fields', 1, 'NumDays', 5);

perHumid = max (moistData) -мин (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 репозиторийинде жеткиликтүү

Чектөөлөр

  • Маалыматты жарыялоодо кээ бир маселелер бар, биз жазуу () функциясын колдонуп жаткан бул маселени чечүү үчүн маалыматтын чоң бөлүгүнүн методун жарыялоо.
  • Жаңы маалыматтарды SPIFFSке жүктөөдөн мурун SPIFFS форматталышы керек.
  • Delay () функциясын колдонбошуңуз керек. delay () фондук иштөөгө тоскоолдук кылат. Тескерисинче, millis () менен кечигүүнү зарыл болгондо гана түзүңүз

Кредиттер

  • ESP826WebServer
  • Task Scheduler
  • SHT 25
  • ThingSpeak MQTT API
  • IFTTT
  • PubSubClient

Сунушталууда: