- Apa itu MQTT Protocol?
- Bagaimana MQTT Berfungsi?
- Broker Eclipse Mosquitto
- Komponen Diperlukan
- Litar Ujian Eclipse MQTT - Skema
- Pengaturcaraan ESP8266 untuk Menjalin Komunikasi dengan Broker
- Menguji MQTT dengan ESP8266 menggunakan Arduino
Sejak beberapa tahun kebelakangan ini, peranti IoT (Internet of Things) telah menjadi bahagian yang tidak dapat dibezakan dalam kehidupan seharian kita. Dari rumah pintar, mentol pintar hingga perkakas pintar; pencipta dan pembangun menggabungkan teknologi ini untuk membuat rangkaian peranti bersambung yang menjadikan kehidupan seharian kita sedikit lebih menarik. Semua ini dimungkinkan kerana kemudahan komunikasi. Terdapat banyak kemungkinan cara untuk berkomunikasi di antara peranti, tetapi dalam produk komersial dan hobi, satu protokol yang biasa digunakan adalah Pengangkutan Telemetri Antrian Mesej (MQTT). Kami sebelum ini membina Radio FM yang Dikawal Suara menggunakan Arduino dan Google Assistant yang menggunakan MQTT untuk berkomunikasi dengan papan NodeMCU. Periksa apakah itu menarik bagi anda.
Dalam projek ini, kami akan menggunakan broker MQTT Eclipse percuma dan popular dan belajar bagaimana menyambungkan peranti IoT (dalam kes kami, ini adalah modul NodeMCU) ke broker MQTT dan memindahkan data di antara broker MQTT dan NodeMCU.
Apa itu MQTT Protocol?
Sebelum kita meneruskan apa-apa lagi, ia adalah lebih baik untuk mempunyai idea yang jelas tentang MQTT (Mesej Beratur Telemetri Pengangkutan) protokol. Ini adalah protokol pesanan ringan yang menggunakan kaedah penerbitan / langganan dan menterjemahkan mesej antara beberapa peranti. Dengan menggunakan protokol MQTT, kami juga dapat mengirim / menerima data dan mengendalikan pelbagai peranti output, seperti data sensor baca, dll. Ia dikembangkan di atas TCP, sebab itulah ia lebih cepat daripada protokol serupa seperti HTTP. Selain itu, ia mempunyai banyak kelebihan lain daripada protokol lain seperti yang sangat ringan, jadi ia tidak menggunakan lebihan memori, ia dapat berfungsi dengan lebar jalur rangkaian yang sangat rendah, di samping itu, ia mempunyai protokol keselamatan yang kuat. Ciri-ciri ini menjadikannya sesuai untuk banyak aplikasi.
Bagaimana MQTT Berfungsi?
Untuk memahami cara kerja protokol MQTT, kita hanya perlu memahami tiga perkara asas; rajah di atas menunjukkan bahawa. Juga, kami telah menerangkannya di bawah dalam artikel.
Pelanggan MQTT:
An MQTT pelanggan apa-apa peranti (ia boleh menjadi satu mikropengawal atau pelayan a) yang berjalan fungsi MQTT dan berkomunikasi dengan pelayan pusat, yang dikenali sebagai " broker." Broker mengendalikan komunikasi data antara pelanggan yang terhubung.
Penerbit MQTT:
Apabila pelanggan ingin menghantar maklumat, pelanggan dikenali sebagai "Penerbit". Penerbit akan menerbitkan maklumat mengenai topik tertentu. " Topik " adalah jalan di mana kita dapat menerbitkan / melanggan pesan. Broker kemudian menghantar maklumat yang diterbitkan oleh pengguna kepada pelanggan (juga dikenali sebagai Pelanggan) yang telah melanggan topik tertentu.
Pelanggan MQTT:
The MQTT Pelanggan melanggan topik pada MQTT broker untuk membaca mesej yang dihantar oleh broker.
Broker Eclipse Mosquitto
Eclipse Mosquitto adalah broker MQTT sumber terbuka, yang ringan dan sesuai digunakan pada peranti IoT untuk komunikasi. The MQTT protokol menyediakan satu kaedah yang ringan memindahkan maklumat dengan menggunakan model diterbit / melanggan. Sekiranya anda ingin mengetahui lebih lanjut mengenai topik ini, anda boleh melayari laman web nyamuk rasmi.
Menubuhkan broker Eclipse Mosquitto:
Untuk menjalin komunikasi dengan broker, kita perlu mengaturnya terlebih dahulu. Dalam projek ini, aplikasi Android digunakan untuk menerbitkan dan melanggan maklumat dengan Broker. Langkah-langkah berikut akan memberi anda idea yang lebih baik mengenai proses penyediaan.
Langkah 1:
Pertama, muat turun mana-mana aplikasi "klien MQTT" yang terdapat di Google Play Store / App Store dan pasangkannya. Dalam proyek ini, aplikasi bernama "MQTT client" digunakan, yang terlihat seperti gambar yang ditunjukkan di bawah.
Langkah-2:
Klik pada tanda "+" untuk menyenaraikan pilihan tambahan dalam aplikasi, di mana kita akan menambah broker baru. Apabila butang diklik, skrin baru muncul seperti gambar di bawah.
Langkah-3:
Selepas itu, butiran broker perlu diisi di ruang yang diperlukan. Pertama, klik pada pilihan "Diaktifkan" yang ditunjukkan dalam Aplikasi. Dalam projek ini, digunakan broker Eclipse MQTT, butiran yang akan diisi diberikan di bawah:
Nama Nick: Berikan Nama Pilihan Anda
Hos: mqtt.eclipse.org
Pelabuhan: 1883
ID Pelanggan: Berikan ID Pilihan Anda
Butiran di atas perlu diisi dalam bidang masing-masing. Semua bidang lain tidak perlu dan boleh dibiarkan kosong. Setelah berjaya, klik pada butang simpan untuk menyimpan butiran Broker.
Setelah selesai, proses penyediaan aplikasi android sudah selesai dan sekarang kita boleh beralih ke bahagian perkakasan.
Komponen Diperlukan
Senarai lengkap bahagian yang diperlukan dijelaskan di bawah. Oleh kerana rangkaian ini mudah, anda boleh menemui semua bahagian yang diperlukan di kedai hobi tempatan anda.
- NodeMCU
- LED
- Papan roti
- Menyambung wayar
- Kabel pengaturcaraan
Litar Ujian Eclipse MQTT - Skema
Gambarajah litar untuk projek MQTT Asas diberikan di bawah:
Pengaturcaraan ESP8266 untuk Menjalin Komunikasi dengan Broker
Kod Arduino ringkas mengurus semua komunikasi yang diperlukan antara broker MQTT dan NodeMCU. Di bahagian ini, kita akan belajar bagaimana fungsi ini berfungsi secara terperinci.
Sediakan Arduino IDE dan Muat Naik Kod:
Sekiranya anda memuat naik kod ke NodeMCU untuk pertama kalinya, anda perlu menyediakan Arduino IDE terlebih dahulu. Untuk melakukannya, ikuti sahaja arahan mudah yang diberikan di bawah.
Pertama, Buka Arduino IDE, kemudian pergi ke Fail–> Preferences–> Tetapan .
Seterusnya, salin URL di bawah dan tampal di medan ' URL Pengurus Papan Tambahan ', dan klik 'Ok'. Anda boleh menyemak gambar di bawah untuk mengetahui bagaimana kami melakukannya.
Pautan:
Seterusnya, pergi ke Alat> Papan> Pengurus Papan . Di tetingkap Pengurus Papan, Ketik ESP 8266 di kotak carian dan tekan enter. Kemudian pilih versi terkini dari menu lungsur turun dan klik pasang. Gambar di bawah akan memberi anda idea yang jelas.
Akhirnya, setelah pemasangan selesai, pergi ke Tools -> Board -> dan pilih NodeMCU 1.0 (ESP-12E Module). Sekarang, anda boleh memprogram NodeMCU dengan Arduino IDE. Setelah selesai menyiapkan Arduino IDE, kami kini dapat memuat naik kod yang lengkap. Tetapi pertama, baca penjelasan ringkas keseluruhan kod.
Pertama, kami memasukkan "ESP8266WiFi.h" untuk menggunakan ESP8266 dan "PubSubClient.h" untuk MQTT.
Anda boleh menemui perpustakaan ESP8266 yang sudah ada di dalam perpustakaan Arduino, tetapi anda perlu memuat turun perpustakaan PubSubClient dari repositori GitHub yang berkaitan.
#sertakan
Kemudian, tentukan kelayakan rangkaian seperti nama pengguna dan kata laluan Wi-Fi anda. Ganti kelayakan anda sebagai ganti "admin" & "12345678" masing-masing.
const char * ssid = "admin"; const char * kata laluan = "12345678";
Seterusnya, kita perlu mengkonfigurasi pelayan MQTT. Kami telah menggunakan pelayan Eclipse MQTT untuk projek ini, itulah sebabnya alamat pelayan diberikan sebagai "mqtt.eclipse.org". Tetapi jika anda merancang untuk menggunakan pelayan lain seperti Mosquitto, Adafruit, maka anda boleh menggantinya dengan alamat pelayan dan nombor port khusus anda.
const char * mqtt_server = "mqtt.eclipse.org"; const int mqtt_port = 1883;
Seterusnya, contoh dibuat untuk kelas WiFiClient dan PubSubClient , yang akan digunakan sepanjang program.
WiFiClient espClient; Pelanggan PubSubClient (espClient);
Di bahagian persediaan () , kami memanggil WiFi.begin () terlebih dahulu, memanggil kaedah ini akan menghubungkan ESP ke HotSpot pilihan anda.
WiFi.begin (ssid, kata laluan);
Seterusnya, kami memeriksa sambungan rangkaian yang berjaya menggunakan kaedah WiFi.status () . Selepas sambungan berjaya, mesej dicetak pada Serial Monitor dengan SSID rangkaian yang disambungkan.
sementara (WiFi.status ()! = WL_CONNECTED) {kelewatan (500); Serial.println ("Menyambung ke WiFi.."); } Serial.print ("Disambungkan ke WiFi:"); Serial.println (WiFi.SSID ());
Sekarang, kita perlu mencipta broker. Untuk itu, kami telah menggunakan kaedah setServer ; kaedah ini mengambil dua hujah yang telah kita tentukan sebelumnya. Sekarang, jika kita ingin menerima mesej dari pelayan, kita perlu membuat fungsi panggilan balik. Untuk itu, kami menggunakan kaedah setCallback (callback) .
client.setServer (mqtt_server, mqtt_port); client.setCallback (MQTTcallback);
Sekarang, kami telah menggunakan fungsi connect (clientID) untuk menyambung ke klien ESP8266. Di sini clientID adalah nama pelanggan, dan mestilah unik. Sekiranya ia disambungkan, maka mesej kejayaan dapat ditunjukkan di dalam monitor bersiri.
jika (client.connect ("ESP8266")) {Serial.println ("bersambung"); } lain {Serial.print ("gagal dengan keadaan") Serial.println (client.state ()); kelewatan (2000); }
Seterusnya, kami memanggil client.subscribe () , fungsi MQTT bawaan, yang digunakan untuk melanggan topik tertentu. Untuk projek ini, kami telah menggunakan " esp / test " sebagai nama pelanggan kami.
pelanggan.subscribe ("esp / test");
Sekarang, fungsi MQTTcallback dipanggil untuk memeriksa sama ada maklumat terkini ada atau tidak. Sekiranya data baru tersedia, fungsi ini menangani data yang diterima dan mencetak mesej di monitor bersiri dengan mesej asal dan nama topik tempat mesej tersebut diterima.
Seterusnya, kami mengubah pesan menjadi string, sehingga dapat dibandingkan dan diperiksa untuk tindakan pemicu apa pun. Dalam projek ini, LED dihidupkan / dimatikan menggunakan perintah MQTT, seperti yang ditunjukkan dalam kod di bawah.
untuk (int i = 0; i <length; i ++) {message = message + (char) muatan; } Cetakan bersiri (mesej); if (message == "on") {digitalWrite (LED, TINGGI); }
Akhirnya, untuk menerbitkan maklumat mengenai topik tersebut. Fungsi client.publish () digunakan. Dalam proyek ini, status tombol tekan diperiksa, jika tombol ditekan, maka pesan diterbitkan ke Topik " esp / test1 " seperti yang ditunjukkan di bawah ini.
if (digitalRead (D1) == 0)) {client.publish ("esp / test1", "Helo dari ESP8266"); } lain; pelanggan.loop ();
Menguji MQTT dengan ESP8266 menggunakan Arduino
Untuk ujian akhir kami, kami akan menggunakan aplikasi Android, yang telah kami siapkan sebelumnya.
Buka aplikasi klien MQTT, dan pastikan telefon bimbit anda mempunyai sambungan internet yang aktif. Juga, titik panas yang menghubungkan NodeMCU harus mempunyai sambungan internet yang aktif. Setelah semuanya disambungkan ke internet, kami akan mengirim rentetan "Hello from ESP8266" dari modul ESP, yang akan dicerminkan di dalam aplikasi Android, dan kami akan mendapat pemberitahuan. Seterusnya, kami akan menghantar rentetan dari aplikasi Android, yang akan menghidupkan LED yang disambungkan ke papan MCU ESP8266 Node.
Langkah-1: (Langgan Topik):
Klik pada pilihan MQTT yang Disimpan di Aplikasi, yang telah kami konfigurasikan sebelumnya. Ini akan muncul layar, di mana ia diminta untuk "Berlangganan Topik". Kami sebelumnya telah mengkonfigurasi topik sebagai " esp / test1 ". Jadi, dalam aplikasi Android, kita akan menulis " esp / test1 ". Klik pada Langganan, dengan demikian akan menampilkan layar seperti di bawah ini, di mana ia akan ditulis seperti "Tidak ada mesej yang diterima" dari Topik tertentu.
Sekarang, klik butang 'Connected' yang disambungkan ke nodeMCU. Sekarang mengikut kod kami, pesan " Hello from ESP8266 " akan diterbitkan ke Topik dan akan ada pemberitahuan di layar dengan pesan yang diterima seperti yang ditunjukkan di bawah ini.
Langkah-2: Terbitkan ke Topik:
Sekarang untuk menerbitkan dalam Topik, Klik pada butang ARROW ATAS Aplikasi, dan ia akan membuka skrin seperti yang ditunjukkan di bawah.
Sekarang, dalam bidang Topik, tulis " esp / test " dan di medan mesej, tulis " on " atau " off " untuk menyalakan dan mematikan LED masing-masing. Sebagai contoh, jika "on" diterbitkan ke Topik, maka LED akan dihidupkan dan jika "mati" diterbitkan ke Topik, maka LED akan dimatikan.
Saya harap anda menyukai artikel itu dan mempelajari sesuatu yang baru. Sekiranya anda mempunyai pertanyaan mengenai artikel ini, sila beri komen di bawah atau anda boleh menggunakan forum kami.