最近有接触到MQTT所以突然想尝试一下树莓派和我的Windws10通过MQTT协议来通信,记录一下过程和要点

MQ 遥测传输 (MQTT) 是轻量级基于代理的发布/订阅的消息传输协议,设计思想是开放、简单、轻量、易于实现。

MQTT服务端

我使用的MQTT中间件是Apollo,现在网上找不到了,我放了自己百度网盘的链接,自取
百度网盘Apollo1.71资源(提取码:zdyt)
下载
下载之后解压,最好是解压在没有中文字符的路径下吧,防止一些意外。
创建服务器实例
切换目录到apollo文件夹下的bin目录里,如我解压到了D:下面
cd D:\apache-apollo-1.7.1-windows-distro\apache-apollo-1.7.1\bin

然后执行创建服务器实例的命令

apollo.cmd create mytest    //mytest是你的服务器实例名,可以自己取

创建完成后,你会发现在bin目录下会多出来一个mytest文件夹

python mqtt 连接 python mqtt协议_Windows


然后再次切换目录到mytest\bin目录下,运行代码启动服务

apollo-broker.cmd run

运行完成后如图所示

python mqtt 连接 python mqtt协议_Windows_02


输入http://127.0.0.1:61680就可以进入后台管理系统了,默认账号:admin,默认密码:password

MQTT客户端

下载paho-mqtt
要实现MQTT的客户端,就得在客户端上下载paho-mqtt库,我要在树莓派和Windows上进行通讯所以树莓派和Windows就都是客户端,两者都要下载(Windows既是客户端也是服务端),要注意python要是python3以上的版本,在命令行运行以下代码即可下载:

pip install paho-mqtt (Windows)
sudo pip3 install paho-mqtt  (树莓派)

下载完成后将树莓派和Windows接入同一局域网下,查看两者的ip地址

ipconfig  (Windows查看ip命令)
ifconfig  (Raspberry查看ip命令)

先ping,看看能不能ping通,如果可以就可以继续下一步,开始编写代码实现通信了,如果不行,请关闭Windows和树莓派的防火墙。
实现通信

Windows

import paho.mqtt.client as mqtt
import time
import sys

def on_connect(client, userdata, flags, rc): #连接成功的回调函数
    print("Connected with result code " + str(rc)) 
def on_subscribe(client,userdata,mid,granted_qos): #发送成功的回调函数
    print("消息发送成功")
def on_message(client, userdata, msg):
    print(msg.topic + " " + str(msg.payload))
    time.sleep(5)

client = mqtt.Client(protocol=3) #创建客户端实例
client.username_pw_set("admin", "password") #登录的账号密码
client.on_connect = on_connect #将自定义的回调函数赋值给实例对象
client.on_subscribe = on_subscribe
client.on_message = on_message

client.connect(host="127.0.0.1", port = 61613, keepalive=60)  # 订阅频道
time.sleep(1)
sensor_data = "I'm Windows10 "
client.publish(topic="toRaspBerryPi", payload=sensor_data, qos=0)
client.subscribe("toWindows10",0)

Raspberry

import paho.mqtt.client as mqtt
import time
import sys

def on_connect(client, userdata, flags, rc): #连接成功的回调函数
    print("Connected with result code " + str(rc)) 
def on_subscribe(client,userdata,mid,granted_qos): #发送成功的回调函数
    print("消息发送成功")
def on_message(client, userdata, msg):
    print(msg.topic + " " + str(msg.payload))
    sensor_data = "I'm RaspBerryPi "
    client.publish(topic="toWindows10", payload=sensor_data, qos=0)
    time.sleep(5)

client = mqtt.Client(protocol=3) #创建客户端实例
client.username_pw_set("admin", "password") #登录的账号密码
client.on_connect = on_connect #将自定义的回调函数赋值给实例对象
client.on_subscribe = on_subscribe
client.on_message = on_message

client.connect(host="127.0.0.1", port = 61613, keepalive=60)  # 订阅频道
time.sleep(1)
client.subscribe("toRaspBerryPi",0)

python mqtt 连接 python mqtt协议_mqtt_03


python mqtt 连接 python mqtt协议_客户端_04