一:MQTT的初始化

1 利用AT+QMTCFG指令为阿里云配置设备信息

其后面有五个参数,如果要进行阿里云的设备配置那么第一个参数是固定的一定是"ALIAUTH",第二个参数是Will标志为,如果为0那么忽略Will参数的配置,一般情况下下为0;剩下的三个则是阿里云必须的三元素即:product_key、device_name、device_secret这三个参数可以在阿里云端创建设备之后非常容易的获得。

eg:

printf("AT+QMTCFG=\"aliauth\",0,\"%s\",\"%s\",\"%s\"\r\n",ProductKey,DeviceName,DeviceSecret);

2 AT+QMTOPEN指令为MQTT客户端打开网络

< tcpconnectID>这个参数是MQTT套接字标识符,范围是0-5一般默认为0。

<host_name>是服务器的域名,MQTT协议这个参数即支持域名也支持IP地址,写哪一个都可以。

<port>是端口号,一般阿里云的默认端口号是1883,也可以自己设置。

eg:

printf("AT+QMTOPEN=0,\"a11eLpiBnRR.iot-as-mqtt.cn-shanghai.aliyuncs.com\",1883\r\n")

AT+QMTOPEN指令本质上是用TCP协议来配置MQTT协议

如果收到回复:QMTOPEN: 0,0 则证明成功的连接到网络

3再就是客户端请求连接到MQTT服务器,利用 AT+QMTCONN指令

<tcpconnectID>和上面的相同,一般默认为0

<clientID>客户端标识字符串,可以自己设置。

eg:

printf("AT+QMTCONN=0,\"clientExample_1981\"\r\n")

如果收到QMTCONN: 0,0,0,则证明登陆成功。

这样在完成上述三条AT指令之后,MQTT协议的初始化也就完成了

二:发送数据到阿里云

因为要发上阿里云所需要的数据格式都是Josn格式,所以要对需要上传的数据进行一个格式的转换:

转换函数:

eg:

uint8_t Mqttaliyun_Savedata(uint8_t *t_payload,uint8_t temp,uint8_t humi)
{
  
    char json[]="{\"id\":\"26\",\"version\":\"1.0\",\"sys\":{\"ack\":0},\"params\":{\"CurrentTemperature\":{\"value\":%d},\"CurrentHumidity\":{\"value\":%d},\"jingweidu\":{\"value\":%d}},\"method\":\"thing.event.property.post\"}";

//  这是Josn的数据格式,如果要加入新的参数就要按照标识符和value值的格式来添加,前后的格式不需要不变动
    char t_json[200];  //定义一个字符类型的数组
    unsigned short json_len;  //定义一天个变量来放数组的长度
    sprintf(t_json, json, temp, humi);   //

sprintf函数的功能是将指定的变量的值打印到字符串里面。拿这个具体的例子来说

t_json是要放字符串的起始位置;

josn是转换时需要的格式,即后面的参数都按照josn里面留的参数的格式转换;

temp,humi即需要转换的参数,这个参数的个数不限量,可以无限的增多,但是必须要和前面的格式里面预留的参数相对应。

这样就把参数按照josn[]的格式转换完成,并且以字符串的形式存放在了t_josn这个数组中。
    json_len = strlen(t_json)/sizeof(char);   //测量一下t_json数组的长度
      memcpy(t_payload, t_json, json_len);  //将t_josn数组的所有数据复制到t_payoad中,因为t_payload这个变量是个指针型变量,所以他本身就发生了转换,里面的数据就成功的转换成了josn类型的数据。
    return json_len; //函数返回的是数组的长度
}

2数据转换完成之后,要把数据发送到阿里云上

void aliyunMQTT_PUBdata(uint8_t temp,uint8_t humi)  //发送函数
{
     uint8_t t_payload[200],len; 
     len=Mqttaliyun_Savedata(t_payload,temp,humi);

//这条命令,即把转换好的josn格式放到了t_payload里面,也返回了t_payload的数据长度
     t_payload[len]=0;
       printf("AT+QMTPUB=0,0,0,0,%s,%s\r\n",PubTopic,t_payload);// 运用了AT指令来发布主题
       HAL_Delay(300);
     strx=strstr((const char*)RxBuffer,(const char*)"+QMTPUB: 0,0,0");//验证一下返回的状态,看一下是不是上传成功。
  while(strx==NULL)
    {
        strx=strstr((const char*)RxBuffer,(const char*)"+QMTPUB: 0,0,0");//
    }
      HAL_Delay(500);
    //Clear_Buffer(); 
}

发送AT+QMTPUB指令的详解:

该命令用于将客户端的消息发布到服务器,以便分发给感兴趣订阅者。

<tcpconnectID>MQTT套接字标识符,范围是0-5,一般写0;

<msgID>数据报的消息识别符,范围是0-65535,只有当<qos>是0的时候才为0;

<qos>客户端希望发送消息的Qos级别:

0 :至多一次

1:最少一次

2:恰好一次

<retain>在将消息发送给服务器后,服务器要不要保存改消息。

0不保存消息

1保存消息

<topic>即需要发布的主题

<msg>需要发布的信息

eg:

AT+QMTPUB=0,0,0,0,%s,%s\r\n",PubTopic,t_payload

如果返回的是     QMTPUB: 0,0,0,那么证明发送数据成功

3数据发送成功后,如果返回的消息中有+QMTRECV,那么证明接收到了阿里云平台

void BC26_RECData(void)
{
        uint8_t recdata[250];
        Uart1_SendStr(RxBuffer);
        strx=strstr((const char*)RxBuffer,(const char*)"+QMTRECV:");//·如果返回的信息里面有QMTRECV这表明传输成功
        if(strx)
        {
                strx=strstr((const char*)RxBuffer,(const char*)"}\"");
                //  有}出现则代表数据接收完成
                if(strx)
                {
                memcpy(recdata, RxBuffer, Rxcouter);// 将接收的信息保存
                CParsejson(recdata);

}
        memset(recdata, 0, 250);   // 对recdata变量做一个初始化,即清空recdata
        }   // 
        Rxcouter=0;
}

经过这三个步骤,客户端的消息就成功的被传到阿里云平台了

BC26基于MQTT协议的阿里云数据传输相关推荐

  1. 微信小程序连接物联网(三):微信小程序远程遥控宿舍开门 基于NodeMCU通过MQTT协议连接阿里云物联网平台

    索引 这是用微信小程序遥控开门的系列文章,具体微信小程序连接物联网的代码在第三章提及. 微信小程序连接物联网(一):初始化ESP8266 NodeMCU 微信小程序连接物联网(二):NodeMCU L ...

  2. 利用MQTT协议与阿里云数据交互的python程序

    利用MQTT协议与阿里云数据交互的python程序 设计目的 功能要求和关键问题 环境配置问题 本地程序如何连接云上设备 云上的数据交互问题 界面设计问题 阿里云相关操作 本地程序 设计目的 设计开发 ...

  3. STM32+ESP8266(ESP-12F)物联网温度计-移植paho MQTT协议连接阿里云

    STM32+ESP8266(ESP-12F)物联网温度计-移植paho MQTT协议连接阿里云 目录 STM32+ESP8266(ESP-12F)物联网温度计-移植paho MQTT协议连接阿里云 一 ...

  4. Esp8266 进阶之路29【高级篇】百万条消息免费之乐鑫esp8266使用TCP直连模式MQTT协议接入阿里云物联网平台,支持私家服务器对接,支持阿里云规则引擎。(附带Demo)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...

  5. 树莓派mqtt协议连接阿里云物联网平台,手机端获取数据并控制

    树莓派mqtt协议连接阿里云物联网平台(三) 前面树莓派的数据已经上传到云端,可是我的android手机该如何获取树莓派上传的这些数据呢,,困惑了我好几天的疑问,解开的那一刻,真的时拨开云雾见青天啊. ...

  6. 【阿里云生活物联网架构师专题 ⑨】基于TP6 基于AMPQ协议接收阿里云物联网设备的各种状态数据,实现m2m流转;

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1.esp32接入阿里云物联网平台,实现天猫精灵语音控制: 2.es ...

  7. java实现mqtt服务端_基于Swoole使用MQTT协议连接阿里云物联网平台设备实现消息订阅

    阿里云物联网平台为设备提供安全可靠的连接通信能力,支撑设备数据采集上云,我们这里认为阿里云物联网平台是 MQTT 服务端,那么我们自己的设备作为客户端,应该如何实现消息订阅? 阿里云没有提供 PHP ...

  8. 移远BC26模组使用MQTT协议接入阿里云(NB-IoT专栏—进阶篇4)

    目录 1.模块简介 2.阿里云物联网服务部署 3.BC26模组配置 4.数据上传 5.数据下发

  9. MQTT协议与阿里云IoT物联网平台

    1.MQTT协议介绍 1.1 MQTT协议 MQTT(消息队列遥测传输) 是基于 TCP/IP 协议栈而构建的支持在各方之间异步通信的消息协议.MQTT在空间和时间上将消息发送者与接收者分离,因此可以 ...

最新文章

  1. shell脚本编程学习之路-shell数组
  2. resin设置jvm参数
  3. PHPStorm配置使用SFTP
  4. Lambda表达式替代匿名方法
  5. php改成IP连接数据库,thinkphp,pdo连接数据库,host自动被替换成了本机ip
  6. Cisco 3550-EMI 交 换 机 配 置 教 程
  7. 用shiro框架实现注册登陆,让你快速理解shiro用法
  8. Ubuntu下U盘变成只读的解决方法
  9. dfs时间复杂度_Python实现图的经典DFS、BFS、Dijkstra、Floyd、Prim、Kruskal算法
  10. java静态构造函数_为什么不允许使用Java静态构造函数?
  11. 手把手教你写电商爬虫-第四课 淘宝网商品爬虫自动JS渲染
  12. 01.赋值运算符函数(C++实现)
  13. jaxws-ri下载链接
  14. Windows Terminal美化增强指南
  15. 5 分钟,教你从零快速编写一个油猴脚本!
  16. Linux Kernel Security全景图系列之开篇
  17. OPPO正在拆掉“创新围墙”
  18. 论文投稿指南——中文核心期刊推荐(化学)
  19. 一般博士毕业能进什么样的高校当老师?网友:看第一学历!
  20. 云支付登录 html,云闪付 · 迅鼎支付(免签) - 安装文档 · 看云

热门文章

  1. uploadify多图上传php,Uploadify多上传图片插件
  2. php 下拉源码,PHP采集百度下拉框数据的脚本程序源码
  3. SQL Server字符串聚合拼接列值合并
  4. 分类及回归问题——继续人脸颜值评分
  5. linux系统下的rz、sz详解
  6. 黑阔主流攻防之不合理的cookie验证方式
  7. MMPBSA结合自由能计算原理
  8. Saturn PCB Design Toolkit分享
  9. Virtualbox安装Windows11教程,提供虚机专用镜像下载。
  10. Cron表达式与CronTrigger