完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
阿里云平台操作
首先我们要知道BC26连接阿里云是连接阿里云上的某个设备,因此首先需要在阿里云上创建相应的设备。注册阿里云后,打开如下网址链接: 阿里云。 可以使用支付宝登录。登录后进入如下页面: 首先需要知道产品和设备的关系,他们是包含关系,比如一个智能家居产品里面包含了多个智能设备。因此需要先创建产品,然后再在产品下创建设备(产品只有一个,设备可以多个)。 弹出新建产品页面,填入产品信息: 接下来创建设备,并添加到刚才创建的产品中: 查看此设备的三元素,后面使用BC26连接时会用到。 三元素是:产品密匙(ProductKey)、设备名称(DeviceName)、设备密码(DeviceSecret)。 注:三元素要替换成你自己设备的,本文中的三元素已经使用不了了。 使用BC26通过AT连接到阿里云 ①确认IP地址分配正常 命令为: AT+CGPADDR=1 正常回应为: +CGPADDR: 1,100.103.51.110 OK 如果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单片机上实现 void AT_Init(void) { int i; Clear_Buffer(); printf(“ATrn”); delay_ms(500); printf(“ATrn”); delay_ms(500); strx=strstr((const char*)RxBuffer,(const char*)“OK”);//返回OK while(strx==NULL) { Clear_Buffer(); printf(“ATrn”); delay_ms(500); strx=strstr((const char*)RxBuffer,(const char*)“OK”);//返回OK } printf(“ATE0rn”); //关闭回显 delay_ms(500); Clear_Buffer(); printf(“AT+CSQrn”); //检查CSQ delay_ms(500); / printf(“AT+CPIN?rn”);//检查SIM卡是否在位 delay_ms(500); strx=strstr((const char*)RxBuffer,(const char*)“+CPIN: READY”);//查看是否返回ready while(strx==NULL) { Clear_Buffer(); printf(“AT+CPIN?rn”); delay_ms(500); strx=strstr((const char*)RxBuffer,(const char*)“+CPIN: READY”);//检查SIM卡是否在位,等待卡在位,如果卡识别不到,剩余的工作就没法做了 } Clear_Buffer(); /// printf(“AT+QMTCLOSE=0rn”);//断开MQTT连接 delay_ms(500); } void MQTT_Init(void) { Clear_Buffer(); printf(“AT+CGPADDR=1rn”);//查看是否获取到IP delay_ms(500); strx=strstr((const char*)RxBuffer,(const char*)“+CGPADDR:”); while(strx==NULL) { Clear_Buffer(); printf(“AT+CGPADDR=1rn”); delay_ms(500); strx=strstr((const char*)RxBuffer,(const char*)“+CGPADDR:”); } Clear_Buffer(); printf(“AT+QMTCFG=ALIAUTH,0,”a1FMz7jnArW“,”BC26_1“,”5d3679a63306a03fbf001adb528795e6“rn”);//设置阿里云设备信息 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“,1883rn”); //连接阿里云服务器端 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“rn”);//对接阿里云物联网平台创建的设备 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“,0rn”);//订阅个主题 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}}“rn”);//发布消息 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(); } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1752 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1611 浏览 1 评论
1052 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
721 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1666 浏览 2 评论
1926浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
711浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
560浏览 3评论
583浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
544浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 18:32 , Processed in 1.009709 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号