vlambda博客
学习文章列表

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

点击上方"蓝字"
关注我们吧!

本文分享华为云社区《基于移远QuecPython开发板对接华为云


【摘要】 本文基于移远QuecPython cat1开发板EC600X_QuecPython_EVB_V2.0,基于其内部固件开发demo对接华为云



01
  云端开发


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

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

图1

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

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

图2

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

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

图3

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

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

图4

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

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

图5


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

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


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

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

03
端侧开发

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

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

图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()

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

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

图7

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

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

图8

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

图9

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

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

图10

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

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

图11

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

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

图12

以上就是基于移远QuecPython开发板对接华为云,有兴趣的小伙伴可以一起实操起来~

更多学习内容,请关注IoT物联网社区