使用开源mqtt库 连接阿里云
文章目录
- 使用开源mqtt库 连接阿里云
- 前言
- 使用MQTT.fx来测试相应的加密算法
- python 连接
- 关于mqtt的一些理解
使用开源mqtt库 连接阿里云
前言
想将ROS配送车的速度上传到云平台,然后远程控制与监控。由于ROS要求python的版本是2.7,且阿里云的mqtt的sdk只支持python3.5。所以用开源的paho来实现相应功能
使用MQTT.fx来测试相应的加密算法
官网下载,MQTT.fx。
参考【MQTT】用MQTT.fx连接阿里云,直到设备通过MQTT.fx,连接在线即可。
注意事项:
-
clientId
千万不要选123456,最好复杂点 -
生成密钥工具,可以选加密工具
-
可以看下官方文档,但是那个最小加密工具真的不好用。
python 连接
安装paho库
pip install paho-mqtt
之后参考博主的代码魔改就可以了,记得更改一些参数配置
#!/usr/bin/python
# -*- coding:utf8 -*-#----------------函数头-------------------#
import paho.mqtt.client as mqtt
import time
import rospy
import json
from geometry_msgs.msg import Twist#---------------------变量设置-------------------#
# Client对象构造
MQTTHOST = "a1QSlaSJ16g.iot-as-mqtt.cn-shanghai.aliyuncs.com"
MQTTPORT = 1883
mqttClient = mqtt.Client("xxx|securemode=3,signmethod=hmacsha1|")
mqttClient.username_pw_set("xxxxx", "xxxxx")post_path = "/sys/a1QSlaSJ16g/linux/thing/event/property/post"#---------------------mqtt设置------------------------#
# 连接MQTT服务器
def on_mqtt_connect():mqttClient.connect(MQTTHOST, MQTTPORT, 60)mqttClient.loop_start()# publish 消息
def on_publish(topic, payload, qos):mqttClient.publish(topic, payload, qos)# 消息处理函数
def on_message_come(lient, userdata, msg):user_dic = json.loads(msg.payload)twist = Twist()param_dic =user_dic["params"]try:if("linear_x" in param_dic.keys()):pub_linear_x = user_dic["params"]["linear_x"]twist.linear.x = pub_linear_xif("angular_z" in param_dic.keys()):pub_angular_z = user_dic["params"]["angular_z"]twist.angular.z = pub_angular_zpub.publish(twist)except:print(user_dic)# subscribe 消息
def on_subscribe():# 订阅监听自定义TopicmqttClient.subscribe("/********/pythondevice2/user/update1", 1)mqttClient.on_message = on_message_come # 消息到来处理函数#------------------ROS函数回调------------------#
def mqtt_callback(data):if(data.linear.x == -0.0 and data.angular.z ==-0.0 ):passelse:linear_x = data.linear.xangular_z = data.angular.zpayload_json = {'id': int(time.time()),'params': {'linear_x': linear_x,'angular_z': angular_z},'method': "thing.event.property.post"}time.sleep(0.5)on_publish(post_path,str(payload_json),1)print(str(payload_json))def send_cmd():rate = rospy.Rate(2) # 10hzwhile not rospy.is_shutdown():pub.publish(twist)rate.sleep()if __name__ == '__main__':rospy.init_node('mqtt_server')on_mqtt_connect()on_subscribe()rospy.Subscriber("/mqtt_server", Twist, mqtt_callback)pub = rospy.Publisher('cmd_vel', Twist,queue_size = 3)rospy.spin()
关于mqtt的一些理解
正常情况下,用云服务器,emq 和node-red既可以拓展一个自己的mqtt控制中心。但是平台有平台的优势,无论是阿里云还是华为云,数据上云只是第一步,难得是后面的数据利用与控制。
以阿里云为例:
这是自己linux的物理数据模型

在物理设备模型下主要有运行状态,事件管理,服务调用等功能,这些数据节点之后又可以在lot studio里面完成一个网页的数据展示。
设备端向云端发送的topic,主要有以下:

发送的msg数据应是json格式,且包含数据的标识符,
数据格式如下:
payload_json = {'id': int(time.time()),'params': {'linear_x': linear_x,'angular_z': angular_z},'method': "thing.event.property.post"}
其他如在线测试,日志跟踪,文件管理的功能可以自己去摸索。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
