官網有一篇 MQTT 的安裝教學
Building and running Mosquitto MQTT on Intel Edison
我按照上面的步驟操作,但在編譯時卡住了
read_handle_server.c:31:25: fatal error: uuid/uuid.h: No such file or directory
於是參考網路上其他人的教學,安裝 paho-mqtt 這個套件,使用 Python 來開發
安裝 pip 套件管理工具
為了要安裝 Python 套件,我們必須先安裝好 pip 管理工具 首先新增 opkg 的 repositories
vi /etc/opkg/base-feeds.conf
src/gz all http://repo.opkg.net/edison/repo/all src/gz edison http://repo.opkg.net/edison/repo/edison src/gz core2-32 http://repo.opkg.net/edison/repo/core2-32
接著更新 package list
opkg update
安裝 pip 前,先安裝 setuptools
wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py Then run python ez_setup.py --no-check-certificate
python ez_setup.py
使用 opkg 安裝 pip
opkg install python-pip
安裝 MQTT
pip install paho-mqtt
測試 MQTT
我們先用下面的範例程式,來測試 MQTT 是否可以成功訂閱 Topic Subscriber 端 Python 測試程式
# SubscriberTest.py
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe("IOT_NEAT_TOPIC01")
def on_message(client, userdata, msg):
print(msg.topic+" "+str(msg.payload))
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("mqtt.phodal.com", 1883, 60)
client.loop_forever()
python SubscriberTest.py
Connected with result code 0 IOT_NEAT_TOPIC01 {'member':'luke','age':11}
mqtt.phodal.com 這是一個測試 Server,已經發佈一個名稱為 IOT_NEAT_TOPIC01 的 Topic,因此我們可以收到 Topic 內容
{'member':'luke','age':11}
client.connect 第 1 欄為 Server 位置,第 2 欄是 port,第 3 欄是 timeout 時間 (秒)。如果要強制離開程式,按 Ctrl+C 會繼續進入 loop,我這邊用 Ctrl+Z 讓他進入背景執行,再用 kill 把他 terminate
jobs
[1]+ Stopped(SIGTSTP) python SubscriberTest.py
kill %1
在本機進行 Subscriber 與 Publisher 測試
測試過 Subscriber 後,我們就來建立 Publisher,在本機端使用 MQTT 傳遞訊息。 這邊將 Server 都改為 localhost,Topic 名稱改為 MYTOPIC。
Subscriber 端 Python 測試程式
# Subscriber.py
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe("MYTOPIC")
def on_message(client, userdata, msg):
print(msg.topic+" "+str(msg.payload))
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("localhost", 1883, 60)
client.loop_forever()
Publisher 端 Python 測試程式
# Publisher.py
import paho.mqtt.client as mqtt
_g_cst_ToMQTTTopicServerIP = "localhost"
_g_cst_ToMQTTTopicServerPort = 1883 #port
_g_cst_MQTTTopicName = "MYTOPIC" #TOPIC name
mqttc = mqtt.Client("python_pub")
mqttc.connect(_g_cst_ToMQTTTopicServerIP, _g_cst_ToMQTTTopicServerPort)
mqttc.publish(_g_cst_MQTTTopicName, "Hello")
執行 Publisher 後,Subscriber 就會收到一個 Hello 訊息。 測試的時候需要開兩個命令視窗,記得將 edison 連上網,使用 SSH 連線登入。如果透過 Serial Port 開兩個 Screen,會發現兩個視窗會同步動作,因為走同一條線XD
執行 Subscriber,讓他一直監聽 MYTOPIC 只要在另一個命令列執行 Publisher,Subscriber 就會接收到 Hello
python Subscriber.py
Connected with result code 0 MYTOPIC Hello
這樣就完成 MQTT 在本機的傳遞測試囉
參考資料
- Building and running Mosquitto MQTT on Intel Edison
- Installing PIP on the Intel Edison
- MQTT and Intel Edison – Intro
建議一下Python聖經
感謝推薦!