写在最前
现在做产品开发,以太网,WiFi,4G等网络通讯方式,已经成了产品必备要素,作为单片机开发,常用的网络模块主要通讯方式为AT指令串口通讯,比如WiFi模块ESP8266,ESP32,4G模块SIM7600,EC20等。
咱们使用的RT-Thread操作系统,有at_device组件,可以直接驱动AT模块,今天咱们用SIM7600模块,是一款常用的4G物联网模块,下面我带大家一起使用学会SIM7600模块,并通过远程升级示例证明模块是可用的。
参考文件:
电路设计注意事项
- 电源设计
当电源能够提供2A的峰值电流时,外部供电电容总容值,建议不小于300uF;若不能提供2A的峰值电流,则建议外部电容总容值不小于1000uF,以保证任何时候VBAT引脚上电压跌落不超过300mV。
建议靠近VBAT放置2个0.1/1μF陶瓷电容。以改善射频性能及系统稳定性。与此同时,建议PCB上供电电源到模块间的VBAT走线宽度至少2mm。参考设计推荐如下:如果VBAT输入含有高频干扰,建议增加磁珠进行滤波,磁珠推荐型号为BLM21PG300SN1D或MPZ2012S221A。
- 断电重启控制
根据多年使用经验,(我2012年以前做通讯的,常年接触各类modem,虽然近8年没碰过了)。电路除需要设计复位电路外,还应该对模块电源进线控制,可以在某天通过复位无法是模块正常工作的情况下对模块断电重启,官方文档也有相关推荐
使用at_device软件包
- at_device软件包使用非常简单,只需要导入软件包即可使用,如下图所示:
- at_device详细配置,在示例中电源引脚和状态引脚根据实际情况配置,接收一行缓存最大长度不要设置太小,为后面远程升级留足够的空间,我设置的事2048,最主要的是AT客户端名称一定不要设错,我使用的是串口2,保存后编译
- 编译过程会有错误提示,是因为RT-thread中,所有的xxprintf都需要增加前缀rt_,比如rt_snprintf,通过错误提示,找到对应的位置,修改后即可编译通过。
- 下载后运行,通过shell查看输出情况(此时最好插入SIM卡,否则会一直提示SIM卡不存在,程序无法继续),当有如下两行提示,则说明模块初始化成功,可以同ifconfig指令查看网络状态
测试基于SIM7600的远程升级示例
- 根据我之前的博客 制作BootLoader和和固件,不同的是在程序配置中,选择使能http ota, 并配置默认的服务器地址,可以是可访问的内网地址,有条件的也可以是外网地址
- 需要注意的是串口缓存不能太小, 默认64字节太小, 会导致升级失败
- 保存,编译,下载程序,升级测试
总结
- 其实使用4G模块很简单,分析初始化过程,只需要几条AT指令, 这些如果想深入了解,需要多看官方手册
- 示例程序仅仅能作为严重能否使用,不能用于实际项目中, 在实际项目中, 要实时扫描网络状态, 如果出现任何异常, 需要重新联网或对模块复位, 保证设备工作正常稳定
- 初始化函数
//握手
AT
关回显
//ATE0
//版本
ATI
//卡是否插入
AT+CPIN?
//信号质量
AT+CSQ
//接收数据时不显示提示
//设置从何处接收的数据
AT+CIPSRIP=0
//查询网络注册状态
AT+CREG?
//查询GPRS网络注册状态
AT+CGREG?
//AT+CGATT = 0 可以分离GPRS 但保留GSM
//AT+CGATT = 1 一般注册上运营商,附着GPRS都是自动进行的,CGATT可以手动去附着网络
AT+CGATT?
//设置网络连接 APN
AT+CGDCONT=1,\"IP\",\"CMNET\"
//网络连接状态
AT+NETOPEN?
//激活网络连接
AT+NETOPEN
//将1号报文设置为活动报文
AT+CSOCKSETPN=1