STM32通过4G模块实现TCP/UDP连接服务器(附带源码)

  • STM单片机需要支持freeRTOS系统
  • TCP/UDP使用注意事项
  • 解决办法
  • 业务流程图
  • F412源码下载地址

STM单片机需要支持freeRTOS系统

4G模块收发是异步操作,在发送的时候很有可能也会收到数据,如果只是单线程的话很容易导致丢数据,开发虽然简单,但是不够严谨,这样需要协议来实现重发才能保证业务正常进展,此处我们选择了F412这款芯片跑freeRTOS系统,启用多线程,一个收一个发,模块选择了国仪海聚科技有限公司的GH201系列模块作为测试

TCP/UDP使用注意事项

简单的demo很容易,但是我们实际应用中设备往往是无人值守的,这就需要产品非常稳定,自我恢复能力很强,下面介绍在使用通信模块过程中可能出现的异常:

  1. 网络异常,网络节点异常断电,底层链路极端环境未恢复
  2. 伪基站的干扰,注册失败
  3. 模块异常,导致网络假死

解决办法

针对上述异常情况,我们首先要考虑的是心跳,虽然tcp协议中底层是有心跳保证的,但是网络的复杂性,以及网络设备的兼容性,或多或少的存在一些问题,将自己产品的稳定性寄托在底层的链路上是不妥的
心跳
上层应用连接成功之后需要跟服务器保证间隔2min左右的心跳探测(此心跳时间可以设置更短,不宜太长)
模块设备异常恢复
防止4G模块设备在一些未知情况可能出现网络异常,网络假死,AT指令不通,此时需要对模块重新上电强制恢复工作
单片机异常恢复
防止单片机因为一些未知因素导致的死机而无法工作

业务流程图


Created with Raphaël 2.2.0 上电 每秒发送AT等待响应OK(超时60S) 返回OK 检测sim卡是否在位,AT+CPIN? sim ready 检测网络是否注册成功(1s一次120次),AT+COPS? 返回运营商信息 激活PDP 返回OK 创建socket,AT+GSOCR 创建成功 发送数据,AT+GSOST(如果是TCP需要收到^GSOCK: CONNECTED,才能发送数据,收到^GSOCK: DISCONNECTED表示连接断开) 跟服务器进行业务交互(以及心跳保护) yes no yes no yes no yes no yes no


F412源码下载地址

测试代码仅仅是简单的发送了一串测试字符,其他功能有待开发

stm32 8266连接mysql数据库 stm32连接服务器_TCP

stm32 8266连接mysql数据库 stm32连接服务器_TCP_02