Python 语言的是一款非常容易使用的解释性语言,它的主要特点如下:易学易用;可扩展可移植;丰富的三方库。正是由于以上这些特点,使得Python在一些逻辑简单,功能复杂的场景应用非常广泛。近几年,随着人工智能的飞速发展,Python 的优点得到的充分的体现,因此成为了AI开发的首选语言。
Python轻应用主要是基于micropython实现,在保留了Python语言主要特性的基础上,他还对嵌入式系统的底层做了非常不错的封装,它的特点如下:
- 安全便捷的上云能力
依托阿里云物联网平台,通过客户自定义物模型,满足各种不同场景的的数据上云需求。同时通过阿里云安全团队提供的ID2,保证数据安全。
- 丰富强大的AI能力
背靠达摩院,提供150+ 视觉AI算法,统一视觉算法的调用流程,让开发者通过简单的几个API 实现各种不同场景的AI需求。
- 简单易用的开发调试手段
基于VS Code的IDE插件,提供代码快速编辑功能,一键热更新功能,实现应用开发和系统开发解耦,降低开发门槛,提高开发效率。
今天要介绍的是如何使用Python =轻应用,进行mqtt消息的订阅和发布!
2、MQTT协议简介
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是基于一种发布/订阅(publish/subscribe)模式的 “ 轻量级 ” 通讯协议,该协议构建于 TCP/IP 协议上,由IBM在1999 年发布。MQTT 最大优点在于可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。MQTT 协议当前版本为,2014年发布的MQTTv3.1.1。
2.1、MQTT的特点
- 使用的发布/订阅消息模式,它提供了一对多消息分发,以实现与应用程序的解耦;
- 对负载内容屏蔽的消息传输机制;
- 对传输消息有三种服务质量(QoS):
- 最多一次,这一级别会发生消息丢失或重复,消息发布依赖于底层TCP/IP网络。即:<=1;
- 至多一次,这一级别会确保消息到达,但消息可能会重复。即:>=1;
- 只有一次,确保消息只有一次到达。即:=1。在一些要求比较严格的计费系统中,可以使用此级别;
- 数据传输和协议交换的最小化(协议头部只有2字节),以减少网络流量;
- 通知机制,异常中断时通知传输双方;
2.2、MQTT 协议原理
MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。
MQTT传输的消息分为:主题(Topic)和负载(payload)两部分
Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload)
payload,可以理解为消息的内容,是指订阅者具体要使用的内容
本文将要介绍的就是,通过pc 充当服务端,使用搭载Python轻应用的HaaS开发板作为客户端,实现pc端到设备端的消息订阅和发布。
3、PC环境搭建
本文中,pc端的环境是 ununtu 16.04, PC 端环境分为两个部分:mqtt服务端启动,以及mqtt客户端(发布者和订阅者)。
MQTT Server安装和常用命令
- 下载mosquitto源码
- 解压,编译,安装
-
echo "解压"
-
tar -zxvf mosquitto-1.6.8.tar.gz
-
echo "进入mosquitto-1.6.8"
-
cd mosquitto-1.6.8
-
echo "编译"
-
make
-
echo "安装"
-
sudo make install
如果找不到libmosquitto.so.1这个问题,修改链接路径,重新加载动态链接库
-
sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1
-
sudo ldconfig
- 设置用户名(haas)和密码
输入上述命令后,会要求连续输入两次密码进行确认
- 修改启动配置文件mosquitto.conf,不允许匿名登录
- 启动mqtt server
启动成功以后,server 的打印如下:
4、设备端环境搭建
4.1、固件烧录
HaaS设备需要确保烧录了Python轻应用的固件,如果没有请参考Python轻应用快速上手,中的固件烧录部分。
4.2、MQTT应用代码更新和运行
通过Python轻应用的IDE 工具将以下代码推送到设备上去执行(或者拷贝到文件系统手动执行)。
-
#!/usr/bin/env python
-
# -*- encoding: utf-8 -*-
-
'''
-
-
@File : mqtt_test.py
-
-
@Description: file description
-
-
@Date : 2021/06/04 18:00:06
-
-
@Author : guoliang.wgl
-
-
@version : 1.0
-
-
'''
-
import mqtt
-
import time
-
# 初始化mqtt 客户端
-
client = mqtt.client("haas")
-
# 定义消息订阅回调函数
-
def on_subcribe(topic,payload):
-
print("on_subcribe: topic is:" + topic)
-
print("on_subcribe: payload is:" + payload)
-
client.on_subcribe(on_subcribe)
-
# 用户名和密码替换成自己的服务器上面设置的用户名和密码
-
client.username_pw_set('haas','20210604')
-
# 连接mqtt服务端,修改自己服务器的 ip 地址和 启动端口(本例中是1885)
-
client.connect("xxx.xxx.xxx.xxx",1885,60)
-
#订阅消息:test/haas/python
-
client.subscribe("/test/haas/python",1)
-
# 每隔2s 向test/pc/python topic 发布消息一次,一共5 次
-
for i in range(5):
-
client.publish("/test/pc/python","msg" +str(i)+ " send by haas",1)
-
time.sleep(2)
-
while True:
-
client.loop(1000)
-
client.disconnect()
以上代码中,我们在HaaS设备上连接了mqtt服务,并订阅了一个topic : test/haas/python ,并且每隔5s ,向topic: /test/pc/python 发送一次消息。
需要注意的是,执行以上代码之前,需要确保设备端网络是连通的。
5、PC 端测试
5.1、订阅消息
在PC 端启动server 以后,通过以上命令订阅topic:/test/pc/python 以后,当设备端启动Python轻应用,pc端会收到如下消息:
5.2、发送消息
当pc 端发布以上消息以后,设备端会收到相关的消息。
技术交流
Python轻应用继承了Python易学易用的特点,同时提供了基于嵌入式硬件的基础库封装,让开发者可以很方便的通过交互式的环境,实时进行嵌入式开发,让嵌入式开发也变得简单方便。
如需更多技术支持,可加入钉钉开发者群,享受一对一的技术支持。