BC26连接阿里云,MQTT协议,AT流程和STM32代码实现
阿里云平台操作
首先我们要知道BC26连接阿里云是连接阿里云上的某个设备,因此首先需要在阿里云上创建相应的设备。注册阿里云后,打开如下网址链接: 阿里云. 可以使用支付宝登录。登录后进入如下页面:
首先需要知道产品和设备的关系,他们是包含关系,比如一个智能家居产品里面包含了多个智能设备。因此需要先创建产品,然后再在产品下创建设备(产品只有一个,设备可以多个)。
弹出新建产品页面,填入产品信息:
接下来创建设备,并添加到刚才创建的产品中:
查看此设备的三元素,后面使用BC26连接时会用到。
三元素是:产品密匙(ProductKey)、设备名称(DeviceName)、设备密码(DeviceSecret)。
注:三元素要替换成你自己设备的,本文中的三元素已经使用不了了。
使用BC26通过AT连接到阿里云
①确认IP地址分配正常
命令为:
AT+CGPADDR=1
正常回应为:
+CGPADDR: 1,100.103.51.110OK
如果BC26获得了IP地址说明卡和网络肯定没有问题,其他的就不用查询了。如果查询不到模块的IP,可以使用AT+CPIN?查询一下卡是否连接正常,确认模块是否检测到卡。卡一定要使用移动的物联网卡,使用电信卡只能连接电信的云平台。
使用AT+CSQ查询一下信号强度。
②设置阿里云设备信息
查询BC26的MQTT手册得知,命令如下:
AT+QMTCFG="aliauth",<TCP_connectID>[,<product_key>,<device_name>,<device_secret>]
TCP_connectID是MQTT Socket 标识符,范围:0~5。我们这里取0即可。再把前面在阿里云上创建的设备的三元素带入,命令如下:
AT+QMTCFG=ALIAUTH,0,"a1FMz7jnArW","BC26_1","5d3679a63306a03fbf001adb528795e6"
正常回应为:
OK
③连接阿里云服务器端
查询BC26的MQTT手册得知,命令如下:
AT+QMTOPEN=<TCP_connectID>,<host_name>,<port>
TCP_connectID上面取值为0。阿里云的MQTT服务器地址为iot-as-mqtt.cn-shanghai.aliyuncs.com,端口为1883,因此命令如下:
AT+QMTOPEN=0,"iot-as-mqtt.cn-shanghai.aliyuncs.com",1883
正常回应为:
OK+QMTOPEN: 0,0
命令返回含义:
+QMTOPEN: <TCP_connectID>,<result><result> 整型。命令执行结果。
-1 打开网络失败
0 打开网络成功
本命令发出后,要在几秒内执行下面④命令,否则会返回:
+QMTSTAT: 0,1
含义为连接被服务器断开。此时重新执行本步即可。
④对接阿里云物联网平台创建的设备
查询BC26的MQTT手册得知,命令如下:
AT+QMTCONN=<TCP_connectID>,<clientID>[,<username>[,<password>]]
clientID取值设备名称(DeviceName),后面的中括号中的内容可以忽略,于是命令为:
AT+QMTCONN=0,"BC26_1"
正常回应为:
OK+QMTCONN: 0,0,0
命令返回含义:
+QMTCONN: <TCP_connectID>,<result>[,<ret_code>]<result> 整型。命令执行结果。
0 数据包发送成功且从服务器接收到 ACK
1 数据包重传
2 数据包发送失败
<ret_code> 整型。连接返回码。
0 接受连接
1 拒绝连接:不支持的协议版本
2 拒绝连接:拒绝标识符
3 拒绝连接:服务器不可用
4 拒绝连接:用户名或密码错误
5 拒绝连接:未授权
此时可以看到阿里云上设备已在线:
⑤设备的topics订阅
查询BC26的MQTT手册得知,命令如下:
AT+QMTSUB=<TCP_connectID>,<msgID>,<topic1>,<qos1>[,<topic2>,<qos2>…]<msgID> 整型。数据包的消息标识符。范围: 1~65535。
<topic> 字符串类型。客户端想要订阅或者退订的主题。最大长度: 255 字节。
<qos> 整型。客户端打算发布消息的 QoS 等级。
0 最多发送一次
1 至少发送一次
2 只发送一次
我们这里订阅topic为/a1FMz7jnArW/BC26_1/user/get的信息(/product_key/device_name/user/get),具体的topic定义可以去看这里,QoS 等级选择0,因此命令为:
AT+QMTSUB=0,1,"/a1FMz7jnArW/BC26_1/user/get",0
正常回应为:
OK+QMTSUB: 0,1,0,1
命令返回含义:
+QMTSUB: <TCP_connectID>,<msgID>,<result>[,<value>]<msgID> 整型。数据包的消息标识符。范围: 1~65535。
<result> 整型。命令执行结果。
0 数据包发送成功且从服务器接收到 ACK
1 数据包重传
2 数据包发送失败
<value> 若<result>=0,则为已确认 QoS 等级的矢量;参数取值 128 表示服务器拒绝订阅;
若<result>=1,则表示数据包重传次数;
若<result>=2,则不显示。
此时可以在阿里云上看到此设备订阅的Topic:
⑥发布消息
查询BC26的MQTT手册得知,命令如下:
AT+QMTPUB=<TCP_connectID>,<msgID>,<qos>,<retain>,<topic>,<msg><msgID> 整型。数据包的消息标识符。 范围: 0~65535。只有当<qos>=0 时,该参数值为 0。
<qos> 整型。客户端想要发布消息的 QoS 等级。
0 最多发送一次
1 最少发送一次
2 只发送一次
<retain> 整型。消息发送到当前订阅者后,服务器是否保存该消息。
0 消息发送到当前订阅者后,服务器不保存消息。
1 消息发送到当前订阅者后,服务器保存消息。
<topic> 字符串类型。待发布主题。 最大长度: 255 字节。
<msg> 字符串类型。待发布消息。 最大长度: 700 字节; 若是在数据模式,最大长度: 1024字节。
Topic的定义去看这里,msg的内容要符合Alink JSON数据格式,要因此命令为:
AT+QMTPUB=0,1,1,0,"/sys/a1FMz7jnArW/BC26_1/thing/event/property/post","{params:{LightVolt:13.24}}"
正常回应为:
OK+QMTPUB: 0,1,0
命令返回含义:
+QMTPUB: <TCP_connectID>,<msgID>,<result>[,<value>]<msgID> 整型。数据包的消息标识符。 范围: 0~65535。只有当<qos>=0 时,该参数值为 0。
<result> 整型。命令执行结果。
0 数据包发送成功且从服务器接收 ACK(当<qos>=0 时,发布的消息无需 ACK)
1 数据包重传
2 数据包发送失败
<value> 若<result>=1,则表示数据包重传次数;
若<result>=0 或 2,则不显示。
此时可以在阿里云上看到发布上去的消息:
⑦设备从服务器断开
查询BC26的MQTT手册得知,命令如下:
AT+QMTDISC=<TCP_connectID>
因此命令为:
AT+QMTDISC=0
正常回应为:
OK+QMTDISC: 0,0
命令返回含义:
+QMTDISC: <TCP_connectID>,<result><TCP_connectID> 整型。 MQTT Socket 标识符。范围: 0~5。
<result> 整型。命令执行结果。
-1 断开连接失败
0 断开连接成功
此时可以看到阿里云上设备已离线:
⑧关闭设备网络
查询BC26的MQTT手册得知,命令如下:
AT+QMTCLOSE=<TCP_connectID>
因此命令为:
AT+QMTCLOSE=0
正常回应为:
OK+QMTCLOSE: 0,0
命令返回含义:
+QMTCLOSE: <TCP_connectID>,<result><TCP_connectID> 整型。 MQTT Socket 标识符。范围: 0~5。
<result> 整型。命令执行结果。
-1 关闭网络失败
0 关闭网络成功
此命令和⑦好像只能执行一个,执行了一个再执行另一个,就会返回error。
在STM32单片机上实现
工程链接AT命令的流程和上面一样,两个主要的函数如下,就是发送AT指令,然后检查接收的模块回应数据对不对。
void AT_Init(void)
{int i;Clear_Buffer();printf("AT\r\n");delay_ms(500);printf("AT\r\n");delay_ms(500);strx=strstr((const char*)RxBuffer,(const char*)"OK");//返回OKwhile(strx==NULL){Clear_Buffer();printf("AT\r\n");delay_ms(500);strx=strstr((const char*)RxBuffer,(const char*)"OK");//返回OK}printf("ATE0\r\n"); //关闭回显delay_ms(500);Clear_Buffer();printf("AT+CSQ\r\n"); //检查CSQdelay_ms(500);/printf("AT+CPIN?\r\n");//检查SIM卡是否在位delay_ms(500);strx=strstr((const char*)RxBuffer,(const char*)"+CPIN: READY");//查看是否返回readywhile(strx==NULL){Clear_Buffer();printf("AT+CPIN?\r\n");delay_ms(500);strx=strstr((const char*)RxBuffer,(const char*)"+CPIN: READY");//检查SIM卡是否在位,等待卡在位,如果卡识别不到,剩余的工作就没法做了}Clear_Buffer();///printf("AT+QMTCLOSE=0\r\n");//断开MQTT连接delay_ms(500);
}void MQTT_Init(void)
{Clear_Buffer();printf("AT+CGPADDR=1\r\n");//查看是否获取到IPdelay_ms(500);strx=strstr((const char*)RxBuffer,(const char*)"+CGPADDR:");while(strx==NULL){Clear_Buffer();printf("AT+CGPADDR=1\r\n");delay_ms(500);strx=strstr((const char*)RxBuffer,(const char*)"+CGPADDR:");}Clear_Buffer(); printf("AT+QMTCFG=ALIAUTH,0,\"a1FMz7jnArW\",\"BC26_1\",\"5d3679a63306a03fbf001adb528795e6\"\r\n");//设置阿里云设备信息delay_ms(500);strx=strstr((const char*)RxBuffer,(const char*)"OK");while(strx==NULL){strx=strstr((const char*)RxBuffer,(const char*)"OK");}Clear_Buffer(); printf("AT+QMTOPEN=0,\"iot-as-mqtt.cn-shanghai.aliyuncs.com\",1883\r\n"); //连接阿里云服务器端delay_ms(500);strx=strstr((const char*)RxBuffer,(const char*)"+QMTOPEN: 0,0");while(strx==NULL){delay_ms(500);strx=strstr((const char*)RxBuffer,(const char*)"+QMTOPEN: 0,0");}Clear_Buffer();printf("AT+QMTCONN=0,\"BC26_1\"\r\n");//对接阿里云物联网平台创建的设备delay_ms(500);strx=strstr((const char*)RxBuffer,(const char*)"+QMTCONN: 0,0,0");//看下返回状态while(strx==NULL){strx=strstr((const char*)RxBuffer,(const char*)"+QMTCONN: 0,0,0");//看下返回状态}Clear_Buffer();printf("AT+QMTSUB=0,1,\"/a1FMz7jnArW/BC26_1/user/get\",0\r\n");//订阅个主题delay_ms(500);strx=strstr((const char*)RxBuffer,(const char*)"+QMTSUB: 0,1,0");//订阅成功while(strx==NULL){strx=strstr((const char*)RxBuffer,(const char*)"+QMTSUB: 0,1,0");//订阅成功}Clear_Buffer();printf("AT+QMTPUB=0,1,1,0,\"/sys/a1FMz7jnArW/BC26_1/thing/event/property/post\",\"{params:{LightVolt:13.24}}\"\r\n");//发布消息delay_ms(500);strx=strstr((const char*)RxBuffer,(const char*)"+QMTPUB: 0,1,0");//发布成功while(strx==NULL){strx=strstr((const char*)RxBuffer,(const char*)"+QMTPUB: 0,1,0");//发布成功}Clear_Buffer();
}
BC26连接阿里云,MQTT协议,AT流程和STM32代码实现相关推荐
- ESP8266连接阿里云--MQTT协议
ESP8266连接阿里云–MQTT协议 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(Publish/Subscr ...
- 移远BC35-G配置网络连接阿里云MQTT发送数据
移远BC35/BC26/BC28配置网络连接阿里云MQTT发送数据(一)精.防踩坑 硬件准备 接线部分 软件准备 烧录固件 QFlash 4.17烧录 阿里云准备 测试准备(AT指令) 连接阿里云 第 ...
- ESP32连接阿里云MQTT物联网平台
接上期文章:<入住阿里云MQTT物联网平台> 我们已经获取到阿里云设备三元组信息,并且做好了消息转发"云产品流转"设置,今天就来使用ESP32连接阿里云,试试用MQTT ...
- 亿佰特串口服务器接入阿里云MQTT协议的软件配置教程
在之前的文章中我们了解到虚拟串口软件作为TCP客户端来结合串口服务器使用,这一期我们来看一下串口服务器怎样接入阿里云物模型. 步骤详尽,一文读懂. 1.阿里云MQTT环境配置 ③点击"创建产 ...
- 【STM32 x ESP8266】连接阿里云 MQTT 服务器(报文连接)
具体如何在阿里云创建一个 MQTT 服务器我就不写出来了,可以去百度一下(主要是我忘了,不好演示). 有关 MQTT 报文的一些标识在我前面的一篇文章中讲过,感兴趣的可以去看看(有关代码部分讲解的内容 ...
- 串口服务器接入阿里云MQTT协议的软件配置教程
在之前的文章中我们了解到虚拟串口软件作为TCP客户端来结合串口服务器使用,这一期我们来看一下串口服务器怎样接入阿里云物模型. 步骤详尽,一文读懂. 1.阿里云MQTT环境配置 ③点击"创建产 ...
- 单片机AT指令操作GA6-B短信模块连接阿里云MQTT服务器(双向通信)
0. 前言 网上这种东西不太多,我也是看了不少资料弄出来了,觉得应该写点东西出来. 我用的板子不是arduino,用的是stm32,开发工具是Arduino IDE,因为Arduino IDE集成了较 ...
- 【单片机笔记】STM32+ESP8266通过AT指令WIFI连接阿里云MQTT服务器
上一篇使用USB转串口的方式通过ESP8266wifi模块的方式成功连接上了阿里云,现在就要通过单片机来替换电脑上位机了,这样单片机自动的去调用并发送串口数据更加方便,也更加符合一个产品的开发.板载的 ...
- andriod 接入mqtt_Android 连接阿里云 mqtt失败
最近,需要在手机上连接mqtt微消息服务,按照文档,连接发现一直报 已断开连接 (32109) - java.io.EOFException W/System.err: at org.eclipse. ...
- 微信小程序与MCU基于阿里云MQTT协议通信
前言 1.参考 文章1 阿里官方提供的SDK包 文章2 就是这个,官方提供的包,用node.js这
最新文章
- 《中国人工智能学会通讯》——4.14 相关研究现状
- QPushButton
- 读取SD卡里面的BMP文件 显示到TFT上
- mfc 实现 设备 热插拔功能
- python3.6安装包多大_win10下Python3.6安装、配置以及pip安装包教程
- 完美主义怎么解决_相信我,你不要完美主义
- LeetCode之Find the Difference
- VMweare 典型创建 Kali Linux 虚拟机
- 常用编码软件简单使用记录 1 : 自主编码器
- action评测 osmo_Osmo Action与GoPro 7的七大对决,评测谁是运动相机王者?
- 2014年3月至2014年6月阅读记录(共64项)
- Photoshop插件-黑白(四)-脚本开发-PS插件
- S7-1200 PLC的常见扩展模块
- c语言转为or1200汇编语言,gogo全站-官网首页
- 计算机的英语怎样写,电脑的英文作文怎么写好呢
- kettle实例(获取企业微信打卡数据并将数据入库)
- mysql僵尸进程_僵尸Z进程和D进程
- 推荐一款自带很好用的桌面便签
- Java中使用MultipartFile类型接收前端上传的文件过大报异常解决
- Glide v4详解