Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
4G模块
AT
MQTT
4G模块连接阿里物联云平台
发布于 2024-03-22 17:44:11 浏览:867
订阅该版
[tocm] # 1. 阿里云物联网平台 ## 1.1 创建实例 学习阶段可以申请公共实例 ## 1.2 云平台上创建产品和设备 其实这些都是抽象的概念 - 产品:有相同特性的很多种设备都属于一类产品,创建的产品下面可以建立很多设备 - 设备:这就是我们的单个硬件要连接的对象 - 物理型:一个产品可能有很多物理型,所有设备都有相同的物理型 比如我们要做一个房间温湿度监测的物联网产品。那么,温度就是它的一个物理型,当然,湿度也是。假如然后硬件设计完成。打样了10个,那这10个板就是设备,想要都用起来,就要在云平台建立10个设备。 简单来说,要完成如下事情: 得到实例 -> 创建产品 -> 定义物理型 -> 创建设备 具体如何操作参考官方文档 [物联网平台(IoT)-阿里云帮助中心 (aliyun.com)](https://help.aliyun.com/zh/iot/) # 2. 4G模块 选用的移远EC-800M模块,串口AT指令就能实现模块的操作 [移远EC800M核心板物联网4G全网通CAT1通信网络DTU支付模块开发板-tmall.com天猫](https://detail.tmall.com/item.htm?abbucket=11&id=684540845998&ns=1&spm=a21n57.1.0.0.11de523coVVdt2&skuId=5130213034165) # 3. 与云平台建立连接 ## 3.1 AT组件 - 使能AT组件 ![Pasted image 20240322164955.png](https://oss-club.rt-thread.org/uploads/20240322/f3664b726ebcf451c978e8cf38053fd7.png.webp) - 常用接口: at_exec_cmd: 执行AT指令 at_resp_parse_line_args: AT命令的返回结果进行解析 at_create_resp: AT响应结果缓存处 at_set_urc_table: URC回调接口表配置,就是模块主动发给MCU时的各种帧的回调,如果只向云上传数据先不关心这个。 ## 3.2 连接云端 ### 3.2.1 从云平台设备管理界面获取设备连接参数 ![host](https://oss-club.rt-thread.org/uploads/20240322/ec4d702a2ee21cd8a35e4f8603b4f301.png) ![连接密钥](https://oss-club.rt-thread.org/uploads/20240322/b4d76884d81e2d623acda948a023025b.png) 确定了这5个参数就能和云端建立连接 ### 3.2.2 建立连接 - 定义连接参数 ![连接参数宏定义](https://oss-club.rt-thread.org/uploads/20240322/2cab25eeb488ac26ad4bbc18847f0f97.png) - at初始化,要指定串口设备 ```c if (at_client_init("uart6", 1024) != RT_EOK) { log_e("at client init failed"); return RT_ERROR; } at_set_urc_table(urc_table, sizeof(urc_table) / sizeof(urc_table[0])); ec800m_resp = at_create_resp(AT_BUFFER, 0, rt_tick_from_millisecond(AT_TIMEOUT)); if (ec800m_resp == RT_NULL) { LOG_E("No memory for response structure!"); } ``` - 连接 ```c // 先获取设备证书,这里存到了flash 使用了easyflash的env功能 ef_str = ef_get_env("dev_name"); if (ef_str != RT_NULL) { rt_snprintf(dev_name, sizeof(dev_name), "%s", ef_str); dev_key_valid[0] = 1; } ef_str = ef_get_env("dev_secret"); if (ef_str != RT_NULL) { rt_snprintf(dev_secret, sizeof(dev_secret), "%s", ef_str); dev_key_valid[1] = 1; } if (dev_key_valid[0] == 0 || dev_key_valid[1] == 0) { log_e("设备证书无效"); return; } // 配置连接参数 // 移远模块连接阿里云平台 参考"Quectel_EC200x&EC600x&EG912Y系列_MQTT_应用指导_V1.1.pdf" // 1. 配置接收模式 result = at_exec_cmd(ec800m_resp, "AT+QMTCFG=\"recv/mode\",%d,%d,%d", QMTCFG_CLIENT_ID, MSG_RECV_MODE, MSG_LEN_ENABLE); // 收到的AT指令回复最后是"OK"时,at_exec_cmd返回RT_EOK, 收到了回复最后是"ERROR"时,at_exec_cmd返回RT_ERROR if (result != RT_EOK) { LOG_E("AT client send commands failed or return response error %d!", result); } rt_thread_mdelay(1000); // 2. 配置阿里云设备信息 result = at_exec_cmd(ec800m_resp, "AT+QMTCFG=\"aliauth\",%d,\"%s\",\"%s\",\"%s\"", QMTCFG_CLIENT_ID, VCB_PRODUCT_KEY, dev_name, dev_secret); if (result != RT_EOK) { LOG_E("AT client send commands failed or return response error!"); } rt_thread_mdelay(1000); // 3. 配置url result = at_exec_cmd(ec800m_resp, "AT+QMTOPEN=%d,\"%s\",%d", QMTCFG_CLIENT_ID, MQTT_HOST, MQTT_PORT); if (result != RT_EOK) { LOG_E("AT client send commands failed or return response error!"); } rt_thread_mdelay(100); // 4. 连接 result = at_exec_cmd(ec800m_resp, "AT+QMTCONN=%d,\"%s\"", QMTCFG_CLIENT_ID, CLIENT_NAME); if (result != RT_EOK) { LOG_E("AT client send commands failed or return response error!"); } ``` 出现连接失败情况可以反复执行连接命令,AT+QMTCONN 重复几次就能连接上 ### 3.2.3 上传数据 向云端上传数据,要用到MQTT PUB ```c int mqtt_pub(char* topic, char* buf, int len) { rt_err_t ret = RT_EOK; if (buf == RT_NULL) { log_e("pub buf null"); return RT_ERROR; } at_client_t ec800m = at_client_get("uart6"); if (net_state) { rt_mutex_take(pub_lock, RT_WAITING_FOREVER); if (at_obj_exec_cmd(ec800m, RT_NULL, "AT+QMTPUBEX=%d,0,%d,0,\"%s\",%d", QMTCFG_CLIENT_ID, MQTT_PUB_QOS, topic, len) == RT_EOK) { // 等模块回复'>'之后才能发送 rt_thread_mdelay(5); at_client_send(buf, len); pub_fail_cnt = 0; } else { pub_fail_cnt++; if (pub_fail_cnt > PUB_FIAL_MAX) { net_state = 0; } ret = RT_ERROR; } rt_mutex_release(pub_lock); } else { // log_e("还没有建立连接"); ret = RT_ERROR; } return ret; } ```
1
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
Z_Y
这家伙很懒,什么也没写!
文章
11
回答
41
被采纳
1
关注TA
发私信
相关文章
1
rt-thread 2g/3g/4g通信模块的教程有吗?
2
基于AT指令,用esp8266如何连接mqtt?
3
AT组件使用问题
4
官方AT客户端应用笔记的几个小tip
5
RTT的SAL能够判断使用LWIP或者AT?
6
rt_therad AT组件移植不成功(结贴)
7
AT组件在哪个版本的?
8
AT组件 连接 Onenet 连接失败
9
esp8266 AT指令 MQTT连接问题
10
AT组件使用问题之模块主动上报【已解决】
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
805
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部