Daftar Isi:

Laporan Cuaca Menggunakan Applet ThingSpeak MQTT dan IFTTT: 8 Langkah
Laporan Cuaca Menggunakan Applet ThingSpeak MQTT dan IFTTT: 8 Langkah

Video: Laporan Cuaca Menggunakan Applet ThingSpeak MQTT dan IFTTT: 8 Langkah

Video: Laporan Cuaca Menggunakan Applet ThingSpeak MQTT dan IFTTT: 8 Langkah
Video: Create an automation based on weather forecast by eWeLink IFTTT applet #homeautomation #smarthome 2024, November
Anonim
Laporan Cuaca Menggunakan Applet ThingSpeak MQTT dan IFTTT
Laporan Cuaca Menggunakan Applet ThingSpeak MQTT dan IFTTT

pengantar

Aplikasi cuaca berbasis cloud yang menyediakan laporan cuaca harian sebagai notifikasi email. Aplikasi web ini mengukur Suhu dan Kelembaban menggunakan SHT25 dan Adafruit Huzzah ESP8266. Ini memberi kami data Suhu dan Kelembaban Waktu Nyata dan analitik per jam. Data dikirim menggunakan ThingSpeak MQTT API dan kemudian kami memberikan pemberitahuan email kepada pengguna setiap kali suhu mencapai ambang batas yang ditetapkan menggunakan protokol IFTTT. SHT25 adalah Sensor Suhu dan Kelembaban buatan Sensiion. SHT25 memberikan tingkat akurasi yang tinggi sekitar ±2% RH. Kisaran Kelembabannya antara 0 hingga 100% dan Kisaran suhu antara -40 hingga 125 °C. Ini jauh lebih andal dan cepat dengan 8 detik waktu respons Sensor.

Fitur

  • Memberi Anda analitik dan statistik waktu nyata menggunakan Thing Speak MQTT API
  • Pemberitahuan Email diberikan kepada pengguna pada waktu yang ditentukan menggunakan IFTTT
  • Penjadwal Tugas digunakan untuk Menjadwalkan tugas seperti mengambil data dari sensor, Memublikasikan pembacaan sensor, Berlangganan topik MQTT
  • Ini menggunakan protokol I2C untuk mengambil pembacaan sensor yang lebih akurat, dapat diperluas, dan skalabel
  • mode tidur saat perangkat menganggur atau tidak ada panggilan balik tugas yang dipanggil.
  • penjadwalan tugas yang efektif memberikan penggunaan tanpa kerumitan
  • Halaman web terpisah di-host di mana pengguna harus memberikan kredensial penggunanya untuk menghindari mem-flash perangkat Anda setiap kali dalam jangkauan jaringan wifi lain
  • SPIFFS digunakan untuk menyimpan halaman web kami agar kode kami dapat dibaca dan tidak canggung

Langkah 1: Spesifikasi Perangkat Keras dan Perangkat Lunak

Spesifikasi Perangkat Keras dan Perangkat Lunak
Spesifikasi Perangkat Keras dan Perangkat Lunak
Spesifikasi Perangkat Keras dan Perangkat Lunak
Spesifikasi Perangkat Keras dan Perangkat Lunak

Spesifikasi Perangkat Keras

  • Adafruit esp8266 papan Huzzah
  • Perisai Papan Huzzah
  • Modul Sensor SHT25
  • kabel I2C

Spesifikasi Perangkat Lunak

  • Arduino IDE
  • IFTTT Hal Berbicara
  • API MQTT

Langkah 2: Menyimpan Kredensial Pengguna

Menyimpan Kredensial Pengguna
Menyimpan Kredensial Pengguna
Menyimpan Kredensial Pengguna
Menyimpan Kredensial Pengguna

Di sini kami menggunakan sensor SHT25 I2C untuk membaca nilai Suhu dan Kelembaban Relatif waktu-nyata dan memposting nilai ini ke cloud. Untuk mendapatkan nilai sensor yang diperbarui dari waktu ke waktu dan untuk memposting pembaruan ini secara bersamaan, kami menggunakan Perpustakaan Penjadwal Tugas Arduino. Untuk operasi cloud, kami menggunakan ThingSpeak MQTT API. Nanti kami menyediakan laporan cuaca real-time kepada pengguna menggunakan applet IFTTT. Anda dapat mengikuti langkah-langkah ini untuk membuat stasiun cuaca Anda sendiri. Jadi, DIY.

Sebelum melangkah lebih jauh. Kita perlu menyimpan kredensial pengguna. Untuk tujuan ini, kami meng-hosting server web di 192.169.1.4. Kami telah menyimpan formulir web kami di SPIFFS. Setelah perangkat mulai meng-host server web selama 60 detik. Pengguna harus mengikuti langkah-langkah ini.

  • Hubungkan ke AP ESPuser, Ini tercantum dalam daftar jaringan wifi yang tersedia. Hubungkan ke AP ini dan masukkan kata sandi "*******"
  • Setelah terhubung, Buka browser Anda masukkan IP 192.168.1.4.
  • Masukkan SSID dan kata sandi WiFi lokal Anda di bidang input dan masukkan KIRIM
  • Kredensial ini akan disimpan di EEPROM
  • Setelah 60 detik Perangkat akan secara otomatis memutuskan sambungan dari AP
  • Lain kali ketika Anda menghidupkan perangkat, Pengguna tidak harus mengikuti prosedur ini, Perangkat akan secara otomatis mengambil kredensial pengguna dari EEPROM dan melanjutkan dengan mendapatkan pembacaan sensor dari Antarmuka I2C dan mempostingnya ke cloud

//--------- Konfigurasi 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("Konfigurasi titik akses…");

WiFi.softAPConfig(ap_local_IP, ap_gateway, ap_subnet);

Serial.print("Menyiapkan Kredensial Pengguna");

WiFi.softAP(ssidAP, passAP);

server.on("/", handleRoot);

server.onNotFound(onHandleNotFound);

server.mulai();

APTimer = milis();

while(milis()-APTimer <APInterval){

server.handleClient();

}

//******************************MENANGANI ROOT****************** *********//void handleRoot() {

if (server.hasArg("ssid")&& server.hasArg("password"))

{

//Jika semua kolom formulir berisi panggilan data

handelKirim()

menanganiKirim(); }

lain {

//Menampilkan ulang formulir

//baca file yang ada di spiffs

File file =SPIFFS.open("/webform.html", "r");

server.streamFile(file, "teks/html");

//jangan lupa tutup filenya

file.tutup();

}}

// Periksa status yang memiliki argumen ssid dan kata sandi

//Kemudian tulis kredensial ke ROM

ROMwrite(String(server.arg("ssid")), String(server.arg("password")))

Langkah 3: Menyiapkan Formulir Web Anda di SPIFFS

SPIFFS

Sistem File Flash Antarmuka Periferal Serial, atau disingkat SPIFFS. Ini adalah sistem file ringan untuk mikrokontroler dengan chip flash SPI. Chip flash onboard ESP8266 memiliki banyak ruang untuk halaman web Anda, terutama jika Anda memiliki versi 1MB, 2MB, atau 4MB. Kami juga telah menyimpan halaman web kami di Sistem Flash. Ada beberapa langkah yang perlu kita ikuti untuk mengunggah data ke spiffs

  1. Unduh alatnya:
  2. Di direktori sketchbook Arduino Anda, buat direktori tools jika belum ada
  3. Buka paket alat ke direktori alat (jalurnya akan terlihat seperti /Arduino/tools/ESP8266FS/tool/esp8266fs.jar)
  4. Mulai ulang Arduino IDE
  5. Buka sketsa (atau buat sketsa baru dan simpan)
  6. Masuk ke direktori sketch (pilih Sketch > Show Sketch Folder)
  7. Buat direktori bernama data dan file apa pun yang Anda inginkan di sistem file di sana. Kami telah mengunggah halaman HTML kami dengan nama webform.html
  8. Pastikan Anda telah memilih board, port, dan Serial Monitor yang tertutup
  9. Pilih Alat > Unggah Data Sketsa ESP8266. Ini harus mulai mengunggah file ke sistem file flash ESP8266. Setelah selesai, bilah status IDE akan menampilkan pesan SPIFFS Image Uploaded.

File file =SPIFFS.open("/webform.html", "r");

server.streamFile(file, "teks/html");

//jangan lupa tutup filenya

file.tutup();

Langkah 4: Penjadwalan Tugas

Dalam tutorial ini, kami melakukan dua operasi:

  • Baca data dari SHT25 menggunakan protokol I2C
  • Posting data yang diperbarui ke cloud menggunakan ThingSpeak MQTT API

Untuk mencapai ini kami menggunakan perpustakaan TaskScheduler. Kami telah menjadwalkan dua tugas berbeda yang mengacu pada dua operasi kontrol yang berbeda. ini dilakukan sebagai berikut

  • Tugas 1 adalah untuk membaca nilai sensor tugas ini berjalan selama 1 detik hingga mencapai batas waktu 10 detik.
  • Ketika Task1 mencapai batas waktunya, Kami terhubung ke Wifi lokal dan broker MQTT.
  • Sekarang Tugas 2 diaktifkan dan kami menonaktifkan Tugas 1 Tugas 2 adalah untuk mempublikasikan data sensor ke broker Thing Speak MQTT tugas ini berjalan selama 20 detik hingga mencapai batas waktu 20 detik
  • Ketika Task2 mencapai batas waktunya, Tugas 1 diaktifkan lagi dan Tugas2 dinonaktifkan. di sini lagi, kami mendapatkan nilai yang diperbarui dan prosesnya terus berlanjut
  • ketika tidak ada panggilan balik yang dipanggil atau perangkat dalam keadaan idle, ia beralih ke Light Sleep sehingga menghemat daya.

//---------prototipe untuk panggilan balik tugas------------//

batalkan tugasI2CCallback();

void taskI2CDsable();

batalkan tugasWiFiCallback();

void taskWiFiDisable();

//--------Tugas------------//

Tugas tI2C(2 * TASK_SECOND, TASK_FOREVER, &taskI2CCallback, &ts, false, NULL, &taskI2CDDisable);

Task tWiFi(20* TASK_SECOND, TASK_FOREVER, &taskWiFiCallback, &ts, false, NULL, &taskWiFiDisable);

//aktifkan tI2C tI2C.enable();

Langkah 5: Membaca Nilai Suhu dan Kelembaban Dari SHT25

Membaca Nilai Suhu dan Kelembaban Dari SHT25
Membaca Nilai Suhu dan Kelembaban Dari SHT25

I2C adalah antarmuka dua kabel yang hanya menggunakan dua kabel untuk berkomunikasi dengan perangkat utama. Yang satu adalah SCL (Serial Clock) dan yang lainnya adalah SDA (Serial Data). Setiap perangkat budak memiliki alamat yang unik. SHT 25 juga memiliki alamat 8-bit dan dapat diakses dengan alamat 0x44. ia memiliki 8 bit alamat di mana 7 bit adalah alamat sebenarnya dan sementara paling kanan LSB bit 0 digunakan untuk membaca sinyal dari atau menulis ke perangkat. Jika bit 0 diset ke 1 maka perangkat master akan membaca dari perangkat I2C slave. I2C jauh lebih andal, terukur dan cepat dan bahkan memiliki banyak mode operasi yang membuatnya jauh lebih hemat energi

Kami menggunakan perpustakaan Wire.h untuk membaca nilai suhu dan kelembaban. Pustaka ini memfasilitasi komunikasi i2c antara sensor dan perangkat master. 0x44 adalah alamat I2C untuk SHT25. SHT25 beroperasi dalam mode operasi yang berbeda. Anda dapat merujuk ke lembar data untuk itu. Kami menggunakan 0x2C dan 0x06 sebagai MSB dan LSB masing-masing untuk operasi tembakan tunggal

Langkah 6: Memublikasikan Nilai ke ThingSpeak Menggunakan ThingSpeak MQTT API

Memublikasikan Nilai ke ThingSpeak Menggunakan ThingSpeak MQTT API
Memublikasikan Nilai ke ThingSpeak Menggunakan ThingSpeak MQTT API

Untuk memposting nilai suhu dan Kelembaban kami ke cloud, kami menggunakan ThingSpeak MQTT API. ThingSpeak adalah platform IoT. ThingSpeak adalah layanan web gratis yang memungkinkan Anda mengumpulkan dan menyimpan data sensor di cloud. MQTT adalah protokol umum yang digunakan dalam sistem IoT untuk menghubungkan perangkat dan sensor tingkat rendah. MQTT digunakan untuk menyampaikan pesan singkat ke dan dari broker. ThingSpeak baru-baru ini menambahkan broker MQTT sehingga perangkat dapat mengirim pesan ke ThingSpeak. Anda dapat mengikuti prosedur untuk mengatur Saluran ThingSpeak dari pos ini

HalSpeak MQTT

MQTT adalah arsitektur publish/subscribe yang dikembangkan terutama untuk menghubungkan bandwidth dan perangkat yang dibatasi daya melalui jaringan nirkabel. Ini adalah protokol sederhana dan ringan yang berjalan di atas soket TCP/IP atau WebSockets. MQTT melalui WebSockets dapat diamankan dengan SSL. Arsitektur publish/subscribe memungkinkan pesan didorong ke perangkat klien tanpa perangkat perlu terus-menerus melakukan polling ke server. Klien adalah perangkat apa pun yang terhubung ke broker dan dapat menerbitkan atau berlangganan topik untuk mengakses informasi. Topik berisi informasi perutean untuk broker. Setiap klien yang ingin mengirim pesan memublikasikannya ke topik tertentu, dan setiap klien yang ingin menerima pesan berlangganan topik tertentu

Publikasikan dan Berlangganan menggunakan ThingSpeak MQTT

  • Memublikasikan ke saluran umpan saluran /publish/
  • Menerbitkan ke saluran bidang tertentu /publish/fields/field/
  • Berlangganan saluran bidang saluran /berlangganan//
  • Berlangganan saluran umpan saluran pribadi //subscribe/fields/field/
  • Berlangganan ke semua bidang saluran. saluran// berlangganan/bidang/feild /

batalkan tugasWiFiCallback()

{

Serial.println("taskWiFiCallbackStarted");

Serial.print("batas waktu untuk tugas ini: \t");

Serial.println(tWiFi.getTimeout());

jika(!mqttCli.connected())

{

Serial.println("Klien tidak terhubung");

sambungkan kembaliMQTT();

}

String topicString ="channels/"+String(channelID)+"/publish/"+String(writeAPIKey);

int topicLength = topicString.length()+1;

char topicBuffer[panjang topik];

topicString.toCharArray(topicBuffer, topicLength+1);

Serial.println(topicBuffer);

String dataString = String("field1="+ String(tempC, 1) + "&field2=" + String(tempF, 1) + "&field3=" + String(lembab, 1));

int dataLength = dataString.length()+1;

byte dataBuffer[panjang data];

dataString.getBytes(dataBuffer, dataLength);

mqttCli.beginPublish(topicBuffer, dataLength, false);

Serial.println(mqttCli.write(dataBuffer, dataLength) ? "diterbitkan": "diterbitkan gagal");

mqttCli.endPublish();

//mqttCli.loop();

}

Langkah 7: Pemberitahuan Email Laporan Cuaca

Pemberitahuan Email Laporan Cuaca
Pemberitahuan Email Laporan Cuaca
Pemberitahuan Email Laporan Cuaca
Pemberitahuan Email Laporan Cuaca

Kami menggunakan applet IFTTT untuk memberikan pemberitahuan email laporan cuaca real-time kepada pengguna. Jadi, Kami telah menerapkannya melalui ThingSpeak. Kami rata-rata nilai 5-fay suhu dan kelembaban. Setiap kali nilai entri terakhir lebih besar dari nilai rata-rata. Ini akan memicu pemberitahuan email "ini hari yang panas". dan bila lebih kecil dari nilai rata-rata. Ini akan memicu pemberitahuan email "Hari yang indah". Setiap hari sekitar pukul 10.00 (IST) kami akan mendapatkan email notifikasi

saluranID= ******;

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

moistureData=thingSpeakRead(channelID, 'Fields', 3, 'NumDays', 5); tempData = thingSpeakRead(channelID, 'Fields', 1, 'NumDays', 5);

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

humidValue=0,1*perHumid+min(MoistureData);

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(webread(urlTemp)); lastHumidValue = str2num(webread(urlHumid));

jika (nilaiTempterakhir

if (lastTempValue>tempValue || lastHumidValue>humidValue)

plantMessage=' Ini hari yang panas.'; webwrite(iftttURL, 'value1', plantMessage, 'value2', lastTempValue, 'value3', lastHumidValue); akhir

Langkah 8: Kode Keseluruhan

Kode Keseluruhan
Kode Keseluruhan
Kode Keseluruhan
Kode Keseluruhan
Kode Keseluruhan
Kode Keseluruhan

Kode Keseluruhan

Kode keseluruhan tersedia di repositori GitHub ini

Keterbatasan

  • Ada beberapa masalah dengan memublikasikan data menggunakan metode publikasikan untuk sebagian besar data. Untuk mengatasi masalah ini, kami menggunakan fungsi write()
  • SPIFFS harus diformat sebelum mengunggah data baru ke SPIFFS.
  • Anda tidak boleh menggunakan fungsi delay(). delay() menghalangi operasi latar belakang. Sebagai gantinya, buat penundaan menggunakan milis() hanya jika diperlukan

Kredit

  • ESP826WebServer
  • Penjadwal Tugas
  • THT 25
  • ThingSpeak MQTT API
  • IFTTT
  • PubSubClient

Direkomendasikan: