MQTT协议应用:外网手机控制内网树莓派

该博客通过MQTT协议实现外网手机控制内网中的树莓派。首先介绍了实验目的和前期准备工作,包括服务器安装Mosquitto,树莓派安装Python及扩展库。接着,详细说明了在树莓派上编写并运行订阅代码,以及如何开启服务器的MQTT代理服务,并使用手机客户端发布消息到树莓派。最后,提供了进一步学习MQTT相关库和开源客户端的资源链接。
摘要由CSDN通过智能技术生成

实验目的:将外网手机发送的字符串使用树莓派的串口输出
不了解MQTT协议的请参考:MQTT协议体验 Mosquitto安装和使用
不了解使用Python操作树莓派串口的请参考:Raspberry Pi B的UART极简例程

一、前期准备

  1. 服务器安装好Mosquitto(MQTT代理软件);
  2. 树莓派安装好Python(用来编写树莓派订阅代码),然后用pip安装paho-mqtt(实现了MQTT协议的Python扩展库)、wiringpi2(控制树莓派IO口的Python扩展库);
  3. 手机安装好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

  • 1
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值