基于移远QuecPython开发板对接华为云

网友投稿 687 2022-05-30

1 云端开发

首先进入华为云官网,登陆华为云账号,进入IoTDA(设备接入),点击产品,创建产品。

图1

按照下图,自定义产品名称、厂商名称以及设备类型。

图2

点击产品,在右侧产品名称列表中点击上述创建的产品名称,进入产品,点击上传模型文件,选择添加文件,将附件(Agriculture_Profile)中的模型文件压缩包上传到云端。

图3

点击上述产品中的在线调试,新增测试设备,注意设备标识码保持唯一性。

基于移远QuecPython开发板对接华为云

图4

创建设备后,会出现设备ID和产品秘钥,请保存好设备秘钥,或者点击左侧导航栏,进入设备列表,在“所有设备”中找到新增的真实设备,进行重置秘钥。注意设备ID和设备秘钥是设备对接华为云的关键信息,后面会用到二者进行设备鉴权。

图5

2 模组开发环境安装(如已经安装略过该步骤)

下载RDA驱动,根据系统环境进行选择对应系统版本安装,之后参考官方文档进行开发环境搭建,QuecPython开发环境搭建

3端侧开发

将下述脚本烧录到开发板,点击运行。需要将图5中的设备ID和设备秘钥替换为华为云IoTDA中的设备信息

图6

import utime import _thread import ujson import modem import hmac from hashlib import sha256 from umqtt import MQTTClient from machine import UART # 如果想使用IMEI,可通过下列语句该进行获取IMEI号 IMEI = modem.getDevImei() # 客户只需要提供DeviceID和DeviceSecret即可实现对接华为云 DeviceID = "62183fafe68aa647c087eee6_cat_test227" DeviceSecret = "4fd113fbbdd5dcbe1a93091ce4ea1829" TIME_STAMP = str(utime.time()) CLIENT_ID = DeviceID + "_0_0_"+ TIME_STAMP SERVER = "a15fbbd7ce.iot-mqtts.cn-north-4.myhuaweicloud.com" PORT = 1883 USER = DeviceID PASSWORD = hmac.new( TIME_STAMP.encode('utf-8'), DeviceSecret.encode('utf-8'), digestmod=sha256).hexdigest() state = 0 utime.time() def sub_cb(topic, msg): global state global c #global state print("Subscribe Recv: Topic={},Msg={}".format(topic.decode(),msg.decode())) topic = topic.decode() msg = b'''{"result_code": 0}''' if r'/sys/commands/request_id=' in topic: c.publish('$oc/devices/{}/sys/commands/response/request_id={}'.format(DeviceID, (topic.split("=")[-1])), msg) #state = 1 def mqtt_init(): global c # 创建一个mqtt实例 c = MQTTClient( client_id=CLIENT_ID, server=SERVER, port=PORT, user=USER, password=PASSWORD, keepalive=30) # 必须要 keepalive=30 ,否则连接不上 # 设置消息回调 c.set_callback(sub_cb) # 建立连接 c.connect() c.subscribe('$oc/devices/{}/sys/commands/#'.format(DeviceID)) # 数据上报任务 def thread_reportmsg(): global c while True: tem = utime.time() % 25 hum = utime.time() % 35 lum = utime.time() % 100 Msg = { "services": [{ "service_id": "Agriculture", "properties": { "Temperature": tem, "Humidity": hum, "Luminance": lum, "LightStatus": "ON", "MotorStatus": "OFF" } }] } msg = ujson.dumps(Msg) c.publish('$oc/devices/{}/sys/properties/report'.format(DeviceID), msg) utime.sleep_ms(2000) # 命令处理任务 def thread_rcvmsg(): global c print('Waiting command') while True: c.wait_msg() if state == 1: utime.sleep_ms(300) break # 断开连接函数没有执行,函数中没有将state置为1,如果想增加断开连接,可以在某处增加断开连接 c.disconnect() def main(): mqtt_init() _thread.start_new_thread(thread_reportmsg, ()) _thread.start_new_thread(thread_rcvmsg, ()) if __name__ == "__main__": main()

可以看见在云端看到设备在线同时将模拟数据上传到华为云。

图7

如果想看到数据一一对应的关系,可以在上述代码中添加打印日志,将msg打印出来实现对照具体如下图所示。可见上报消息与端侧打印的日志是一致的。

图8

图9

点击同步命令下发下的命令下发,选择命令以及命令值,进行命令下发

图10

点击命令下发,可见命令下发成功。

图11

同时在设备侧控制台可以看见日志打印信息。

图12

附件: Agriculture_Profile.zip 1.29KB 下载次数:1次

Python 硬件开发 设备接入 IoTDA

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:php set_time_limit()用法测试详解
下一篇:分享一些整理的HTTP状态码及其详解
相关文章