- Apa itu MQTT?
- Menginstal Mosquitto MQTT Broker di Raspberry Pi
- Menguji Broker Raspberry Pi Mosquitto
- Diagram Sirkuit
- Kode dan Penjelasan
MQTT adalah protokol yang digunakan untuk mengirim dan menerima pesan melalui internet. Kami sebelumnya menggunakan protokol ini di Iot Electricity meter dan Raspberry Pi Alexa untuk mempublikasikan data di internet. Dalam tutorial ini kita akan mengetahui lebih banyak tentang MQTT dan istilah-istilah yang terkait dengannya. Di sini kita akan menggunakan Raspberry Pi sebagai broker MQTT lokal dan mengontrol LED yang terhubung ke NodeMCU ESP12E melalui dashboard aplikasi MQTT. Sensor DHT11 juga terhubung ke NodeMCU sehingga kami mendapatkan pembacaan suhu dan kelembaban di dashboard MQTT, dengan menggunakan lagi Raspberry Pi sebagai broker MQTT lokal.
Jadi, mari kita mulai dengan mengecilkan MQTT dan istilah yang terkait dengannya.
Apa itu MQTT?
MQTT adalah singkatan dari Message Queue Telemetry Transport yang dirancang oleh IBM. Protokol ini sederhana dan ringan yang digunakan untuk mengirim dan menerima pesan melalui internet dan dirancang untuk perangkat dengan penggunaan bandwidth rendah. Saat ini protokol ini sering digunakan di perangkat IoT untuk mengirim dan menerima data sensor. Selain itu, dalam sistem otomatisasi rumah berbasis IoT, protokol ini dapat dengan mudah digunakan tanpa menggunakan banyak data internet.
Ada beberapa istilah yang sering digunakan di MQTT:
- Berlangganan dan Publikasikan
- Pesan
- Tema
- Makelar
1. Berlangganan dan Publikasikan: Berlangganan berarti mendapatkan data dari perangkat lain, dan mempublikasikan sarana untuk mengirim data ke perangkat lain.
Ketika perangkat1 mengirim data ke perangkat2 maka itu dikenal sebagai Penerbit dan yang lainnya adalah Pelanggan dan sebaliknya.
2. Pesan: Pesan adalah informasi yang kami kirim dan terima. Ini bisa berupa data atau jenis perintah apa pun. Misalnya, jika kita mempublikasikan data suhu ke cloud maka data suhu ini dikenal sebagai Message.
3. Topik: Ini adalah cara Anda mendaftarkan minat untuk pesan masuk atau bagaimana Anda menentukan di mana Anda ingin mempublikasikan pesan tersebut. Topik diwakili dengan string yang dipisahkan oleh garis miring. Data dipublikasikan tentang topik menggunakan MQTT dan kemudian perangkat MQTT berlangganan topik tersebut untuk mendapatkan data.
4. MQTT Broker: Hal ini bertanggung jawab untuk menerima semua pesan dari penerbit, memfilter pesan dan kemudian mempublikasikan pesan tersebut ke pelanggan yang tertarik padanya.
Ketika broker ini di-host di cloud maka itu disebut cloud MQTT. Ada banyak layanan MQTT berbasis cloud seperti Adafruit IO, MQTT.IO, IBM bluemix, Microsoft Azure, dll. MQTT juga dapat digunakan dengan cloud Amazon AWS yang populer, yang telah kami jelaskan dalam tutorial Memulai Amazon AWS.
Kita bisa membuat broker MQTT kita sendiri menggunakan Raspberry Pi. Ini akan menjadi broker MQTT lokal yaitu Anda dapat mengirim dan menerima data di jaringan lokal Anda tidak hanya dari mana saja. Jadi di sini kita akan menginstal broker Mosquitto MQTT di Raspberry Pi untuk menjadikannya broker MQTT lokal dan akan mengirimkan data suhu dari aplikasi dashboard NodeMCU ke MQTT. Selain itu, kami akan mengontrol LED yang terhubung ke NodeMCU menggunakan broker.
Menginstal Mosquitto MQTT Broker di Raspberry Pi
Buka terminal di Raspberry pi Anda dan ketik perintah berikut untuk menginstal broker
sudo apt memperbarui sudo apt install -y mosquitto mosquitto-clients
Tunggu hingga penginstalan selesai. Sekarang, untuk memulai broker saat memulai raspberry pi, Ketik perintah berikut
sudo systemctl mengaktifkan mosquitto.service
Itu saja, kami siap untuk meluncurkan broker MQTT kami. Untuk memeriksa apakah sudah terpasang dengan benar, masukkan perintah berikut
mosquitto -v
Perintah ini akan memberi Anda versi broker MQTT Anda. Ini harus 1.4.x atau lebih tinggi.
Menguji Broker Raspberry Pi Mosquitto
1. Jalankan broker Mosquitto di latar belakang menggunakan perintah di bawah ini
mosquitto -d
2. Sekarang, kita akan berlangganan topik di exampleTopic menggunakan perintah berikut
mosquitto_sub -d -t exampleTopic
3. Sekarang, kami akan mempublikasikan beberapa pesan ke exampleTopic
mosquitto_pub -d -t exampleTopic -m "Halo dunia!"
Anda akan menerima Halo dunia! Pesan di terminal pelanggan.
Sekarang, saatnya untuk mengontrol dan mendapatkan data dari perangkat lain dalam kasus kami, kami menggunakan aplikasi dasbor NodeMCU dan MQTT .
- Pertama kita akan mengontrol sebuah LED dengan mengirimkan perintah menggunakan App sehingga dalam hal ini NodeMCU berperilaku sebagai pelanggan dan App sebagai penerbit.
- Kemudian ESP12E juga memiliki sensor DHT11 yang terhubung dengannya dan mengirimkan pembacaan suhu ini ke aplikasi Mobile MQTT sehingga dalam hal ini seluler akan menjadi pelanggan dan NodeMCU akan menjadi penerbit. Dan untuk meneruskan pesan ini pada Topik masing-masing, broker Mosquitto MQTT digunakan.
Diagram Sirkuit
Hubungkan sirkuit seperti yang ditunjukkan pada diagram. Di sini DHT11 digunakan untuk pembacaan suhu tetapi sensor Suhu LM35 juga dapat digunakan. Kami telah menggunakan sensor DHT11 di banyak proyek kami termasuk dengan NodeMCU untuk membangun stasiun cuaca.
Mari mulai menulis kode untuk NodeMCU untuk berlangganan dan mempublikasikan data.
Kode dan Penjelasan
Di sini kita akan menggunakan template perpustakaan Adafruit MQTT dan akan mengubah hal-hal yang diperlukan dalam kode. Kode yang sama dapat digunakan untuk mempublikasikan dan berlangganan data ke cloud Adafruit IO hanya dengan mengubah beberapa hal.Untuk ini, unduh pustaka Adafruit MQTT dari Sketch -> Sertakan Perpustakaan -> Kelola Perpustakaan. Cari Adafruit MQTT dan instal. Setelah menginstal perpustakaan. Pergi ke contoh -> Perpustakaan Adafruit mqtt -> mqtt_esp8266
Kemudian edit kode ini sesuai dengan alamat IP Raspberry Pi dan kredensial Wi-Fi kami.
Sertakan semua perpustakaan untuk ESP8266WIFI dan Adafruit MQTT .
#include
Kemudian tentukan SSID dan Kata Sandi untuk Wi-Fi Anda, dari mana Anda ingin menghubungkan ESP-12e Anda. Pastikan RPi dan NodeMCU Anda terhubung dengan jaringan yang sama.
# Tentukan WLAN_SSID "xxxxxxxx" # Tentukan WLAN_PASS "xxxxxxxxxxx"
Bagian ini mendefinisikan server Adafruit, dalam hal ini alamat IP dari Raspberry Pi dan port server Anda.
#tentukan AIO_SERVER "alamat ip Pi" #define AIO_SERVERPORT 1883
Bidang di bawah ini akan tetap kosong karena kami tidak menggunakan awan Adafruit.
#define AIO_USERNAME "" #define AIO_KEY ""
Kemudian buat kelas WiFiClient ESP8266 untuk menyambung ke server MQTT.
Klien WiFiClient;
Siapkan kelas klien MQTT dengan meneruskan klien WiFi dan server MQTT dan detail login.
Adafruit_MQTT_Client mqtt (& klien, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Siapkan umpan yang disebut 'Suhu' untuk menerbitkan suhu.
Adafruit_MQTT_Publish Temperature = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / temperature");
Siapkan umpan yang disebut 'led1' untuk berlangganan perubahan.
Adafruit_MQTT_Subscribe led1 = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / led");
Dalam fungsi pengaturan , kami mendeklarasikan PIN NodeMCU di mana Anda ingin mendapatkan output. Kemudian, sambungkan NodeMCU ke titik akses Wi-fi.
void setup () { Serial.begin (115200); penundaan (10); pinMode (LED, OUTPUT); Serial.println (F ("Adafruit MQTT demo")); // Hubungkan ke titik akses WiFi. Serial.println (); Serial.println (); Serial.print ("Menghubungkan ke"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); sementara (WiFi.status ()! = WL_CONNECTED) { …. …. … Siapkan langganan MQTT untuk umpan yang dipimpin. mqtt.subscribe (& led1); }
Dalam fungsi loop , kami akan memastikan bahwa koneksi ke server MQTT hidup menggunakan MQTT_connect (); fungsi.
void loop () { MQTT_connect ();
Sekarang, subscribe feed 'led' dan dapatkan string dari broker MQTT dan konversikan string ini ke nomor menggunakan atoi (); berfungsi dan menulis nomor ini ke pin LED menggunakan digitalWrite (); fungsi.
Berlangganan Adafruit_MQTT_Subscribe *; while ((subscription = mqtt.readSubscription (20000))) { if (subscription == & led1) { Serial.print (F ("Got:")); Serial.println ((char *) led1.lastread); int led1_State = atoi ((char *) led1.lastread); digitalWrite (LED, led1_State); }
Sekarang, dapatkan suhu dalam variabel dan publikasikan nilai ini menggunakan fungsi Temperature.publish (t) .
float t = dht.readTemperature (); … .. if (! Temperature.publish (t)) { Serial.println (F ("Gagal")); } lain { Serial.println (F ("OK!")); }
Kode lengkap dengan video demonstrasi diberikan di akhir tutorial ini. Unggah kode ke papan NodeMCU dan buka aplikasi dashboard MQTT yang telah Anda unduh di Smartphone.
Anda juga dapat mengontrol Raspberry Pi GPIO dari mana saja di dunia menggunakan cloud MQTT seperti Adafruit IO, MQTT.IO dll, yang akan kita pelajari di tutorial berikutnya.