MQTT协议应用:外网手机控制内网树莓派
16lz
2021-01-22
实验目的:将外网手机发送的字符串使用树莓派的串口输出
不了解MQTT协议的请参考:MQTT协议体验 Mosquitto安装和使用
不了解使用Python操作树莓派串口的请参考:Raspberry Pi B的UART极简例程
一、前期准备
- 服务器安装好Mosquitto(MQTT代理软件);
- 树莓派安装好Python(用来编写树莓派订阅代码),然后用pip安装paho-mqtt(实现了MQTT协议的Python扩展库)、wiringpi2(控制树莓派IO口的Python扩展库);
- 手机安装好MQTT安卓客户端。
二、编辑并运行树莓派订阅代码
在树莓派中编辑并保存如下代码为MQTT.py文件,并且增加可执行权限,然后用超级用户运行MQTT.py。
#!/usr/bin/env python
import paho.mqtt.client as mqtt
import wiringpi
# 连接成功回调函数
def on_connect(client, userdata, flags, rc):
print("Connected with result code " + str(rc))
# 连接完成之后订阅serial主题
client.subscribe("serial")
# 消息推送回调函数
def on_message(client, userdata, msg):
print(msg.topic+" "+str(msg.payload))
# 将负载通过串口发出
wiringpi.serialPuts(serial,str(msg.payload))
if __name__ == '__main__':
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
wiringpi.wiringPiSetup()
serial = wiringpi.serialOpen('/dev/ttyAMA0',9600)
try:
# 请更改为自己MQTT代理服务器的公网IP
client.connect("192.168.1.107", 1883, 60)
client.loop_forever()
except KeyboardInterrupt:
client.disconnect()
wiringpi.serialClose(serial)
三、开启服务器MQTT代理服务,并使用手机客户端发布消息
在服务器上执行mosquitto命令,运行MQTT代理服务。然后打开MQTT Client手机APP,输入MQTT代理服务器的IP地址、serial主题和消息内容,最后点击Publish,此时树莓派的串口就会输出消息内容了。
四、进一步学习
想了解paho-mqtt扩展库的更多功能的请参考:paho-mqtt 1.1 : Python Package Index
想了解wiringpi2扩展库的更多功能的请参考:WiringPi_WiringPi-Python: Python-wrapped version of Gordon Henderson’s WiringPi version 2.
想获取更多平台上的开源MQTT客户端的请参考:Paho - Open Source messaging for M2M
更多相关文章
- pylogin系列之V2EX自动领币消息提醒
- Linux 下串口编程之三 termios结构体介绍
- tty、串口、console等的区别
- Linux下多任务间通信和同步-消息队列
- Linux串口应用编程
- Android studio 中NDK的配置和JNI实现的完整过程SerialPort andr
- 关于利用android-serialport-api实现在安卓设备上进行串口通信,附
- 安卓消息处理机制
- JAVA实现 springMVC方式的微信接入、实现消息自动回复