HaaS轻应用(Python):手把手带你玩转mqtt

简介: HaaS轻应用(Python):手把手带你玩转mqtt

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源码

 
wget http://mosquitto.org/files/source/mosquitto- 1. 6. 8.tar.gz

 

  • 解压,编译,安装

 
  1. echo "解压"
  2. tar -zxvf mosquitto- 1. 6. 8.tar.gz
  3. echo "进入mosquitto-1.6.8"
  4. cd mosquitto- 1. 6. 8
  5. echo "编译"
  6. make
  7. echo "安装"
  8. sudo make install

 

如果找不到libmosquitto.so.1这个问题,修改链接路径,重新加载动态链接库


 
  1. sudo ln -s /usr/local/ lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1
  2. sudo ldconfig

 

  • 设置用户名(haas)和密码

 
mosquitto_passwd -c pwfile.example  haas

 

输入上述命令后,会要求连续输入两次密码进行确认

  • 修改启动配置文件mosquitto.conf,不允许匿名登录

 
allow_anonymous false

 

  • 启动mqtt server

 
mosquitto -c mosquitto.conf  -p 1885

 

启动成功以后,server 的打印如下:

 

4、设备端环境搭建

4.1、固件烧录

HaaS设备需要确保烧录了Python轻应用的固件,如果没有请参考Python轻应用快速上手,中的固件烧录部分。

 

4.2、MQTT应用代码更新和运行

通过Python轻应用的IDE 工具将以下代码推送到设备上去执行(或者拷贝到文件系统手动执行)。


 
  1. #!/usr/bin/env python
  2. # -*- encoding: utf-8 -*-
  3. '''
  4. @File       :    mqtt_test.py
  5. @Description:    file description  
  6. @Date       :    2021/06/04 18:00:06
  7. @Author     :    guoliang.wgl
  8. @version    :    1.0
  9. '''
  10. import mqtt
  11. import time
  12. # 初始化mqtt 客户端
  13. client = mqtt.client( "haas")
  14. # 定义消息订阅回调函数
  15. def on_subcribe(topic,payload):
  16.     print( "on_subcribe: topic is:" + topic)
  17.     print( "on_subcribe: payload is:" + payload)
  18. client.on_subcribe(on_subcribe)
  19. # 用户名和密码替换成自己的服务器上面设置的用户名和密码
  20. client.username_pw_set( 'haas', '20210604')
  21. # 连接mqtt服务端,修改自己服务器的  ip 地址和 启动端口(本例中是1885)
  22. client.connect( "xxx.xxx.xxx.xxx", 1885, 60)
  23. #订阅消息:test/haas/python
  24. client.subscribe( "/test/haas/python", 1)
  25. # 每隔2s 向test/pc/python topic 发布消息一次,一共5 次
  26. for i in range( 5):
  27.     client.publish( "/test/pc/python", "msg" +str(i)+ " send by haas", 1)
  28.     time.sleep( 2)
  29. while True:
  30.     client.loop( 1000)
  31. client.disconnect()

 

以上代码中,我们在HaaS设备上连接了mqtt服务,并订阅了一个topic : test/haas/python ,并且每隔5s ,向topic: /test/pc/python 发送一次消息。

需要注意的是,执行以上代码之前,需要确保设备端网络是连通的。

 

5、PC 端测试

5.1、订阅消息


 
mosquitto_sub  -p 1885  -t '/test/pc/python' -u haas -P 20210604

 

在PC 端启动server 以后,通过以上命令订阅topic:/test/pc/python 以后,当设备端启动Python轻应用,pc端会收到如下消息:

 

5.2、发送消息


 
mosquitto_pub  -p 1885  -t '/test/haas/python' -m "来自pc的消息" -u haas -P 20210604

 

当pc 端发布以上消息以后,设备端会收到相关的消息。

 

技术交流

Python轻应用继承了Python易学易用的特点,同时提供了基于嵌入式硬件的基础库封装,让开发者可以很方便的通过交互式的环境,实时进行嵌入式开发,让嵌入式开发也变得简单方便。

如需更多技术支持,可加入钉钉开发者群,享受一对一的技术支持。

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
27天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
2月前
|
机器学习/深度学习 Python
堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能
本文深入探讨了堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能。文章详细介绍了堆叠的实现步骤,包括数据准备、基础模型训练、新训练集构建及元学习器训练,并讨论了其优缺点。
62 3
|
2月前
|
机器学习/深度学习 算法 数据挖掘
线性回归模型的原理、实现及应用,特别是在 Python 中的实践
本文深入探讨了线性回归模型的原理、实现及应用,特别是在 Python 中的实践。线性回归假设因变量与自变量间存在线性关系,通过建立线性方程预测未知数据。文章介绍了模型的基本原理、实现步骤、Python 常用库(如 Scikit-learn 和 Statsmodels)、参数解释、优缺点及扩展应用,强调了其在数据分析中的重要性和局限性。
65 3
|
5天前
|
算法 数据处理 Python
高精度保形滤波器Savitzky-Golay的数学原理、Python实现与工程应用
Savitzky-Golay滤波器是一种基于局部多项式回归的数字滤波器,广泛应用于信号处理领域。它通过线性最小二乘法拟合低阶多项式到滑动窗口中的数据点,在降噪的同时保持信号的关键特征,如峰值和谷值。本文介绍了该滤波器的原理、实现及应用,展示了其在Python中的具体实现,并分析了不同参数对滤波效果的影响。适合需要保持信号特征的应用场景。
45 11
高精度保形滤波器Savitzky-Golay的数学原理、Python实现与工程应用
|
13天前
|
消息中间件 存储 监控
说说MQ在你项目中的应用(一)
本文总结了消息队列(MQ)在项目中的应用,主要围绕异步处理、系统解耦和流量削峰三大功能展开。通过分析短信通知和业务日志两个典型场景,介绍了MQ的实现方式及其优势。短信通知中,MQ用于异步发送短信并处理状态更新;业务日志中,Kafka作为高吞吐量的消息系统,负责收集和传输系统及用户行为日志,确保数据的可靠性和高效处理。MQ不仅提高了系统的灵活性和响应速度,还提供了重试机制和状态追踪等功能,保障了业务的稳定运行。
49 6
|
30天前
|
缓存 开发者 Python
深入探索Python中的装饰器:原理、应用与最佳实践####
本文作为技术性深度解析文章,旨在揭开Python装饰器背后的神秘面纱,通过剖析其工作原理、多样化的应用场景及实践中的最佳策略,为中高级Python开发者提供一份详尽的指南。不同于常规摘要的概括性介绍,本文摘要将直接以一段精炼的代码示例开篇,随后简要阐述文章的核心价值与读者预期收获,引领读者快速进入装饰器的世界。 ```python # 示例:一个简单的日志记录装饰器 def log_decorator(func): def wrapper(*args, **kwargs): print(f"Calling {func.__name__} with args: {a
40 2
|
30天前
|
机器学习/深度学习 人工智能 自然语言处理
探索未来编程:Python在人工智能领域的深度应用与前景###
本文将深入探讨Python语言在人工智能(AI)领域的广泛应用,从基础原理到前沿实践,揭示其如何成为推动AI技术创新的关键力量。通过分析Python的简洁性、灵活性以及丰富的库支持,展现其在机器学习、深度学习、自然语言处理等子领域的卓越贡献,并展望Python在未来AI发展中的核心地位与潜在变革。 ###
|
8天前
|
存储 缓存 算法
探索企业文件管理软件:Python中的哈希表算法应用
企业文件管理软件依赖哈希表实现高效的数据管理和安全保障。哈希表通过键值映射,提供平均O(1)时间复杂度的快速访问,适用于海量文件处理。在Python中,字典类型基于哈希表实现,可用于管理文件元数据、缓存机制、版本控制及快速搜索等功能,极大提升工作效率和数据安全性。
41 0
|
2月前
|
机器学习/深度学习 自然语言处理 语音技术
Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧
本文介绍了Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧,并通过TensorFlow和PyTorch等库展示了实现神经网络的具体示例,涵盖图像识别、语音识别等多个应用场景。
65 8
|
13天前
|
消息中间件 存储 中间件
说说MQ在你项目中的应用(二)商品支付
本文总结了消息队列(MQ)在支付订单业务中的应用,重点分析了RabbitMQ的优势。通过异步处理、系统解耦和流量削峰等功能,RabbitMQ确保了支付流程的高效与稳定。具体场景包括用户下单、支付请求、商品生产和物流配送等环节。相比Kafka,RabbitMQ在低吞吐量、高实时性需求下表现更优,提供了更低延迟和更高的可靠性。
27 0