基于移远QuecPython开发板对接华为云
本文分享华为云社区《基于移远QuecPython开发板对接华为云》
首先进入华为云官网,登陆华为云账号,进入IoTDA(设备接入),点击产品,创建产品。
图1
按照下图,自定义产品名称、厂商名称以及设备类型。
图2
点击产品,在右侧产品名称列表中点击上述创建的产品名称,进入产品,点击上传模型文件,选择添加文件,将附件(Agriculture_Profile)中的模型文件压缩包上传到云端。
图3
点击上述产品中的在线调试,新增测试设备,注意设备标识码保持唯一性。
图4
创建设备后,会出现设备ID和产品秘钥,请保存好设备秘钥,或者点击左侧导航栏,进入设备列表,在“所有设备”中找到新增的真实设备,进行重置秘钥。注意设备ID和设备秘钥是设备对接华为云的关键信息,后面会用到二者进行设备鉴权。
图5
下载RDA驱动,根据系统环境进行选择对应系统版本安装,之后参考官方文档进行开发环境搭建。
将下述脚本烧录到开发板,点击运行。需要将图5中的设备ID和设备秘钥替换为华为云IoTDA中的设备信息
图6
import utimeimport _threadimport ujsonimport modemimport hmacfrom hashlib import sha256from umqtt import MQTTClientfrom 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 = 1883USER = DeviceID
PASSWORD = hmac.new(
TIME_STAMP.encode('utf-8'),
DeviceSecret.encode('utf-8'),
digestmod=sha256).hexdigest()state = 0utime.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 = 1def 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
以上就是基于移远QuecPython开发板对接华为云,有兴趣的小伙伴可以一起实操起来~
更多学习内容,请关注IoT物联网社区