ME3616 NBIOT模块基础使用指南
ME3616 NBIOT模块使用指南
- 简介
- 前言
- 硬件搭建
- 外围电路
- 核心
- 串口电平转换
- 天线
- 其他天线
- 开机复位电路
- 模组AT指令流程
- 易错提醒
- 基础功能测试
- ME3616 TCP通信
- 流程详解
- ME3616 UDP通信
- ME3616连接MQTT
- 流程详解
- ME3616连接LWM2M
- ME3616连接阿里云MQTT
- MCU通信方案
- 常见错误处理
简介
ME3616 是一款支持NB-IoT通信标准的窄带蜂窝物联网通信模组。在NB-IoT制式下,该模块可以提供最大66 Kbps上行速率和34 Kbps下行速率。该模块为极小尺寸LCC紧凑型封装模块,适用于可穿戴设备等对于模块尺寸有严格要求的应用领域。
ME3616专为低速率、低功耗、远距离、海量连接的物联网应用而设计。该模组支持多种网络协议(CoAP、TCP/UDP、MQTT、OMA-LWM2M、oneNET)和多种低功耗模式(PSM、eDRX),并可支持GNSS定位功能和嵌入式eSIM。这些协议和功能可以让它应用在智能表计、智能停车、资产追踪和可穿戴设备等多种物联网及M2M的应用场景中。
前言
本教程旨在面向没有模组使用基础的用户,我尽可能的把繁杂的部分简化,让未接触过此类模组开发学生或者第一次接手该项目的朋友能够快速搭建最小系统用以测试,但是即便是如此,下面的简单设计也依旧是量产过,且经受考验的。
硬件搭建
外围电路
在这里,我提供一个最简化版本的模组外围电路,按此搭建,ME3616模组便可以正常使用且可与外部通信,
[这里使用的是串口开发方案,即通过串口发送AT指令进行通信]
核心
我就没有单独画电源了,因为该模组可以直接3.3V供电,和MCU处在同一电压域,你可以选择任何你需要的电源方案,DCDC或者是像常见的LDO例如ASM1117 3.3即可驱动,非常方便 [注:官方要求的电源能提供的最大电流需达到800ma,因不同制式下可能会出现瞬时大电流,但是平时模组电流并不大,毕竟NB模组就是针对低功耗设计的]。
下图为官方指南:无论哪个版本,都可以在3.3V下正常工作。
电源处尽可能最低满足有一颗最小100uf的低ESR储能电容[一般是用的3216的钽电容]为瞬时增大的电流提供供能,以及三颗图上所示的滤波电容,走线时经过电容尽可能按先大后小的顺序,以增强滤波效果。
这一路串口,是模组调试串口,通常用以给模组下载固件,画板时尽可能保留该接口,或者留下测试点,出现模组版本差异时方便升级模组。
串口电平转换
ME3616模组的串口电平是1.8V,通常我们使用的USB转串口或者MCU都是TTL电平的,为了转换成TTL电平我们采用了这个电路以匹配电平,如果需要转换成其他电平,请自行设计。
[注:三极管的选择需要注意开关频率是否满足波特率,推荐使用MMBT3904这个型号]
天线
天线设计本应该是一个特别考验经验和技能的工作,什么射频阿,阻抗匹配阿,那些让没有经验的小白看着就头大,但是经过我们反复测试,该模组在信号良好时甚至不接天线都能正常通信,所以如果你没有设计过天线也不用担心,一定点的亮,一定能通信,你就放心,至于天线的选择,我推荐的方式是走线由MAIN_ANT引出,留出Π型网络【图示NC的部分,可以根据实际测试时调整数值,或者直接留空,但是画板时依旧建议保留焊盘】,直接连到ipx座子上,使用外部天线,如下图所示。
这种座子即可,立创商城搜天线座子就有。
其他天线
我分别测试过PCB天线,塑料片儿天线,陶瓷天线,均能正常使用,但是外部天线是信号最好的,推荐使用外部天线,下图是我在个人做的一些小玩具上为了省空间使用的陶瓷天线,信号属于【还能用】。
开机复位电路
这个电路依旧很简单,简单的三极管和滤波电容做成的两个按键,其中MCU_RST,MCU_POWER可以连接MCU,通过MCU控制开关和复位。
简述一下开机流程:POWER管脚拉低至少0.2s [对应按键按下0.2s或者MCU IO拉低],模组开始开机,REST引脚拉低一秒,则模组开始复位。
那么基础的硬件部分就介绍完了,如果您还有什么疑问,可以在评论区留言,我会为您解答。
模组AT指令流程
易错提醒
这里我只介绍常用的基础测试指令,复杂功能的实现请阅读相关datasheet。
在指令收发前,我先针对常见错误做出一些整理
1.为什么模组不响应
(1)请确认上位机或者MCU程序设置了正确的波特率,ME3616默认频率为115200,后期可以指令修改。
(2)如果是直接连接的模组,是否已经做了电平转换,模组串口电平是1.8V,你的通信电平是否正确。
2.为什么返回ERROR
(1)请确认指令发送正确或完整,是否有多余的空格,因为模组是通过\r\n作为结束标志的
(2)是否使用了中文符号,特别是双引号【“】,务必使用英文的双引号【"】
/*这里的问号和双引号,在串口助手指令发送时请务必注意区分*/
AT+CPIN? AT+CPIN?
”“ ""
(3)模组是否支持这条指令,发送指令加问号 [指令?] 会回显模组是否支持这个指令,有可能你使用的软件版本不支持该指令,则您需要升级模组固件,如果是硬件版本不支持,则需要更换其他型号的该模组。ATI查看模组软硬件版本。
基础功能测试
/* [响应OK则表示正常运行了]*/AT
/* 读取SIM卡的ICCID 【如果没插卡是无法读取的,请确认已经插入了物联网卡】*/AT*MICCID
【下图示为插入SIM卡的响应】
/* EPS网络注册状态,用以查询是否附着上网路,0,1则未注册上网络,附着上网络应该是0,1*/AT+CEREG?
【下图示为附着上网络】
/* 查询PIN状态,如果PING上网络,会响应READY*/AT+CPIN?
基础指令就到这里,以上指令都响应正确后,基本就可以开始后面的通信指令。
ME3616 TCP通信
以下是TCP测试的指令合集
创建套接字通道
AT+ESOC=1,1,1
连接TCP服务器
AT+ESOCON=0,8885,"219.144.130.27"
发送数据
AT+ESOSEND=0,8,3131313131313131
关闭套接字
AT+ESOCL=0
先让我们看看通过串口助手收发的完整实际通信流程
//[2020-11-18 21:38:59.692]# SEND ASCII>
AT+ESOC=1,1,1 //[2020-11-18 21:38:59.798]# RECV ASCII>
AT+ESOC=1,1,1+ESOC=0OK//[2020-11-18 21:39:59.699]# SEND ASCII>
AT+ESOCON=0,32868,"122.114.122.174"//[2020-11-18 21:39:59.799]# RECV ASCII>
AT+ESOCON=0,32868,"122.114.122.174"
//[2020-11-18 21:40:00.207]# RECV ASCII>OK//[2020-11-18 21:40:12.451]# SEND ASCII>
AT+ESOSEND=0,8,3131313131313131//[2020-11-18 21:40:12.590]# RECV ASCII>
AT+ESOSEND=0,8,3131313131313131OK//[2020-11-18 21:40:24.044]# RECV ASCII>+ESONMI=0,5,68656c6c6f
流程详解
首先发送 AT+ESOC指令以创建套接字。
这三个1的意思分别是:【使用ipv4】,【创建的是TCP套接字】,【使用ip】
AT+ESOC=1,1,1
之后模组会返回一个内部分配好的套接字通道句柄,我们后续的指令都是通过该编号操作。
+ESOC=0 的 0 ,就是返回的套接字句柄编号,这个值为0-4,最多开五个通道。
AT+ESOC=1,1,1+ESOC=0OK
发送AT+ESOCON连接TCP服务器,这里的【0】是刚才模组分配的套接字句柄编号,这里的【32868】是端口,【“122.114.122.174”】是IP地址,端口不需要双引号包围,而IP地址需要双引号。
AT+ESOCON=0,32868,"122.114.122.174"
之后模组会如下响应,则表示已经连上TCP服务器。
AT+ESOCON=0,32868,"122.114.122.174"
OK
发送AT+ESOSEND指令往服务器发送数据,【0】句柄【8】发送的数据长度,注意是按16进制数据发送的,所以是按16进制数的,不是数ascii数,【3131313131313131】要发送的16进制数据。
AT+ESOSEND=0,8,3131313131313131
之后模组会如下响应,表示发送成功
AT+ESOSEND=0,8,3131313131313131OK
如果从服务器发送数据,模组收到是什么样子的呢,如下所示,挂载的为【0】收到消息的句柄编号【5】长度【68656c6c6f】16进制数据。
+ESONMI=0,5,68656c6c6f
发送AT+ESOCL指令,关闭套接字,参数【0】为要关闭的套接字通道的句柄编号
AT+ESOCL=0
响应:
AT+ESOCL=0OK
有时候因为通道开太多了,开满了,则需要关闭点通道,如下所示。
[2020-11-18 22:06:26.639]# SEND ASCII>
AT+ESOC=1,1,1[2020-11-18 22:06:26.749]# RECV ASCII>
AT+ESOC=1,1,1too much socket instanceERROR[2020-11-18 22:06:41.881]# SEND ASCII>
AT+ESOCL=0[2020-11-18 22:06:41.984]# RECV ASCII>
AT+ESOCL=0OK[2020-11-18 22:06:46.552]# SEND ASCII>
AT+ESOC=1,1,1[2020-11-18 22:06:46.658]# RECV ASCII>
AT+ESOC=1,1,1+ESOC=0OK
掉线的情况,如果收到这种响应,则表明掉线,,可能是服务器关闭,或者被服务器踢掉了,具体情况需要根据返回值确定。
+ESOERR=0,4
那么关于TCP的基础通信就到这里了,如果还有什么疑惑,请在评论区指出。
ME3616 UDP通信
以下是UDP测试的指令合集
创建套接字通道
AT+ESOC=1,2,1
连接TCP服务器
AT+ESOCON=0,7000,"219.144.130.27"
发送数据
AT+ESOSEND=0,8,3131313131313131
关闭套接字
AT+ESOCL=0
//[2020-11-18 21:38:59.692] SEND ASCII>
AT+ESOC=1,2,1 //[2020-11-18 21:38:59.798] RECV ASCII>
AT+ESOC=1,2,1+ESOC=0OK//[2020-11-18 21:39:59.699] SEND ASCII>
AT+ESOCON=0,32868,"122.114.122.174"//[2020-11-18 21:39:59.799] RECV ASCII>
AT+ESOCON=0,32868,"122.114.122.174"
//[2020-11-18 21:40:00.207]# RECV ASCII>OK//[2020-11-18 21:40:12.451] SEND ASCII>
AT+ESOSEND=0,8,3131313131313131//[2020-11-18 21:40:12.590] RECV ASCII>
AT+ESOSEND=0,8,3131313131313131OK//[2020-11-18 21:40:24.044] RECV ASCII>+ESONMI=0,5,68656c6c6f
和TCP连接几乎一模一样,只是创建套接字通道时候的参数不一样,就不细细讲解了。
ME3616连接MQTT
MQTT是物联网模组最常用的网络协议,这里我不介绍怎么创建MQTT云服务器,因为你们可能有自己搭建的现成的MQTT服务器,也或者是使用ONENET,阿里云提供的MQTT服务器,后续我会单独开个帖子介绍怎么注册ONENET和阿里云创建MQTT服务器,这里只展示怎么怎么指令连接MQTT,而测试例子使用ONENET服务器。
首先MQTT有三元组,这是连接MQTT必备的。
ProductKey: 产品名称DeviceName: 设备名称DeviceSecret:设备秘钥,或者鉴权码。服务器IP地址和端口
以下是MQTT测试的指令合集
通过 TCP 与 MQTT 服务器建立 MQTT 链接,
AT+EMQNEW="219.144.130.26","1883",12000,100
发送链接报文【DeviceName:642441370】【ProductKey:303574】【DeviceSecret:longfushanquan】
AT+EMQCON=0,4,"642441370",120,0,0,"303574","longfushanquan"
发送订阅报文
AT+EMQSUB=0,"mytopic",1
发送发布报文
AT+EMQPUB=0,"mytopic",1,0,0,4,"31323334"
接收发布报文
AT+EMQUNSUB=0,"mytopic"
发送取消订阅报文
AT+EMQDISCON=0
接下来演示下完整流程
[2020-11-18 23:17:10.754] SEND ASCII>
AT+EMQNEW="183.230.40.39","6002",12000,100[2020-11-18 23:17:10.856] RECV ASCII>
AT+EMQNEW="183.230.40.39","6002",12000,100
[2020-11-18 23:17:11.812] RECV ASCII>+EMQNEW: 0OK[2020-11-18 23:17:13.696] SEND ASCII>
AT+EMQCON=0,4,"642441370",120,0,0,"303574","longfushanquan"[2020-11-18 23:17:13.810] RECV ASCII>
AT+EMQCON=0,4,"642441370",120,0,0,"303574","longfushanquan"[2020-11-18 23:17:14.300] RECV ASCII>OK[2020-11-18 23:17:17.094] SEND ASCII>
AT+EMQSUB=0,"mytopic",1[2020-11-18 23:17:17.194] RECV ASCII>
AT+EMQSUB=0,"mytopic",1[2020-11-18 23:17:17.514] RECV ASCII>OK[2020-11-18 23:17:19.759] SEND ASCII>
AT+EMQPUB=0,"mytopic",1,0,0,4,"31323334"[2020-11-18 23:17:19.867] RECV ASCII>
AT+EMQPUB=0,"mytopic",1,0,0,4,"31323334"[2020-11-18 23:17:20.663] RECV ASCII>OK[2020-11-18 23:17:21.688] RECV ASCII>+EMQPUB: 0, "mytopic", 1, 0, 0, 4, "31323334"[2020-11-18 23:17:24.868] SEND ASCII>
AT+EMQDISCON=0[2020-11-18 23:17:24.966] RECV ASCII>
AT+EMQDISCON=0[2020-11-18 23:17:25.029] RECV ASCII>OK
流程详解
发送AT+EMQNEW指令连接ONENET的MQTT服务器,ip地址183.230.40.39,端口6002,如果是ONENET的MQTT,都是这个接口
AT+EMQNEW="183.230.40.39","6002",12000,100
模组响应如下,会返回一个MQTT通道句柄【+EMQNEW: 0】,记住这个值【0】,后续都使用这个句柄
AT+EMQNEW="183.230.40.39","6002",12000,100+EMQNEW: 0OK
发送AT+EMQCON指令连接 MQTT,第一位 【0】 是上面返回的MQTT句柄,第二位【4】是指MQTT版本4,ONENET是使用的4,如果你在连接其他MQTT出现死活连接不上,则可以检查下MQTT版本是否一致,【642441370】client_id,如果是ONENET则对应的是设备id/设备名,即DeviceName【120】保活时间,【0】,【0】,【303574】username,对应ONENET的产品ID,【longfushanquan】password,对应ONENET的DeviceSecret/鉴权码。
AT+EMQCON=0,4,"642441370",120,0,0,"303574","longfushanquan"
连接成功会响应如下
AT+EMQCON=0,4,"642441370",120,0,0,"303574","longfushanquan"OK
发送AT+EMQSUB订阅TOPIC,第一位【0】依旧是MQTT通道ID,写程序的时候要注意处理这个值,【mytopic】是要订阅的topic,【1】是指Qos等级为1,
AT+EMQSUB=0,"mytopic",1
响应为
AT+EMQSUB=0,"mytopic",1OK
AT+EMQPUB往指定的TOPIC推送报文,【句柄】,【topic】,【1】QoS等级【0】保留标志【0】重复标志【4】长度,这里的长度是指16进制的长度,不是字符串的长度喔,【报文,16进制的字符串】
AT+EMQPUB=0,"mytopic",1,0,0,4,"31323334"
以下是指令响应
AT+EMQPUB=0,"mytopic",1,0,0,4,"31323334"OK
接下来,还会有一条服务器响应,因为我们刚才订阅了这个topic,所以我们发送的数据,我们也能收到。
+EMQPUB: 0, "mytopic", 1, 0, 0, 4, "31323334"
关闭MQTT通道,注意mqttid
AT+EMQDISCON=0
响应
AT+EMQDISCON=0OK
以上就是MQTT测试的全部内容了。
ME3616连接LWM2M
待更
ME3616连接阿里云MQTT
待更
MCU通信方案
待更
常见错误处理
待更
ME3616 NBIOT模块基础使用指南相关推荐
- QUECTEL上海移远4G通讯CAT4模组EC20CEFAG模块串口调试指南之03【EC20模组基础串口指令说明】
QUECTEL上海移远4G通讯CAT4模组EC20CEFAG模块串口调试指南之03[EC20模组基础串口指令说明] 一.准备工作 二.硬件环境的搭建 三.基础AT指令的说明和测试 STM32F103学 ...
- QUECTEL上海移远4G通讯CAT4模组EC20CEFAG模块串口调试指南之04【EC20模组SIM卡和驻网模组指令说明】
QUECTEL上海移远4G通讯CAT4模组EC20CEFAG模块串口调试指南之04[EC20模组SIM卡和驻网模组指令说明] 一.准备工作 二.硬件环境的搭建 三.基础AT指令的说明和测试 关于SIM ...
- QUECTEL上海移远4G通讯CAT4模组EC20CEFAG模块串口调试指南之02【EC20模组硬件供电和开关机复位操作】
QUECTEL上海移远4G通讯CAT4模组EC20CEFAG模块串口调试指南之02[EC20模组硬件供电和开关机复位操作] 一.模组硬件知识 1.背景知识:网络制式 2.模组的供电 3.模组的开机 4 ...
- 初级软件测试工程师零基础入门指南
初级软件测试工程师零基础入门指南 唐井军 编著 2012年10月 1.基本概念 1.1软件 软件就是可以在计算机上运行的计算机程序,如操作系统Windows.办公软件Office.聊天QQ.手机游戏等 ...
- 南京工业大学高性能计算平台基础使用指南
高性能计算平台基础使用指南 前言 什么高性能计算 南京工业大学高性能计算平台 如何登录 如何进行文件传输 进行任务提交(本文以提交MATLAB任务为例) 环境变量的配置 (推荐)使用Environme ...
- 宝能汽车ERP系统SAP BASIS基础管理指南
今天大明问到宝能项目的架构,放一份吧,留一个纪念.自己亲手搭建的S4系统,给自己的BASIS生涯划上了句号. 2019~2021 宝能汽车ERP项目 SAP BASIS模块 <系统基础管理指南& ...
- 2021-10-22 学习笔记:FastAPI基础使用指南
2021-10-22 学习笔记:FastAPI基础使用指南 已经第三针疫苗了,祝所有人平安! 简单使用 路径参数 查询参数 请求体 查询参数和字符串校验 路径参数和数值校验 请求体参数 请求体 -- ...
- 三, for循环----文件对象-----函数基础------模块基础
for循环 文件对象 函数基础 模块基础 一,for 循环 1,for循环详解 二.文件对象 1,文件打开方法 2,文件输入 3,文件输出 4,操作文件 三,函数基础 1,函数基本操作 2,函数参数 ...
- 《C语言编程——零基础初学者指南(第3版)》一第1章 什么是C程序设计1.1 什么是程序...
本节书摘来自异步社区<C语言编程--零基础初学者指南(第3版)>一书中的第1章,第1.1节,作者 [美]Greg Perry , Dean Miller,更多章节内容可以访问云栖社区&qu ...
最新文章
- [Jarvis OJ - PWN]——[XMAN]level0
- tms tck_两个用于Eclipse的TCK –开源到底有什么?
- Flowable 6.4.1数据库自动建表错误 SQLSyntaxErrorException: Table 'flowable.act_id_property' doesn't exist
- 12-order by和group by 原理和优化 sort by 倒叙
- 人类为啥比小鼠发育更慢?同日两篇《科学》找到意想不到的原因
- java 线程亲缘性_第7章 线程调度、优先级和亲缘性(1)
- FPGA实现VGA显示(三)——————单个字符显示
- aria-hidden读屏
- java 显示数据库_java连接数据库并显示数据
- 【亲测】Ripro子主题美化C系列主题(春系列)-开源未加密
- 实现消息存档—微信聊天记录组件
- gnuplot:散点图
- 2017国培计算机研修计划,2017年国培计划个人研修计划
- quartus更新symbol后没反应_Quartus II使用常见问题
- 【Python百日基础系列】Day03 - Python 数据类型
- 软件测试职业发展三步曲之一
- 谷歌输入法 GBoard for Android 终于支持中文输入了
- day26-爬虫-scrapy框架初识
- 深度学习相关公开数据集
- python朴素贝叶斯分类器实现_用scikit-learn实现朴素贝叶斯分类器