Daftar Isi:
- Langkah 1: BoM - Bill of Material
- Langkah 2: Sensor UV Analog
- Langkah 3: Memasang Layar: OLED
- Langkah 4: Pengukur UV Lokal
- Langkah 5: Memasang DHT22 untuk Pengukuran Suhu dan Kelembaban Udara
- Langkah 6: Mengirim Data ke ThingSpeak.com
- Langkah 7: Kesimpulan
Video: IoT Menjadi Mudah: Menangkap Data Cuaca Jarak Jauh: UV dan Suhu & Kelembaban Udara: 7 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-02-01 14:41
Pada tutorial ini, kita akan menangkap data jarak jauh seperti UV (Radiasi Ultra-Violet), suhu dan kelembaban udara. Data tersebut akan sangat penting dan akan digunakan di Stasiun Cuaca lengkap di masa mendatang.
Diagram blok menunjukkan apa yang akan kita dapatkan di akhir.
Langkah 1: BoM - Bill of Material
NodeMCU (ESP8266-12E) - USD 9.00
Sensor Kelembaban dan Suhu (DHT22) - USD10.00
Sensor UV - USD 4,00
OLED USD 12.00
Papan tempat memotong roti - USD1,00
Langkah 2: Sensor UV Analog
Sensor UV ini menghasilkan output analog yang sebanding dengan radiasi Ultra-Violet yang ditemukan pada spektrum penginderaan cahaya. Ini menggunakan fotodioda UV (berdasarkan Gallium Nitrida), yang dapat mendeteksi rentang cahaya 240-370nm (yang mencakup UVB dan sebagian besar spektrum UVA). Level sinyal dari fotodioda sangat kecil, dalam level nano-ampere, sehingga modul telah menyematkan penguat operasional untuk memperkuat sinyal ke level volt yang lebih mudah dibaca (0 hingga 1V).
Sensor dan op-amp dapat diberi daya, dengan menghubungkan VCC ke 3.3VDC (atau 5VDC) dan GND ke ground daya. Sinyal analog dapat diperoleh dari pin OUT.
Outputnya akan dalam milivolt dan akan dibaca oleh Input Analog dari NodeMCU kami. Setelah dibaca, kita harus "mengubah" (atau "memetakan") agar nilai dapat ditangani dengan lebih baik oleh kode. Kita bisa melakukannya dengan fungsi readSensorUV():
/* Membaca Sensor UV dalam mV dan memanggil penghitungan indeks UV */
void readSensorUV() { byte numOfReadings = 5; dataSensorUV = 0; for (int i=0; i< numOfReadings; i++) { dataSensorUV += analogRead(sensorUVPin); penundaan (200); } dataSensorUV /= numOfReadings; dataSensorUV = (dataSensorUV * (3.3 / 1023.0))*1000; Serial.println(dataSensorUV); indexCalculate(); }
Setelah kita memiliki data UV, kita dapat dengan mudah menghitung indeks UV seperti yang didefinisikan pada tabel di atas. Fungsi indexCalculate() akan melakukannya untuk kita:
/* Perhitungan Indeks UV */
void indexCalculate() { if (dataSensorUV < 227) indexUV = 0; lain jika (227 <= dataSensorUV && dataSensorUV < 318) indexUV = 1; lain jika (318 <= dataSensorUV && dataSensorUV < 408) indexUV = 2; lain jika (408 <= dataSensorUV && dataSensorUV < 503) indexUV = 3; lain jika (503 <= dataSensorUV && dataSensorUV < 606) indexUV = 4; lain jika (606 <= dataSensorUV && dataSensorUV < 696) indexUV = 5; lain jika (696 <= dataSensorUV && dataSensorUV < 795) indeksUV = 6; lain jika (795 <= dataSensorUV && dataSensorUV < 881) indexUV = 7; lain jika (881 <= dataSensorUV && dataSensorUV < 976) indexUV = 8; else if (976 <= dataSensorUV && dataSensorUV < 1079) indexUV = 9; lain jika (1079 <= dataSensorUV && dataSensorUV < 1170) indexUV = 10; indeks lainUV = 11; }
Langkah 3: Memasang Layar: OLED
Untuk tujuan pengujian, kami akan menyertakan OLED pada pengukur UV kami (Langkah ini sepenuhnya opsional).
Tidak apa-apa selama pengujian, untuk menggunakan Serial Monitor, tetapi apa yang terjadi ketika Anda menggunakan prototipe jauh dari PC Anda dalam mode yang berdiri sendiri? Untuk itu, mari kita pasang layar OLED, SSD1306, yang karakteristik utamanya adalah:
- Ukuran layar: 0.96"
- Serial I2C IIC SPI
- 128X64
- LED LCD OLED Putih
Ikuti diagram kelistrikan dan sambungkan 4 pin OLED kami:
- VCC pergi ke 3.3V
- GND turun ke darat
- SCL masuk ke NodeMCU (GPIO 2) ==>D4
- SDA masuk ke NodeMCU (GPIO 0) ==>D3
Setelah kita menghubungkan layar, mari unduh dan instal perpustakaannya di Arduino IDE kita: "ESP8266 OLED Driver for SSD1306 display" yang dikembangkan oleh Daniel Eichhorn (Pastikan Anda menggunakan Versi 3.0.0 atau lebih besar!).
Instal perpustakaan di Arduino IDE Anda, yang dapat ditemukan di SSD1306Wire.h
Setelah Anda me-restart IDE, perpustakaan harus sudah diinstal.
Pustaka mendukung protokol I2C untuk mengakses tampilan OLED menggunakan pustaka Wire.h bawaan:
/* OLED */
#sertakan "SSD1306Wire.h" #sertakan "Wire.h" const int I2C_DISPLAY_ADDRESS = 0x3c; const int SDA_PIN = 0; const int SCL_PIN = 2; SSD1306Tampilan kabel (I2C_DISPLAY_ADDRESS, SDA_PIN, SCL_PIN);
Mari daftar beberapa API penting yang akan digunakan dengan tampilan OLED kita. Daftar lengkapnya dapat ditemukan di GITHub yang disediakan di atas.
A. Kontrol Tampilan:
batal init(); // Inisialisasi tampilan
void displayOn(void); // Hidupkan tampilan pada void displayOff(void); // Matikan tampilan void clear(void); // Hapus buffer piksel lokal void flipScreenVertically(); // Putar layar terbalik
B. Operasi Teks:
void drawString(int16_t x, int16_t y, String teks); // (xpos, ypos, "Teks")
void setFont(const char* fontData); // Mengatur font saat ini.
Font default yang tersedia:
- ArialMT_Plain_10,
-
ArialMT_Plain_16,
- ArialMT_Plain_24
Setelah OLED itu sendiri dan Pustakanya terinstal, mari kita tulis program sederhana untuk mengujinya. Masukkan dengan kode di bawah pada IDE Anda, hasilnya akan menjadi tampilan seperti yang ditunjukkan pada foto di atas:
* OLED */
#sertakan "SSD1306Wire.h" #sertakan "Wire.h" const int I2C_DISPLAY_ADDRESS = 0x3c; const int SDA_PIN = 0; const int SCL_PIN = 2; SSD1306Tampilan kabel (I2C_DISPLAY_ADDRESS, SDA_PIN, SCL_PIN); void setup () { Serial.begin(115200); pengaturan tampilan(); } void loop() { } /* Memulai dan menampilkan data setup pada OLED */ void displaySetup() { display.init(); // inisialisasi tampilan display.clear(); // Hapus tampilan display.flipScreenVertically(); // Balikkan tampilan display.display(); // Meletakkan data pada tampilan Serial.println("Memulai Tes Tampilan"); display.setFont(ArialMT_Plain_24); display.drawString(30, 0, "OLED"); // (xpos, ypos, "Teks") display.setFont(ArialMT_Plain_16); display.drawString(18, 29, "Tes dimulai"); display.setFont(ArialMT_Plain_10); display.drawString(10, 52, "Serial BaudRate:"); display.drawString(90, 52, String(11500)); tampilan.tampilan(); // Menempatkan data pada penundaan tampilan (3000); }
Program di atas dapat diunduh dari GitHub saya:
NodeMCU_OLED_Test
Langkah 4: Pengukur UV Lokal
Sekarang, dengan layar OLED terpasang, kami dapat menghubungkan baterai dan melakukan beberapa pengujian jarak jauh menggunakan "Pengukur UV" kami
#define SW_VERSION "UV_Sensor_V.1"
/* Sensor UV */ #define sensorUVPin A0 int dataSensorUV = 0; int indeksUV = 0; /* OLED */ #include "SSD1306Wire.h" #include "Wire.h" const int I2C_DISPLAY_ADDRESS = 0x3c; const int SDA_PIN = 0; const int SCL_PIN = 2; SSD1306Tampilan kabel (I2C_DISPLAY_ADDRESS, SDA_PIN, SCL_PIN); void setup() { Serial.begin(115200); pengaturan tampilan(); } void loop() { readSensorUV(); tampilanUV(); penundaan (1000); } /* Memulai dan menampilkan data pengaturan pada OLED */ void displaySetup() { display.init(); // inisialisasi tampilan display.clear(); // Hapus tampilan display.flipScreenVertically(); // Balikkan tampilan display.display(); // Meletakkan data di layar Serial.println("Memulai Uji Sensor UV"); display.setFont(ArialMT_Plain_24); display.drawString(10, 0, "MJRoBot"); display.setFont(ArialMT_Plain_16); display.drawString(0, 29, "Uji Sensor UV"); display.setFont(ArialMT_Plain_10); display.drawString(0, 52, "SW Ver.:"); display.drawString(45, 52, SW_VERSION); tampilan.tampilan(); penundaan (3000); } /* Membaca Sensor UV dalam mV dan memanggil penghitungan indeks UV */ void readSensorUV() { byte numOfReadings = 5; dataSensorUV = 0; for (int i=0; i< numOfReadings; i++) { dataSensorUV += analogRead(sensorUVPin); penundaan (200); } dataSensorUV /= numOfReadings; dataSensorUV = (dataSensorUV * (3.3 / 1023.0))*1000; Serial.println(dataSensorUV); indexCalculate(); } /* Perhitungan Indeks UV */ void indexCalculate() { if (dataSensorUV < 227) indexUV = 0; lain jika (227 <= dataSensorUV && dataSensorUV < 318) indexUV = 1; lain jika (318 <= dataSensorUV && dataSensorUV < 408) indexUV = 2; lain jika (408 <= dataSensorUV && dataSensorUV < 503) indexUV = 3; lain jika (503 <= dataSensorUV && dataSensorUV < 606) indexUV = 4; lain jika (606 <= dataSensorUV && dataSensorUV < 696) indexUV = 5; lain jika (696 <= dataSensorUV && dataSensorUV < 795) indeksUV = 6; lain jika (795 <= dataSensorUV && dataSensorUV < 881) indexUV = 7; lain jika (881 <= dataSensorUV && dataSensorUV < 976) indexUV = 8; else if (976 <= dataSensorUV && dataSensorUV < 1079) indexUV = 9; lain jika (1079 <= dataSensorUV && dataSensorUV < 1170) indexUV = 10; indeks lainUV = 11; } /* Menampilkan Nilai UV pada OLED lokal*/ void displayUV() { display.clear(); display.setFont(ArialMT_Plain_16); display.drawString(20, 0, "Sensor UV"); display.drawString(0, 23, "UV (mV):"); display.drawString(80, 23, String(dataSensorUV)); display.drawString(0, 48, "Indeks UV:"); display.setFont(ArialMT_Plain_24); display.drawString(82, 42, String(indexUV)); tampilan.tampilan(); }
Kode di atas dapat diunduh dari GitHun saya: NodeMCU_UV_Sensor_OLED.ino
Langkah 5: Memasang DHT22 untuk Pengukuran Suhu dan Kelembaban Udara
Salah satu sensor yang paling sering digunakan untuk menangkap data cuaca adalah DHT22 (atau saudaranya DHT11), sebuah sensor suhu dan kelembaban relatif digital. Ini menggunakan sensor kelembaban kapasitif dan termistor untuk mengukur udara di sekitarnya dan mengeluarkan sinyal digital pada pin data (tidak diperlukan pin input analog).
Sensor harus diberi daya antara 3.3V dan 5V dan akan bekerja dari -40oC hingga +80oC dengan akurasi +/- 0,5oC untuk suhu dan +/-2% untuk Kelembaban relatif. Penting juga untuk diingat bahwa periode penginderaannya rata-rata 2 detik (waktu minimum antara pembacaan). Situs Adafruit menyediakan banyak informasi tentang keduanya, DHT22 dan saudaranya DHT11. Untuk lebih jelasnya, silakan kunjungi halaman Tutorial DHT22/11.
DHT22 memiliki 4 pin (menghadap sensor, pin 1 paling kiri):
- VCC (kami akan terhubung ke 3.3V dari NodeMCU);
- Data keluar;
- Tidak terhubung dan
- Tanah.
Setelah biasanya Anda akan menggunakan sensor pada jarak kurang dari 20m, resistor 10K harus dihubungkan antara pin Data dan VCC. Pin Output akan dihubungkan ke pin NodeMCU D3 (lihat diagram di atas). Setelah sensor terpasang di modul kami, unduh pustaka DHT dari repositori Adafruit GitHub dan instal di file Perpustakaan Arduino Anda. Setelah Anda memuat ulang Arduino IDE Anda, "perpustakaan sensor DHT" harus diinstal.
Di awal kode, kita harus menyertakan baris:
/* DHT22*/
#sertakan "DHT.h" #define DHTPIN D2 #define DHTTYPE DHT22 DHT dht(DHTPIN, DHTTYPE); dengung mengambang = 0; suhu mengambang = 0;
Fungsi baru akan dibuat untuk membaca sensor:
/* Dapatkan data DHT */
void getDhtData(void) { float tempIni = temp; float humIni = hum; suhu = dht.readSuhu(); hum = dht.readHumidity(); if (isnan(hum) || isnan(temp)) // Periksa apakah ada pembacaan yang gagal dan keluar lebih awal (untuk mencoba lagi). { Serial.println("Gagal membaca dari sensor DHT!"); suhu = suhuIni; hum = humIni; kembali; } }
Kode lengkap termasuk sensor UV dan DHT dapat diunduh dari GitHub saya: NodeMCU_UV_DHT_Sensor_OLED
Langkah 6: Mengirim Data ke ThingSpeak.com
Selama ini kami hanya menggunakan NodeMCU ESP12-E sebagai board Arduino biasa dan biasa. Tentu saja, kita baru saja "menggaruk" potensi sebenarnya dari chip kecil yang spektakuler ini dan sekaranglah saatnya untuk lepas landas ke surga! Atau lebih baik ke bintang! Ehr … ke awan!;-)
Mari kita mulai!
- Pertama, Anda harus memiliki akun di ThinkSpeak.com
- Ikuti petunjuk untuk membuat Saluran dan catat ID Saluran dan Tulis Kunci API Anda
- Perbarui kode di bawah ini dengan jaringan WiFi Anda dan kredensial Thinkspeak
- Jalankan program di IDE
Mari beri komentar kode bagian yang paling penting:
Pertama, panggil perpustakaan ESP8266, tentukan klien WiFi dan tentukan kredensial Router dan Thinkspeak lokal Anda:
/* ESP12-E & Thinkspeak*/
#sertakan klien WiFiClient; const char* MY_SSID = "ID SSD ANDA DI SINI"; const char* MY_PWD = "PASSWORD ANDA DI SINI"; const char* TS_SERVER = "api.thingspeak.com"; String TS_API_KEY ="SALURAN ANDA MENULIS KUNCI API";
Kedua, mari sertakan perpustakaan yang sangat penting untuk proyek IoT: SimpleTimer.h:
/* WAKTU */
#sertakan pengatur waktu SimpleTimer;
Ketiga, selama setup(), kita akan memulai komunikasi serial, memanggil fungsi connectWiFi() dan menentukan timer. Perhatikan bahwa baris kode: timer.setInterval(60000L, sendDataTS); akan memanggil fungsi sendDataTS() setiap 60 detik, untuk mengunggah data ke saluran ThinkSpeak.
batalkan pengaturan()
{ … Serial.begin(115200); penundaan (10); … hubungkan Wifi(); timer.setInterval(60000L, sendDataTS); … }
Akhirnya, selama loop(), satu-satunya perintah yang diperlukan adalah memulai timer dan hanya itu!
lingkaran kosong()
{ … timer.run(); // Memulai SimpleTimer }
Di bawah ini, Anda dapat melihat dua fungsi penting yang digunakan untuk menangani komunikasi Thinkspeak:
Koneksi ESP12-E dengan jaringan WiFi Anda:
/***************************************************
* Menghubungkan WiFi *********************************************** ***/ void connectWifi() { Serial.print("Menghubungkan ke "+ *MY_SSID); WiFi.begin(MY_SSID, MY_PWD); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.print("."); } Serial.println(""); Serial.println("WiFi Terhubung"); Serial.println(""); }
ESP12-E mengirim data ke ThinkSpeak:
/***************************************************
* Mengirim Data ke Saluran Thinkspeak ******************************************** ******/ void sendDataTS(void) { if (client.connect(TS_SERVER, 80)) { String postStr = TS_API_KEY; postStr += "&field1="; postStr += String(dataSensorUV); postStr += "&field2="; postStr += String(indeksUV); postStr += "&field3="; postStr += String(temp); postStr += "&field4="; postStr += String(berdengung); postStr += "\r\n\r\n"; client.print("POST /update HTTP/1.1\n"); client.print("Host: api.thingspeak.com\n"); client.print("Koneksi: tutup\n"); client.print("X-THINGSPEAKAPIKEY: " + TS_API_KEY + "\n"); client.print("Jenis Konten: application/x-www-form-urlencoded\n"); client.print("Panjang Konten: "); client.print(postStr.length()); klien.print("\n\n"); klien.print(postStr); penundaan (1000); } dikirim++; klien.berhenti(); }
Kode lengkap dapat ditemukan di GitHub saya: NodeMCU_UV_DHT_Sensor_OLED_TS_EXT
Setelah Anda memiliki kode yang diunggah ke NodeMCU Anda. Mari kita hubungkan baterai eksternal dan lakukan pengukuran di bawah matahari. Saya meletakkan Remote Station di atap dan mulai mengambil data di ThingSpeak.com seperti yang ditunjukkan pada foto di atas.
Langkah 7: Kesimpulan
Seperti biasa, saya berharap proyek ini dapat membantu orang lain menemukan jalan mereka ke dunia elektronik yang menarik!
Untuk detail dan kode akhir, silakan kunjungi penyimpanan GitHub saya: RPi-NodeMCU-Weather-Station
Untuk proyek lainnya, silakan kunjungi blog saya: MJRoBot.org
Pantau terus! Tutorial selanjutnya kita akan mengirimkan data dari stasiun cuaca jarak jauh ke stasiun pusat, berdasarkan server Web Raspberry Pi:
Saludos dari selatan dunia!
Sampai jumpa di instruksi saya berikutnya!
Terima kasih, Marcelo
Direkomendasikan:
Esp32-Ubidots-Nirkabel-jarak jauh Suhu-Dan-Kelembaban: 6 Langkah
Esp32-Ubidots-Wireless-long-range Temperature-And-Humidity: Dalam tutorial ini, kita akan mengukur data suhu dan kelembaban yang berbeda menggunakan sensor Temp dan kelembaban. Anda juga akan belajar cara mengirim data ini ke Ubidots. Sehingga Anda dapat menganalisisnya dari mana saja untuk aplikasi yang berbeda
ThingSpeak, ESP32 dan Suhu dan Kelembaban Nirkabel Jarak Jauh: 5 Langkah
ThingSpeak, ESP32 dan Long Range Wireless Temp and Humidity: Dalam tutorial ini, kita akan mengukur data suhu dan kelembaban yang berbeda menggunakan sensor Temp dan kelembaban. Anda juga akan mempelajari cara mengirim data ini ke ThingSpeak. Sehingga Anda dapat menganalisisnya dari mana saja untuk aplikasi yang berbeda
Mengirim Data Sensor Suhu dan Kelembaban Nirkabel Jarak Jauh IoT ke Google Sheet: 39 Langkah
Mengirim Data Sensor Suhu dan Kelembaban Nirkabel Jarak Jauh IoT ke Google Sheet: Kami menggunakan sensor Suhu dan Kelembaban NCD di sini, tetapi langkah-langkahnya tetap sama untuk produk ncd mana pun, jadi jika Anda memiliki sensor nirkabel ncd lainnya, pengalaman bebas untuk mengamati disamping selain. Melalui penghentian teks ini, Anda perlu
Sensor Suhu dan Kelembaban Nirkabel Jarak Jauh IOT Dengan Node-Red: 27 Langkah
Sensor Suhu dan Kelembaban Nirkabel Jarak Jauh IOT Dengan Node-Red: Memperkenalkan sensor suhu-kelembaban nirkabel jarak jauh NCD, yang menawarkan jangkauan hingga 28 Mile menggunakan arsitektur jaringan mesh nirkabel. Menggabungkan sensor suhu-kelembaban Honeywell HIH9130 mentransmisikan suhu yang sangat akurat dan
Pemantauan Suhu dan Kelembaban Jarak Jauh Dengan ESP8266 dan Aplikasi Blynk: 15 Langkah
Pemantauan Suhu dan Kelembaban Jarak Jauh Dengan ESP8266 dan Aplikasi Blynk: Ini adalah proyek pertama saya dengan chip ESP8266. Saya baru saja membangun rumah kaca baru di dekat rumah saya dan menarik bagi saya apa yang terjadi di sana selama sehari? Maksud saya bagaimana suhu dan kelembaban berubah? Apakah rumah kaca cukup berventilasi? Jadi saya putuskan