使用开源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"}

其他如在线测试,日志跟踪,文件管理的功能可以自己去摸索。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部