RaspberryPi由英国树莓派基金会开发,是一款基于ARM架构的微型电脑主板。主板提供USB接口和以太网接口,可连接键盘、鼠标和网线。主板具备PC的基本功能。同时,树莓派集成了Wi-Fi、蓝牙和大量的GPIO,广泛应用于教学、家庭娱乐、IoT等领域。MicroPython是Python3编程语言的完整软件实现,用C语言编写,在MCU(微控制器)硬件上运行完整的Python编译器和运行时系统,为用户提供交互式提示(REPL)以立即执行支持的命令。除了包括选定的核心Python库之外,MicroPython还包括使程序员能够访问低级硬件的模块。它是Python3语言的精简实现,包括一小部分Python标准库,针对微控制器和受限环境运行进行了优化。MQTT是一种基于发布/订阅模型的轻量级物联网消息传输协议。它可以用很少的代码和带宽为联网设备提供实时可靠的消息服务。适用于硬件资源有限的设备和带宽有限的网络。环境。因此,MQTT协议被广泛应用于物联网、移动互联网、智能硬件、车联网、电力能源等行业。本文将介绍如何在树莓派上使用MicroPython编写一个简单的MQTT客户端,实现客户端与MQTT服务端的连接、订阅、发布等功能。环境搭建与安装MicroPython本项目使用MicroPython进行开发,可以使用如下命令进行安装。sudoapt-getupdate#安装MicroPythonsudoapt-get-yinstallmicropython安装完成后,在终端执行micropython。如果显示MicroPythonx.x.x(x代表数字),则表示安装成功。安装MQTT客户端库为了方便连接MQTT服务器,我们需要安装umqtt.simple库。micropython-mupipinstallumqtt.simple连接MQTT服务器本文将使用EMQ提供的免费公共MQTT服务器,它是基于MQTT物联网云平台-EMQXCloud创建的。服务器访问信息如下:Broker:broker-cn.emqx.ioTCP端口:1883Websocket端口:8083订阅消息打开任意编辑器,输入以下代码,保存为sub.py文件:#sub.pyimporttimefromumqtt.simpleimportMQTTClient#定义子客户端的连接信息SERVER="broker-cn.emqx.io"ClientID=f'raspberry-sub-{time.time_ns()}'user="emqx"password="public"topic="raspberry/mqtt"msg=b'{"msg":"hello"}'defsub(topic,msg):#在回调函数中打印主题和消息print('收到关于主题%s的消息%s'%(msg,topic))defmain(server=SERVER):#创建连接,参数为clientID,broker地址,broker端口号,认证信息client=MQTTClient(ClientID,server,1883,user,password)client.set_callback(sub)client.connect()print('已连接到MQTTBroker"%s"'%(server))#如果与broker失去连接后重新连接,则继续订阅raspberry/topic主题分类ient.subscribe(topic)whileTrue:如果True:client.wait_msg()else:client.check_msg()time.sleep(1)if__name__=="__main__":main()发布消息,打开任意编辑器,输入以下代码,保存为pub.py文件:#pub.pyimporttimefromumqtt.simpleimportMQTTClient#定义pub客户端的连接信息server="broker-cn.emqx.io"ClientID=f'raspberry-pub-{time.time_ns()}'user="emqx"password="public"topic="raspberry/mqtt"msg=b'{"msg":"你好"}'#创建Connection,参数为clientID,broker地址,broker端口号,认证信息defconnect():print('连接到MQTTBroker"%s"'%(server))client=MQTTClient(ClientID,server,1883,user,password)client.connect()returnclientdefreconnect():#如果无法连接到broker,则打印一条消息告知连接不成功,等待5秒后发起重连print('无法连接到MQTT代理,正在重新连接。..'%(server))time.sleep(5)client.reconnect()#如果可以连接到代理,则调用connect(),否则调用reconnect()尝试:客户=连接()exceptOSErrorase:reconnect()#每1秒向主题raspberry/mqtt发送一条消息whileTrue:print('sendmessage%sontopic%s'%(msg,topic))client.publish(topic,msg,qos=0)次。sleep(1)在上面的代码中,我们调用了publish()函数向主题raspberry/mqtt发送消息。参数QoS是另一个MQTT特性。如果想了解更多QoS,可以查看MQTTQoS(QualityofService)介绍,本例中我们设置为0。测试我们使用MQTT5.0客户端工具——MQTTX进行以下测试。TestSubscribeMessage运行MicroPython代码并主动请求消息。打开终端,运行MicroPython代码,然后收听消息。micropythonsub.py使用MQTTX客户端与MQTT服务器建立连接,并向主题raspberry/mqtt发送消息。查看树莓派终端信息,会看到MQTTX发布的消息已经成功接收。在MQTTX客户端中测试发布消息订阅raspberry/mqtt主题。在终端运行MicroPython代码,发布消息。micropythonpub.py在MQTTX客户端中,查看树莓派发送的消息。结论以上是在树莓派上用MicroPython编程的一个简单例子。我们通过MicroPythonumqtt.simple实现了一个简单的测试客户端,完成了客户端与MQTT服务端的连接和消息收发。MQTT最大的优势在于它以极少的代码和有限的带宽为连接的远程设备提供实时可靠的消息服务。树莓派是一个比较全面的硬件模块,体积小,发热量小,能耗低。两者的结合使您能够开发更具创新性的应用程序,即使在微控制器或受限环境中也是如此。版权声明:本文为EMQ原创,转载请注明出处。
