W5100S-EVB-Pico [Micropython] – MQTT
注:最初發表-By Louis_m?
組成:
硬件設施:
W5100S-EVB-Pico??????????????X 1
Raspberry Pi 4 ?????????????X 1
軟件應用程序:
Micopython?
詳細信息:
什么是MQTT?
??發布(Pub)/訂閱(Sub)模型和發布者/訂閱者模型是訂閱客戶端和發布客戶端之間的通信模型。
?為在M2M和物聯網中使用而創建的輕量級消息協議。
- ?在TCP操作。
- ??<發布者>主題問題。
- <訂閱者>訂閱主題。
- <代理(broker)>作為中繼,適用于1:N的通信。
- ?適用于“設備對設備”的消息處理,如低功耗傳感器、移動設備、嵌入式計算機、Arduinos和微控制器。
概述:
WIZnet以太網帽(硬件連接在頂部)是一個利用W5100S并支持3.3V和5V樹莓派Pico引腳兼容板。
請參考這個鏈接獲取更多關于W5100S的信息。
- 樹莓派Pico pin兼容
- 以太網(W5100S 硬連線TCP/IP芯片)
- 產品頁面:?Overview | WIZnet Document System
- 同時支持4個獨立的硬件插槽
- 支持無socket的新命令:ARP-Request, PING-Request
- 僅在自協商模式下支持Auto-MDIX
RP2040數據表:
–?Raspberry Pi Documentation - Raspberry Pi Pico
RP2040
準備:
連接 Raspberry Pi
接通電源并連接以太網線纜
運行RPi-4 mosquitto到服務器:
在你的樹莓派準備好樹莓派OS后,你可以繼續本教程,讓我們安裝Mosquitto Broker.
??? 1.樹莓派通過SSH打開終端窗口。
打開Rpi終端
?2.執行以下命令升級和更新系統
pi@raspberry:~?$ sudo apt update && sudo apt upgrade
3.按“Y”及Enter。更新和升級需要一些時間(在我的例子中,大約需要10分鐘)
4.要安裝mosquitto Broker,請輸入以下命令:
pi@raspberry:~?$ sudo apt install -y mosquitto mosquitto-clients
5.要使mosquitto在樹莓派啟動時自動啟動,你需要運行以下命令(這意味著當樹莓派啟動時,mosquitto broker將啟動):
pi@raspberry:~?$ sudo systemctl enable mosquitto.service
6.現在,運行以下命令來測試安裝:
pi@raspberry:~?$ mosquitto -v
7.檢查mosquitto 服務器是否使用下面的命令運行。您還可以使用命令停止和啟動服務器。
狀態
pi@raspberry:~?$service?mosquitto status
停止
pi@raspberry:~?$service?mosquitto stop
開始
pi@raspberry:~?$service?mosquitto start
如果檢查出現如下狀態,說明服務器正常運行。
Mosquitto 狀態
連接 W5100S-Pico-EVB:
?W5100S-PIco-EVB
連接樹莓派Pico到臺式機或筆記本使用5針微型USB電纜。
開發環境設置:
Micropython Thonny IDE
在樹莓派Pico上安裝Thonny IDE,請參考上面鏈接。
Thonny, Python IDE for beginners
文件鏈接-firmware.uf2
(Release v1.0.0 firmware.uf2 · Wiznet/RP2040-HAT-MicroPython · GitHub)
2.如果你點擊狀態欄中的MicroPython(Raspberry Pi Pico)并選擇“Configure interpreter...”,你也可以訪問固件安裝菜單。
3.查看殼牌面板底部的Thonny編輯器。你應該會得到以下結果:
進口MQTT庫:
首先,將要使用的函數庫從庫中導入到電腦中,請遵循以下步驟使用Thonny IDE將文件上傳。
Micropython以太網庫:
- 創建一個新文件,使用你想要的名字并保存在電腦中,例如“(你的庫名).py”。
- 進入“Open>這臺計算機”
該文件應以“(你的庫名).py”的名稱保存在RPi Pico上。
- 進入文件>保存為>樹莓派Pico>
發布:
#### MQTT Pico (1) #####?– publish
spi=SPI(0,2_000_000, mosi=Pin(19),miso=Pin(16),sck=Pin(18))
nic = network.WIZNET5K(spi,Pin(17),Pin(20)) #spi,cs,reset pin
nic.ifconfig(('192.168.1.20','255.255.255.0','192.168.1.1','8.8.8.8'))
while not nic.isconnected():
? ? time.sleep(1)
print(nic.regs())??
2.在MQTT配置中,代理IP地址是Raspberry Pi服務器的IP。
#mqtt config
mqtt_server = '192.168.1.7'client_id = 'wiz1'topic_pub = b'hello'topic_msg = b'Hello Pico'
last_message = 0
message_interval = 5
counter = 0
#MQTT connect
def mqtt_connect():
? ? client = MQTTClient(client_id, mqtt_server, keepalive=60)
? ? client.connect()
? ? print('Connected to %s MQTT Broker'%(mqtt_server))
? ? return client
#reconnect & reset
def reconnect():
? ? print('Failed to connected to MQTT Broker. Reconnecting...')
? ? time.sleep(5)
? ? machine.reset()
3.將使用MQTT發布
#MQTT Publish
def main():
? ? w5x00_init()
? ? try:
? ? ? ? client = mqtt_connect()
? ? except OSError as e:
? ? ? ? reconnect()
? ??
? ? while True:
? ? ? ? client.publish(topic_pub, topic_msg)
? ? ? ? time.sleep(3)
? ? ? ??
client.disconnect()
以“Hello”為主題向服務器發送“Hello WIZnet”消息
MQTT發布
訂閱:
#### MQTT Pico (2) #####?– 訂閱
spi=SPI(0,2_000_000, mosi=Pin(19),miso=Pin(16),sck=Pin(18))
nic = network.WIZNET5K(spi,Pin(17),Pin(20)) #spi,cs,reset pin
nic.ifconfig(('192.168.1.20','255.255.255.0','192.168.1.1','8.8.8.8'))
while not nic.isconnected():
? ? time.sleep(1)
? ? print(nic.regs())
2.在MQTT配置中,代理IP地址是Raspberry Pi服務器的IP。
#mqtt config
mqtt_server = '192.168.1.7'
client_id = "wiz"
topic_sub = b'hello'
last_message = 0
message_interval = 5
counter = 0
def sub_cb(topic, msg):
? ? print((topic.decode('utf-8'), msg.decode('utf-8')))
#MQTT connect
def mqtt_connect():
? ? client = MQTTClient(client_id, mqtt_server, keepalive=60)
? ? client.set_callback(sub_cb)
? ? client.connect()
? ? print('Connected to %s MQTT Broker'%(mqtt_server))
? ? return client
#reconnect & reset
def reconnect():
? ? print('Failed to connected to Broker. Reconnecting...')
? ? time.sleep(5)
? ? machine.reset()
3.使用MQTT訂閱
#subscribe
def main():
? ? w5x00_init()
? ? try:?
? ? ? ? client = mqtt_connect()
? ? except OSError as e:
? ? ? ? reconnect()
? ? while True:
? ? ? ? client.subscribe(topic_sub)
? ? ? ? time.sleep(1)
? ? client.disconnect()
如果您訂閱了“Hello”主題,則可以從發布服務器獲得一條消息。
MQTT訂閱
文檔:
代碼:
MQTT_pub
MQTT_sub?
總結
以上是生活随笔為你收集整理的W5100S-EVB-Pico [Micropython] – MQTT的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux下的信号处理(转自计世网)
- 下一篇: 微型计算机接口技术刘乐善答案,微型计算机