树莓派 由英国树莓派基金会开发,是一款基于 ARM 的微型计算机主板。该主板提供 USB 接口和以太网接口,能够连贯键盘、鼠标和网线,该主板具备 PC 的基本功能,同时树莓派集成了 Wi-Fi、蓝牙以及大量 GPIO,被宽泛使用在教学、家庭娱乐、物联网等。

MicroPython 是 Python 3 编程语言的一个残缺软件实现,用 C 语言编写,运行在 MCU(微控制器)硬件之上的齐全的 Python 编译器和运行时零碎,提供给用户一个交互式提示符(REPL)来立刻执行所反对的命令。除了包含选定的外围 Python 库,MicroPython 还包含了给予编程者拜访低层硬件的模块,是 Python 3 语言的精简实现 ,包含 Python 规范库的一小部分,通过优化可在微控制器和受限环境中运行。

MQTT 是一种基于公布/订阅模式的轻量级物联网音讯传输协定 ,能够用极少的代码和带宽为联网设施提供实时牢靠的音讯服务,它实用于硬件资源无限的设施及带宽无限的网络环境。因而,MQTT 协定广泛应用于物联网、挪动互联网、智能硬件、车联网、电力能源等行业。

本文将介绍如何在树莓派上应用 MicroPython 编写简略的 MQTT 客户端,并实现该客户端与 MQTT 服务器的连贯、订阅、公布等性能。

环境搭建

  1. 装置 MicroPython

    本我的项目应用 MicroPython 进行开发,能够应用上面的命令进行装置。

    sudo apt-get update# 装置 MicroPythonsudo apt-get -y install micropython

    装置实现后,在终端执行 micropython,如果显示 MicroPython x.x.x(x 示意数字)则示意曾经装置胜利。

  2. 装置 MQTT 客户端库

    为了不便连贯到 MQTT 服务器,咱们须要装置 umqtt.simple 库。

    micropython -m upip install umqtt.simple

连贯 MQTT 服务器

本文将应用 EMQ 提供的 收费公共 MQTT 服务器,该服务基于 MQTT 物联网云平台 - EMQX Cloud 创立。服务器接入信息如下:

  • Broker: broker-cn.emqx.io
  • TCP Port: 1883
  • Websocket Port: 8083

订阅音讯

关上任意编辑器,输出上面的代码,并保留为 sub.py 文件:

# sub.pyimport timefrom umqtt.simple import MQTTClient# 定义 sub 客户端的连贯信息SERVER="broker-cn.emqx.io"ClientID = f'raspberry-sub-{time.time_ns()}'user = "emqx"password = "public"topic = "raspberry/mqtt"msg = b'{"msg":"hello"}'def sub(topic, msg):# 在回调函数打印主题和音讯    print('received message %s on topic %s' % (msg, topic))def main(server=SERVER):# 创立连贯,参数别离为客户端 ID,broker 地址,broker 端口号,认证信息    client = MQTTClient(ClientID, server, 1883, user, password)    client.set_callback(sub)    client.connect()    print('Connected to MQTT Broker "%s"' % (server))# 如果与 broker 失去连贯后重连,依然会持续订阅 raspberry/topic 主题    client.subscribe(topic)    while True:        if True:            client.wait_msg()        else:            client.check_msg()            time.sleep(1)if __name__ == "__main__":    main()

公布音讯

关上任意编辑器,输出上面的代码,并保留为 pub.py 文件:

# pub.pyimport timefrom umqtt.simple import MQTTClient# 定义 pub 客户端的连贯信息server="broker-cn.emqx.io"ClientID = f'raspberry-pub-{time.time_ns()}'user = "emqx"password = "public"topic = "raspberry/mqtt"msg = b'{"msg":"hello"}'# 创立连贯,参数别离为客户端 ID,broker 地址,broker 端口号,认证信息def connect():    print('Connected to MQTT Broker "%s"' % (server))    client = MQTTClient(ClientID, server, 1883, user, password)    client.connect()    return clientdef reconnect():# 若无奈连贯到 broker,打印一条音讯以告诉连贯不胜利,并且期待 5 秒发动重连    print('Failed to connect to MQTT broker, Reconnecting...' % (server))    time.sleep(5)    client.reconnect()# 若能连贯到 broker,调用 connect(),反之调用 reconnect()try:    client = connect()except OSError as e:    reconnect()# 每隔 1 秒给主题 raspberry/mqtt 发送一条音讯while True:  print('send message %s on topic %s' % (msg, topic))  client.publish(topic, msg, qos=0)  time.sleep(1)

在下面的代码中,咱们调用 publish() 函数向主题 raspberry/mqtt 发送音讯。其中参数 QoS 是另一个 MQTT 个性,如果你想理解更多 QoS 的内容,能够查看 MQTT QoS(服务质量)介绍,本示例中咱们设置为 0。

测试

咱们应用 MQTT 5.0 客户端工具 - MQTT X 进行以下测试。

测试订阅音讯

运行 MicroPython 代码,并被动发送一个音讯。

  1. 关上终端,运行 MicroPython 代码,监听音讯 。

    micropython sub.py

  2. 应用 MQTT X 客户端与 MQTT 服务器建设连贯,并向主题 raspberry/mqtt 发送音讯 。
  3. 查看树莓派终端信息,将会看到已胜利接管到 MQTT X 公布的音讯。

测试公布音讯

  1. 在 MQTT X 客户端中订阅 raspberry/mqtt 主题 。
  2. 在终端运行 MicroPython 代码 ,公布音讯。

    micropython pub.py

  3. 在 MQTT X 客户端中,查看树莓派发送的音讯。

结语

以上就是在树莓派上应用 MicroPython 进行编程的简略示例。咱们通过 MicroPython umqtt.simple 实现了一个简略的测试客户端,并实现了该客户端与 MQTT 服务器的连贯与音讯收发。 MQTT 最大长处在于以极少的代码和无限的带宽,为连贯近程设施提供实时牢靠的音讯服务,而树莓派则是一个体积小、发热低、能耗低、绝对全面的硬件模块。二者相结合,即便是在微控制器或是受限环境中,也可助您开发出更多翻新利用。

版权申明: 本文为 EMQ 原创,转载请注明出处。

原文链接:https://www.emqx.com/zh/blog/micro-python-mqtt-tutorial-based-on-raspberry-pi