设备与阿里云完成发布订阅的功能,接下来就是将设备状态如温湿度,PM2.5值上报更新至阿里云。

  

1.查看Topic。

  在阿里云平台上 设备->Topic列表中查看。在产品中也可以看到对应的Topic类列表,将其中的"${deviceName}"替换成设备的名字,在这个列表中通过后方的描述可以清楚的知道每个Topic对应的系统功能。显然这里上报的Topic是/sys/a1IVGQbttJv/MyFirstALIYUN/thing/event/property/post

2.ALINK JSON下的数据上报格式。

  贴上上报数据源码:

    BOOL ICACHE_FLASH_ATTR
    MQTT_Publish(MQTT_Client *client, const char* topic, const char* data, int data_length, int qos, int retain)
    {
      uint8_t dataBuffer[MQTT_BUF_SIZE];
      uint16_t dataLen;
      client->mqtt_state.outbound_message = mqtt_msg_publish(&client->mqtt_state.mqtt_connection,
      topic, data, data_length,
      qos, retain,
      &client->mqtt_state.pending_msg_id);
      if (client->mqtt_state.outbound_message->length == 0) {
      INFO("MQTT: Queuing publish failed\r\n");
      return FALSE;
    }
    INFO("MQTT: queuing publish, length: %d, queue size(%d/%d)\r\n", client->mqtt_state.outbound_message->length, client->msgQueue.rb.fill_cnt, client-      >msgQueue.rb.size);
    while (QUEUE_Puts(&client->msgQueue, client->mqtt_state.outbound_message->data, client->mqtt_state.outbound_message->length) == -1) {
        INFO("MQTT: Queue full\r\n");
        if (QUEUE_Gets(&client->msgQueue, dataBuffer, &dataLen, MQTT_BUF_SIZE) == -1) {
        INFO("MQTT: Serious buffer error\r\n");
        return FALSE;
      }
    }
    system_os_post(MQTT_TASK_PRIO, 0, (os_param_t)client);
    return TRUE;
    }

  简要分析:mqtt_msg_publish里面将Topic和date进行字符串重组,将其组装成json格式,QUEUE_Puts再将数据放入队列中。

  其次来看看云端下发的json格式的数据:(位置: 监控运维->在线调试 )

    

   可以看到设备下发时收到的json数据格式是method+id+params+version

   所以 MQTT_Publish(client, TOPIC, "hello", 6, 0, 0)函数中,我们将date的中的数据改为如图上的数据

     整个函数下来是这样的:

    #defined POSTSERVER  /sys/a1IVGQbttJv/MyFirstALIYUN/thing/event/property/post   // 需要修改对应的POSTSERVER 和函数中的字符串

    MQTT_Publish(client, POSTSERVER , "{\"method\":\"thing.event.property.post\",\"id\":\"964754367\",\"params\":{\"PM25\":101},\"version\":\"1.0.0\"}", 96, 0, 0);

   这里\"的意思是转义字符,id中的数值是上报阿里云对应的编号,上报时自定义数据编号,云端下发命令时候由云端自主产生,其次,需要注意的是MQTT_Publish中的数据大小直接用sizeof()函数算出,这里为了方便展示直接将字符串放在MQTT_Publish中,字符串的拼接函数自行编写。

    注:MQTT_Publish中将thing.event.property.post -> thing/event/property/post也可成功上报.

   接下来就是编译固件并烧写了,烧写完就可以在阿里云上看到设备数值和时间都已更新,至此阿里云更新设备状态和发布订阅完成。

  附:mqttfx的使用教程:https://help.aliyun.com/document_detail/86706.html?spm=a2c4g.11174283.2.44.ecc71668iTfIKk

      注:使用mqttfx上报设备数据时不需要加转义字符。

    

                                        -------------------今天也是充满希望的一天~

  

    

关于STM32F103+ESP8266+阿里云过程之设备状态更新至阿里云(三)的更多相关文章

  1. 关于STM32F103+ESP8266+阿里云过程之修改SDK连接至阿里云(二)

    继上篇的阿里云物联云平台设置之后,接下来的工作就是对安信可官方给的sdk进行修改 安信可ESP系列集成环境,SDK,aliyun_mqtt_app,下载地址在上一篇博客,https://www.cnb ...

  2. 关于STM32F103+ESP8266+阿里云过程之环境搭建和阿里云数据格式设置及注意点(一)

    计划实现功能:将STM32F103采集到的温湿度,PM2.5等数值,通过UART与ESP8266通讯,使得ESP8266对外仅充当串口功能的黑盒.ESP8266通过MTQQ发布订阅数据,设备上传.接收 ...

  3. 阿里云如何基于标准 K8s 打造边缘计算云原生基础设施

    作者 | 黄玉奇(徙远)  阿里巴巴高级技术专家 关注"阿里巴巴云原生"公众号,回复关键词 1219 即可下载本文 PPT 及实操演示视频. 导读:伴随 5G.IoT 的发展,边缘 ...

  4. 阿里云祝顺民(江鹤):云原生SDWAN加速企业上云 引领未来智能网络

    第二届中国SD-WAN峰会于11月16日在北京盛大开幕,阿里云以黄金赞助商之名隆重参与.作为全球前三,亚太第一的云计算厂商,阿里云一直引领云网技术的演进及应用落地.过去一年,阿里云发布以云为中心的云原 ...

  5. 探索云网络技术前沿,Sigcomm 2019 阿里云参会分享

    Sigcomm 2019简介 一年一度的网络顶级学术峰会Sigcomm于8月20日至22日在北京举行.作为ACM Special Interest Group on Data Communicatio ...

  6. ThinkPHP 提供Auth 权限管理、支付宝、微信支付、阿里oss、友盟推送、融云即时通讯、云通讯短信、Email、Excel、PDF 等等

    多功能 THinkPHP 开源框架 项目简介:使用 THinkPHP 开发项目的过程中把一些常用的功能或者第三方 sdk 整合好,开源供亲们参考,如 Auth 权限管理.支付宝.微信支付.阿里oss. ...

  7. 2019 GNTC 阿里云参会分享:云原生SDWAN网络2.0 一站式上云服务

    本次10/22-24 南京2019 GNTC大会上,阿里云网络云原生SDWAN网络2.0 由于独特的云原生定位.创新的解决方案,及成熟的应用案例.行业用户,获得行业媒体C114中国通信网.产业专家高度 ...

  8. AWS、阿里云、Azure、Google Cloud、华为云、腾讯云 各种云服务器价格收费对比(上)

    他来了,他来了~ 他带着六家公有云厂商的资源价格走来了~ 不久前,我们上线了一款小工具——[多云成本计算器]1.0版,公众号菜单栏可以直接体验.详细介绍可以戳这里<3秒即得最低价,速石上线「多云 ...

  9. [案例分析] 政务云市场面临的复杂格局——重庆政务云模式的启示:多厂商竞争化、PaaS 化

    新闻背景: 2019 年 9 月底,重庆市大数据应用发展管理局发布政务云平台采购公告,预算金额为 5000 万元,以上 4 家入选. 最终项目被项目被阿里云.腾讯云.华为云.紫光云 4 家瓜分. 50 ...

随机推荐

  1. log4net插入access自定义字段

    1.创建表格 2.创建log4net.xml,并设置属性始终复制,关键属性 <bufferSize value="1" /> <conversionPattern ...

  2. 你竟然没用 Maven 构建项目?

    一年前,当我和小伙伴小龙一起做一个外包项目的时候,受到了严重的鄙视.我那时候还不知道 Maven,所以搭建项目用的还是最原始的方式,小龙不得已在导入项目的时候花了很长时间去下载项目依赖的开源类库. 出 ...

  3. Docker配置容器位置和小技巧

    Docker使用小技巧 清理全部停止的docker容器 有时候我们会有很多已经停止的容器或者由于错误强制退出不能用的容器,那我们就需要删除了,但是我们一个一个的rm删除很麻烦,有多少容器就要rm多少次 ...

  4. .NET Core IdentityServer4实战 第六章-Consent授权页

    在identityServer4中登陆页面只要是成功了,就会注册一个Cookie在服务器资源上,像现在大部分的网站第三方授权,都是经过一个页面,然后选需要的功能,IdentityServer4也给我们 ...

  5. 微服务-springboot-读写分离(多数据源切换)

    为什么需要读写分离 当项目越来越大和并发越来大的情况下,单个数据库服务器的压力肯定也是越来越大,最终演变成数据库成为性能的瓶颈,而且当数据越来越多时,查询也更加耗费时间,当然数据库数据过大时,可以采用 ...

  6. C# 使用表达式树获取特性的值

    一.定义特性 /// <summary> /// 定义特性 /// </summary> [AttributeUsage(AttributeTargets.Field | At ...

  7. [POI2008]枪战Maf题解

    问题 C: [POI2008]枪战Maf 时间限制: 1 Sec  内存限制: 256 MB 题目描述 有n个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺 ...

  8. Redis主从复制实现原理

    一.Redis2.8之前的版本, 首先redis复制功能分为同步操作和命令传播两个操作 同步操作作于将从服务器的数据库状态更新至主服务器当前所处的数据库状态  命令传播操作则用于在主服务器的数据库状态 ...

  9. 使用MyBatis在控制台动态打印执行的sql语句

    使用MyBatis进行数据库操作的时候,sql语句都是写在相应的mapper文件中,参数也是使用占位符取值表示的,mapper文件中看不到实时执行的完整sql,有时候sql语句错误或者参数类型不对的时 ...

  10. MyBatis 一对多映射

    From<MyBatis从入门到精通> <!-- 6.1.2.1 collection集合的嵌套结果映射 和association类似,集合的嵌套结果映射就是指通过一次SQL查询将所 ...