ThingSpeak MQTT болон IFTTT апплет ашиглан цаг агаарын мэдээ: 8 алхам
ThingSpeak MQTT болон IFTTT апплет ашиглан цаг агаарын мэдээ: 8 алхам
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 протоколыг ашиглан мэдрэгчийн уншилтыг илүү нарийвчлалтай, өргөжүүлж, өргөтгөх боломжтой болгодог
  • төхөөрөмж сул зогсолт хийх эсвэл дуудлага хийхгүй байхад унтах горим.
  • үр дүнтэй ажлын хуваарь гаргах нь хүндрэлгүйгээр ашиглах боломжийг олгодог
  • Тусдаа вэб хуудас байрлуулсан бөгөөд бусад wifi сүлжээнд холбогдох үед таны төхөөрөмжийг анивчихгүй байхын тулд хэрэглэгч өөрийн хэрэглэгчийн мэдээллийг өгөх ёстой.
  • SPIFFS нь манай кодыг уншихад хялбар, ойлгомжгүй болгохын тулд манай вэб хуудсыг хадгалахад ашиглагддаг

Алхам 1: Техник хангамж ба програм хангамжийн тодорхойлолт

Техник хангамж ба програм хангамжийн тодорхойлолт
Техник хангамж ба програм хангамжийн тодорхойлолт
Техник хангамж ба програм хангамжийн тодорхойлолт
Техник хангамж ба програм хангамжийн тодорхойлолт

Тоног төхөөрөмжийн тодорхойлолт

  • Adafruit esp8266 Huzzah самбар
  • 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 руу холбогдоно уу, энэ нь таны ашиглах боломжтой wifi сүлжээний жагсаалтад орсон болно. Энэ AP руу холбогдож "*******" нууц үгээ оруулна уу.
  • Холбогдсоны дараа хөтөч рүүгээ ороод IP 192.168.1.4 -ийг оруулна уу.
  • Оруулах талбарт өөрийн WiFi сүлжээний SSID болон нууц үгийг оруулаад SUBMIT оруулна уу
  • Эдгээр итгэмжлэлийг 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 () {

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 ("нууц үг"))))

Алхам 3: Вэб хэлбэрээ SPIFFS дээр тохируулах

SPIFFS

Цуваа захын интерфэйс флаш файлын систем эсвэл богино хугацаанд 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. Tools> ESP8266 Sketch Data Upload -ийг сонгоно уу. Энэ нь 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 -р ажил идэвхгүй болно. Энд дахин бид шинэчилсэн утгыг авч байгаа бөгөөд процесс үргэлжилж байна
  • дуудлага хийгээгүй эсвэл төхөөрөмж сул зогссон тохиолдолд гэрэл унтах горимд шилждэг тул эрчим хүч хэмнэдэг.

// --------- даалгаврыг буцаах прототип ------------ //

хүчингүй 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 болгож тохируулсан бол үндсэн төхөөрөмж нь slave 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 = "сувгууд/"+String (channelID)+"/нийтлэх/"+String (бичихAPIKey);

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;

byte 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) -min (moistData);

humidValue = 0.1*perHumid+min (чийгийн өгөгдөл);

perTemp = max (tempData) -min (tempData);

tempValue = 0.1*perTemp+min (tempData);

urlTemp = strcat ('https://api.thingspeak.com/channels/', string (channelID), '/fields/1/last.txt');

urlHumid = strcat ('https://api.thingspeak.com/channels/', string (channelID), '/fields/3/last.txt'); lastTempValue = str2num (вэб унших (urlTemp)); lastHumidValue = str2num (вэб унших (urlHumid));

if (lastTempValue

if (lastTempValue> tempValue || lastHumidValue> humidValue)

plantMessage = 'Энэ бол халуун өдөр.'; вэб бичих (iftttURL, 'утга1', plantMessage, 'утга2', lastTempValue, 'утга3', lastHumidValue); Төгсгөл

Алхам 8: Ерөнхий код

Ерөнхий код
Ерөнхий код
Ерөнхий код
Ерөнхий код
Ерөнхий код
Ерөнхий код

Ерөнхий код

Ерөнхий кодыг энэ GitHub репозитороос авах боломжтой

Хязгаарлалт

  • Өгөгдлийн ихэнх хэсгийг хэвлэх аргыг ашиглан өгөгдлийг нийтлэхэд зарим асуудал гардаг. Энэ асуудлыг шийдэхийн тулд бид бичих () функцийг ашиглаж байна.
  • Шинэ өгөгдлийг SPIFFS -д байршуулахаас өмнө SPIFFS -ийг форматлах ёстой.
  • Та delay () функцийг ашиглах ёсгүй. delay () нь арын дэвсгэр дээр ажиллахад саад болдог. Үүний оронд зөвхөн шаардлагатай бол millis () ашиглан саатал үүсгэ

Зээл

  • ESP826WebServer
  • Ажлын хуваарьлагч
  • SHT 25
  • ThingSpeak MQTT API
  • IFTTT
  • PubSubClient

Зөвлөмж болгож буй: