Mục lục:

Cách sử dụng MQTT với Raspberry Pi và ESP8266: 8 bước (có hình ảnh)
Cách sử dụng MQTT với Raspberry Pi và ESP8266: 8 bước (có hình ảnh)

Video: Cách sử dụng MQTT với Raspberry Pi và ESP8266: 8 bước (có hình ảnh)

Video: Cách sử dụng MQTT với Raspberry Pi và ESP8266: 8 bước (có hình ảnh)
Video: TBĐC thông minh: 5. Kết nối ESP với máy tính qua MQTT (ESP32, ESP8266, MQTT, Raspberry Pi,...) 2024, Tháng sáu
Anonim
Cách sử dụng MQTT với Raspberry Pi và ESP8266
Cách sử dụng MQTT với Raspberry Pi và ESP8266

Trong phần Có thể hướng dẫn này, tôi sẽ giải thích giao thức MQTT là gì và cách nó được sử dụng để giao tiếp giữa các thiết bị. sang một chương trình Python khi một nút được nhấn. Cụ thể, tôi đang sử dụng mô-đun Adafruit HUZZAH cho dự án này, một Raspberry Pi và một máy tính để bàn. Raspberry Pi sẽ hoạt động như nhà môi giới MQTT và ứng dụng khách Python sẽ được chạy từ một máy tính để bàn riêng biệt (tùy chọn, vì điều này có thể được chạy trên Raspberry Pi).

Để làm theo Tài liệu hướng dẫn này, bạn sẽ cần có một số kiến thức cơ bản về điện tử và cách sử dụng phần mềm Arduino. Bạn cũng nên làm quen với việc sử dụng giao diện dòng lệnh (đối với Raspberry Pi). Hy vọng rằng khi bạn đã có kiến thức về MQTT là gì và cách sử dụng nó trong một kịch bản cơ bản, bạn sẽ có thể tạo các dự án IoT của riêng mình!

Các bộ phận bắt buộc

  • 1 x Raspberry Pi, được kết nối với mạng cục bộ (chạy Jessie)
  • 1 x Mô-đun ESP8266 (Adafruit HUZZAH)
  • 1 x Breadboard
  • 3 x Dây nhảy (Nam - Nam)
  • 1 x Nút bấm
  • 1 x Điện trở 10k Ohm (mã màu Nâu-Đen-Cam)

Tôi đã tạo ra phiên bản Có thể hướng dẫn này, vì MQTT luôn quan tâm đến tôi như một giao thức và có nhiều cách khác nhau để sử dụng nó. Tuy nhiên, tôi dường như không thể hiểu được cách mã hóa các thiết bị để sử dụng nó. Điều này là do tôi không biết / không hiểu điều gì đang thực sự diễn ra để thực hiện câu "Xin chào, Thế giới!" từ thiết bị A và gửi đến thiết bị B. Do đó, tôi quyết định viết Có thể hướng dẫn này để (hy vọng) dạy cho bạn cách hoạt động của nó và cũng để củng cố sự hiểu biết của riêng tôi về nó!

Bước 1: MQTT là gì?

MQTT là gì?
MQTT là gì?

MQTT, hay MQ Telemetry Transport, là một giao thức nhắn tin cho phép nhiều thiết bị nói chuyện với nhau. Hiện tại, nó là một giao thức phổ biến cho Internet of Things, mặc dù nó đã được sử dụng cho các mục đích khác - ví dụ như Facebook Messenger. Điều thú vị là MQTT được phát minh vào năm 1999 - có nghĩa là nó cũng cũ như tôi!

MQTT dựa trên ý tưởng rằng các thiết bị có thể xuất bản hoặc đăng ký các chủ đề. Ví dụ. Nếu Thiết bị số 1 đã ghi lại nhiệt độ từ một trong các cảm biến của nó, thiết bị có thể xuất bản một thông báo có chứa giá trị nhiệt độ mà nó đã ghi lại cho một chủ đề (ví dụ: "Nhiệt độ"). Thông báo này được gửi đến MQTT Broker, mà bạn có thể coi đó là một bộ chuyển mạch / bộ định tuyến trên mạng cục bộ. Sau khi Nhà môi giới MQTT nhận được tin nhắn, nó sẽ gửi nó đến bất kỳ thiết bị nào (trong trường hợp này là Thiết bị số 2) được đăng ký cho cùng một chủ đề.

Trong dự án này, chúng tôi sẽ xuất bản một chủ đề bằng cách sử dụng ESP8266 và tạo một tập lệnh Python sẽ đăng ký cho cùng một chủ đề này, thông qua Raspberry Pi sẽ hoạt động như Nhà môi giới MQTT. Điều tuyệt vời về MQTT là nó có trọng lượng nhẹ, vì vậy nó hoàn hảo để chạy trên các bộ vi điều khiển nhỏ như ESP8266, nhưng nó cũng có sẵn rộng rãi - vì vậy chúng tôi cũng có thể chạy nó trên tập lệnh Python.

Hy vọng rằng khi kết thúc dự án này, bạn sẽ hiểu được MQTT là gì và cách sử dụng nó cho các dự án của riêng bạn trong tương lai.

Bước 2: Cài đặt MQTT Broker trên Raspberry Pi

Cài đặt MQTT Broker trên Raspberry Pi
Cài đặt MQTT Broker trên Raspberry Pi
Cài đặt MQTT Broker trên Raspberry Pi
Cài đặt MQTT Broker trên Raspberry Pi
Cài đặt MQTT Broker trên Raspberry Pi
Cài đặt MQTT Broker trên Raspberry Pi

Để thiết lập hệ thống MQTT của chúng tôi, chúng tôi cần một nhà môi giới, như đã giải thích ở bước trước. Đối với Raspberry Pi, chúng tôi sẽ sử dụng nhà môi giới MQTT "Mosquitto". Trước khi chúng tôi cài đặt phần mềm này, tốt nhất là bạn nên cập nhật Raspberry Pi của mình.

sudo apt-get cập nhật

sudo apt-get nâng cấp

Khi bạn đã hoàn thành việc này, hãy cài đặt mosquitto và sau đó là các gói mosquitto-client.

sudo apt-get install mosquitto -y

sudo apt-get install mosquitto-client -y

Khi bạn đã cài đặt xong hai gói này, chúng ta sẽ cần phải cấu hình nhà môi giới. Tệp cấu hình của nhà môi giới mosquitto được đặt tại /etc/mosquitto/mosquitto.conf, vì vậy hãy mở tệp này bằng trình soạn thảo văn bản yêu thích của bạn. Nếu bạn không có trình soạn thảo văn bản yêu thích hoặc không biết cách sử dụng bất kỳ trình soạn thảo dòng lệnh nào, tôi sẽ sử dụng nano để bạn có thể làm theo:

sudo nano /etc/mosquitto/mosquitto.conf

Ở cuối tệp này, bạn sẽ thấy dòng:

include_dir /etc/mosquitto/conf.d

Xóa dòng này. Thêm các dòng sau vào cuối tệp.

allow_anonymous false

password_file / etc / mosquitto / pwfile nghe 1883

Bằng cách nhập những dòng đó, chúng tôi đã nói với mosquitto rằng chúng tôi không muốn bất kỳ ai kết nối với nhà môi giới của chúng tôi, những người không cung cấp tên người dùng và mật khẩu hợp lệ (chúng tôi sẽ bắt đầu thiết lập những điều này sau một giây) và chúng tôi muốn mosquitto nghe tin nhắn trên cổng số 1883.

Nếu bạn không muốn nhà môi giới yêu cầu tên người dùng và mật khẩu, đừng bao gồm hai dòng đầu tiên mà chúng tôi đã thêm (tức là allow_anonymous… và password_file…). Nếu bạn đã làm điều này, hãy bỏ qua để khởi động lại Raspberry Pi.

Bây giờ đóng (và lưu) tệp đó. Nếu bạn đang theo dõi cùng với ví dụ nano, hãy nhấn CTRL + X và nhập Y khi được nhắc.

Bởi vì chúng tôi vừa nói với mosquitto rằng người dùng đang cố gắng sử dụng nhà môi giới MQTT cần phải được xác thực, bây giờ chúng tôi cần cho mosquitto biết tên người dùng và mật khẩu là gì! Vì vậy, hãy nhập lệnh sau - thay thế tên người dùng bằng tên người dùng mà bạn muốn - sau đó nhập mật khẩu bạn muốn khi được nhắc (Lưu ý: nếu, khi chỉnh sửa tệp cấu hình, bạn đã chỉ định một đường dẫn tệp mật khẩu khác, hãy thay thế đường dẫn bên dưới bằng một trong những bạn đã sử dụng).

tên người dùng sudo mosquitto_passwd -c / etc / mosquitto / pwfile

Vì chúng tôi vừa thay đổi tệp cấu hình mosquitto, chúng tôi nên khởi động lại Raspberry Pi.

khởi động lại sudo

Sau khi Raspberry Pi khởi động lại xong, bạn sẽ có một nhà môi giới MQTT hoạt động đầy đủ! Tiếp theo, chúng tôi sẽ cố gắng tương tác với nó, sử dụng một số thiết bị / phương pháp khác nhau!

Bước 3: Kiểm tra Nhà môi giới

Kiểm tra Nhà môi giới
Kiểm tra Nhà môi giới

Khi bạn đã cài đặt mosquitto trên Raspberry Pi, bạn có thể kiểm tra nhanh nó - chỉ để đảm bảo mọi thứ hoạt động chính xác. Với mục đích này, có hai lệnh mà chúng ta có thể sử dụng trên dòng lệnh. mosquitto_pub và mosquitto_sub. Trong bước này, tôi sẽ hướng dẫn bạn sử dụng từng thứ trong số này để kiểm tra nhà môi giới của chúng tôi.

Để kiểm tra nhà môi giới, bạn sẽ cần mở hai cửa sổ dòng lệnh. Nếu bạn đang sử dụng Putty hoặc một máy khách SSH khác, việc này đơn giản như mở một cửa sổ SSH khác và đăng nhập như bình thường. Nếu bạn đang truy cập Pi của mình từ một thiết bị đầu cuối UNIX, điều này hoàn toàn giống nhau. Nếu bạn đang sử dụng Raspberry Pi trực tiếp, bạn sẽ cần mở hai cửa sổ đầu cuối ở chế độ GUI (lệnh startx có thể được sử dụng để khởi động GUI).

Bây giờ bạn đã mở hai cửa sổ, chúng ta có thể bắt đầu thử nghiệm. Tại một trong hai thiết bị đầu cuối, hãy nhập lệnh sau, thay thế tên người dùng và mật khẩu bằng những tên bạn đã thiết lập ở bước trước.

mosquitto_sub -d -u tên người dùng -P mật khẩu -t kiểm tra

Nếu bạn quyết định không đặt tên người dùng và mật khẩu ở bước trước, thì từ bây giờ, hãy bỏ qua cờ -u và -P trong các lệnh. Vì vậy, làm ví dụ, lệnh mosquitto_sub bây giờ sẽ là:

kiểm tra mosquitto_sub -d -t

Lệnh mosquitto_sub sẽ đăng ký một chủ đề và hiển thị bất kỳ thông báo nào được gửi đến chủ đề được chỉ định trong cửa sổ đầu cuối. Ở đây, -d có nghĩa là chế độ gỡ lỗi, vì vậy tất cả các thông báo và hoạt động sẽ được xuất ra trên màn hình. -u và -P nên tự giải thích. Cuối cùng, -t là tên của chủ đề chúng tôi muốn đăng ký - trong trường hợp này là "thử nghiệm".

Tiếp theo, trong cửa sổ đầu cuối khác, chúng tôi sẽ thử và xuất bản một thông báo cho chủ đề "thử nghiệm". Nhập thông tin sau, ghi nhớ lại để thay đổi tên người dùng và mật khẩu:

mosquitto_pub -d -u tên người dùng -P password -t test -m "Hello, World!"

Khi nhấn enter, bạn sẽ thấy thông báo "Hello, World!" xuất hiện trong cửa sổ đầu cuối đầu tiên mà chúng tôi sử dụng (để đăng ký). Nếu đúng như vậy, bạn đã sẵn sàng để bắt đầu làm việc trên ESP8266!

Bước 4: Thiết lập ESP8266 (Adafruit HUZZAH)

Thiết lập ESP8266 (Adafruit HUZZAH)
Thiết lập ESP8266 (Adafruit HUZZAH)
Thiết lập ESP8266 (Adafruit HUZZAH)
Thiết lập ESP8266 (Adafruit HUZZAH)
Thiết lập ESP8266 (Adafruit HUZZAH)
Thiết lập ESP8266 (Adafruit HUZZAH)
Thiết lập ESP8266 (Adafruit HUZZAH)
Thiết lập ESP8266 (Adafruit HUZZAH)

Bước này nếu dành riêng cho Adafruit HUZZAH (vì đó là những gì tôi đang sử dụng để hoàn thành dự án này). Nếu bạn đang sử dụng thiết bị Arduino / ESP8266 khác, bạn có thể bỏ qua bước này. Tuy nhiên, tôi khuyên bạn nên đọc lướt qua, đề phòng trường hợp có bất kỳ thông tin nào ở đây có thể liên quan đến bạn.

Đối với dự án này, tôi sẽ lập trình HUZZAH bằng phần mềm Arduino. Vì vậy, nếu bạn chưa cài đặt, hãy đảm bảo cài đặt phần mềm Arduino (mới hơn 1.6.4). Bạn có thể tải về tại đây.

Khi bạn đã cài đặt phần mềm Arduino, hãy mở nó và điều hướng đến Tệp-> Tùy chọn. Tại đây, bạn sẽ thấy (gần cuối cửa sổ) một hộp văn bản có nhãn: "URL trình quản lý bảng bổ sung". Trong hộp văn bản này, hãy sao chép và dán liên kết sau:

arduino.esp8266.com/stable/package_esp8266com_index.json

Bấm OK để lưu các thay đổi của bạn. Bây giờ hãy mở Trình quản lý Hội đồng quản trị (Công cụ-> Hội đồng quản trị-> Trình quản lý Hội đồng quản trị) và tìm kiếm ESP8266. Cài đặt gói esp8266 by ESP8266 Community. Khởi động lại phần mềm Arduino.

Bây giờ, trước khi chúng ta có thể lập trình bảng, chúng ta cần chọn một vài tùy chọn khác nhau. Trong tùy chọn menu Công cụ, chọn Adafruit HUZZAH ESP8266 cho Bo mạch, 80 MHz cho Tần số CPU (bạn có thể sử dụng 160 MHz nếu bạn muốn ép xung nó, nhưng hiện tại tôi sẽ sử dụng 80 MHz), 4M (3M SPIFFS) cho Kích thước Flash và 115200 cho Tốc độ Tải lên. Ngoài ra, hãy đảm bảo chọn cổng COM mà bạn đang sử dụng (điều này sẽ phụ thuộc vào thiết lập của bạn).

Trước khi có thể tải lên bất kỳ mã nào, bạn cần đảm bảo rằng HUZZAH đang ở chế độ bộ nạp khởi động. Để kích hoạt tính năng này, hãy nhấn giữ nút trên bảng được đánh dấu GPIO0 và trong khi giữ nút này, đồng thời nhấn giữ nút Đặt lại. Sau đó, nhả nút Đặt lại, rồi đến GPIO0. Nếu bạn đã thực hiện đúng, đèn LED màu đỏ bật sáng khi bạn nhấn GPIO0 giờ sẽ sáng mờ.

Để tải mã lên vi điều khiển, trước tiên hãy đảm bảo HUZZAH đang ở chế độ bộ nạp khởi động, sau đó chỉ cần nhấp vào nút tải lên trong Arduino IDE.

Nếu bạn gặp bất kỳ sự cố nào khi thiết lập HUZZAH, bạn có thể tìm thêm thông tin tại hướng dẫn riêng của Adafruit.

Bước 5: Lập trình ESP8266

Lập trình ESP8266
Lập trình ESP8266

Bây giờ chúng ta sẽ bắt đầu lập trình ESP8266, nhưng trước khi chúng ta có thể bắt đầu, bạn sẽ cần cài đặt các thư viện sau trong trình quản lý Thư viện Arduino (Sketch-> include Libraries-> Manage Libraries)

  • Bounce2
  • PubSubClient

Khi bạn đã cài đặt các thư viện đó, bạn sẽ có thể chạy mã mà tôi đã đưa vào trong Bản có thể hướng dẫn này (MQTT_Publish.zip). Tôi đảm bảo sẽ nhận xét nó để bạn có thể hiểu mỗi phần đang làm gì và điều này hy vọng sẽ cho phép bạn điều chỉnh nó theo nhu cầu của mình.

Hãy nhớ thay đổi các hằng số ở đầu mã để ESP8266 của bạn có thể kết nối với mạng WiFi và Nhà môi giới MQTT của bạn (Raspberry Pi).

Nếu bạn quyết định không đặt tên người dùng và mật khẩu cho MQTT Broker, hãy tải xuống tệp MQTT_PublishNoPassword.zip để thay thế.

Bước 6: Cài đặt Python Client (paho-mqtt)

Cài đặt ứng dụng khách Python (paho-mqtt)
Cài đặt ứng dụng khách Python (paho-mqtt)

Rất may, bước này rất đơn giản! Để cài đặt ứng dụng khách python mosquitto, bạn chỉ cần nhập nội dung sau vào dòng lệnh (Linux / Mac) hoặc thậm chí dấu nhắc lệnh (Windows).

pip cài đặt paho-mqtt

Lưu ý: Dấu nhắc lệnh của Windows có thể gặp sự cố khi chạy lệnh pip nếu bạn không chỉ định rằng bạn muốn cài đặt pip và thêm python vào biến PATH khi bạn cài đặt Python. Có một số cách để sửa lỗi này, nhưng tôi nghĩ chỉ cần cài đặt lại Python là cách dễ nhất. Nếu nghi ngờ - hãy đưa nó lên google!

Bước 7: Ứng dụng khách Python - Đăng ký

Ứng dụng khách Python - Đăng ký
Ứng dụng khách Python - Đăng ký

Trong bước này, chúng tôi sẽ thiết lập tập lệnh Python (trên chính Raspberry Pi hoặc trên một máy tính khác được kết nối với mạng) để xử lý tất cả các thông báo được gửi (xuất bản) bởi ESP8266 đến chủ đề MQTT.

Tôi đã bao gồm mã python bên dưới (PythonMQTT_Subscribe.py), đã được nhận xét để giúp bạn hiểu điều gì đang xảy ra, nhưng tôi cũng sẽ giải thích một số tính năng chính ở đây.

Nếu bạn không đặt tên người dùng và mật khẩu cho kết nối MQTT trước đó, hãy tải xuống tệp PythonMQTT_SubscribeNoPassword.py thay thế.

Bước 8: Giao tiếp giữa các thiết bị ESP8266

Giao tiếp giữa các thiết bị ESP8266
Giao tiếp giữa các thiết bị ESP8266

Ví dụ: nếu bạn muốn thiết lập mạng IoT, bạn có thể muốn giao tiếp giữa các thiết bị ESP8266. Rất may, điều này không phức tạp hơn nhiều so với mã chúng tôi đã viết trước đây, tuy nhiên, có một vài thay đổi đáng chú ý.

Để một ESP gửi dữ liệu đến một ESP khác, ESP đầu tiên sẽ cần xuất bản chủ đề và ESP thứ hai sẽ cần đăng ký chủ đề đó. Thiết lập này sẽ cho phép hội thoại một chiều - ESP (1) với ESP (2). Nếu chúng ta muốn ESP (2) nói chuyện lại với ESP (1), chúng ta có thể tạo một chủ đề mới, mà ESP (2) sẽ xuất bản và ESP (1) sẽ đăng ký. Rất may, chúng tôi có thể có nhiều người đăng ký trên cùng một chủ đề, vì vậy nếu bạn muốn gửi dữ liệu đến một số hệ thống, bạn sẽ chỉ cần một chủ đề (mà tất cả họ đều đăng ký, ngoại trừ thiết bị đang gửi dữ liệu, vì điều đó sẽ đang xuất bản).

Nếu bạn cần trợ giúp để tìm ra những gì mỗi thiết bị cần làm, hãy nghĩ về hệ thống như một căn phòng của mọi người. Nếu ESP (1) đang xuất bản, bạn có thể hình dung thiết bị này như một "loa" và bất kỳ thiết bị nào đang đăng ký chủ đề đều là "người nghe" trong ví dụ này.

Tôi đã bao gồm một số mã ví dụ bên dưới, minh họa cách ESP8266 có thể đăng ký một chủ đề và lắng nghe các thông báo nhất định - 1 và 0. Nếu nhận được mã 1, đèn LED trên bo mạch (đối với HUZZAH - GPIO 0) được bật. Nếu nhận được 0, đèn LED này sẽ tắt.

Nếu bạn muốn xử lý dữ liệu phức tạp hơn, điều này nên được thực hiện trong chức năng ReceivedMessage (xem mã).

Đối với các dự án của riêng bạn, nếu bạn cần cả gửi và nhận dữ liệu, bạn có thể kết hợp chức năng xuất bản từ ví dụ trước vào mã có trong bước này. Điều này sẽ được xử lý trong hàm Arduino loop () chính.

Hãy nhớ thay đổi các biến ở đầu mã để phù hợp với mạng của bạn!

Đề xuất: