Pemantauan Sensor LoRa ESP32 dengan Server Web (Komunikasi Jarak Jauh)

Dalam proyek ini, Anda akan membangun sistem pemantauan sensor menggunakan papan OLED TTGO LoRa32 SX1276 yang mengirimkan pembacaan suhu, kelembaban, dan tekanan melalui radio LoRa ke penerima ESP32 LoRa. Penerima menampilkan pembacaan sensor terbaru di server web.

Dengan proyek ini, Anda akan belajar cara:

    • Kirim pembacaan sensor melalui radio LoRa antara dua papan ESP32;

    • Tambahkan kemampuan LoRa dan Wi-Fi secara bersamaan ke proyek Anda (LoRa + Server Web pada papan ESP32 yang sama);

    • Gunakan papan OLED TTGO LoRa32 SX1276 atau papan pengembangan serupa untuk proyek IoT.

Tonton Video Demonstrasinya

Tonton demonstrasi video untuk melihat apa yang akan Anda buat di sepanjang tutorial ini.

Ulasan Proyek

Gambar berikut menunjukkan ikhtisar tingkat tinggi dari proyek yang akan kita bangun sepanjang tutorial ini.

    • Pengirim LoRa mengirimkan pembacaan sensor BME280 melalui radio LoRa setiap 10 detik;

    • Penerima LoRa mendapatkan pembacaan dan menampilkannya di server web;

    • Anda dapat memantau pembacaan sensor dengan mengakses server web;

    • Pengirim LoRa dan penerima Lora dapat terpisah beberapa ratus meter tergantung pada lokasinya. Jadi, Anda dapat menggunakan proyek ini untuk memantau pembacaan sensor dari ladang atau rumah kaca Anda jika jaraknya agak jauh dari rumah Anda;

    • Penerima LoRa menjalankan server web asinkron dan file halaman web disimpan di sistem fileESP32 (SPIFFS);

    • Penerima LoRa juga menunjukkan tanggal dan waktu pembacaan terakhir diterima. Untuk mendapatkan tanggal dan waktu, kami menggunakan Network Time Protocol denganESP32.

Untuk pengenalan komunikasi LoRa: apa itu LoRa, frekuensi LoRa, aplikasi LoRa, dan lainnya, baca Memulai ESP32 dengan LoRa menggunakan Arduino IDE.

Bagian yang Diperlukan

Untuk proyek ini, kami akan menggunakan komponen berikut:

    Papan OLEDTTGO LoRa32 SX1276 (2x): ini adalah papan pengembangan ESP32 dengan chip LoRa dan OLED bawaan. Anda dapat menggunakan papan serupa, atau Anda dapat menggunakan chip ESP32 + LoRa + OLED secara terpisah.

    Sensor suhu,kelembaban dan tekanan BME280. Anda harus dapat memodifikasi proyek ini untuk menggunakan sensor lain.

Mempersiapkan Arduino IDE

Untuk memprogram papan OLED TTGO LoRa32 SX1276, kami akan menggunakan Arduino IDE. Untuk mengunggah file ke sistem file ESP32, kami akan menggunakan plugin pengunggah sistem file ESP32.

Jadi, sebelum melanjutkan, Anda perlu menginstal paket ESP32 dan plugin pengunggah filesystemESP32 di Arduino IDE Anda.

Menginstal Library

Untuk proyek ini Anda perlu menginstal beberapa perpustakaan.

Perpustakaan LoRa, BME280, dan OLED

Library berikut dapat diinstal melalui Arduino Library Manager. Buka Sketch> Include Library > Manage Library dan cari nama perpustakaan.

    • Perpustakaan LoRa: perpustakaan arduino-LoRa oleh sandeep mistry

    • Pustaka OLED: Pustaka Adafruit_SSD1306 dan Pustaka Adafruit_GFX

    • Pustaka BME280: Pustaka Adafruit_BME280 dan Pustaka sensor terpadu Adafruit

Pustaka Server Web Asinkron

Untuk membangun server web asinkron, Anda juga perlu menginstal pustaka berikut:

    PustakaESPAsyncWebServer (unduh pustaka ESPAsyncWebServer)

    Pustaka AsyncTCP (unduh pustaka AsyncTCP)

Pustaka ini tidak tersedia untuk diinstal melalui Manajer Perpustakaan. Jadi, Anda perlu meng-unzip library dan memindahkannya ke folder library instalasi Arduino IDE.

Atau, Anda dapat pergi ke Sketch > Include Library > Add .ZIP library… dan pilih library yang baru saja Anda unduh.

Perpustakaan NTPClient

Setiap kali penerima LoRa menerima pesan LoRa baru, ia akan meminta tanggal dan waktu dari server NTP sehingga kita tahu kapan paket terakhir diterima.

Untuk itu kita akan menggunakan library NTPClient yang di-forking oleh Taranais. Ikuti langkah-langkah selanjutnya untuk menginstal perpustakaan ini di Arduino IDE Anda:

    Klik di siniuntuk mengunduh pustaka NTPClient. Anda harus memiliki folder .zip di Unduhan Anda

    • Buka zip folder .zip dan Anda akan mendapatkan folder master NTPClient

    • Ganti nama folder Anda dari NTPClient-master menjadi NTPClient

    • Pindahkan folder NTPClient ke folder library instalasi Arduino IDE Anda

    • Terakhir, buka kembali Arduino IDE Anda

Atau, Anda dapat pergi ke Sketch > Include Library > Add .ZIP library… dan pilih library yang baru saja Anda unduh.

Pengirim LoRa

Pengirim LoRa terhubung ke sensor BME280 dan mengirimkan pembacaan suhu, kelembaban, dan tekanan setiap 10 detik. Anda dapat mengubah periode waktu ini nanti dalam kode.

Sirkuit Pengirim LoRa

BME280 yang kami gunakan berkomunikasi dengan ESP32 menggunakan protokol komunikasi I2C. Kawat sensor seperti yang ditunjukkan pada diagram skema berikut:

Kode Pengirim LoRa

Kode berikut membaca suhu, kelembaban dan tekanan dari sensor BME280 dan mengirimkan pembacaan melalui radio LoRa.

Salin kode berikut ke Arduino IDE Anda.










Cara Kerja Kode

Mulailah dengan menyertakan pustaka yang diperlukan untuk LoRa, layar OLED, dan sensor BME280.

Tentukan pin yang digunakan oleh modul transceiver LoRa. Kami menggunakan papan OLED TTGO LoRa32 SX1276 V1.0 dan ini adalah pin yang digunakan oleh chip LoRa:

Catatan: jika Anda menggunakan papan LoRa lain, periksa pin yang digunakan oleh chip transceiver LoRa.

Pilih frekuensi LoRa:

Tentukan pin OLED.

Tentukan ukuran OLED.

Tentukan pin yang digunakan oleh sensor BME280.

Buat instance I2C untuk sensor BME280 dan objek bme.

Buat beberapa variabel untuk menyimpan pesan LoRa, suhu, kelembaban, tekanan, dan ID pembacaan.

Buat objek tampilan untuk tampilan OLED.

setup()

Dalam setup(), kami memanggil beberapa fungsi yang telah dibuat sebelumnya dalam kode untuk menginisialisasi tampilan OLED, modul transceiver BME280 dan LoRa.

loop()

Dalam loop(), kita memanggil fungsi getReadings() dan sendReadings() yang juga telah dibuat sebelumnya. Fungsi-fungsi ini bertanggung jawab untuk mendapatkan pembacaan dari sensor BME280, dan mengirimkan pembacaan tersebut melalui LoRa, masing-masing.

dapatkanBacaan()

Mendapatkan pembacaan sensor semudah menggunakan metode readTemperature(), readHumidity(), dan readPressure() pada objek bme:

kirimBaca()

Untuk mengirim pembacaan melalui LoRa, kami menggabungkan semua pembacaan pada satu variabel, LoRaMessage:

Perhatikan bahwa setiap bacaan dipisahkan dengan karakter khusus, sehingga penerima dapat dengan mudah mengidentifikasi setiap nilai.

Kemudian, kirim paket menggunakan yang berikut ini:

Setiap kali kami mengirim paket LoRa, kami meningkatkan variabel readID sehingga kami memiliki gambaran tentang berapa banyak paket yang dikirim. Anda dapat menghapus variabel ini jika Anda mau.

Loop() diulang setiap 10.000 milidetik (10 detik). Jadi, pembacaan sensor baru dikirim setiap 10 detik. Anda dapat mengubah waktu tunda ini jika Anda mau.

Menguji Pengirim LoRa

Unggah kode ke Papan Pengirim LoRa ESP32 Anda.

Buka Tools > Port dan pilih port COM yang terhubung. Lalu, buka Tools > Board dan pilih papan yang Anda gunakan. Dalam kasus kami, ini adalah TTGO LoRa32-OLED V1.

Terakhir, tekan tombol unggah.

Buka Serial Monitor pada baud rate 115200. Anda akan mendapatkan sesuatu seperti yang ditunjukkan di bawah ini.

OLED papan Anda harus menampilkan pembacaan sensor terbaru.

Pengirim LoRa Anda sudah siap. Sekarang, mari kita beralih ke Penerima LoRa.

Penerima LoRa

Penerima LoRa mendapatkan paket LoRa yang masuk dan menampilkan pembacaan yang diterima di server web asinkron. Selain pembacaan sensor, kami juga menampilkan pembacaan terakhir kali diterima dan RSSI (indikator kekuatan sinyal yang diterima).

Gambar berikut menunjukkan server web yang akan kita bangun.

Seperti yang Anda lihat, ini berisi gambar latar belakang dan gaya untuk membuat halaman web lebih menarik. Ada beberapa cara untuk menampilkan gambar di server web ESP32. Kami akan menyimpan gambar di sistem file ESP32 (SPIFFS). Kami juga akan menyimpan file HTML di SPIFFS.

Mengatur File Anda

Untuk membangun server web, Anda memerlukan tiga file berbeda: sketsa Arduino, file HTML, dan gambar. File HTML dan gambar harus disimpan di dalam folder bernama data di dalam folder sketsa Arduino, seperti yang ditunjukkan di bawah ini.

Membuat File HTML

Buat file index.html dengan konten berikut atau unduh semua file proyek di sini:





Kami juga menyertakan gaya CSS pada file HTML serta beberapa JavaScript yang bertanggung jawab untuk memperbarui pembacaan sensor secara otomatis.

Sesuatu yang penting untuk diperhatikan adalah placeholder. Placeholder berada di antara % tanda: %TIMESTAMP%, %TEMPERATURE%, %HUMIDITY%, %PRESSURE% dan %RSSI%.

Placeholder ini kemudian akan diganti dengan nilai aktual oleh kode Arduino.

Gaya ditambahkan di antara tag <style> dan </style>.

Jika Anda menginginkan gambar yang berbeda untuk latar belakang Anda, Anda hanya perlu memodifikasi baris berikut untuk menyertakan nama gambar Anda. Dalam kasus kami, ini disebut winter.jpg.

JavaScript berada di antara tag <scritpt> dan </script>.

Kami tidak akan menjelaskan secara rinci bagaimana HTML dan CSS bekerja, tetapi tempat yang baik untuk belajar adalah situs web W3Schools.

Sketsa Arduino Penerima LoRa

Salin kode berikut ke Arduino IDE Anda atau unduh semua file proyek di sini. Kemudian, Anda perlu mengetikkan kredensial jaringan Anda (SSID dan kata sandi) untuk membuatnya berfungsi.
















Cara Kerja Kode

Anda mulai dengan menyertakan perpustakaan yang diperlukan. Anda membutuhkan perpustakaan untuk:

    • Membangun server web asinkron;

    • Mengakses sistem file ESP32 (SPIFFS);

    • Berkomunikasi dengan chip LoRa;

    • Mengontrol tampilan OLED;

    • Dapatkan tanggal dan waktu dari server NTP.

Tentukan pin yang digunakan oleh modul transceiver LoRa.

Catatan: jika Anda menggunakan papan LoRa lain, periksa pin yang digunakan oleh chip transceiver LoRa.

Tentukan frekuensi LoRa:

Siapkan pin OLED:

Masukkan kredensial jaringan Anda dalam variabel berikut sehingga ESP32 dapat terhubung ke jaringan lokal Anda.

Tentukan Klien NTP untuk mendapatkan tanggal dan waktu:

Buat variabel untuk menyimpan tanggal dan waktu:

Lebih banyak variabel untuk menyimpan pembacaan sensor yang diterima melalui radio LoRa.

Buat objek AsyncWebServer bernama server pada port 80.

Buat objek yang disebut tampilan untuk tampilan OLED:

prosesor()

Fungsi processor() adalah apa yang akan mengatribusikan nilai ke placeholder yang telah kita buat pada file HTML.

Ia menerima placeholder sebagai argumen dan harus mengembalikan String yang akan menggantikan placeholder itu.

Misalnya, jika menemukan placeholder TEMPERATURE, ia akan mengembalikan variabel String suhu.

setup()

Di setup(), Anda menginisialisasi tampilan OLED, komunikasi LoRa, dan terhubung ke Wi-Fi.

Anda juga menginisialisasi SPIFFS:

Server Web Asinkron

Pustaka ESPAsyncWebServer memungkinkan kita untuk mengonfigurasi rute di mana server akan mendengarkan permintaan HTTP yang masuk.

Misalnya, ketika permintaan diterima di URL rute, kami mengirim file index.html yang disimpan di ESP32 SPIFFS:

Seperti disebutkan sebelumnya, kami menambahkan sedikit Javascript ke file HTML yang bertanggung jawab untuk memperbarui halaman web setiap 10 detik. Ketika itu terjadi, itu membuat permintaan pada /temperature, /humidity, /pressure, /timestamp, /rssi URL.

Jadi, kita perlu menangani apa yang terjadi ketika kita menerima permintaan tersebut. Kami hanya perlu mengirim variabel suhu, kelembaban, tekanan, stempel waktu, dan rssi. Variabel harus dikirim dalam format char, itu sebabnya kami menggunakan metode .c_str().

Karena kami menyertakan gambar di halaman web, kami akan mendapatkan permintaan "meminta" gambar tersebut. Jadi, kita perlu mengirim gambar yang disimpan di ESP32 SPIFFS.

Akhirnya, mulai server web.

klien ntp

Masih di setup(), buat klien NTP untuk mendapatkan waktu dari internet.

Waktu dikembalikan dalam format GMT, jadi jika Anda perlu menyesuaikan zona waktu Anda, Anda dapat menggunakan yang berikut ini:

loop()

Di loop(), kami mendengarkan paket LoRa yang masuk:

Jika paket LoRa baru tersedia, kami memanggil fungsi getLoRaData() dan getTimeStamp() .

Fungsi getLoRaData() menerima pesan LoRa dan membaginya untuk mendapatkan pembacaan yang berbeda.

Fungsi getTimeStamp() mendapatkan waktu dan tanggal dari internet pada saat kita menerima paket.

Mengunggah Kode dan File

Setelah memasukkan kredensial jaringan Anda, simpan sketsa Anda. Kemudian, di Arduino IDE Anda, buka Sketch > Show Sketch Folder, dan buat folder bernama data. Di dalam folder itu, Anda harus memiliki file HTML dan file gambar.

Setelah memastikan Anda memiliki semua file yang diperlukan di direktori yang tepat, buka Tools dan pilih Upload SKetch Data ESP32.

Unggah Data Sketsa ESP32 Sistem File Arduino IDE SPIFFS FS

Setelah beberapa detik, file akan berhasil diunggah ke SPIFFS.

Catatan: jika Anda tidak melihat opsi “ESP32 Sketch Data Upload” itu berarti Anda belum menginstal plugin pengunggah sistem file ESP32 (cara menginstal plugin pengunggah sistem file ESP32).

Sekarang, unggah sketsa ke papan Anda.

Buka Serial Monitor pada baud rate 115200.

Anda harus mendapatkan alamat IP ESP32, dan Anda harus mulai menerima paket LoRa dari pengirim.

Anda juga harus mendapatkan alamat IP yang ditampilkan di OLED.

Demonstrasi

Buka browser dan ketik alamat IP ESP32 Anda. Anda akan melihat server web dengan pembacaan sensor terbaru.

Dengan papan ini, kami bisa mendapatkan komunikasi LoRa yang stabil hingga 180 meter (590 kaki) di lapangan terbuka. Ini berarti bahwa kita dapat memisahkan pengirim dan penerima 180 meter dan kita masih bisa mendapatkan dan memeriksa pembacaan di server web.

Mendapatkan komunikasi yang stabil pada jarak 180 meter dengan papan berbiaya rendah dan tanpa penyesuaian lebih lanjut benar-benar mengesankan.

Namun, dalam proyek sebelumnya menggunakan chip transceiver RFM95 SX1276 LoRa dengan antena buatan sendiri, kami mendapatkan hasil yang lebih baik: lebih dari 250 meter dengan banyak rintangan di antaranya.

Jangkauan komunikasi akan sangat bergantung pada lingkungan Anda, papan LoRa yang Anda gunakan, dan banyak variabel lainnya.

Membungkus

Anda dapat membawa proyek ini lebih jauh dan membangun sistem pemantauan off-the-grid dengan menambahkan panel surya dan tidur nyenyak ke pengirim LoRa Anda. Artikel berikut mungkin membantu Anda melakukannya:

    ESP32 DeepSleep dengan Arduino IDE dan Sumber Bangun

    Daya ESP32dengan Panel Surya

    ESP32 denganLayar OLED SX1276 LoRa dan SSD1306 bawaan (Ulasan)

Anda mungkin juga ingin mengakses pembacaan sensor Anda dari mana saja atau memplotnya pada grafik:

    VisualisasikanPembacaan Sensor Anda dari Mana Saja di Dunia (ESP32 + MySQL + PHP)

    PembacaanSensor Plot ESP32 dalam Grafik Waktu Nyata – Server Web

Sumber : randomnerdtutorials.com   

Posting Komentar

0 Komentar