Daftar Isi:

Cara Menggunakan MQTT Dengan Raspberry Pi dan ESP8266: 8 Langkah (dengan Gambar)
Cara Menggunakan MQTT Dengan Raspberry Pi dan ESP8266: 8 Langkah (dengan Gambar)

Video: Cara Menggunakan MQTT Dengan Raspberry Pi dan ESP8266: 8 Langkah (dengan Gambar)

Video: Cara Menggunakan MQTT Dengan Raspberry Pi dan ESP8266: 8 Langkah (dengan Gambar)
Video: Belajar menyambungkan NodeMCU ESP8266 ke Wifi dan MQTT 2024, November
Anonim
Cara Menggunakan MQTT Dengan Raspberry Pi dan ESP8266
Cara Menggunakan MQTT Dengan Raspberry Pi dan ESP8266

Dalam Instruksi ini, saya akan menjelaskan apa itu protokol MQTT dan bagaimana protokol itu digunakan untuk berkomunikasi antar perangkat. Kemudian, sebagai demonstrasi praktis, saya akan menunjukkan kepada Anda cara mengatur sistem dua klien sederhana, di mana modul ESP8266 akan mengirim pesan ke program Python ketika sebuah tombol ditekan. Secara khusus, saya menggunakan modul Adafruit HUZZAH untuk proyek ini, Raspberry Pi dan komputer desktop. Raspberry Pi akan bertindak sebagai broker MQTT, dan klien Python akan dijalankan dari komputer desktop terpisah (opsional, karena ini dapat dijalankan di Raspberry Pi).

Untuk mengikuti Instruksi ini, Anda harus memiliki pengetahuan dasar tentang elektronik, dan cara menggunakan perangkat lunak Arduino. Anda juga harus terbiasa menggunakan antarmuka baris perintah (untuk Raspberry Pi). Mudah-mudahan, setelah Anda memperoleh pengetahuan tentang apa itu MQTT, dan bagaimana menggunakannya dalam skenario dasar, Anda akan dapat membuat proyek IoT Anda sendiri!

Bagian yang Diperlukan

  • 1 x Raspberry Pi, terhubung ke jaringan lokal (menjalankan Jessie)
  • 1 x Modul ESP8266 (Adafruit HUZZAH)
  • 1 x papan tempat memotong roti
  • 3 x Kabel Jumper (Pria-ke-Pria)
  • 1 x Tombol Tekan
  • 1 x 10k Ohm Resistor (Kode warna Coklat-Hitam-Oranye)

Saya telah membuat Instructable ini, karena MQTT selalu menarik minat saya sebagai protokol dan ada banyak cara berbeda untuk menggunakannya. Namun, sepertinya saya tidak dapat memahami cara membuat kode perangkat untuk menggunakannya. Ini karena saya tidak tahu/mengerti apa yang sebenarnya terjadi pada "Halo, Dunia!" dari perangkat A dan mengirimkannya ke perangkat B. Oleh karena itu, saya memutuskan untuk menulis Instruksi ini untuk (semoga) mengajari Anda cara kerjanya, dan juga untuk memperkuat pemahaman saya sendiri tentangnya!

Langkah 1: Apa itu MQTT?

Apa itu MQTT?
Apa itu MQTT?

MQTT, atau MQ Telemetry Transport, adalah protokol pesan yang memungkinkan beberapa perangkat untuk berbicara satu sama lain. Saat ini, ini adalah protokol populer untuk Internet of Things, meskipun telah digunakan untuk tujuan lain - misalnya, Facebook Messenger. Menariknya MQTT ditemukan pada tahun 1999 - artinya setua saya!

MQTT didasarkan pada gagasan bahwa perangkat dapat menerbitkan atau berlangganan topik. Jadi, misalnya. Jika Perangkat #1 telah merekam suhu dari salah satu sensornya, ia dapat memublikasikan pesan yang berisi nilai suhu yang direkamnya, ke suatu topik (mis. "Suhu"). Pesan ini dikirim ke MQTT Broker, yang dapat Anda anggap sebagai switch/router di jaringan area lokal. Setelah Pialang MQTT menerima pesan, ia akan mengirimkannya ke perangkat apa pun (dalam hal ini, Perangkat #2) yang berlangganan topik yang sama.

Dalam proyek ini, kami akan memublikasikan topik menggunakan ESP8266, dan membuat skrip Python yang akan berlangganan topik yang sama ini, melalui Raspberry Pi yang akan bertindak sebagai Broker MQTT. Hal yang hebat tentang MQTT adalah ringan, sehingga sempurna untuk dijalankan pada mikrokontroler kecil seperti ESP8266, tetapi juga tersedia secara luas - sehingga kita dapat menjalankannya pada skrip Python juga.

Mudah-mudahan, di akhir proyek ini, Anda akan memiliki pemahaman tentang apa itu MQTT dan bagaimana menggunakannya untuk proyek Anda sendiri di masa depan.

Langkah 2: Menginstal Broker MQTT di Raspberry Pi

Menginstal Broker MQTT di Raspberry Pi
Menginstal Broker MQTT di Raspberry Pi
Menginstal Broker MQTT di Raspberry Pi
Menginstal Broker MQTT di Raspberry Pi
Menginstal Broker MQTT di Raspberry Pi
Menginstal Broker MQTT di Raspberry Pi

Untuk mengatur sistem MQTT kami, kami membutuhkan broker, seperti yang dijelaskan pada langkah sebelumnya. Untuk Raspberry Pi, kami akan menggunakan broker MQTT " Mosquitto ". Sebelum kami menginstal ini, selalu yang terbaik untuk memperbarui Raspberry Pi kami.

sudo apt-get update

sudo apt-get upgrade

Setelah Anda selesai melakukannya, instal mosquitto dan kemudian paket mosquitto-clients.

sudo apt-get install mosquitto -y

sudo apt-get install mosquitto-clients -y

Setelah Anda selesai menginstal kedua paket ini, kita perlu mengkonfigurasi broker. File konfigurasi broker mosquitto terletak di /etc/mosquitto/mosquitto.conf, jadi buka ini dengan editor teks favorit Anda. Jika Anda tidak memiliki editor teks favorit atau tidak tahu cara menggunakan editor baris perintah apa pun, saya akan menggunakan nano sehingga Anda dapat mengikuti:

sudo nano /etc/mosquitto/mosquitto.conf

Di bagian bawah file ini, Anda akan melihat baris:

include_dir /etc/mosquitto/conf.d

Hapus baris ini. Tambahkan baris berikut ke bagian bawah file.

allow_anonymous false

password_file /etc/mosquitto/pwfile pendengar 1883

Dengan mengetikkan baris-baris tersebut, kami telah memberi tahu mosquitto bahwa kami tidak ingin ada orang yang terhubung ke broker kami yang tidak memberikan nama pengguna dan kata sandi yang valid (kami akan mengaturnya sebentar lagi) dan kami ingin mosquitto dengarkan pesan pada nomor port 1883.

Jika Anda tidak ingin broker meminta nama pengguna dan kata sandi, jangan sertakan dua baris pertama yang kami tambahkan (yaitu allow_anonymous… dan password_file…). Jika Anda telah melakukan ini, lewati untuk me-reboot Raspberry Pi.

Sekarang tutup (dan simpan) file itu. Jika Anda mengikuti contoh nano, tekan CTRL+X, dan ketik Y saat diminta.

Karena kami baru saja memberi tahu mosquitto bahwa pengguna yang mencoba menggunakan broker MQTT harus diautentikasi, sekarang kami perlu memberi tahu mosquitto apa nama pengguna dan kata sandinya! Jadi, ketik perintah berikut - ganti nama pengguna dengan nama pengguna yang Anda inginkan - lalu masukkan kata sandi yang Anda inginkan saat diminta (Catatan: jika, saat mengedit file konfigurasi, Anda menentukan jalur password_file yang berbeda, ganti jalur di bawah ini dengan yang Anda gunakan).

sudo mosquitto_passwd -c /etc/mosquitto/pwfile nama pengguna

Karena kita baru saja mengubah file konfigurasi mosquitto, kita harus me-reboot Raspberry Pi.

sudo reboot

Setelah Raspberry Pi selesai reboot, Anda harus memiliki broker MQTT yang berfungsi penuh! Selanjutnya, kita akan mencoba berinteraksi dengannya, menggunakan sejumlah perangkat/metode yang berbeda!

Langkah 3: Menguji Pialang

Menguji Pialang
Menguji Pialang

Setelah Anda menginstal mosquitto di Raspberry Pi, Anda dapat mengujinya dengan cepat - hanya untuk memastikan semuanya bekerja dengan benar. Untuk tujuan ini, ada dua perintah yang dapat kita gunakan pada baris perintah. mosquitto_pub dan mosquitto_sub. Pada langkah ini, saya akan memandu Anda menggunakan masing-masing untuk menguji broker kami.

Untuk menguji broker, Anda perlu membuka dua jendela baris perintah. Jika Anda menggunakan Putty atau klien SSH lain, ini semudah membuka jendela SSH lain dan masuk seperti biasa. Jika Anda mengakses Pi Anda dari terminal UNIX, ini persis sama. Jika Anda menggunakan Raspberry Pi secara langsung, Anda perlu membuka dua jendela terminal dalam mode GUI (perintah startxdapat digunakan untuk memulai GUI).

Sekarang Anda telah membuka dua jendela, kita dapat memulai pengujian. Di salah satu dari dua terminal, ketik perintah berikut, ganti nama pengguna dan kata sandi dengan yang Anda atur pada langkah sebelumnya.

mosquitto_sub -d -u nama pengguna -P kata sandi -t tes

Jika Anda memutuskan untuk tidak menetapkan nama pengguna dan kata sandi pada langkah sebelumnya, maka mulai sekarang, abaikan tanda -u dan -P dalam perintah. Jadi, sebagai contoh, perintah mosquitto_sub sekarang menjadi:

mosquitto_sub -d -t tes

Perintah mosquitto_sub akan berlangganan topik, dan menampilkan pesan apa pun yang dikirim ke topik tertentu di jendela terminal. Di sini, -d berarti mode debug, jadi semua pesan dan aktivitas akan ditampilkan di layar. -u dan -P harus cukup jelas. Terakhir, -t adalah nama topik yang ingin kita langgani - dalam hal ini, "test".

Selanjutnya, di jendela terminal lainnya, kita akan mencoba dan memublikasikan pesan ke topik "test". Ketik berikut ini, ingat lagi untuk mengubah nama pengguna dan kata sandi:

mosquitto_pub -d -u nama pengguna -P kata sandi -t test -m "Halo, Dunia!"

Saat Anda menekan enter, Anda akan melihat pesan "Halo, Dunia!" muncul di jendela terminal pertama yang kami gunakan (untuk berlangganan). Jika ini masalahnya, Anda siap untuk mulai mengerjakan ESP8266!

Langkah 4: Menyiapkan ESP8266 (Adafruit HUZZAH)

Menyiapkan ESP8266 (Adafruit HUZZAH)
Menyiapkan ESP8266 (Adafruit HUZZAH)
Menyiapkan ESP8266 (Adafruit HUZZAH)
Menyiapkan ESP8266 (Adafruit HUZZAH)
Menyiapkan ESP8266 (Adafruit HUZZAH)
Menyiapkan ESP8266 (Adafruit HUZZAH)
Menyiapkan ESP8266 (Adafruit HUZZAH)
Menyiapkan ESP8266 (Adafruit HUZZAH)

Langkah ini jika khusus untuk Adafruit HUZZAH (karena itulah yang saya gunakan untuk menyelesaikan proyek ini). Jika Anda menggunakan perangkat Arduino / ESP8266 yang berbeda, Anda mungkin ingin melewati langkah ini. Namun, saya akan menyarankan Anda membacanya sekilas, untuk berjaga-jaga jika ada informasi di sini yang mungkin relevan bagi Anda.

Untuk proyek ini, saya akan memprogram HUZZAH dengan software Arduino. Jadi, jika Anda belum melakukannya, pastikan untuk menginstal perangkat lunak Arduino (lebih baru dari 1.6.4). Anda dapat mengunduhnya di sini.

Setelah Anda menginstal perangkat lunak Arduino, buka dan arahkan ke File->Preferences. Di sini Anda akan melihat (di dekat bagian bawah jendela) kotak teks dengan label: "Additional Boards Manager URLs". Di kotak teks ini, salin dan tempel tautan berikut:

arduino.esp8266.com/stable/package_esp8266com_index.json

Klik OK untuk menyimpan perubahan Anda. Sekarang buka Board Manager (Tools->Board->Board Manager) dan cari ESP8266. Instal paket Komunitas esp8266 oleh ESP8266. Mulai ulang perangkat lunak Arduino.

Sekarang, sebelum kita dapat memprogram papan, kita perlu memilih beberapa opsi berbeda. Pada pilihan menu Tools, pilih Adafruit HUZZAH ESP8266 untuk Board, 80 MHz untuk CPU Frequency (Anda bisa menggunakan 160 MHz jika ingin overclock, tapi untuk saat ini saya akan menggunakan 80 MHz), 4M (3M SPIFFS) untuk Ukuran Flash, dan 115200 untuk Kecepatan Unggah. Juga, pastikan untuk memilih port COM yang Anda gunakan (ini akan tergantung pada pengaturan Anda).

Sebelum Anda dapat mengunggah kode apa pun, Anda harus memastikan bahwa HUZZAH dalam mode bootloader. Untuk mengaktifkan ini, tahan tombol di papan bertanda GPIO0, dan sementara ini ditahan, tahan tombol Reset juga. Kemudian, lepaskan tombol Reset, dan kemudian GPIO0. Jika Anda telah melakukannya dengan benar, LED merah yang menyala saat Anda menekan GPIO0 sekarang akan redup.

Untuk mengupload kode ke mikrokontroler, pastikan terlebih dahulu HUZZAH dalam mode bootloader, kemudian cukup klik tombol upload di Arduino IDE.

Jika Anda mengalami kesulitan dalam mengatur HUZZAH, informasi lebih lanjut dapat ditemukan di tutorial Adafruit sendiri.

Langkah 5: Memprogram ESP8266

Memprogram ESP8266
Memprogram ESP8266

Sekarang kita akan mulai memprogram ESP8266, tetapi sebelum kita dapat memulai, Anda perlu menginstal pustaka berikut di pengelola Perpustakaan Arduino (Sketsa->Sertakan Perpustakaan->Kelola Perpustakaan)

  • Bounce2
  • PubSubClient

Setelah Anda menginstal perpustakaan tersebut, Anda akan dapat menjalankan kode yang saya sertakan dalam Instructable ini (MQTT_Publish.zip). Saya telah memastikan untuk mengomentarinya sehingga Anda dapat memahami apa yang dilakukan setiap bagian, dan semoga ini memungkinkan Anda untuk menyesuaikannya dengan kebutuhan Anda.

Ingatlah untuk mengubah konstanta di bagian atas kode sehingga ESP8266 Anda dapat terhubung ke jaringan WiFi dan Broker MQTT Anda (Raspberry Pi).

Jika Anda memutuskan untuk tidak menetapkan nama pengguna dan kata sandi untuk MQTT Broker, maka unduh file MQTT_PublishNoPassword.zip sebagai gantinya.

Langkah 6: Menginstal Klien Python (paho-mqtt)

Menginstal Klien Python (paho-mqtt)
Menginstal Klien Python (paho-mqtt)

Untungnya, langkah ini sangat sederhana! Untuk menginstal klien mosquitto python, Anda hanya perlu mengetikkan yang berikut ini ke dalam baris perintah (Linux/Mac) atau bahkan command prompt (Windows).

instal pip paho-mqtt

Catatan: Prompt perintah Windows mungkin memiliki masalah menjalankan perintah pip jika Anda tidak menentukan bahwa Anda ingin pip diinstal dan python ditambahkan ke variabel PATH Anda saat Anda menginstal Python. Ada beberapa cara untuk memperbaikinya, tetapi saya pikir menginstal ulang Python adalah cara termudah. Jika ragu - coba cari di google!

Langkah 7: Klien Python - Berlangganan

Klien Python - Berlangganan
Klien Python - Berlangganan

Pada langkah ini, kita akan mengatur skrip Python (baik di Raspberry Pi itu sendiri atau di komputer lain yang terhubung ke jaringan) untuk menangani semua pesan yang dikirim (dipublikasikan) oleh ESP8266 ke topik MQTT.

Saya telah menyertakan kode python di bawah ini (PythonMQTT_Subscribe.py), yang telah dikomentari untuk membantu Anda memahami apa yang sedang terjadi, tetapi saya juga akan menjelaskan beberapa fitur utama di sini.

Jika Anda tidak menetapkan nama pengguna dan kata sandi untuk koneksi MQTT sebelumnya, unduh file PythonMQTT_SubscribeNoPassword.py sebagai gantinya.

Langkah 8: Berkomunikasi Antar Perangkat ESP8266

Berkomunikasi Antar Perangkat ESP8266
Berkomunikasi Antar Perangkat ESP8266

Jika Anda ingin mengatur jaringan IoT, misalnya, Anda mungkin ingin berkomunikasi antara perangkat ESP8266. Untungnya, ini tidak jauh lebih kompleks daripada kode yang telah kita tulis sebelumnya, namun, ada beberapa perubahan penting.

Agar satu ESP dapat mengirim data ke yang lain, ESP pertama harus memublikasikan topik tersebut, dan ESP kedua harus berlangganan topik tersebut. Pengaturan ini akan memungkinkan percakapan satu arah - ESP(1) ke ESP(2). Jika kita ingin ESP(2) berbicara kembali dengan ESP(1), kita dapat membuat topik baru, yang akan diterbitkan oleh ESP(2), dan ESP(1) akan berlangganan. Untungnya, kami dapat memiliki banyak pelanggan dengan topik yang sama, jadi jika Anda ingin mengirim data ke sejumlah sistem, Anda hanya perlu satu topik (mereka semua berlangganan, kecuali perangkat yang mengirim data, karena itu akan menjadi penerbitan).

Jika Anda memerlukan bantuan untuk mencari tahu apa yang perlu dilakukan setiap perangkat, pikirkan sistem sebagai ruang orang. Jika ESP(1) dipublikasikan, Anda dapat membayangkan perangkat ini sebagai "speaker", dan perangkat apa pun yang berlangganan topik tersebut adalah "pendengar" dalam contoh ini.

Saya telah menyertakan beberapa contoh kode di bawah ini, yang menunjukkan bagaimana ESP8266 dapat berlangganan suatu topik, dan mendengarkan pesan tertentu - 1 dan 0. Jika 1 diterima, LED on-board (untuk HUZZAH - GPIO 0) dinyalakan. Jika 0 diterima, LED ini dimatikan.

Jika Anda ingin memproses data yang lebih kompleks, ini harus dilakukan di fungsi ReceivedMessage (lihat kode).

Untuk proyek Anda sendiri, jika Anda perlu mengirim dan menerima data, Anda dapat menggabungkan fungsi publikasikan dari contoh sebelumnya ke dalam kode yang disertakan dalam langkah ini. Ini harus ditangani dalam fungsi Arduino loop() utama.

Ingatlah untuk mengubah variabel di bagian atas kode agar sesuai dengan jaringan Anda!

Direkomendasikan: