- Apa itu MQTT?
- Memasang Mosquitto MQTT Broker pada Raspberry Pi
- Menguji Raspberry Pi Mosquitto Broker
- Rajah Litar
- Kod dan Penjelasan
MQTT adalah protokol yang digunakan untuk menghantar dan menerima mesej melalui internet. Kami sebelum ini menggunakan protokol ini di Iot Electricity meter dan Raspberry Pi Alexa untuk menerbitkan data di internet. Dalam tutorial ini kita akan mengetahui lebih lanjut mengenai MQTT dan syarat-syarat yang berkaitan dengannya. Di sini kita akan menggunakan Raspberry Pi sebagai broker MQTT tempatan dan mengawal LED yang disambungkan ke NodeMCU ESP12E melalui papan pemuka aplikasi MQTT. Sensor DHT11 juga disambungkan ke NodeMCU sehingga kami mendapatkan bacaan suhu dan kelembapan pada papan pemuka MQTT, dengan menggunakan Raspberry Pi sebagai broker MQTT tempatan lagi.
Oleh itu, mari kita mulakan dengan mengurangkan MQTT dan syarat-syarat yang berkaitan dengannya.
Apa itu MQTT?
MQTT adalah singkatan dari Message Queue Telemetry Transport yang direka oleh IBM. Protokol ini ringkas dan ringan yang digunakan untuk mengirim dan menerima mesej melalui internet dan dirancang untuk peranti yang mempunyai penggunaan lebar jalur rendah. Pada masa ini protokol ini sering digunakan dalam peranti IoT untuk mengirim dan menerima data sensor. Juga, Dalam sistem automasi rumah berasaskan IoT, protokol ini dapat digunakan dengan mudah tanpa menggunakan banyak data internet.
Terdapat beberapa istilah yang sering digunakan dalam MQTT:
- Langgan dan Terbitkan
- Mesej
- Topik
- Broker
1. Langgan dan Terbitkan: Langganan bermaksud mendapatkan data dari peranti lain, dan menerbitkan cara untuk mengirim data ke peranti lain.
Apabila peranti1 menghantar data ke peranti2 maka ia dikenali sebagai Penerbit dan yang lain adalah Pelanggan dan sebaliknya.
2. Mesej: Mesej adalah maklumat yang kami kirim dan terima. Ia boleh berupa data atau jenis perintah apa pun. Sebagai contoh, jika kita menerbitkan data suhu ke awan, maka data suhu ini dikenal sebagai Pesan.
3. Topik: Ini adalah cara anda mendaftarkan minat untuk mesej masuk atau bagaimana anda menentukan tempat anda ingin menerbitkan mesej tersebut. Topik dilambangkan dengan rentetan yang dipisahkan dengan garis miring ke depan. Data diterbitkan mengenai topik menggunakan MQTT dan kemudian peranti MQTT melanggan topik tersebut untuk mendapatkan data.
4. MQTT Broker: Perkara ini bertanggungjawab untuk menerima semua mesej dari penerbit, menyaring mesej dan kemudian menerbitkan mesej tersebut kepada pelanggan yang berminat dengannya.
Apabila broker ini dihoskan di cloud maka ia disebut cloud MQTT. Terdapat banyak perkhidmatan MQTT berasaskan awan seperti Adafruit IO, MQTT.IO, IBM bluemix, Microsoft Azure, dll. MQTT juga dapat digunakan dengan awan Amazon AWS yang popular, yang telah kami jelaskan dalam tutorial Bermula dengan Amazon AWS.
Kita boleh membuat broker MQTT kita sendiri menggunakan Raspberry Pi. Ini akan menjadi broker MQTT tempatan iaitu anda boleh menghantar dan menerima data di rangkaian tempatan anda bukan sahaja dari mana-mana. Jadi di sini kita akan memasang broker Mosquitto MQTT di Raspberry Pi untuk menjadikannya broker MQTT tempatan dan akan menghantar data suhu dari aplikasi papan pemuka NodeMCU ke MQTT. Kami juga akan mengawal LED yang disambungkan ke NodeMCU menggunakan broker.
Memasang Mosquitto MQTT Broker pada Raspberry Pi
Buka terminal di Raspberry pi anda dan ketik arahan berikut untuk memasang broker
sudo apt update sudo apt install -y mosquitto mosquitto-client
Tunggu pemasangan selesai. Sekarang, untuk memulakan broker pada permulaan raspberry pi, Ketik perintah berikut
sudo systemctl mengaktifkan mosquitto.service
Itu sahaja, kami siap melancarkan broker MQTT kami. Untuk memastikannya dipasang dengan betul, masukkan perintah berikut
nyamuk -v
Perintah ini akan memberi anda versi broker MQTT anda. Ia mestilah 1.4.x atau lebih tinggi.
Menguji Raspberry Pi Mosquitto Broker
1. Jalankan broker Mosquitto di latar belakang menggunakan arahan di bawah
nyamuk -d
2. Sekarang, kita akan melanggan topik dalam exampleTopic menggunakan perintah berikut
mosquitto_sub -d -t contohTopik
3. Sekarang, kami akan menerbitkan beberapa mesej ke exampleTopic
mosquitto_pub -d -t exampleTopik -m "Hello world!"
Anda akan menerima dunia Hello! Mesej di terminal pelanggan.
Sekarang, inilah masanya untuk mengawal dan mendapatkan data dari peranti lain sekiranya kita menggunakan aplikasi papan pemuka NodeMCU dan MQTT .
- Mula-mula kita akan mengawal LED dengan mengirimkan perintah menggunakan App sehingga dalam hal ini NodeMCU berperilaku sebagai pelanggan dan App sebagai penerbit.
- Kemudian ESP12E juga mempunyai sensor DHT11 yang terhubung dengannya dan ia menghantar bacaan suhu ini ke aplikasi Mobile MQTT sehingga dalam hal ini telefon bimbit akan menjadi pelanggan dan NodeMCU akan menjadi penerbit. Dan untuk meneruskan mesej ini di Topik masing-masing, broker Mosquitto MQTT digunakan.
Rajah Litar
Sambungkan litar seperti yang ditunjukkan dalam rajah. Di sini DHT11 digunakan untuk pembacaan suhu tetapi sensor Suhu LM35 juga dapat digunakan. Kami sudah menggunakan sensor DHT11 dalam banyak projek kami termasuk dengan NodeMCU untuk membina stesen cuaca.
Mari mula menulis kod untuk NodeMCU untuk melanggan dan menerbitkan data.
Kod dan Penjelasan
Di sini kita akan menggunakan templat perpustakaan Adafruit MQTT dan akan mengubah perkara yang diperlukan dalam kod. Kod yang sama dapat digunakan untuk menerbitkan dan melanggan data ke Adafruit IO cloud hanya dengan mengubah beberapa perkara.Untuk ini muat turun perpustakaan Adafruit MQTT dari Sketsa -> Sertakan Perpustakaan -> Uruskan Perpustakaan. Cari Adafruit MQTT dan pasangkannya. Selepas memasang perpustakaan. Pergi ke contoh -> Adafruit mqtt library -> mqtt_esp8266
Kemudian edit kod ini mengikut alamat IP Raspberry Pi dan bukti kelayakan Wi-Fi kami.
Sertakan semua perpustakaan untuk ESP8266WIFI dan Adafruit MQTT .
#sertakan
Kemudian tentukan SSID dan Kata Laluan untuk Wi-Fi anda, dari mana anda ingin menyambungkan ESP-12e anda. Pastikan RPi dan NodeMCU anda berhubung dengan rangkaian yang sama.
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
Bahagian ini menentukan pelayan Adafruit, dalam hal ini alamat IP dari port Raspberry Pi dan pelayan anda.
#tentukan AIO_SERVER "alamat ip anda" #define AIO_SERVERPORT 1883
Medan di bawah akan tetap kosong kerana kami tidak menggunakan awan Adafruit.
#tentukan AIO_USERNAME "" #tentukan AIO_KEY ""
Kemudian buat kelas WiFiClient ESP8266 untuk menyambung ke pelayan MQTT.
Pelanggan WiFiClient;
Sediakan kelas klien MQTT dengan memasukkan pelanggan WiFi dan pelayan MQTT dan maklumat log masuk.
Adafruit_MQTT_Mqtt pelanggan (& pelanggan, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Siapkan feed yang disebut 'Temperature' untuk menerbitkan suhu.
Adafruit_MQTT_Publish Temperature = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ suapan / suhu");
Sediakan suapan yang dipanggil 'led1' untuk melanggan perubahan.
Adafruit_MQTT_Subscribe led1 = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feed / led");
Dalam fungsi persediaan , kami menyatakan PIN NodeMCU yang ingin anda keluarkan. Kemudian, sambungkan NodeMCU ke titik akses Wi-fi.
persediaan tidak sah () { Serial.begin (115200); kelewatan (10); pinMode (LED, OUTPUT); Serial.println (F ("Adafruit MQTT demo")); // Sambungkan ke titik akses WiFi. Bersiri.println (); Bersiri.println (); Serial.print ("Menyambung ke"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); sementara (WiFi.status ()! = WL_CONNECTED) { …. …. ... Siapkan langganan MQTT untuk suapan yang dipimpin. mqtt.subscribe (& led1); }
Dalam fungsi gelung , kami akan memastikan bahawa sambungan ke pelayan MQTT masih hidup menggunakan MQTT_connect (); fungsi.
gelung kosong () { MQTT_connect ();
Sekarang, langgan suapan 'led' dan dapatkan rentetan dari broker MQTT dan ubah rentetan ini menjadi nombor menggunakan atoi (); berfungsi dan tulis nombor ini ke pin LED menggunakan digitalWrite (); fungsi.
Adafruit_MQTT_Langgan * langganan; while ((langganan = mqtt.readSubscription (20000))) { if (langganan == & 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 pemboleh ubah dan terbitkan nilai ini menggunakan fungsi Temperature.publish (t) .
apungan t = dht.readTemperature (); … .. jika (! Temperature.publish (t)) { Serial.println (F ("Failed")); } lain { Serial.println (F ("OK!")); }
Kod penuh dengan video demonstrasi diberikan pada akhir tutorial ini. Muat naik kod ke papan NodeMCU dan buka aplikasi papan pemuka MQTT yang telah anda muat turun di Telefon Pintar.
Anda juga dapat mengawal Raspberry Pi GPIO dari mana saja di dunia menggunakan cloud MQTT seperti Adafruit IO, MQTT.IO dll, yang akan kita pelajari dalam tutorial seterusnya.