Isi kandungan:

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, Jun
Anonim
Cara Menggunakan MQTT Dengan Raspberry Pi dan ESP8266
Cara Menggunakan MQTT Dengan Raspberry Pi dan ESP8266

Dalam Instructable ini, saya akan menerangkan apa itu protokol MQTT dan bagaimana ia digunakan untuk berkomunikasi antara peranti. Kemudian, sebagai demonstrasi praktikal, saya akan menunjukkan kepada anda cara menyiapkan sistem dua pelanggan mudah, di mana modul ESP8266 akan menghantar mesej ke program Python apabila butang ditekan. Secara khusus, saya menggunakan modul Adafruit HUZZAH untuk projek ini, Raspberry Pi dan komputer desktop. Raspberry Pi akan bertindak sebagai broker MQTT, dan klien Python akan dijalankan dari komputer desktop yang terpisah (pilihan, kerana ini dapat dijalankan pada Raspberry Pi).

Untuk mengikuti instruksional ini, anda perlu mempunyai pengetahuan asas mengenai elektronik, dan cara menggunakan perisian Arduino. Anda juga harus biasa menggunakan antara muka baris perintah (untuk Raspberry Pi). Mudah-mudahan, setelah anda memperoleh pengetahuan tentang apa itu MQTT, dan bagaimana menggunakannya dalam senario asas, anda dapat membuat projek IoT anda sendiri!

Bahagian yang diperlukan

  • 1 x Raspberry Pi, disambungkan ke rangkaian tempatan (menjalankan Jessie)
  • 1 x Modul ESP8266 (Adafruit HUZZAH)
  • 1 x Papan Roti
  • 3 x Jumper Wayar (Lelaki-ke-Lelaki)
  • 1 x Butang tekan
  • 1 x 10k Perintang Ohm (kod warna Coklat-Hitam-Jingga)

Saya telah membuat Instructable ini, kerana MQTT selalu menarik minat saya sebagai protokol dan terdapat banyak cara yang boleh digunakan. Walau bagaimanapun, saya tidak dapat memikirkan bagaimana untuk membuat kod peranti untuk menggunakannya. Ini kerana saya tidak tahu / memahami apa yang sebenarnya berlaku untuk mengambil "Hello, World!" dari peranti A dan hantarkan ke peranti B. Oleh itu, saya memutuskan untuk menulis ini Instructable untuk (mudah-mudahan) mengajar anda bagaimana ia berfungsi, dan juga memperkukuhkan pemahaman saya sendiri tentangnya!

Langkah 1: Apa itu MQTT?

Apa itu MQTT?
Apa itu MQTT?

MQTT, atau MQ Telemetry Transport, adalah protokol pemesejan yang membolehkan pelbagai peranti bercakap antara satu sama lain. Pada masa ini, ia adalah protokol yang popular untuk Internet of Things, walaupun telah digunakan untuk tujuan lain - misalnya, Facebook Messenger. Menariknya MQTT dicipta pada tahun 1999 - bererti ia sama tua dengan saya!

MQTT didasarkan pada idea bahawa peranti dapat menerbitkan atau melanggan topik. Jadi, sebagai contoh. Jika Peranti # 1 telah mencatat suhu dari salah satu sensornya, ia dapat menerbitkan pesan yang berisi nilai suhu yang direkamnya, ke topik (mis. "Suhu"). Mesej ini dikirim ke MQTT Broker, yang dapat Anda fikirkan sebagai suis / penghala pada rangkaian kawasan setempat. Setelah MQTT Broker menerima mesej, ia akan menghantarnya ke mana-mana peranti (dalam kes ini, Peranti # 2) yang berlangganan topik yang sama.

Dalam projek ini, kami akan menerbitkan topik menggunakan ESP8266, dan membuat skrip Python yang akan melanggan topik yang sama ini, melalui Raspberry Pi yang akan bertindak sebagai MQTT Broker. Perkara yang hebat mengenai MQTT adalah ringan, jadi sangat sesuai untuk dijalankan pada mikrokontroler kecil seperti ESP8266, tetapi juga tersedia secara meluas - jadi kita juga dapat menjalankannya dengan skrip Python.

Mudah-mudahan, di akhir projek ini, anda akan memahami apa itu MQTT dan bagaimana menggunakannya untuk projek anda sendiri pada masa akan datang.

Langkah 2: Memasang MQTT Broker pada Raspberry Pi

Memasang MQTT Broker pada Raspberry Pi
Memasang MQTT Broker pada Raspberry Pi
Memasang MQTT Broker pada Raspberry Pi
Memasang MQTT Broker pada Raspberry Pi
Memasang MQTT Broker pada Raspberry Pi
Memasang MQTT Broker pada Raspberry Pi

Untuk menyiapkan sistem MQTT kami, kami memerlukan broker, seperti yang dijelaskan pada langkah sebelumnya. Untuk Raspberry Pi, kami akan menggunakan broker MQTT "Mosquitto". Sebelum memasang ini, lebih baik mengemas kini Raspberry Pi kami.

sudo apt-get kemas kini

sudo apt-get peningkatan

Setelah selesai, pasang pakej mosquitto dan kemudian klien-mosquitto.

sudo apt-get install mosquitto -y

sudo apt-get install mosquitto-client -y

Setelah selesai memasang kedua-dua pakej ini, kita perlu mengkonfigurasi broker. Fail konfigurasi broker mosquitto terletak di /etc/mosquitto/mosquitto.conf, jadi buka ini dengan editor teks kegemaran anda. Sekiranya anda tidak mempunyai editor teks kegemaran atau tidak tahu bagaimana menggunakan mana-mana editor baris perintah, saya akan menggunakan nano supaya anda dapat mengikuti:

sudo nano /etc/mosquitto/mosquitto.conf

Di bahagian bawah fail ini, anda akan melihat baris:

sertakan_dir /etc/mosquitto/conf.d

Padamkan baris ini. Tambahkan baris berikut ke bahagian bawah fail.

izinkan_anonim palsu

pendengar password_file / etc / mosquitto / pwfile 1883

Dengan menaip baris tersebut, kami telah memberitahu mosquitto bahawa kami tidak mahu ada orang yang berhubung dengan broker kami yang tidak memberikan nama pengguna dan kata laluan yang sah (kami akan menetapkannya sebentar lagi) dan kami mahu mosquitto dengar mesej di nombor port 1883.

Sekiranya anda tidak mahu broker memerlukan nama pengguna dan kata laluan, jangan sertakan dua baris pertama yang kami tambahkan (iaitu allow_anonymous… dan password_file…). Sekiranya anda telah melakukannya, langkau untuk menghidupkan semula Raspberry Pi.

Sekarang tutup (dan simpan) fail itu. Sekiranya anda mengikuti contoh nano, tekan CTRL + X, dan taip Y apabila diminta.

Kerana kami baru saja memberitahu mosquitto bahawa pengguna yang cuba menggunakan broker MQTT perlu disahkan, kami sekarang perlu memberitahu mosquitto apa nama pengguna dan kata laluan! Oleh itu, taipkan arahan berikut - ganti nama pengguna dengan nama pengguna yang anda mahukan - kemudian masukkan kata laluan yang anda mahukan ketika diminta (Catatan: jika, ketika mengedit fail konfigurasi, anda menentukan jalan kata laluan_file yang lain, ganti jalan di bawah dengan satu yang anda gunakan).

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

Oleh kerana kita baru sahaja menukar fail konfigurasi mosquitto, kita harus menghidupkan semula Raspberry Pi.

rebo sudo

Setelah Raspberry Pi selesai memulakan semula, anda semestinya mempunyai broker MQTT yang berfungsi sepenuhnya! Seterusnya, kami akan cuba berinteraksi dengannya, menggunakan sejumlah alat / kaedah yang berbeza!

Langkah 3: Menguji Broker

Menguji Broker
Menguji Broker

Setelah memasang mosquitto pada Raspberry Pi, anda boleh memberikan ujian pantas - hanya untuk memastikan semuanya berfungsi dengan betul. Untuk tujuan ini, ada dua perintah yang dapat kita gunakan pada baris perintah. mosquitto_pub dan mosquitto_sub. Dalam langkah ini, saya akan membimbing anda menggunakan masing-masing untuk menguji broker kami.

Untuk menguji broker, anda perlu membuka dua tetingkap baris perintah. Sekiranya anda menggunakan Putty atau pelanggan SSH lain, ini semudah membuka tetingkap SSH yang lain dan log masuk seperti biasa. Sekiranya anda mengakses Pi anda dari terminal UNIX, ini sama. Sekiranya anda menggunakan Raspberry Pi secara langsung, anda perlu membuka dua tetingkap terminal dalam mod GUI (perintah startxcan digunakan untuk memulakan GUI).

Setelah anda membuka dua tingkap, kami dapat memulakan ujian. Di salah satu daripada dua terminal, ketik perintah berikut, ganti nama pengguna dan kata laluan dengan yang anda tetapkan pada langkah sebelumnya.

mosquitto_sub -d -u username -P password -t test

Sekiranya anda memutuskan untuk tidak menetapkan nama pengguna dan kata laluan pada langkah sebelumnya, maka mulai sekarang, abaikan bendera -u dan -P dalam perintah. Jadi, sebagai contoh, perintah mosquitto_sub sekarang adalah:

ujian mosquitto_sub -d -t

Perintah mosquitto_sub akan melanggan topik, dan memaparkan sebarang mesej yang dihantar ke topik yang ditentukan di tetingkap terminal. Di sini, -d bermaksud mod debug, jadi semua mesej dan aktiviti akan dikeluarkan di skrin. -u dan -P haruslah jelas. Akhirnya, -t adalah nama topik yang ingin kami langgan - dalam kes ini, "ujian".

Selanjutnya, di tetingkap terminal yang lain, kita akan mencuba dan menerbitkan mesej ke topik "ujian". Ketik perkara berikut, ingat lagi untuk menukar nama pengguna dan kata laluan:

mosquitto_pub -d -u username -P password -t test -m "Hello, World!"

Apabila anda menekan enter, anda akan melihat mesej anda "Hello, World!" muncul di tetingkap terminal pertama yang kami gunakan (untuk melanggan). Sekiranya ini berlaku, anda sudah bersedia untuk mula mengusahakan 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 (seperti itulah yang saya gunakan untuk menyelesaikan projek ini). Sekiranya anda menggunakan peranti Arduino / ESP8266 yang lain, anda mungkin ingin melangkau langkah ini. Walau bagaimanapun, saya menasihati anda untuk membacanya, sekiranya terdapat maklumat di sini yang mungkin berkaitan dengan anda.

Untuk projek ini, saya akan memprogram HUZZAH dengan perisian Arduino. Oleh itu, jika anda belum melakukannya, pastikan untuk memasang perisian Arduino (lebih baru daripada 1.6.4). Anda boleh memuat turunnya di sini.

Setelah anda memasang perisian Arduino, buka dan arahkan ke Fail-> Keutamaan. Di sini anda akan melihat (dekat bahagian bawah tetingkap) kotak teks dengan label: "URL Pengurus Papan Tambahan". Di kotak teks ini, salin dan tampal pautan berikut:

arduino.esp8266.com/stable/package_esp8266com_index.json

Klik OK untuk menyimpan perubahan anda. Sekarang buka Pengurus Papan (Alat-> Papan-> Pengurus Papan) dan cari ESP8266. Pasang pakej Komuniti esp8266 by ESP8266. Mulakan semula perisian Arduino.

Sekarang, sebelum kita dapat memprogram papan kenyataan, kita perlu memilih beberapa pilihan yang berbeza. Dalam pilihan menu Alat, pilih Adafruit HUZZAH ESP8266 untuk Board, 80 MHz untuk Frekuensi CPU (anda boleh menggunakan 160 MHz jika anda ingin melakukan overclock, tetapi buat masa ini saya akan menggunakan 80 MHz), 4M (SPIFFS 3M) untuk Saiz Kilat, dan 115200 untuk Kelajuan Muat Naik. Juga, pastikan untuk memilih port COM yang anda gunakan (ini bergantung pada persediaan anda).

Sebelum anda boleh memuat naik kod apa pun, anda perlu memastikan bahawa HUZZAH berada dalam mod pemuat but. Untuk mengaktifkannya, tahan butang di papan bertanda GPIO0, dan sementara ini dipegang, tahan juga butang Reset. Kemudian, lepaskan butang Reset, dan kemudian GPIO0. Sekiranya anda telah melakukan ini dengan betul, LED merah yang menyala semasa anda menekan GPIO0 kini harus menyala dengan redup.

Untuk memuat naik kod ke pengawal mikro, pastikan terlebih dahulu HUZZAH dalam mod pemuat but, kemudian klik butang muat naik di Arduino IDE.

Sekiranya anda menghadapi masalah dalam menyiapkan HUZZAH, maklumat lebih lanjut boleh didapati di tutorial Adafruit sendiri.

Langkah 5: Memprogram ESP8266

Mengaturcara ESP8266
Mengaturcara ESP8266

Sekarang kita akan mula memprogram ESP8266, tetapi sebelum kita dapat memulakannya, anda perlu memasang perpustakaan berikut di pengurus Perpustakaan Arduino (Sketsa -> Sertakan Perpustakaan-> Kelola Perpustakaan)

  • Melantun2
  • Pelanggan PubSub

Setelah anda memasang perpustakaan tersebut, anda akan dapat menjalankan kod yang telah saya sertakan dalam Instructable ini (MQTT_Publish.zip). Saya telah memastikan untuk memberikan komen agar anda dapat memahami apa yang dilakukan oleh setiap bahagian, dan semoga ini dapat membolehkan anda menyesuaikannya dengan keperluan anda.

Ingatlah untuk menukar pemalar di bahagian atas kod supaya ESP8266 anda dapat menyambung ke rangkaian WiFi dan Broker MQTT anda (Raspberry Pi).

Sekiranya anda memutuskan untuk tidak menetapkan nama pengguna dan kata laluan untuk MQTT Broker, kemudian muat turun fail MQTT_PublishNoPassword.zip.

Langkah 6: Memasang Python Client (paho-mqtt)

Memasang Python Client (paho-mqtt)
Memasang Python Client (paho-mqtt)

Syukurlah, langkah ini sangat mudah! Untuk memasang klien mosquitto python, anda hanya perlu memasukkan perkara berikut ke dalam baris arahan (Linux / Mac) atau bahkan command prompt (Windows).

memasang pip paho-mqtt

Catatan: Perintah arahan Windows mungkin mempunyai masalah semasa menjalankan perintah pip jika anda tidak menyatakan bahawa anda ingin pip dipasang dan python ditambahkan ke pemboleh ubah PATH anda semasa anda memasang Python. Terdapat beberapa cara untuk memperbaikinya, tetapi saya rasa hanya memasang semula Python adalah kaedah termudah. Sekiranya ragu - berikan google!

Langkah 7: Pelanggan Python - Melanggan

Pelanggan Python - Melanggan
Pelanggan Python - Melanggan

Dalam langkah ini, kita akan mengatur skrip Python (baik pada Raspberry Pi itu sendiri atau pada komputer lain yang disambungkan ke rangkaian) untuk menangani semua mesej yang dihantar (diterbitkan) oleh ESP8266 ke topik MQTT.

Saya telah memasukkan kod python di bawah (PythonMQTT_Subscribe.py), yang telah dikomentari untuk membantu anda memahami apa yang sedang berlaku, tetapi saya akan menerangkan beberapa ciri utama di sini juga.

Sekiranya anda tidak menetapkan nama pengguna dan kata laluan untuk sambungan MQTT lebih awal, muat turun fail PythonMQTT_SubscribeNoPassword.py.

Langkah 8: Berkomunikasi Antara Peranti ESP8266

Berkomunikasi Antara Peranti ESP8266
Berkomunikasi Antara Peranti ESP8266

Sekiranya anda ingin menyiapkan rangkaian IoT, misalnya, anda mungkin ingin berkomunikasi antara peranti ESP8266. Syukurlah, ini tidak lebih rumit daripada kod yang telah kami tulis sebelumnya, namun terdapat beberapa perubahan penting.

Untuk satu ESP menghantar data ke yang lain, ESP pertama perlu menerbitkan topik tersebut, dan ESP kedua perlu melanggan topik tersebut. Penyediaan ini akan membolehkan perbualan sehala - ESP (1) hingga ESP (2). Sekiranya kita mahu ESP (2) bercakap kembali dengan ESP (1), kita boleh membuat topik baru, yang akan diterbitkan oleh ESP (2), dan ESP (1) akan berlangganan. Syukurlah, kita dapat memiliki banyak pelanggan pada topik yang sama, jadi jika anda ingin mengirim data ke sejumlah sistem, anda hanya memerlukan satu topik (yang mereka semua langgani, kecuali perangkat yang mengirim data, seperti yang akan menjadi penerbitan).

Sekiranya anda memerlukan bantuan untuk mengetahui apa yang perlu dilakukan oleh setiap peranti, fikirkan sistem ini sebagai ruang orang. Sekiranya ESP (1) menerbitkan, anda boleh membayangkan peranti ini sebagai "pembesar suara", dan mana-mana peranti yang melanggan topik tersebut adalah "pendengar" dalam contoh ini.

Saya telah memasukkan beberapa contoh kod di bawah, yang menunjukkan bagaimana ESP8266 dapat melanggan topik, dan mendengar mesej tertentu - 1 dan 0. Sekiranya 1 diterima, LED on-board (untuk HUZZAH - GPIO 0) dihidupkan. Sekiranya 0 diterima, LED ini dimatikan.

Sekiranya anda ingin memproses data yang lebih kompleks, ini harus dilakukan dalam fungsi ReceivedMessage (lihat kod).

Untuk projek anda sendiri, jika anda perlu menghantar dan menerima data, anda boleh memasukkan fungsi penerbitan dari contoh sebelumnya ke dalam kod yang disertakan dalam langkah ini. Ini harus dikendalikan dalam fungsi Arduino loop () utama.

Ingatlah untuk menukar pemboleh ubah di bahagian atas kod agar sesuai dengan rangkaian anda!

Disyorkan: