• [技术干货] 基于华为云IoT设计的智能门锁
    ## 1. 前言 近几年物联网发展非常迅猛、周边各种设备都已经接入互联网,远程集成控制。例如: 智慧交通、森林防火、智慧小区、智慧停车场、智慧牧业、智慧农业等等。为了降低用户的成本、门槛,各大厂商平台也都开发了自己的物联网IOT云平台,方便用户接入快速搭建自己的应用场景。 ## 2. 设备硬件与功能介绍 这篇文章就介绍如何使用华为物联网云平台实现智能锁的应用场景构建,硬件采用STM32F103ZET6 + ESP8266+步进电机实现。在华为云IOT物联网平台构建智能锁项目,配置好云端,设备端通过ESP8266连接华为物联网平台,实现数据上报,交互,实现远程开锁、关锁、获取锁的状态等功能,不用担心忘记出门关锁,也不用担心忘记带钥匙无法开门的情况。 ESP8266是物联网解决方案里比较热门的WIFI设备,支持串口+AT指令控制,任意支持串口的单片机都可以使用ESP8266快速实现联网。 ![image-20211215173859997](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/image-20211215173859997.png) 步进电机采用常规28BYJ-48来模拟当做门锁的电机,驱动板采用ULN2003。 ![image-20211215173730289](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/image-20211215173730289.png) ## 3. 创建云端设备 登录官网: https://www.huaweicloud.com/ 直接搜索物联网,打开页面。 ![image-20211215174453102](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/image-20211215174453102.png) **选择设备接入:** ![image-20211215174521654](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/image-20211215174521654.png) **选择免费试用:** ![image-20211215174550243](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/image-20211215174550243.png) **在产品页面,点击右上角创建产品:** ![image-20211215174642960](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/image-20211215174642960.png) **填上产品信息:** ![image-20211215174937965](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/image-20211215174937965.png) 得到产品ID,保存好ID,点击查看详情: ```cpp 产品ID为:61b9ba3a2b2aa20288c1e7f1. ``` ![image-20211215175007908](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/image-20211215175007908.png) **点击设备页面,注册设备:** ![image-20211215175814693](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/image-20211215175814693.png) **填充信息进行注册:** ![image-20211215180006268](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/image-20211215180006268.png) **保存设备密匙和设备ID,点击保存关闭会自动下载文件保存,后面生成密码和登录账号需要使用** ![image-20211215180041077](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/image-20211215180041077.png) 关闭后就看到创建好的设备了: ![image-20211215180732602](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/image-20211215180732602.png) **点击产品页面,选择刚才创建的产品:** ![image-20211215180939201](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/image-20211215180939201.png) **选择自定义模型---创建数据模型服务:** ![image-20211215181036122](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/image-20211215181036122.png) ![image-20211215181144359](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/image-20211215181144359.png) **选择新增属性,创建设备的属性** ![image-20211215181424235](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/image-20211215181424235.png) ## 4. 创建MQTT登录账号和密匙 设备创建完成接来下生成MQTT登录账号、密匙,方便设备登录云端平台。 官网工具地址: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/ ![image-20211215181625067](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/image-20211215181625067.png) 打开刚才创建设备时,下载的密匙文件,把内容复制出来对应的填进去,生成即可。 ![image-20211215181747129](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/image-20211215181747129.png) ## 5. 拼接主题订阅与发布的格式 官方文档介绍: https://support.huaweicloud.com/devg-iothub/iot_01_2127.html ![image-20211215182442581](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/image-20211215182442581.png) **在产品页面可以,看到主题的全部格式:** ![image-20211215183137006](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/image-20211215183137006.png) 总结的格式如下: ```cpp 格式: $oc/devices/{device_id}/sys/messages/down //订阅主题: 平台下发消息给设备 $oc/devices/61b9ba3a2b2aa20288c1e7f1_QQ1126626497_0_0_2021121510/sys/messages/down 格式: $oc/devices/{device_id}/sys/properties/report //设备上报数据 $oc/devices/61b9ba3a2b2aa20288c1e7f1_QQ1126626497_0_0_2021121510/sys/properties/report 上属性的数据格式: //上报的属性消息 (一次可以上报多个属性,在json里增加就行了) {"services": [{"service_id": "lock","properties":{"门锁":1}}]} ``` 上面属性里的服务ID和属性里的名称,在设备页面,影子设备页面查看。 ![image-20211215184220051](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/image-20211215184220051.png) ## 6. MQTT客户端模拟设备登录云端 下面使用MQTT客户端模拟设备登录服务器测试,看设备创建的是否OK。 **服务器的IP地址是:** 121.36.42.100 **端口号是:** 1883 **打开MQTT客户端软件,按照提示,输入相关参数后,点击连接,然后再点击订阅主题,发布主题即可:** ![image-20211215184435114](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/image-20211215184435114.png) **查看云端服务器的情况:** 可以看到设备已经在线了,并且收到上传的数据。 ![image-20211215184612394](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/image-20211215184612394.png) **修改一下锁的状态,上报属性再查看:** ![image-20211215184712687](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/image-20211215184712687.png) **发现云端的状态也已经改变,现在设备上报已经OK。** ![image-20211215184735239](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/image-20211215184735239.png) **接下来测试命令下发,实现远程开锁关锁的功能:** 打开产品页面,新增加命令: ![image-20211215185156127](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/image-20211215185156127.png) ![image-20211215185232075](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/image-20211215185232075.png) ![image-20211215185302157](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/image-20211215185302157.png) **命令添加成功:** ![image-20211215185325872](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/image-20211215185325872.png) **在设备页面,选择同步命令下发:** ![image-20211215185445720](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/image-20211215185445720.png) ![image-20211215185523035](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/image-20211215185523035.png) 点击确定后,查看MQTT客户端,发现已经收到数据了: ![image-20211215185612755](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/image-20211215185612755.png) ```cpp $oc/devices/61b9ba3a2b2aa20288c1e7f1_QQ1126626497/sys/commands/request_id=88e2626f-290d-405e-962d-51554445a8fd{"paras":{"lock":1},"service_id":"lock","command_name":"lock"} ``` 设备端解析收到的数据,就可以完成多步进电机的控制,完成开锁关锁。 ## 7. STM32+ESP8266连接云端 ![2021-12-16_095526](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/2021-12-16_095526.jpg) ![image-20211215190612026](https://gitee.com/dsxiaolong/blog-drawing-bed/raw/master/img/image-20211215190612026.png)
  • [对接入门] AR502H可以通过mqtt命令直接控制/dev/do0吗
    AR502H可以通过mqtt命令直接控制/dev/do0吗? 容器里已经有esdk和mosquitto运行了,向哪个topic地址publish命令可以控制/dev/do0? 软件二次开发里没有写这个内容,这个对开发APP很重要
  • [问题求助] Mqtt.fx无法订阅华为云主题
    【操作步骤&问题现象】1、已经mqtt.fx成功链接华为云平台,可以正常发布主题,云平台也可以接收到2、下一步打算mqtt.fx订阅主题,但是无论是自己发布的主题,还是云平台发布的主题都无法订阅,准确来说就是订阅建按下无反应,但是随意换个其他字符却都可以正常订阅
  • [问题求助] 【IOT物联网】【消息下发】在接收到设备的消息后想要直接将收到的消息下发,然后使用MQTT.fx订阅下发的消息应该怎么实现。
    【功能模块】【操作步骤&问题现象】1、收到设备的消息2、使用MQTT.fx订阅预置topic:$oc/devices/{device_id}/sys/messages/down。1,2均能实现,请问怎么将上报的消息实时下发呢?指条路就行,不知道从哪里开始学,也没找到类似的博客。
  • [问题求助] 【小熊派智慧农业】按照图一图二的文件,应该用wife还是NB板,华为云选择类型是MQTT还是LWMN2,请问设备接入不了还需注意
    【功能模块】【操作步骤&问题现象】1、2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [技术干货] 深入理解MQTT协议之控制报文(数据包)格式
    在MQTT协议中,一个控制报文(数据包)的结构按照前后顺序分如下三部分:  下图是MQTT控制报文(数据包)格式的结构示意图:1、固定报头(Fixed header):  固定报头存在于所有MQTT数据包中,表示数据包类型及控制类标志等。固定报头由至少2个字节组成,格式如下:1.1、控制报文类型(Control Packet type):  固定报头第一个字节的高四位(7-4号位)是代表控制报文的类型,也就是这个数据包是做什么用的。是用7-4号位的二进制(也就是1111–0000之间)组合值,来代表具体的含义,见下表:1.2、标志(Flags):  固定报头第1个字节的低4位 (3-0号位)包含每个MQTT控制报文类型特定的标志,必须与控制报文类型配套对应使用,否则服务端代理服务会拒绝服务或断开连接。具体的见下表(保留的标志必须按照表中的值设置):DISCONNECT    保留    0    0    0    0  注:关于用“是否”描述的实际就是布尔类型,0表示否,1表示是;1.3、第一字节各类型报文具体值:  固定报头报文类型高4位和标志位的低4位综合起来,最终第一个字节是有一个具体值的。为了更好的理解第一个字节的具体值是怎样得出来的,在下表列出了不同类型的报文及某个报文不同标志时的具体值:  注:关于发布主题还有其他情况这里就没有全部列出,根据表中的规律就可以计算出实际的值了。1.3、剩余长度(Remaining Length):  剩余长度是从第二个字节开始,最多允许占用四个字节。描述本次传送的应用消息在剩余长度字节之后(不包括剩余长度字节本身)还有多少个字节,包括可变报头(有的报文没有这部分) + 有效载荷(有的报文没有这部分)的所有字节数量。  根据上面描述,剩余长度属于变长的编码规则,也就是它可能是1-4个字节中的任何一种情况,那么怎样知道当前这个报文的剩余长度是占用了几个字节的呢?如果不能确定,那么接收方就无法正确解析数据了。所以MQTT协议规定剩余长度的每个字节的最高位(也就是7号位)作为是否还有下一个字节剩余长度的标志位,不做长度数值的表述位。这样每给剩余长度字节最大代表长度值就是127(二进制 1111111 的值)了,因为只有7个位表示长度了。向后每增加一个字节都代表前一个字节满值再加1的倍数,四个字节的剩余长度代表的长度值最大可为268435455。  如果剩余长度值不大于127,则只用一个字节表示,例如121,则剩余长度字节的二进制是01111001,含义见下表:  如果剩余长度值大于127小于16384,则需用两个字节表示,例如15971,则剩余长度两字节具体值则是0xE3 0x7C(11100011 01111100),含义见下表:后面还有字节描述长度    本子节描述长度:99    后面没有长度字节了    本字节描述长度:124 * 128 = 15872  两个字节代表的长度值相加 99 + 15872 = 15971,这既是完整的剩余长度值了。后面这个字节每增加1,则代表剩余长度值增加128。也就是前面字节的低7位值满都为1(127)再加1,就到后面字节加1,前面字节低7位归0。再加满再到后面字节加1,以此类推。所以两个字节可以表述的最大值是(11111111 01111111)127+(127*128) = 16383。  由于使用了两个字节表述剩余长度,那么前面的字节的最高位7号位就要置1,以告诉解析程序后面的字节还要按照剩余长度来计算。  如果剩余长度值大于16383小于2097152,则需用三个字节表示,例如2097150,则剩余长度三字节具体值则是0xFE 0xFF 0x7F(11111110 11111111 01111111),含义见下表:还有长度字节    长度:126    还有长度字节    长度:127 * 128 = 16256    长度最后字节    长度:127 * 16384 = 2080768  三个字节代表的长度值相加 126 + 16256 + 2080768 = 2097150,这既是完整的剩余长度值了。3字节每增加1,则代表剩余长度值增加16384,即前两个字节满值再加1。四字节的原理也是这样向后推导,这里就不再列举了。  剩余长度使用1-4个字节可以描述的长度范围见下表:2、可变报头(Variable header):  可变报头在固定报头与有效负载之间,不是所有的报文都有可变报头。报文类型不同可变报头的内容也不同。后面会对各报文的可变报头逐一讨论。某些类型的报文中的可变报头还包含报文标识符(Packet Identifier)字段。2.1、报文标识符(Packet Identifier):  报文标识符,一定程度上相当于是每个报文的唯一ID,用于识别报文身份的。重复发送报文时,必须使用相同的报文标识符。在需要应答的控制报文里,标识符可以区分是应答的哪个报文。某些控制报文的可变报头部分包含一个两字节的报文标识符字段。这些报文分别是PUBLISH(QoS > 0时), PUBACK,PUBREC,PUBREL,PUBCOMP,SUBSCRIBE, SUBACK,UNSUBSCRIBE,UNSUBACK。  需要使用标识符的报文,发送方在每次发送一个新的报文时,必须分配一个没有使用过的报文标识符。报文标识符固定使用两个字节,按照双字节读值可用范围是0-65535(00000000 00000000 – 11111111 11111111)。3、有效载荷(Payload):在一些需要携带用户自定义的应用消息的MQTT控制报文中,会将这些信息放在报文的最后部分,称之为有效载荷。对于PUBLISH来说有效载荷就是应用消息。不同的控制报文有效载荷内容不同,后面会在分别介绍控制报文时具体讨论。下表列出哪些控制报文有包含有效载荷:转载https://blog.csdn.net/yyykj/article/details/96835773
  • [技术干货] 什么是物联网?都有哪些协议?
    前几天和某大学一教授聊天,据说在他们本地市政府强烈领导下要改成物联网城市那么我的好大哥就反问了 什么是物联网呢?怎么去建设一个物联网的城市呢?iot大家对此简单的字母并不陌生 但是iot代表什么意思呢?Internet of Things   这么一看并不陌生  网络上互联的事物  万物互联  刚接触这个行业时候就感觉万物互联听起来挺困难的  为啥呢 万物互联需要各种终端设备  传感器  rfid  适配器  路由器  网关  交换机  等还要记住各种端口   物联网的协议从本人开发角度来讲 刚开始还没接触华为云的物联网模块时用到的是新*陆的产品  云端的产品控制网关来调节各种设备终端的变化通过实景的改变来实时监测数据的变化趋势 底层的android开发架构   (android不会的宝贝可以先学习java)当华为云带来了5g  轻应用发现物联网的开发没有那么困难了不是打广告 真心觉得不错 !!!回归正题什么是物联网呢?物联网(Internet of Things,简称IOT)是指通过各种信息传感器、射频识别技术、全球定位技术、红外传感器、激光扫描器等各种装置与技术,实时采集任何需要监控、 连接、互动的物体或过程,采集其声、光、热、电、力学、化学、生物、位置等各种需要的信息,通过各类可能的网络接入,实现物与物、物与人的泛在连接,实现对物品和过程的智能化感知、识别和管理。物联网是一个基于互联网、传统电信网等的信息承载体,它让所有能够被独立寻址的普通物理对象形成互联互通的网络   。上面的简介里说到了物联网的协议 什么是物联网的协议物联网的协议有哪些?面对物联网的发展像刚建立互联网初期一样适应各大厂商和终端的运行提出了物联网的协议物联网的协议主要有7种:1. MQTT协议MQTT协议(Message Queue Telemetry Transport,消息队列遥测传输协议)是IBM的Andy Stanford-Clark和Arcom的Arlen Nipper于1999年为了一个通过卫星网络连接输油管道的项目开发的。为了满足低电量消耗和低网络带宽的需求,MQTT协议在设计之初就包含了以下几个特点:实现简单提供数据传输的QoS轻量、占用带宽低可传输任意类型的数据可保持的会话(Session)随着多年的发展,MQTT协议的重点不再只是嵌入式系统,而是更广泛的物联网世界。简单来说,MQTT协议有以下特性:基于TCP协议的应用层协议采用C/S架构使用订阅/发布模式,将消息的发送方和接受方解耦提供3种消息的QoS(Quality of Service):至多一次、最少一次、只有一次收发消息都是异步的,发送方不需要等待接收方应答MQTT协议的架构由Broker和连接到Broker的多个Client组成,如图2-1所示。MQTT协议可以为大量的低功率、工作网络环境不可靠的物联网设备提供通信保障。而它在移动互联网领域也大有作为,很多android App的推送功能都是基于MQTT协议实现的,一些IM的实现也是基于MQTT协议的。2. MQTT-SN协议MQTT-SN(MQTT for Sensor Network)协议是MQTT协议的传感器版本。MQTT协议虽然是轻量的应用层协议,但是MQTT协议是运行于TCP协议栈之上的,TCP协议对于某些计算能力和电量非常有限的设备来说,比如传感器,就不太适用了。3. CoAP协议CoAP(Constrained Application Protocol)协议是一种运行在资源比较紧张的设备上的协议。CoAP协议通常也是运行在UDP协议上的。CoAP协议设计得非常小巧,最小的数据包只有4个字节。CoAP协议采用C/S架构,使用类似于HTTP协议的请求-响应的交互模式。设备可以通过类似于coap://192.168.1.150:5683/2ndfloor/temperature的URL来标识一个实体,并使用类似于HTTP的PUT、GET、POST、DELET请求指令来获取或者修改这个实体的状态。4. LwM2M协议 LwM2M( Lightweight Machine-To-Machine )协议是由Open Mobile Alliance(OMA)定义的一套适用于物联网的轻量级协议。它使用RESTful接口,提供设备的接入、管理和通信功能,也适用于资源比较紧张的设备 LwM2M协议底层使用CoAP协议传输数据和信令。而在LwM2M协议的架构中,CoAP协议可以运行在UDP或者SMS(短信)之上,通过DTLS(数据报传输层安全)来实现数据的安全传输。 LwM2M协议架构主要包含3种实体——LwM2M Bootstrap Server、LwM2M Server和LwM2M Client。 LwM2M Bootstrap Server负责引导LwM2M Client注册并接入LwM2M Server,之后LwM2M Server和LwM2M Client就可以通过协议指定的接口进行交互了。5. HTTP协议 正如我们之前所讲,物联网也是互联网,HTTP这个在互联网中广泛应用的协议,在合适的环境下也可以应用到物联网中。 在一些计算和硬件资源比较充沛的设备上,比如运行安卓操作系统的设备,完全可以使用HTTP协议上传和下载数据,就好像在开发移动应用一样。设备也可以使用运行在HTTP协议上的WebSocket主动接收来自服务器的数据。6. LoRaWAN协议 LoRaWAN协议是由LoRa联盟提出并推动的一种低功率广域网协议,它和我们之前介绍的几种协议有所不同。MQTT协议、CoAP协议都是运行在应用层,底层使用TCP协议或者UDP协议进行数据传输,整个协议栈运行在IP网络上。而LoRaWAN协议则是物理层/数据链路层协议,它解决的是设备如何接入互联网的问题,并不运行在IP网络上。 LoRa(Long Range)是一种无线通信技术,它具有使用距离远、功耗低的特点。在上面的场景下,用户就可以使用LoRaWAN技术进行组网,在工程设备上安装支持LoRa的模块。 通过LoRa的中继设备将数据发往位于隧道外部的、有互联网接入的LoRa网关,LoRa网关再将数据封装成可以在IP网络中通过TCP协议或者UDP协议传输的数据协议包(比如MQTT协议),然后发往云端的数据中心。7. NB-IoT协议 NB-IoT(Narrow Band Internet of Things)协议和LoRaWAN协议一样,是将设备接入互联网的物理层/数据链路层的协议。 与LoRA不同的是,NB-IoT协议构建和运行在蜂窝网络上,消耗的带宽较低,可以直接部署到现有的GSM网络或者LTE网络。设备安装支持NB-IoT的芯片和相应的物联网卡,然后连接到NB-IoT基站就可以接入互联网。而且NB-IoT协议不像LoRaWAN协议那样需要网关进行协议转换,接入的设备可以直接使用IP网络进行数据传输。 NB-IoT协议相比传统的基站,增益提高了约20dB,可以覆盖到地下车库、管道、地下室等之前信号难以覆盖的地方。点赞! 
  • [问题求助] 【小熊派】我在工程配置中改了wife和ID,华为云类型是MQTT,插件也部署了,改了配置之后rebuild了但编译失败是什么原因
    【功能模块】【操作步骤&问题现象】1、2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [问题求助] IoT设备mqtt使用证书连云中的鉴权问题
    设备接入文档, https://support.huaweicloud.com/usermanual-iothub/iot_01_0019.html 中的疑问:1, 使用CA证书鉴权时,除了设备ID(deviceId),  是否还需要密钥(secert)这个参数项?2, 有没有关于设备CA证书鉴权上云的具体指导文档供参考?
  • [问题求助] 小熊派开发板智慧农业扩展板oc_mqtt工程烧录报错!
    ** Programming Started **Info : device id = 0x10016435Warn : STM32 flash size failed, probe inaccurate - assuming 256k flashInfo : flash size = 256kbytesError: auto_probe failedError: jtag status contains invalid mode value - communication failurePolling target stm32l4x.cpu failed, trying to reexamineExamination failed, GDB will be halted. Polling again in 100ms** Programming Failed **shutdown command invoked[2021/9/7 11:27:58] 烧录成功!
  • [问题求助] 小熊派板子STM32L431RC用于测试和验证mqtt协议咨询
    小熊派板子STM32L431RC用于测试和验证mqtt协议,购买板子给的案例中都用的COAP协议,暂只购买了智慧路灯扩展板和ESP8266 wifi模组,请问想研究测试下mqtt,这个板子哪些案例支持啊?需要额外购买些什么扩展模块么?
  • [问题求助] hi3861 连接华为云 mqtt看门狗复位
    hi3861 连接华为云  创建mqtt用的是oc_mqtt.c文件  。hi3861连接手机热点,创建mqtt成功后,我把手机热点关闭。sta开始自动重连,但是24秒后hi3861就被看门狗复位了!请问怎么不让看门狗复位,并且重连上后MQTT可以继续使用?串口log:
  • [问题求助] 【XXX产品】【XXX功能】一句话描述问题
    hi3861 连接华为云  创建mqtt用的是oc_mqtt.c文件  。hi3861连接手机热点,创建mqtt成功后,我把手机热点关闭。sta开始自动重连,但是24秒后hi3861就被看门狗复位了!串口log:**********watchdog isr********************syserr info start**********kernel_ver      : Hi3861V100 R001C00SPC025,2020-09-03 18:10:00**********Exception Information**********PC Task Name    : MQTTTaskPC Task ID      = 13Cur Task ID     = 13Task Stack Size = 0x800Exception Type  = 0x80000021------------------------------------------------------------------------------------------------------------------------------------请问怎么不让看门狗复位,并且重连上后MQTT可以继续使用?
  • [技术干货] 2.智慧农业之使用vscode来开发,小熊派通过esp8266,使用mqtt连接华为云(上传温湿度光照度属性到华为云)
    ## 1:登录设备接入平台,网址如下: https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-portal/home ## 2:点击产品-创建产品-自定义产品名字,协议选择MQTT协议 ![101.jpg](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202108/25/160306aqop737t1rp90xmg.jpg) 填写之后的信息如下: ![102.jpg](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202108/25/160318ijvc581ahwayabvk.jpg) ### 2.1 添加服务 创建产品完成之后,需要添加产品的服务,就是产品的属性,比如温湿度,下发控制命令等。我们这里定义Agriculture服务属性 ![103.jpg](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202108/25/160334blvosw7a0zzn3c7o.jpg) 创建完服务属性之后,再分别添加温度,湿度,光照强度的属性。这几个数据可以是浮点型,也可以是int型,看个人需要,我这里选择整形int类型。就是上传数据的时候要注意。定义什么类型属性,就是上传什么类型数据。 添加温度属性 ![104.jpg](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202108/25/160349f0hd4uracr09s8ep.jpg) 添加湿度属性 ![105.jpg](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202108/25/160401bc6xu2v7snsdmz6b.jpg) 添加光照度属性 ![106.jpg](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202108/25/160410ytzckcurpa9n8xte.jpg) 至此,创建信息初步完成,目前只有上传属性功能,下发命令下次再说明。 ## 3:创建设备,这个设备要对应刚才的产品 进入设备管理界面,选择注册设备 ![107.jpg](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202108/25/1604190bneoadlsuyaro8m.jpg) 点击确认完成设备创建工作,设备创建完成之后,会提示设备ID和密钥,这个要记住,代码里面要用到,会提示设备ID和密钥,这个要记住,代码里面要用到, 会提示设备ID和密钥,这个要记住,代码里面要用到,重要的是说三遍!!! ![108.jpg](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202108/25/160432xwgubyygkkxt6hwf.jpg) 点击创建好的设备,选择查看操作,可以查看到设备的信号,包含设备ID和密钥。 ![110.jpg](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202108/25/160556z2aa54eeewsogggl.jpg) ## 4:修改代码里面配置,重新烧录程序 代码里面的需要修改的,主要是设备ID和设备密钥,代码文件在oc_agriculture_template.c中 ![111.jpg](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202108/25/160607zuz8t6jvaqn2wot8.jpg) 重新烧录编译,下载 ![112.jpg](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202108/25/160615pknh28ivbz0731qo.jpg) ## 5:查看平台信息,查看数据是否上传。 ![113.jpg](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202108/25/160623dn2ttlauhnoewqvy.jpg) 我们可以看到温湿度数据已经上传,但是光照强度还没有上传,回看代码,看看光照度哪里错了。先附上代码 ```C /*上传数据到平台*/ static int app_report_task_entry() { int ret = -1; cJSON* cjson_root = NULL; cJSON* cjson_services = NULL; cJSON* cjson_item = NULL; cJSON* cjson_data = NULL; char *str_json = NULL; oc_mqtt_config_t oc_param; (void) memset(&oc_param,0,sizeof(oc_param)); oc_param.boot_mode = en_oc_mqtt_mode_nobs_static_nodeid_hmacsha256_notimecheck_json; oc_param.id = MQTT_ID; oc_param.pwd = MQTT_PWD; oc_param.lifetime = MQTT_LIFETIME; oc_param.server_addr = MQTT_SERVER_ADDR; oc_param.server_port = MQTT_SERVER_PORT; oc_param.msg_deal = app_msg_deal; ret = oc_mqtt_config( &oc_param); if (0 != ret) { return ret; } oc_mqtt_subscribe(TOPIC_PROPERTIES_REPORT, 2); //install a dealer for the led message received while(1) //--TODO ,you could add your own code here { cjson_root = cJSON_CreateObject(); cjson_services = cJSON_CreateArray(); cjson_data = cJSON_CreateObject(); cjson_item = cJSON_CreateObject(); cJSON_AddStringToObject(cjson_item, "service_id", "Agriculture"); cJSON_AddNumberToObject(cjson_data, "Temperature", (int8_t)E53_IA1_Data.Temperature); cJSON_AddNumberToObject(cjson_data, "Humidity", (int8_t)E53_IA1_Data.Humidity); cJSON_AddNumberToObject(cjson_data, "luminance", (uint16_t)E53_IA1_Data.Lux); cJSON_AddItemToObject(cjson_item, "properties", cjson_data); cJSON_AddItemToArray(cjson_services, cjson_item); cJSON_AddItemToObject(cjson_root, "services", cjson_services); str_json = cJSON_Print(cjson_root); oc_mqtt_report((uint8_t *)str_json, strlen(str_json), 2); cJSON_Delete(cjson_root); if (str_json != NULL) { printf("Free str_json"); osal_free(str_json); } osal_task_sleep(2*1000); } return ret; } ``` 认真查看代码,发现我们的温湿度属性跟在创建产品的时候是对应的,光照度的属性代码和代码里面的属性代码是不一致的。 ![114.jpg](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202108/25/1606391hvdl0eoa1atzko5.jpg) 修改代码属性一致,重新下载烧录。 ```C cJSON_AddNumberToObject(cjson_data, "Temperature", (int8_t)E53_IA1_Data.Temperature); cJSON_AddNumberToObject(cjson_data, "Humidity", (int8_t)E53_IA1_Data.Humidity); cJSON_AddNumberToObject(cjson_data, "Illuminance", (uint16_t)E53_IA1_Data.Lux); ``` 再次 查看设备信息,光照i度数据也已经上传。 ![115.jpg](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202108/25/160648qmecplst89xxtjin.jpg) 好了,属性上传到此结束,下次讲下 下发命令控制。
  • [容器专区] 【AR502H产品】【mqtt功能】编译
    大家好,请教两个关于MQTT的问题:1. 编译32位失败,请问应该怎么操作?(64位已成功)root@c95abd86cd89:/data/test# arm-linux-gnueabi-gcc MQTTClient_publish.c -o MQTTClient_publish_32 -L/lib -lpaho-mqtt3c -lpaho-mqtt3a/usr/lib/gcc-cross/arm-linux-gnueabi/8/../../../../arm-linux-gnueabi/bin/ld: cannot find -lpaho-mqtt3c/usr/lib/gcc-cross/arm-linux-gnueabi/8/../../../../arm-linux-gnueabi/bin/ld: cannot find -lpaho-mqtt3acollect2: error: ld returned 1 exit statusroot@c95abd86cd89:/data/test# pushd /lib/lib /data/testroot@c95abd86cd89:/lib# lsaarch64-linux-gnu  cpp     ld-linux-aarch64.so.1    libpaho-mqtt3c.so.1  modprobe.d  systemd   udevarm-linux-gnueabi  init  ld-linux.so.3        lsb             modules     terminfo  x86_64-linux-gnuroot@c95abd86cd89:/lib# ls -la libpaho-mqtt3c.so.1lrwxrwxrwx 1 root root 21 Aug 19 07:37 libpaho-mqtt3c.so.1 -> libpaho-mqtt3c.so.1.0root@c95abd86cd89:/lib# ln -sf libpaho-mqtt3c.so.1.0 libpaho-mqtt3c.so.1root@c95abd86cd89:/lib# popd/data/testroot@c95abd86cd89:/data/test# arm-linux-gnueabi-gcc MQTTClient_publish.c -o MQTTClient_publish_32 -L/lib -lpaho-mqtt3c -lpaho-mqtt3a/usr/lib/gcc-cross/arm-linux-gnueabi/8/../../../../arm-linux-gnueabi/bin/ld: cannot find -lpaho-mqtt3c/usr/lib/gcc-cross/arm-linux-gnueabi/8/../../../../arm-linux-gnueabi/bin/ld: cannot find -lpaho-mqtt3acollect2: error: ld returned 1 exit statusroot@c95abd86cd89:/data/test# 2. AR502H上的容器是32位的,请问paho-mqtt是否必须使用32位?以上 谢谢!
总条数:174 到第
上滑加载中