Isi kandungan:
- Langkah 1: Spesifikasi Perkakasan dan Perisian
- Langkah 2: Menyimpan Kelayakan Pengguna
- Langkah 3: Menyiapkan Borang Web Anda dalam SPIFFS
- Langkah 4: Penjadualan Tugas
- Langkah 5: Membaca Nilai Suhu dan Kelembapan Dari SHT25
- Langkah 6: Menerbitkan Nilai ke ThingSpeak Menggunakan ThingSpeak MQTT API
- Langkah 7: Pemberitahuan E-mel Laporan Cuaca
- Langkah 8: Kod Keseluruhan
Video: Laporan Cuaca Menggunakan Appling ThingSpeak MQTT dan IFTTT: 8 Langkah
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:09
Pengenalan
Aplikasi cuaca berasaskan awan yang menyediakan laporan cuaca harian sebagai pemberitahuan e-mel. Aplikasi web ini mengukur Suhu dan Kelembapan menggunakan SHT25 dan Adafruit Huzzah ESP8266. Ia memberi kami data Suhu dan Kelembapan Masa Nyata dan analitik setiap jam. Data dikirim menggunakan API ThingSpeak MQTT dan kemudian kami memberikan pemberitahuan e-mel kepada pengguna setiap kali suhu mencapai ambang yang ditentukan menggunakan protokol IFTTT. SHT25 adalah Sensor Suhu dan Kelembapan yang dibuat oleh Sensirion. SHT25 memberikan tahap ketepatan yang tinggi sekitar ± 2% RH. Julat kelembapannya antara 0 hingga 100% dan julat suhu antara -40 hingga 125 ° C. Ia jauh lebih dipercayai dan pantas dengan masa tindak balas Sensor 8 saat.
ciri-ciri
- Menyediakan analitik dan statistik masa nyata kepada anda menggunakan Thing Speak MQTT API
- Pemberitahuan E-mel diberikan kepada pengguna pada waktu yang ditentukan menggunakan IFTTT
- Task Scheduler digunakan untuk Menjadwalkan tugas seperti mengambil data dari sensor, Menerbitkan bacaan sensor, Melanggan topik MQTT
- Ia menggunakan protokol I2C untuk mengambil bacaan sensor yang lebih tepat, dapat dikembangkan dan diskalakan
- mod tidur semasa peranti tidak berfungsi atau panggilan balik tugas tidak dipanggil.
- penjadualan tugas yang berkesan memberikan penggunaan yang mudah
- Halaman web yang terpisah dihoskan di mana pengguna harus memberikan kredensial penggunanya untuk mengelakkan flashing peranti anda setiap kali ketika menjangkau rangkaian wifi lain
- SPIFFS digunakan untuk menyimpan laman web kami agar kod kami dapat dibaca dan kurang kekok
Langkah 1: Spesifikasi Perkakasan dan Perisian
Spesifikasi Perkakasan
- Adafruit esp8266 Papan Huzzah
- Perisai Papan Huzzah
- Modul Sensor SHT25
- Kabel I2C
Spesifikasi Perisian
- Arduino IDE
- Perkara IFTTT Bercakap
- API MQTT
Langkah 2: Menyimpan Kelayakan Pengguna
Di sini kita menggunakan sensor SHT25 I2C untuk membaca nilai masa nyata Suhu dan Kelembapan Relatif dan menghantar nilai ini ke awan. Untuk mendapatkan nilai sensor yang dikemas kini dari semasa ke semasa dan untuk menghantar kemas kini ini secara serentak, kami menggunakan Perpustakaan Penjadual Tugas Arduino. Untuk operasi awan, kami menggunakan ThingSpeak MQTT API. Kemudian kami memberikan laporan cuaca masa nyata kepada pengguna menggunakan applet IFTTT. Anda boleh mengikuti langkah-langkah ini untuk membuat stesen cuaca anda sendiri. Jadi, DIY.
Sebelum melangkah lebih jauh. Kita perlu menyimpan kelayakan pengguna. Untuk tujuan ini, kami mengehoskan pelayan web di 192.169.1.4. Kami telah menyimpan borang web kami dalam SPIFFS. Sebaik sahaja peranti dimulakan, ia menghoskan pelayan web selama 60 saat. Pengguna harus mengikuti langkah-langkah ini.
- Sambung ke AP ESPuser, Ini disenaraikan dalam senarai rangkaian wifi anda yang tersedia. Sambung ke AP ini dan masukkan kata laluan "*******"
- Setelah disambungkan, Pergi ke penyemak imbas anda masukkan IP 192.168.1.4.
- Masukkan SSID dan kata laluan WiFi tempatan anda di medan input dan masukkan HANTAR
- Kredensial ini akan disimpan di EEPROM
- Selepas 60 saat Peranti akan terputus secara automatik dari AP
- Lain kali apabila anda menghidupkan peranti, Pengguna tidak perlu mengikuti prosedur ini, Peranti akan secara automatik mengambil bukti pengguna dari EEPROM dan terus mendapatkan bacaan sensor dari Antaramuka I2C dan mengeposkannya ke awan
// --------- AP config ------------ // IPAddress ap_local_IP (192, 168, 1, 4); Alamat IP ap_gateway (192, 168, 1, 254); Alamat IP ap_subnet (255, 255, 255, 0);
Serial.print ("Mengkonfigurasi pusat akses …");
WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);
Serial.print ("Menyiapkan Kredensial Pengguna");
WiFi.softAP (ssidAP, passAP);
server.on ("/", handleRoot);
pelayan.onNotFound (onHandleNotFound);
pelayan.begin ();
APTimer = milis ();
sementara (millis () - APTimer <APInterval) {
pelayan.handleClient ();
}
// **************************** HANDLE ROOT ****************** ********* // kekosongan peganganRoot () {
jika (server.hasArg ("ssid") && server.hasArg ("kata laluan"))
{
// Sekiranya semua medan borang mengandungi panggilan data
handelSerahkan ()
handleSubmit (); }
lain {
// Paparkan semula borang
// baca fail yang terdapat dalam spiff
Fail fail = SPIFFS.open ("/ webform.html", "r");
server.streamFile (fail, "teks / html");
// jangan lupa tutup fail
fail.tutup ();
}}
// Periksa status bahawa ia mempunyai argumen ssid dan kata laluan
// Kemudian tuliskan kelayakan ke ROM
ROMwrite (String (server.arg ("ssid")), String (server.arg ("kata laluan")))
Langkah 3: Menyiapkan Borang Web Anda dalam SPIFFS
SPIFFS
Sistem Fail Flash Antara Muka Periferal Serial, atau SPIFFS secara ringkas. Ini adalah sistem fail ringan untuk mikrokontroler dengan SPI flash chip. Cip kilat onboard ESP8266 mempunyai banyak ruang untuk laman web anda, terutamanya jika anda mempunyai versi 1MB, 2MB atau 4MB. Kami juga telah menyimpan laman web kami dalam Sistem Flash. Terdapat beberapa langkah yang perlu kita ikuti untuk memuat naik data ke spiff
- Muat turun alat:
- Di direktori buku sketsa Arduino anda, buat direktori alat jika belum ada
- Buka alat ke dalam direktori alat (jalannya akan kelihatan seperti /Arduino/tools/ESP8266FS/tool/esp8266fs.jar)
- Mulakan semula Arduino IDE
- Buka lakaran (atau buat yang baru dan simpan)
- Pergi ke direktori sketsa (pilih Sketch> Show Sketch Folder)
- Buat direktori bernama data dan fail yang anda mahukan dalam sistem fail di sana. Kami telah memuat naik halaman HTML kami dengan nama webform.html
- Pastikan anda telah memilih papan, port, dan Monitor Serial yang ditutup
- Pilih Alat> Muat Naik Data Lakaran ESP8266. Ini mesti mula memuat naik fail ke dalam sistem fail flash ESP8266. Setelah selesai, bar status IDE akan memaparkan mesej SPIFFS Uploaded Image.
Fail fail = SPIFFS.open ("/ webform.html", "r");
server.streamFile (fail, "teks / html");
// jangan lupa tutup fail
fail.tutup ();
Langkah 4: Penjadualan Tugas
Dalam tutorial ini, kami melakukan dua operasi:
- Baca data dari SHT25 menggunakan protokol I2C
- Kirim data yang dikemas kini ke awan menggunakan ThingSpeak MQTT API
Untuk mencapai ini, kami menggunakan perpustakaan TaskScheduler. Kami telah menjadualkan dua tugas berbeza yang merujuk kepada dua operasi kawalan yang berbeza. ini dilakukan seperti berikut
- Tugas 1 adalah untuk membaca nilai sensor tugas ini berjalan selama 1 saat sehingga mencapai masa tamat 10 saat.
- Apabila Task1 mencapai waktunya, Kami menyambung ke broker Wifi dan MQTT tempatan.
- Sekarang Task 2 diaktifkan dan kami melumpuhkan Tugas 1Tugas 2 adalah untuk menerbitkan data sensor kepada broker Thing Speak MQTT, tugas ini berjalan selama 20 saat sehingga mencapai batas waktu 20 saat
- Apabila Task2 mencapai masa tamat, Task 1 diaktifkan lagi dan Task2 dilumpuhkan. di sini sekali lagi, kami mendapat nilai yang dikemas kini dan prosesnya berterusan
- apabila tiada panggilan balik dipanggil atau peranti dalam keadaan tidak aktif, ia akan menuju ke Tidur Tidur sehingga menjimatkan kuasa.
// --------- prototaip untuk panggilan balik tugas ------------ //
membatalkan tugasI2CCallback ();
membatalkan tugasI2CDDisable ();
membatalkan tugasWiFiCallback ();
membatalkan tugasWiFiDisable ();
// --------- Tugas ------------ //
TI2C Tugas (2 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL, & taskI2CDDisable);
TWiFi tugas (20 * TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL, & taskWiFiDisable);
// aktifkan tI2C tI2C. aktif ();
Langkah 5: Membaca Nilai Suhu dan Kelembapan Dari SHT25
I2C adalah antara muka dua dawai yang hanya menggunakan dua wayar untuk berkomunikasi dengan peranti induk. Yang satu adalah SCL (Serial Clock) dan yang lain adalah SDA (Serial Data). Setiap peranti hamba mempunyai alamat yang unik. SHT 25 juga mempunyai alamat 8-bit dan dapat diakses dengan alamat 0x44. ia mempunyai 8 bit alamat di mana 7 bit adalah alamat sebenar dan sementara bit paling kanan LSB 0 digunakan untuk memberi isyarat membaca atau menulis ke peranti. Sekiranya bit 0 diatur ke 1 maka peranti induk akan dibaca dari peranti hamba I2C. I2C jauh lebih dipercayai, boleh diskalakan dan cepat dan bahkan ia mempunyai banyak mod operasi yang menjadikannya lebih cekap tenaga
Kami menggunakan perpustakaan Wire.h untuk membaca nilai suhu dan kelembapan. Perpustakaan ini memudahkan komunikasi i2c antara sensor dan peranti induk. 0x44 adalah alamat I2C untuk SHT25. SHT25 beroperasi dalam mod operasi yang berbeza. Anda boleh merujuk lembaran data untuk itu. Kami masing-masing menggunakan 0x2C dan 0x06 sebagai MSB dan LSB untuk operasi tembakan tunggal
Langkah 6: Menerbitkan Nilai ke ThingSpeak Menggunakan ThingSpeak MQTT API
Untuk mengeposkan nilai suhu dan kelembapan kami ke awan, kami menggunakan ThingSpeak MQTT API. ThingSpeak adalah platform IoT. ThingSpeak adalah perkhidmatan web percuma yang membolehkan anda mengumpulkan dan menyimpan data sensor di cloud. MQTT adalah protokol biasa yang digunakan dalam sistem IoT untuk menghubungkan peranti dan sensor tahap rendah. MQTT digunakan untuk menyampaikan pesanan ringkas ke dan dari broker. ThingSpeak baru-baru ini menambahkan broker MQTT sehingga peranti dapat menghantar mesej ke ThingSpeak. Anda boleh mengikuti prosedur untuk menyiapkan ThingSpeak Channel dari catatan ini
ThingSpeak MQTT
MQTT adalah seni bina penerbitan / langganan yang dibangunkan terutamanya untuk menyambungkan lebar jalur dan peranti dengan kuasa melalui rangkaian tanpa wayar. Ini adalah protokol sederhana dan ringan yang berjalan di atas soket TCP / IP atau WebSockets. MQTT melalui WebSockets dapat diamankan dengan SSL. Senibina penerbitan / langganan membolehkan mesej didorong ke peranti pelanggan tanpa peranti perlu melakukan tinjauan secara berterusan ke pelayan. Pelanggan adalah mana-mana peranti yang menghubungkan dengan broker dan boleh menerbitkan atau melanggan topik untuk mengakses maklumat. Topik mengandungi maklumat penghalaan untuk broker. Setiap pelanggan yang ingin mengirim mesej menerbitkannya ke topik tertentu, dan setiap pelanggan yang ingin menerima mesej melanggan topik tertentu
Terbitkan dan Langgan menggunakan ThingSpeak MQTT
- Menerbitkan ke saluran suapan saluran / menerbitkan /
- Menerbitkan ke saluran bidang tertentu / menerbitkan / bidang / bidang /
- Langgan saluran saluran saluran / langganan //
- Langgan saluran suapan saluran peribadi // langgan / bidang / bidang /
- Langgan semua bidang saluran. saluran // melanggan / bidang / pilihan /
membatalkan tugasWiFiCallback ()
{
Serial.println ("taskWiFiCallbackStarted");
Serial.print ("timeout untuk tugas ini: / t");
Serial.println (tWiFi.getTimeout ());
jika (! mqttCli.connected ())
{
Serial.println ("Pelanggan tidak disambungkan");
sambung semulaMQTT ();
}
String topicString = "saluran /" + Rentetan (channelID) + "/ terbitkan /" + Rentetan (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 (lembap, 1));
int dataLength = dataString.length () + 1;
bait dataBuffer [dataLength];
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 E-mel Laporan Cuaca
Kami menggunakan applet IFTTT untuk memberikan laporan cuaca masa nyata Pemberitahuan e-mel kepada pengguna. Oleh itu, Kami telah melaksanakannya melalui ThingSpeak. Kami rata-rata nilai suhu dan kelembapan 5-fay. Bila-bila masa nilai entri terakhir lebih besar daripada nilai purata. Ini akan mencetuskan pemberitahuan e-mel "ini hari yang panas". dan apabila ia lebih rendah daripada nilai purata. Ini akan mencetuskan pemberitahuan e-mel "Hari yang indah". Setiap hari sekitar jam 10:00 pagi (IST) kami akan mendapat pemberitahuan e-mel
channelID = ******;
iftttURL = 'https://maker.ifttt.com/**************';
kelembapanData = thingSpeakRead (channelID, 'Fields', 3, 'NumDays', 5); tempData = thingSpeakRead (channelID, 'Fields', 1, 'NumDays', 5);
perHumid = maks (kelembapanData) -min (kelembapanData);
humidValue = 0.1 * perHumid + min (kelembapanData);
perTemp = maks (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 (lastTempValue
jika (lastTempValue> tempValue || lastHumidValue> humidValue)
plantMessage = 'Ini hari yang panas.'; penulisan web (iftttURL, 'value1', plantMessage, 'value2', lastTempValue, 'value3', lastHumidValue); akhir
Langkah 8: Kod Keseluruhan
Kod Keseluruhan
Kod keseluruhan terdapat di repositori GitHub ini
Batasan
- Terdapat beberapa masalah dengan menerbitkan data menggunakan metode penerbitan untuk sejumlah besar data. Untuk menyelesaikan masalah ini, kami menggunakan fungsi tulis ()
- SPIFFS harus diformat sebelum memuat naik data baru ke SPIFFS.
- Anda tidak boleh menggunakan fungsi delay (). kelewatan () menghalang operasi latar belakang. Sebaliknya, buat kelewatan menggunakan milis () hanya jika perlu
Kredit
- Pelayan ESP826Web
- Penjadual tugasan
- SHT 25
- ThingSpeak MQTT API
- IFTTT
- Pelanggan PubSub
Disyorkan:
Stesen Cuaca Mini Menggunakan Arduino dan ThingSpeak: 4 Langkah
Stesen Cuaca Mini Menggunakan Arduino dan ThingSpeak: Helo semua. Dalam Instructable ini, saya akan memandu anda melalui langkah-langkah untuk membuat stesen cuaca mini yang diperibadikan. Selain itu, kami akan menggunakan ThingSpeak API untuk memuat naik data cuaca kami ke pelayan mereka, atau apa tujuannya
Loactor Dengan Sama ada Laporan Langsung Menggunakan Bot Sembang: 4 Langkah
Loactor Dengan Sama ada Laporan Langsung Menggunakan Bot Sembang: Melalui WhatsApp, dapatkan pemboleh ubah (lokasi, ketinggian, tekanan …) dari NodeMCU seperti yang diminta atau hantar arahan ke NodeMCU melalui API Twilio. Selama beberapa minggu, saya telah bekerja dengan API Twilio, terutamanya untuk pemesejan WhatsApp, dan bahkan membuat ap
Laporan Live Covid Menggunakan Raspberry Pi: 6 Langkah
Laporan Covid Live Menggunakan Raspberry Pi: Seperti yang kita ketahui, seluruh dunia dipengaruhi oleh wabak COVID-19 dan hampir semua orang bekerja dari rumah. Kita semua harus menggunakan jangka masa ini dengan sebaik-baiknya, untuk meningkatkan kemahiran teknikal kita atau menulis beberapa skrip Pythonic yang baik. Mari lihat Python yang mudah
Cuaca Lilin - Cuaca dan Suhu Sekilas: 8 Langkah
Cuaca Lilin - Cuaca dan Suhu Sekilas: Dengan menggunakan lilin ajaib ini, anda dapat mengetahui suhu dan keadaan semasa di luar dengan serta-merta
Stesen Cuaca Acurite 5 dalam 1 Menggunakan Pi Raspberry dan Weewx (Stesen Cuaca lain Sesuai): 5 Langkah (dengan Gambar)
Stesen Cuaca Acurite 5 in 1 Menggunakan Raspberry Pi dan Weewx (Stesen Cuaca yang Lain Sesuai): Semasa saya membeli stesen cuaca Acurite 5 in 1, saya ingin dapat memeriksa cuaca di rumah saya semasa saya tiada. Semasa saya pulang dan menyiapkannya, saya menyedari bahawa saya mesti mempunyai paparan yang disambungkan ke komputer atau membeli hab pintar mereka