目的:實現手機終端和PC無線通信,然後做一些測試任務,經過查找資料,首先實現了PC之間的消息發送和接收實現步驟如下:
1. 搭建MQTT服務器
我選用的是EMQ,https://www.emqx.io/cn/downloads
下載後解壓,打開cmd終端,切到,解壓文件/bin路徑下,執行emqx.cmd start 啓動服務
注意:啓動這個服務的時候可能會報錯(XXX沒有權限),只需要以管理員權限打開終端,就能解決這個問題
2. 安裝客戶端UI軟件(客戶端可以在不同的PC上,服務器和客戶端所在的同一網段)
本步驟目的是圖形界面驗證服務和客戶端可用。代碼操作(不需要這個客戶端)在第3步,
下載 MQTT Utility windows客戶端,https://repo.eclipse.org/content/repositories/paho-releases/org/eclipse/paho/org.eclipse.paho.ui.app/1.1.1/
解壓,然後雙擊打開paho.exe,顯示界面如下,服務器地址填寫,服務器地址,比如:tcp://ip地址:端口號
- 服務器搭建好之後python代碼:
分兩部分,一部分是實時監聽接收,一部分是發送消息端,服務器只作爲消息的中轉。
監聽端
import sys
import os
import time
import paho.mqtt.client as mqtt
sys.path.append(os.path.abspath(os.path.dirname(__file__) + '/' + '..'))
sys.path.append("..")
REPORT_TOPIC = 'test' # 主題
def on_connect(client, userdata, flags, rc):
print('connected to mqtt with resurt code ', rc)
client.subscribe(REPORT_TOPIC) # 訂閱主題
def on_message(client, userdata, msg):
message = msg.payload.decode()
print(message)
def server_conenet(client):
client.on_connect = on_connect # 啓用訂閱模式
client.on_message = on_message # 接收消息
client.connect("服務器IP地址", 1883, 60) # 鏈接
# client.loop_start() # 以start方式運行,需要啓動一個守護線程,讓服務端運行,否則會隨主線程死亡
client.loop_forever() # 以forever方式阻塞運行。
def server_stop(client):
client.loop_stop() # 停止服務端
sys.exit(0)
def server_main():
client_id = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
client = mqtt.Client(client_id, transport='tcp')
server_conenet(client)
if __name__ == '__main__':
# 啓動監聽
server_main()
消息發送端
import paho.mqtt.client as mqtt
client = mqtt.Client()
# 參數有 Client(client_id="", clean_session=True, userdata=None, protocol=MQTTv311, transport="tcp")
client.connect("度武器IP地址", 1883, 60) # 連接服務器,端口爲1883,維持心跳爲60秒
client.publish('test', 'test string',1)
上述兩端代碼連接的IP地址需要修改爲服務器所在PC的IP地址
首先把監聽的代碼運行起來,時刻監聽主題爲“test”的消息,
然後運行發送消息的代碼,可以查看到監聽端已經捕獲到發送的消息
參考:
https://www.jianshu.com/p/b76dbc675141
https://blog.csdn.net/sinat_32651363/article/details/87876978
主機發消息Android端接收,實現無線測試可查看下邊連接
MQTT服務端python和移動終端Android通信,實現無線測試