SIM7028 NB-IoT HAT
说明
| |||||||||||||||||||||
| |||||||||||||||||||||
产品概述
本产品是一款具有NB-IoT(窄带物联网)功能的树莓派扩展板,具有低延时、低功耗、低吞吐量应用的最优解决方案,非常适用于如表计、远程控制、资产跟踪、远程监控、远程医疗、共享单车等物联网应用。
产品特性
- 适用于Raspberry Pi Zero/Zero 2/2B/3B/3B+/4B
- 支持TCP、UDP、LWM2M、COAP、DTLS、DNS、NTP、PING、HTTP(S)、MQTT(S)、TLS/SSL等功能
- 板载Type-C接口,可用于软件调试等
- 板载UART接口,可用于AT指令收发和更新固件
- 引出控制引脚,可接入Arduino/STM32等主控板
- 板载USB转UART芯片,可通过跳线帽设置UART通信引脚
- 板载nano SIM卡槽,支持NB-IoT专用卡
- 板载1个LED指示灯,方便查看模块运行状态(STA灯正常情况下显示扩展板运行情况,如考虑展示可定制添加STA指示灯)
- 支持串口波特率范围2400bps ~ 460900bps (默认115200bps)
- 支持AT命令控制(3GPP TS 27.007,27.005和SIMCOM增强型AT命令集)
- 支持SIM应用工具包(SAT Class 3、GSM 11.11、USAT)
- 提供完善的配套资料手册(Raspberry/Arduino等示例程序)
通信参数
- 支持频段
- B1/B2/B3/B4/B5/B8/B12/B13/B14/B17/B18/B19/B20/B25/B26/B28/B66/B70/B85 (支持电信/联通/移动的NB-IoT卡)
- 传输功率
- Class 3 (0.25W@LTE)
- 数据传输
- 上行:≤159Kbps
- 下行:≤127Kbps
其他参数
- 供电电压:2.2V~4.3V
- 逻辑电压:5V / 3.3V (默认为3.3V)
- 休眠模式电流:0.11mA(@DRX=2.56s)
- 省电模式电流:0.8uA
- 工作温度:-40°C ~ 85°C
- 存储温度:-45°C ~ 90°C
- 产品尺寸:30.2mm x 65mm
硬件说明
引脚说明
VBAT |
电源正(支持3.7V锂电池供电) |
GND |
电源地 |
RX |
数据接收 |
TX |
数据发送 |
WAKE |
低功耗模式唤醒引脚;可通过下拉WAKE引脚唤醒SIM7028降边唤醒,下拉WAKE引脚之后需要在10ms内向模块发送AT命令否则进入休眠模式 |
RI |
RI信号行为引脚默认高电平,当收到短信息或URC传出会有120ms低电平脉冲输出 |
RESET |
复位引脚开机状态拉低电平可复位,关机状态无效 |
GND |
电源地 |
BOOT |
下载控制引脚,下拉此引脚复位模块可进入下载模式 |
跳线帽说明
A |
USB—SIM7028 |
B |
Pi—SIM7028 |
C |
USB—Pi |
指示灯说明
STA |
给模块的5V和GND供电时亮起 |
NET |
64ms亮/800ms熄灭——未注册上网络 |
接入Windows调试
硬件连接
用户在使用SIM7028模块前除了Type-C USB线、LTE天线外,还需要另外准备以下东西:
- 一张NB-IoT专用卡(电信、移动或联通)
接线说明:(如使用预留串口接TTL则需断开A跳线帽,若用Type C,直接跳A跳线帽即可)
SIM7028-NB-IoT HAT | TTL |
---|---|
5V | 5V |
GND | GND |
RX1 | TX |
TX1 | RX |
硬件连接操作:
- 将NB-IoT卡安装到模块背面卡槽,并连接好LTE天线。(使用时须把 LTE天线 旋转到板子外侧)
- 将Type-C转USB接入电脑USB串口,给SIM7028模块供电。
- 使用配套的串口助手打开,选择对应的串口端口和波特率115200,勾选加回车换行,
- 打开扩展可看到实现录入的AT指令,点击对应的指令即可直接发送。
简单联网测试
下表列举一些常用AT指令,可以简单快速地检测SIM7028的AT串口通信和网络连接是否正常。
进行下文演示的联网通信实验前建议都先做简单联网测试,确认网络连接正常再操作。
相关的AT指令详细说明可参阅:SIM7022 Series_AT Command Manual。
命令 | 说明 | 返回值 |
---|---|---|
AT |
AT测试指令 |
OK |
ATE |
ATE1设置回显,ATE0关闭回显 |
OK |
AT+CSQ |
网络信号质量查询,返回信号值 |
OK |
AT+CGMR |
查询固件版本 |
OK |
AT+CEREG? |
查询网络注册状态 |
OK |
AT+CGACT? |
查询PDP状态 |
OK |
AT+COPS? |
查询网络信息 |
OK |
AT+CGCONTRDP |
查询网络状态 |
OK |
AT+CFUN=0 |
关闭RF |
OK |
AT+CFUN=1 |
开启RF |
OK |
通信类测试
TCP/IP通信
本文主要介绍SIM7028模块TCP/IP通信功能。
SIM7028模块支持透传模式(数据模式),非透传模式(命令模式)下支持直推模式和缓冲访问模式。
SIM7028 TCP/IP默认是多路client架构,共支持2路sockets,包括TCP或者UDP。
TCP/IP通信前,先根据上文“硬件配置”和“简单联网测试”操作,确保模块联网正常。
SIM7028模块TCP、UDP通信以及DNS解析和Ping功能。
(说明:AT指令详细说明可参阅:File:SIM7028 Series TCPIP Application Note V1.04.pdf,后续模组固件升级,对应的AT指令有可能更新。)
【Service】
相关指令:
AT指令 |
指令说明 |
返回值 |
AT+NETOPEN |
开启Socket service |
OK |
AT+NETCLOSE |
关闭Socket service |
OK +NETCLOSE: 0 |
AT+CIPOPEN |
多链接Socket service,最大连接数:2 |
OK |
AT+CIPSEND |
向指定连接(TCP、UDP)发送数据 |
OK |
AT+CIPCLOSE |
关闭Socket service |
OK |
AT+SERVERSTART |
启动TCP server |
OK |
AT+SERVERSTOP |
停止TCP server |
OK |
【HTTP Client】
相关指令:
AT指令 |
指令说明 |
返回值 |
AT+HTTPINIT |
开启HTTP service |
OK |
AT+HTTPPARA=URL,https://www.waveshare.net/ |
连接远端server |
OK |
AT+HTTPDATA=5,1000 |
输入数据 |
DOWNLOAD <键入 hello OK |
AT+HTTPACTION=0 |
开始HTTP请求,0:GET;1:POST;2:HEAD;3:DELETE;4:PUT |
OK +HTTPACTION: 0,200,54 |
AT+HTTPTERM |
关闭HTTP service |
OK |
AT+HTTPPARA |
设置HTTP参数 |
OK |
AT+HTTPHEAD |
读取HTTP响应头信息 |
OK |
AT+HTTPREAD |
读取HTTP响应信息 |
OK |
【HTTP POST/GET自写接口测试请求】
提供测试接口:【POST/GET】:【 https://www.waveshare.cloud/api/sample-test/ 】/【 http://8.210.171.95:8000/sample-test/ 】
这里使用django写一个简单的应用案例,将POST、GET请求写到一个接口中,使用request.method判断请求方式分别处理
@csrf_exempt def GET_POST_testapi(request): if request.method == 'POST': data_value = request.body.decode('utf-8') print(data_value) if data_value: # Save the data in the SQLite database data = Data(value=data_value, timestamp=timezone.now()) data.save() max_data_count = 30 data_count = Data.objects.count() if data_count > max_data_count: data_to_delete = Data.objects.order_by('timestamp')[:data_count - max_data_count] for item in data_to_delete: item.delete() return JsonResponse({'message': 'Data is saved!'}) else: return JsonResponse({'message': 'Invalid data value.'}, status=400) elif request.method == 'GET': # Get the latest data try: latest_data = Data.objects.latest('timestamp') response_data = { 'value': latest_data.value, 'timestamp': latest_data.timestamp.strftime('%Y-%m-%d %H:%M:%S') } return JsonResponse(response_data) except Data.DoesNotExist: return JsonResponse({'message': 'No data available.'}) else: return JsonResponse({'message': 'Invalid request method.'}, status=400) def get_all_data(request): all_data = Data.objects.all().order_by('timestamp') timeline = [] values = [] for data in all_data: try: numeric_value = float(data.value) timeline.append(data.timestamp.strftime('%Y-%m-%d %H:%M:%S')) values.append(numeric_value) except ValueError: pass # Ignore values that cannot be converted to a number response_data = { 'timeline': timeline, 'value': values } return JsonResponse(response_data)
MQTT通信
本文主要介绍SIM7028模块MQTT通信功能。
相关的AT指令详细说明可参阅:File:SIM7028 Series MQTT(S) Application Note V1.03.pdf
【MQTT订阅主题和发布消息】
下文为方便演示MQTT通信功能,下文以连接私有EMQX服务器为例进行测试。
相关指令:
AT指令 |
指令说明 |
返回值 |
AT+CMQTTSTART |
开启MQTT服务 |
OK |
AT+CMQTTACCQ=0,"Waveshare-Sim7028",0 |
申请MQTT client |
OK |
AT+CMQTTCONNECT=0,tcp://mqtt.easyiothings.com,20,1 |
发送 MQTT 请求,连接私有MQTT服务器(MQTTS) |
OK |
AT+CMQTTTOPIC=0,11 |
输入消息发布主题 |
>sim7028test OK |
AT+CMQTTPAYLOAD=0,9 |
输入发布的消息内容 |
OK >waveshare |
AT+CMQTTPUB=0,0,60 |
发布消息 |
OK +CMQTTPUB: 0,0 |
AT+CMQTTSUB=0,4,1 |
订阅消息主题 |
>test OK +CMQTTSUB: 0,0 [10:03:39.665]收←◆ +CMQTTRXSTART: 0,4,18 +CMQTTRXTOPIC: 0,4 test +CMQTTRXPAYLOAD: 0,18 { "msg": "hello" } +CMQTTRXEND: 0 |
AT+CMQTTSTOP |
停止MQTT服务 |
OK |
AT+CMQTTREL |
释放客户端 |
OK |
AT+CMQTTUNSUBTOPIC |
释放订阅主题 |
OK |
AT+CMQTTUNSUB |
释放订阅 |
OK |
说明:测试MQTT相关指令时,因NB-IoT网络问题,AT应答时间相对较长,请耐心等候。详见下文MQTT
接入树莓派使用
硬件连接
SIM7028 NB-IoT HAT板载树莓派GPIO接口需要调整一下跳线帽的位置到B;下表为树莓派管脚与模块引脚连接情况:
SIM7028 NB-IoT HAT |
Raspberry Pi |
5V |
5V |
GND |
GND |
RXD |
TXD (对应BCM的14) |
TXD |
RXD (对应BCM的15) |
RI |
P7 (对应BCM的4) |
WAKE |
P31 (对应BCM的6) |
软件配置
【串口配置】
由于树莓派串口默认用于终端调试,如需使用串口,则需要修改树莓派设置。
- 执行如下命令进入树莓派配置:
sudo raspi-config
- 选择Interfacing Options ->Serial ->no -> yes,关闭串口调试功能。
- 重启生效。
树莓派minicom调试
将模块插入树莓派中,安装minicom,minicom是linux平台串口调试工具:
sudo apt-get install minicom
执行minicom -D /dev/ttyS0 可进入minicom串口调试界面
默认波特率为115200,ttyS0为树莓派3B/3B+/Zero 2的串口,Zero为ttyAMA0
键入数据无回显可通过 ctrl+A、按Z,按E即可。
树莓派示例程序演示
下载程序,进入目录Raspberry下
sudo apt-get install unzip -y wget https://www.waveshare.net/w/upload/6/68/SIM7028-NB-IoT-HAT-Demo-Code.zip unzip SIM7028-NB-IoT-HAT-Demo-Code.zip -d SIM7028 cd SIM7028/Raspberry/ sudo pip3 install paho-mqtt pyserial # HTTP请求 sudo python3 AT_http_s.py # MQTT请求:注意修改对应参数,此MQTT示例是接入WaveshareCloud平台,详情参阅应用案例 sudo python3 AT_mqtt_s.py
- 示例程序测试截图:
HTTP请求示例:
MQTT请求示例:
接入Jetson Nano使用
硬件连接
硬件连接参考SIM7028NB-IoT HAT连接树莓派
运行效果
sudo apt-get install unzip -y wget https://www.waveshare.net/w/upload/6/68/SIM7028-NB-IoT-HAT-Demo-Code.zip unzip SIM7028-NB-IoT-HAT-Demo-Code.zip -d SIM7028 cd SIM7028/JetsonNano/ sudo pip3 install paho-mqtt pyserial # HTTP请求 sudo python3 AT_http_s.py # MQTT请求:注意修改对应参数,此MQTT示例是接入WaveshareCloud平台,详情参阅应用案例 sudo python3 AT_mqtt_s.py
HTTP请求示例:
MQTT请求示例:
接入Arduino/ESP32使用
硬件连接
Arduino使用软串口连接,ESP32使用硬串口Serial2连接
Esp32 | Sim7028 NB-IoT HAT | LED |
---|---|---|
5V | VBAT | |
GND | GND | 负极 |
Pin16 | TX | |
Pin17 | RX | |
Pin4 | RST | |
Pin5 | 正极 |
软件配置
打开arduino->文件->首选项->附加开发板管理器网址添加:
https://github.com/espressif/arduino-esp32
然后打开开发板管理,搜索esp32下载安装。 也可以通过安装包安装arduino-esp32,可以在arduino社区找到相关安装说明:链接
进入工具->开发板->开发板管理器添加esp32库
进入工具->管理库添加"pubsubclient"库和"ArduinoJson"库
SIM7028 MQTT请求简述
MQTT(Message Queuing Telemetry Transport)是一种轻量级的、基于发布/订阅模式的消息传输协议,旨在为物联网设备提供可靠、高效的通信方式。
MQTT请求组成部分
- 固定报头(Fixed Header):MQTT消息的固定报头是每个消息都必须包含的固定部分。它包含了控制消息传输的必要信息,如消息类型、服务质量等级(QoS)、主题是否保留等。固定报头的长度固定为一个字节。
- 可变报头(Variable Header):MQTT消息的可变报头是一个可选的部分,长度取决于消息类型和特定的操作。它包含与消息类型相关的控制信息,如连接标志、订阅主题的QoS等。
- 主题名(Topic Name):主题名是标识消息的关键部分。在发布消息时,需要指定一个主题名,而订阅者则根据主题名来接收感兴趣的消息。主题名通常使用UTF-8编码。
- 负载(Payload):负载是实际传输的数据内容。对于发布消息,负载是要发送的数据;对于订阅消息,负载是从发布者接收到的数据。负载的长度可以是0个字节到最大消息大小的限制。
MQTT请求流程
- 建立连接:
- 客户端通过TCP/IP协议与MQTT代理服务器建立连接。MQTT默认使用1883端口进行非加密连接,或者使用8883端口进行加密连接(通过TLS/SSL)。
- 客户端可以选择保持会话,以便在断开连接后可以恢复之前的订阅和发布状态。
- 发布消息:
- 客户端作为发布者(Publisher),通过发送PUBLISH消息向指定的主题发布消息。
- PUBLISH消息包含固定报头、可变报头、主题名和负载(消息内容)。
- 发布者发布消息后,MQTT代理服务器将根据订阅者的订阅信息将消息传递给相应的订阅者。
- 订阅主题:
- 客户端作为订阅者(Subscriber),通过发送SUBSCRIBE消息来订阅特定的主题。
- SUBSCRIBE消息包含固定报头、可变报头和一个或多个主题过滤器及其对应的服务质量等级(QoS)。
- 订阅者可以同时订阅多个主题。
- 代理服务器确认订阅
- 当代理服务器收到订阅请求后,它将确认订阅并将相应的订阅信息保存起来。
- 订阅者现在可以接收发布到其订阅的主题的消息。
- 接收消息:
- 当有新消息发布到一个订阅者订阅的主题时,MQTT代理服务器将将该消息发送给订阅者。
- 接收到消息后,订阅者可以处理消息的负载并做出相应的操作。
- 断开连接:
- 当客户端(发布者或订阅者)完成通信后,它可以选择断开与MQTT代理服务器的连接。
- 断开连接时,客户端可以选择保留会话,以便在重新连接时保留之前的订阅和发布状态。
登录平台、创建新设备
创建具体设备,点击设备列表新增,填入相关数据
创建完成之后设备为未激活状态,可通过右侧地址详情查看mqtt连接属性内容
对于设备属性可通过需要上传的数据内容来定义上传,这里通过一键添加设备已经具备LED属性
首先使用跳线帽连接A端,即Type-C端接SIM7028 NB-IoT HAT端
将SIM7028 NB-IoT HAT使用Type-c转USB插入电脑,使用sscom打开串口,等待网络初始化成功
初始化MQTT连接
AT+CMQTTSTART
AT+CMQTTACCQ=0,"{键入平台分配的client id}",0
AT+CMQTTCONNECT=0,tcp://mqtt.waveshare.cloud:1883,20,1
订阅&发布主题
AT+CMQTTTOPIC=0,18 # 键入Pub主题 18为字符长度
AT+CMQTTSUB=0,18,0 # 键入Sub主题 18为字符长度
填写需要上传的数据内容:
AT+CMQTTPAYLOAD=0,21 # 字符长度少于10240 ,这里键入hello waveshare cloud 21位测试
发布消息:
AT+CMQTTPUB=0,0,60
总体测试数据过程截图:
其他
低功耗模式详解
NB-loT技术支持三种省电模式:PSM (power saving Mode)、DRX (Discontinuous Reception Mode)和eDRX (Extended DRX)。在NB-IOT中使用PSM(省电模式)和eDRX(扩展不连续接收)来节省电力。在PSM模式下,终端不需要接收寻呼来检测是否有下行业务,eDRX模式的寻呼检测周期比DRX模式长,可能会导致较长的时间延迟,影响数据的实时性。使用PSM还是eDRX取决于终端和网络的能力和配置。在能力方面,终端不支持的能力网络一定不要配置,在网络的不同情况下,终端支持的能力可能会有所不同。
No | 模式名称 | 描述 |
---|---|---|
1 | PSM | 极其省电,不接收任何数据 |
2 | DRX | 定期关闭网络服务随时找寻设备 |
3 | eDRX | eDRX相比传统的DRX模式可以进一步降低NB-IoT设备的功耗,延长电池寿命。但同时,由于eDRX的周期更长和接收持续时间更短,设备在接收数据方面可能会有一些延迟。 |
PSM
在PSM模式下,终端不检测下行链路中是否有分页数据。只要TAU和上行链路还需要发送数据,PSM状态就会退出。T3412为跟踪区域更新时间,T3324为IDLE模式下进入PSM的定时器。
AT指令 | 说明 | 返回值 |
---|---|---|
AT+QCPMUCFG=1,4 | 沉睡模式 | OK |
AT+QCPSMR=1 | 开启低功耗URC汇报 | OK |
AT+CPSMS=1,,,"01011111","00000001" | 设置定时器的PSM模式 | OK |
AT+CPSMS=0 | 退出PSM模式 | OK |
DRX & eDRX
DRX可以认为下行业务在任何时候都可以到达终端设备。在每个DRX周期(1.28秒、2.56秒、5.12秒、10.24秒)内,终端检测下行业务是否到达,适用于对时延要求较高的业务。终端设备一般采用供电方式,如路灯服务。 与DRX相比,eDRX的分页周期更长,使得终端更省电,同时下行数据延迟也更长(如DRX值为1.28s2.56s, eDRX值可达20.48s,甚至2.9h),适合于时间紧迫性不是很高的应用场景。
AT指令 | 说明 | 返回值 |
---|---|---|
AT+QCPMUCFG=1,2 | 设置PMU mode | OK |
AT+CEDRXS=1,5,"0010" | 开启eDRX模式 | OK |
AT+CEDRXS? | 查询eDRX状态 | +CEDRXS: 5,"0010" OK |
AT+CEDRXRDP | 查询是否支持 | +CEDRXRDP: 5,"0000","0010","0100" |
AT+CEDRXS=0 | 退出eDRX模式 | OK |
资料
原理图
程序
软件
数据手册
相关应用案例
SIM7028 NB-I0T HAT 通过MQTT连接Aliyun物联网平台
相关教程
FAQ
AWS IoT Core正常来说是两端认证,AWS IoT提供了一个名为lambda函数的功能来接管证书和接入时的认证工作,就类似于阿里云物联网平台的一机一密,当然阿里云物联网平台是通过密码学的方式来解决认证问题的,而AWS IoT Core本质上还是用证书形式,通过lambda函数的功能来自定义代码把消息发送逻辑判断返回给AWS IoT Core的对应证书来确认连接,所以它的工作方式是<username\password>认证-><函数判断>-><AWS IoT Core证书认证连接>-><确认连接权限通过>
固件版本为2110B08SIM7028及以上的底层逻辑有所修改,包括MQTT发送消息之后会清除缓存在消息体内的内容,所以此时我们应该再加一个缓存指令将消息体输入之后再请求。