ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

如何在树莓派上使用MQTT协议

如何在树莓派上使用MQTT协议 请你打开随便一个编辑工具, 然后把下面这部分代码内容输入进去, 接着把这些内容保存成一个后缀名为.py类型的文件。# subscriber.pyimport paho.mqtt.client as mqttdef on_connect(client, userdata, flags, rc):print(fConnected with result code {rc})# 订阅需要放在 on_connect 里# 如果与 broker 失去连接后重连仍然会继续订阅 raspberry/topic 主题client.subscribe(raspberry/topic)# 回调函数当收到消息时触发该函数def on_message(client, userdata, msg):print(f{msg.topic} {msg.payload})client mqtt.Client()client.on_connect on_connectclient.on_message on_message# 设置遗嘱消息当树莓派断电或者网络出现异常中断时发送遗嘱消息给其他客户端client.will_set(raspberry/status, b{status: Off})# 创建连接三个参数分别为 broker 地址broker 端口号保活时间client.connect(broker.emqx.io, 1883, 60)# 设置网络循环堵塞在调用 disconnect() 或程序崩溃前不会主动结束程序client.loop_forever()调用那个指定的函数, 树莓派就可以实现主题订阅的操作, 基于上方提供的代码片段来看, 开发者通过该方式完成了对 /topic 这个特定主题的连接动作, 同时开启了针对到来消息的实时监听程序。另外, 我们通过()配置了遗嘱消息, 这种消息是MQTT协议中内置的一种功能机制, 具体含义在于如果设备因为某种原因发生了非正常的网络连接中断行为, 那么该设备就会自动向指定的那个目标主题去发布一条通报信息, 借助于这个技术手段, 我们完全能够及时掌握树莓派是不是已经出现了断电状况, 或者是遇到了其他类型的网络通信异常情况。把消息给发出去。打开任意编辑器输入下面的代码并保存为.py文件import paho.mqtt.client as mqttimport timedef on_connect(client, userdata, flags, rc):print(fConnected with result code {rc})client mqtt.Client()client.on_connect on_connectclient.connect(broker.emqx.io, 1883, 60)# 每间隔 1 秒钟向 raspberry/topic 发送一个消息连续发送 5 次for i in range(5):# 四个参数分别为主题发送内容QoS, 是否保留消息client.publish(raspberry/topic, payloadi, qos0, retainFalse)print(fsend {i} to raspberry/topic)time.sleep(1)client.loop_forever()调用()函数, 可以向一个主题发送消息。在上面的代码中, 我们使用了它向主题/topic发送消息。其中参数QoS是另一个MQTT特性, 如果你想要了解更多关于QoS的内容, 可以查看MQTT QoS 0,1,2介绍。这里我们暂且把它设定为0。测试咱们这边采用了那个叫做MQTT X的客户端工具, 来把测试活儿给办一下, 而这个工具呢, 它用的是MQTT 5.0协议。测试订阅消息执行代码的运行过程, 并且主动向外部发送一条消息内容。1.第一步是打开终端, 然后在里面把代码运行起来, 接着就去负责监听那些传过来的消息。python3 subscriber.py2.使用MQTT X客户端, 与MQTT服务器建立连接, 向主题/topic发送消息。3.当你去查看一下树莓派上面终端里的信息, 你肯定会清楚地看到, 那个由 MQTT X 软件发布出去的消息, 已经完完整整地被接收成功了。发布消息, 并进行相关的测试工作。1.用户需要在MQTT X这个客户端里执行一个操作, 具体来说, 就是要去订阅那个标记为/topic的主题。2.把代码拉到终端里去运行, 这样就能实现功能了。3.在MQTT X这个客户端里面, 你可以去查看一下树莓派发送过来的那些消息。测试遗嘱消息咱们接下来要干的一件事情呢, 就是把那个遗嘱消息到底有没有设置成功这个事情, 拿出来好好地测试一下。1.当用户在MQTT X这个客户端软件里面的时候, 可以选择去执行订阅/。2.你可以中断当前的程序操作, 或者可以选择断开树莓派的网络连接。3.你可以去到那个mqtt x客户端里头, 然后去看到关于那个主题接收到的消息。总结我们已经在树莓派上完成了使用MQTT客户端库paho-mqtt来编写测试客户端的工作, 并且实现了让测试客户端连接到MQTT服务器的功能, 还支持了订阅主题、取消订阅操作, 以及发送和接收消息等所有必要的功能点。到现在为止, 相信各位读者朋友们已经掌握了怎么样去简单地运用一下 MQTT 这个服务, 即便这只不过仅仅是 MQTT 服务内容里非常小的一小部分, 但是也已经完全能够达成许多挺有意思的一些事情了, 比如。1.使用手机来发送MQTT消息, 从而实现对树莓派的远程控制。2.设定一个时间周期, 把树莓派的设备信息发送到MQTT服务器那边, 然后通过手机来接收这些消息, 这样一来就可能实现全天候的监控了。3.你可以把树莓派连接到MQTT服务器那边, 然后它再加上各种类型的传感器设备以及ESP模块, 这样一来就能搭建出很多有意思的物联网方面的应用程序出来。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进