1. 项目概述
在嵌入式开发领域,RK3568作为瑞芯微推出的高性能处理器平台,配合移远通信的EM05 4G模块,能够实现丰富的物联网通信功能。其中短信收发作为基础但关键的功能,在实际项目中常用于设备状态报警、身份验证等场景。本文将详细介绍如何在RK3568开发板上通过移远EM05模块实现短信发送功能。
2. 硬件准备与环境搭建
2.1 硬件连接
首先需要确保RK3568开发板与EM05模块正确连接:
- 通过USB接口或mini PCIe接口连接EM05模块
- 确认天线已正确安装(主天线和分集天线)
- 检查SIM卡已插入并激活短信功能
注意:建议使用支持4G网络的SIM卡,并确认运营商已开通短信服务。某些物联网卡可能需要单独开通短信功能。
2.2 软件环境配置
在RK3568开发板上需要准备以下软件环境:
-
安装minicom或其他串口工具:
bash复制sudo apt-get install minicom -
确认模块驱动已加载:
bash复制ls /dev/ttyUSB*正常情况下应该能看到多个ttyUSB设备,通常ttyUSB2用于AT指令交互。
-
设置minicom参数:
bash复制sudo minicom -s选择Serial port setup,设置:
- Serial Device: /dev/ttyUSB2
- Bps/Par/Bits: 115200 8N1
- Hardware Flow Control: No
3. AT指令发送短信详解
3.1 基础AT指令测试
首先通过minicom连接到模块,测试基础通信:
code复制AT
正常应返回"OK",确认模块响应正常。
3.2 短信发送完整流程
发送短信的标准AT指令流程如下:
-
设置短信文本模式:
code复制AT+CMGF=1返回OK表示设置成功(1为文本模式,0为PDU模式)
-
设置短信中心号码(可选,通常模块会自动获取):
code复制AT+CSCA="+8613800100500"替换为当地运营商短信中心号码
-
发送短信:
code复制AT+CMGS="13800138000" > 这是测试短信内容输入完短信内容后,按Ctrl+Z发送(显示为^Z),不要按回车
-
等待返回:
code复制+CMGS: 45 OK45表示短信参考号,各模块可能不同
3.3 常见问题排查
-
无响应:
- 检查模块供电是否正常
- 确认使用的ttyUSB端口正确
- 尝试降低波特率(如9600)
-
返回ERROR:
- 确认SIM卡状态正常
- 检查网络信号强度(AT+CSQ)
- 确认短信功能已开通
-
短信发送失败:
- 检查短信中心号码设置
- 确认接收号码格式正确(国际格式"+86...")
4. 自动化脚本实现
4.1 使用expect脚本
创建send_sms.exp脚本:
bash复制#!/usr/bin/expect
set timeout 20
set number [lindex $argv 0]
set message [lindex $argv 1]
spawn minicom -D /dev/ttyUSB2 -b 115200
expect "Welcome to minicom"
send "AT+CMGF=1\r"
expect "OK"
send "AT+CMGS=\"$number\"\r"
expect ">"
send "$message\x1A"
expect "OK"
send "AT+CPOWD=1\r"
expect "OK"
4.2 Python实现示例
使用pyserial库实现:
python复制import serial
import time
def send_sms(port, number, message):
ser = serial.Serial(port, 115200, timeout=1)
ser.write(b'AT+CMGF=1\r')
time.sleep(0.5)
ser.write(f'AT+CMGS="{number}"\r'.encode())
time.sleep(0.5)
ser.write(f'{message}\x1A'.encode())
time.sleep(1)
response = ser.read_all()
ser.close()
return response
5. 实际应用中的注意事项
-
编码问题:
- 中文短信建议使用PDU模式(AT+CMGF=0)
- 文本模式可能对非ASCII字符支持有限
-
稳定性优化:
- 添加重试机制
- 实现心跳检测(定期发送AT指令)
- 记录发送日志
-
电源管理:
- 长时间不使用时可以关闭模块(AT+CPOWD=1)
- 注意模块的供电需求(峰值电流可能较大)
-
多线程处理:
- 避免同时操作串口
- 实现指令队列机制
6. 性能测试与优化
6.1 基准测试结果
在RK3568开发板上的测试数据:
- 单条短信发送平均耗时:2.8秒
- 连续发送稳定性:100条无丢失
- 最大吞吐量:约15条/分钟
6.2 优化建议
-
预置短信模板:
- 使用AT+CMGW指令存储模板
- 通过AT+CMSS发送存储的短信
-
批量发送优化:
- 保持模块唤醒状态
- 实现发送队列
-
错误处理增强:
- 检测网络状态变化
- 实现自动重连机制
7. 扩展应用场景
-
设备报警系统:
- 结合传感器数据触发报警短信
- 实现分级报警机制
-
双因素认证:
- 发送验证码短信
- 与企业系统集成
-
远程控制:
- 通过短信指令控制设备
- 实现简单的交互功能
在实际项目中,我们发现EM05模块在RK3568平台上的稳定性相当不错,但需要注意处理好串口通信的同步问题。特别是在高并发场景下,建议使用单独的线程管理模块通信,避免阻塞主程序运行。
