SIM7028 NB-IoT HAT

来自Waveshare Wiki
跳转至: 导航搜索

说明

SIM7028 NB-IoT HAT
{{{name2}}}
{{{name3}}}
功能简介
特性 树莓派NB-IoT扩展
' 无特性,不解释
' 无特性,不解释
' 无特性,不解释
' 无特性,不解释
接口 UART RPi

产品概述

本产品是一款具有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熄灭——未注册上网络
  64ms亮/3000ms熄灭——已注册上网络
  64ms亮/300ms熄灭——数据传输时
  熄灭——关机或PSM/DRX/eDRX休眠模式

接入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


硬件连接操作:

  1. 将NB-IoT卡安装到模块背面卡槽,并连接好LTE天线。(使用时须把 LTE天线 旋转到板子外侧)
  2. 将Type-C转USB接入电脑USB串口,给SIM7028模块供电。
  3. 使用配套的串口助手打开,选择对应的串口端口和波特率115200,勾选加回车换行,
  4. 打开扩展可看到实现录入的AT指令,点击对应的指令即可直接发送。
    SIM7020X-NB-IoT-HAT-tt.jpg

简单联网测试

下表列举一些常用AT指令,可以简单快速地检测SIM7028的AT串口通信和网络连接是否正常。
进行下文演示的联网通信实验前建议都先做简单联网测试,确认网络连接正常再操作。
相关的AT指令详细说明可参阅:SIM7022 Series_AT Command Manual。


命令 说明 返回值

AT

AT测试指令

OK

ATE

ATE1设置回显,ATE0关闭回显

OK

AT+CSQ

网络信号质量查询,返回信号值

OK

AT+CGMR

查询固件版本

OK

AT+CGREG?

查询网络注册状态

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)

SIM7028 231009 01.png.png

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,关闭串口调试功能。
L76X GPS Module rpi serial.png

  • 重启生效。

树莓派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即可。

minicom AT指令测试

树莓派示例程序演示

下载程序,进入目录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请求示例:

SIM7028 Raspberry Images1.png

MQTT请求示例:

SIM7028 Raspberry Images2.png

SIM7028 Raspberry Images3.png

接入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请求示例:

SIM7028 JetsonNano Images3.png

MQTT请求示例:

SIM7028 JetsonNano Images6.png

SIM7028 JetsonNano Images4.png

接入Arduino/ESP32使用

硬件连接

Arduino使用软串口连接,ESP32使用硬串口Serial2连接

Esp32 Sim7028 NB-IoT HAT LED
5V VBAT
GND GND 负极
Pin16 TX
Pin17 RX
Pin4 RST
Pin5 正极

软件配置

打开arduino->文件->首选项->附加开发板管理器网址添加:

https://www.arduio.cn/package_esp32_index.json

https://dl.espressif.com/dl/package_esp32_index.json

然后打开开发板管理,搜索esp32下载安装。 也可以通过安装包安装arduino-esp32,可以在arduino社区找到相关安装说明:链接

进入工具->开发板->开发板管理器添加esp32库

进入工具->管理库添加"pubsubclient"库和"ArduinoJson"库

接入Waveshare Cloud

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代理服务器的连接。
    • 断开连接时,客户端可以选择保留会话,以便在重新连接时保留之前的订阅和发布状态。

登录平台、创建新设备

创建具体设备,点击设备列表新增,填入相关数据

WaveshareCloud Images2.png

创建完成之后设备为未激活状态,可通过右侧地址详情查看mqtt连接属性内容

WaveshareCloud Images3.png

对于设备属性可通过需要上传的数据内容来定义上传,这里通过一键添加设备已经具备LED属性

WaveshareCloud Images4.png

使用MQTT连接Waveshare Cloud

首先使用跳线帽连接A端,即Type-C端接SIM7028 NB-IoT HAT端

WaveshareCloud Images5.png

将SIM7028 NB-IoT HAT使用Type-c转USB插入电脑,使用sscom打开串口,等待网络初始化成功

WaveshareCloud Images6.png

初始化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


总体测试数据过程截图:

WaveshareCloud Images7.png

WaveshareCloud Images8.png

其他

低功耗模式详解

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+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物联网平台

相关教程

树莓派入门教程(新)
树莓派入门教程
树莓派OpenCV教程
树莓派littleGL系列教程
树莓派QT教程
树莓派OpenWrt教程


FAQ


1.首先检查SIM7028的固件版本,要求固件版本至少为2110B08SIM7028
2.AWS IoT Core是需要证书的两端认证,当然可以使用AWS IoT 的lambda函数实现自认证接入。对于证书接入的方式可以参考下述步骤: SIM7028 230926 02.png SIM7028 230926 03.png


AWS IoT Core正常来说是两端认证,AWS IoT提供了一个名为lambda函数的功能来接管证书和接入时的认证工作,就类似于阿里云物联网平台的一机一密,当然阿里云物联网平台是通过密码学的方式来解决认证问题的,而AWS IoT Core本质上还是用证书形式,通过lambda函数的功能来自定义代码把消息发送逻辑判断返回给AWS IoT Core的对应证书来确认连接,所以它的工作方式是<username\password>认证-><函数判断>-><AWS IoT Core证书认证连接>-><确认连接权限通过>


固件版本为2110B08SIM7028及以上的底层逻辑有所修改,包括MQTT发送消息之后会清除缓存在消息体内的内容,所以此时我们应该再加一个缓存指令将消息体输入之后再请求。


技术支持


联系人:黄工
EMAIL:3005423122@qq.com
电话:0755-83040712
QQ:3005763927
微信:扫下方二维码添加
Hkx-wx.jpg

说明:进行售后服务前,请准备好客户信息(定货单位、定货人等),以供验证