阿里云平台操作

  首先我们要知道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代码实现相关推荐

  1. ESP8266连接阿里云--MQTT协议

    ESP8266连接阿里云–MQTT协议   MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(Publish/Subscr ...

  2. 移远BC35-G配置网络连接阿里云MQTT发送数据

    移远BC35/BC26/BC28配置网络连接阿里云MQTT发送数据(一)精.防踩坑 硬件准备 接线部分 软件准备 烧录固件 QFlash 4.17烧录 阿里云准备 测试准备(AT指令) 连接阿里云 第 ...

  3. ESP32连接阿里云MQTT物联网平台

    接上期文章:<入住阿里云MQTT物联网平台> 我们已经获取到阿里云设备三元组信息,并且做好了消息转发"云产品流转"设置,今天就来使用ESP32连接阿里云,试试用MQTT ...

  4. 亿佰特串口服务器接入阿里云MQTT协议的软件配置教程

    在之前的文章中我们了解到虚拟串口软件作为TCP客户端来结合串口服务器使用,这一期我们来看一下串口服务器怎样接入阿里云物模型. 步骤详尽,一文读懂. 1.阿里云MQTT环境配置 ③点击"创建产 ...

  5. 【STM32 x ESP8266】连接阿里云 MQTT 服务器(报文连接)

    具体如何在阿里云创建一个 MQTT 服务器我就不写出来了,可以去百度一下(主要是我忘了,不好演示). 有关 MQTT 报文的一些标识在我前面的一篇文章中讲过,感兴趣的可以去看看(有关代码部分讲解的内容 ...

  6. 串口服务器接入阿里云MQTT协议的软件配置教程

    在之前的文章中我们了解到虚拟串口软件作为TCP客户端来结合串口服务器使用,这一期我们来看一下串口服务器怎样接入阿里云物模型. 步骤详尽,一文读懂. 1.阿里云MQTT环境配置 ③点击"创建产 ...

  7. 单片机AT指令操作GA6-B短信模块连接阿里云MQTT服务器(双向通信)

    0. 前言 网上这种东西不太多,我也是看了不少资料弄出来了,觉得应该写点东西出来. 我用的板子不是arduino,用的是stm32,开发工具是Arduino IDE,因为Arduino IDE集成了较 ...

  8. 【单片机笔记】STM32+ESP8266通过AT指令WIFI连接阿里云MQTT服务器

    上一篇使用USB转串口的方式通过ESP8266wifi模块的方式成功连接上了阿里云,现在就要通过单片机来替换电脑上位机了,这样单片机自动的去调用并发送串口数据更加方便,也更加符合一个产品的开发.板载的 ...

  9. andriod 接入mqtt_Android 连接阿里云 mqtt失败

    最近,需要在手机上连接mqtt微消息服务,按照文档,连接发现一直报 已断开连接 (32109) - java.io.EOFException W/System.err: at org.eclipse. ...

  10. 微信小程序与MCU基于阿里云MQTT协议通信

    前言 1.参考 文章1 阿里官方提供的SDK包 文章2 就是这个,官方提供的包,用node.js这

最新文章

  1. 《中国人工智能学会通讯》——4.14 相关研究现状
  2. QPushButton
  3. 读取SD卡里面的BMP文件 显示到TFT上
  4. mfc 实现 设备 热插拔功能
  5. python3.6安装包多大_win10下Python3.6安装、配置以及pip安装包教程
  6. 完美主义怎么解决_相信我,你不要完美主义
  7. LeetCode之Find the Difference
  8. VMweare 典型创建 Kali Linux 虚拟机
  9. 常用编码软件简单使用记录 1 : 自主编码器
  10. action评测 osmo_Osmo Action与GoPro 7的七大对决,评测谁是运动相机王者?
  11. 2014年3月至2014年6月阅读记录(共64项)
  12. Photoshop插件-黑白(四)-脚本开发-PS插件
  13. S7-1200 PLC的常见扩展模块
  14. c语言转为or1200汇编语言,gogo全站-官网首页
  15. 计算机的英语怎样写,电脑的英文作文怎么写好呢
  16. kettle实例(获取企业微信打卡数据并将数据入库)
  17. mysql僵尸进程_僵尸Z进程和D进程
  18. 推荐一款自带很好用的桌面便签
  19. Java中使用MultipartFile类型接收前端上传的文件过大报异常解决
  20. Glide v4详解

热门文章

  1. 【Maven】maven如何配置本地仓库?
  2. AWSS3文件断点下载,分片上传,断点续传
  3. html实现点击图片放大功能
  4. 如何解决谷歌浏览器插件屏蔽问题
  5. Win10系统中蓝牙串口功能启动方法
  6. 【Altium Designer10详细安装】
  7. matlab 透镜设计,一种用于均匀照明的LED透镜设计方法
  8. R语言向量自回归模型(VAR)及其实现
  9. 算法分析与设计 八大排序算法
  10. 一文读懂Faster RCNN(大白话,超详细解析)