前言
本来是打算基于 Air780E 开发板实现的,后来发现有个新品 Air780EPV 还支持电信短信,关键这个芯片 9.9 盲订的时候我还知道这件事,但当时的说法是 9.9 盲订 + 尾款,结果是 9.9 到手(错过 1 个亿~)。秉持着买新不买旧的原则(大坑),最后选择了原价且不包邮的 Air780EPV。
短信转发器这个东西一般是给备用卡,开一个保号套餐,然后用来接收验证码短信之类的东西来用的。市面上的方案大部分都是用一个安卓手机,开着有这类功能的一个软件来实现。本篇文章给大家另一个实现思路,使用4G cat1模组+wifi来实现相同的功能。
方案选择
本次方案是使用前几天买的9.9元包邮合宙Air780E,因为4G Cat.1模组本身就是可编程的,所以有以下两种方案:
第一种:合宙Air780E自行处理接收短信+推送到服务器的功能。
这个方案的问题在于,合宙Air780E本身不带wifi功能,需要备用卡自带流量。(当然实在想用这个方案的话,我也提供了对应的脚本,点击这句话打开工程,看看注释改改信息刷进去就能用)
第二种:外接一个Wi-Fi板子,使用Wi-Fi芯片通过AT命令控制780E模组,并使用Wi-Fi芯片上传消息到服务器。
#材料
名称 | 数量 | 价格 | 说明 |
---|---|---|---|
合宙 Air780EPV 开发板 | 1 | 39 | |
合宙 ESP32C3 简约版 | 1 | 9.9 | |
运费 | – | 7 | |
1×16p 2.54MM 直插单排母 | 2 | 0.5 | 某宝 2.5/10 件。 |
飞线 | 2 | – |
1. 合宙Air780E开发板
相信大部分人手一个,没有的可以去官方淘宝店铺买一个,这里就不放链接了
合宙Air780E
2. 合宙ESP32-C3开发板简约款
合宙淘宝/拼多多官方店9.9元包邮的简约款即可,不用买经典款。支持Wi-Fi,功能多易上手。
合宙ESP32-C3
对接的服务器有几个选择:
LuatOS社区提供的推送服务器
https://push.luatos.org/
注:点击GitHub图标即可登录,然后点击左边的消息通道新建一个推送方式。
server酱
https://sct.ftqq.com
注:免费用户每天只能发送五条。
你也可以对接自己的推送服务器,但是代码要自己稍微改改。
注意
如果只是转发移动、联通网络的短信,使用 合宙Air780E开发板
可以减少很多不必要的麻烦
#最佳实践
#硬件
由于Air780E开发板需要按下开机键才能开机,而我们需要上电即开机,所以可通过短接此处的焊盘,实现Air780E开发板上电即开机的功能:
接着,我们需要将Air780E开发板与ESP32-C3开发板的电源引脚相连(5V与GND)、将ESP32-C3开发板的UART1与Air780E开发板的MAIN_UART相连,引脚如下(两组的实际位置是相同的):
分别将两块板子焊接上排针与排母,像这样(能一对一插上就行):
全搞定后,直接对齐插上去就行了。对接后两侧如下图所示:
————————
#焊接
注意
实践过程中发现,esp32c3 与 air780epv 接口并不完全兼容,如没有把握能解决兼容问题,千万不要在直接把整排 16p 排母焊到 esp32c3 上,同时又把 20pin 的排针焊在 air780epv 开发板上,否则焊时有多爽,拆时就有多惨!
- 在 esp32c3 上方的下述引脚焊接排母
01
13-14
17-18
31-32
- 上述实际上只用到
31-32
供电引脚,其他引脚上的排母主要作用是连接时支撑开发板。
- 在 air780epv 的下方的下述引脚焊接排针
03-04
25-26
17-18
38
- 当然排针可以全焊上去,只要保证无关的引脚不会与 esp32c3 的引脚连通即可。
#连接
不知道是故意的还是不小心的,air780epv 的 UART1_RXD、UART1_TXD 与 air780e 的引脚是相反的,因此不能像 air780e 一样直接用排母连接 eps32c3,需要用跳线对调。
- 将焊接的排母和排针连接
- 使用飞线,将 esp32c3 的
02
与 air780epv 的36
,03
与37
连接。
#软件
#准备与连接
- LuaTools 下载 (右键另存为) (opens new window)(创建一个文件夹
luatools
存放,因为下面会在启动目录下载资源) - 将 esp32c3 通过 usb 连接到电脑
- 查看设备管理器,确认串口号
- 在 Luatools 中
- 勾选
通用串口打印
- 选择 esp32c3 的串口号
- 串口日志波特率:
921600
- 打开串口
- 能打印日志即为成功连接
- 勾选
#烧录固件
- 下载 NipGeihou/sms_forwarder_air780ep_esp32 (opens new window)项目到本地
- luatools 右上角,
项目管理测试
创建项目
,名字随意- 选择文件,
\sms_forwarder_air780_esp32-master\firmware\LuatOS-SoC_V1006_ESP32C3_lite.soc
增加脚本或资源文件
,将\sms_forwarder_air780_esp32-master\
下的所有 lua 文件倒入进来- 使用 vscode (编辑器) 编辑
config.lua
config.board_type = "esp32c3"
config.wifi
:配置 WiFi 账号、密码config.notification_channel
:开启并配置推送方式
- luatools 的项目管理,点击
下载底层和脚本
将固件和脚本写入 esp32c3 中 - 长按 air780epv 的 power 按键,出现绿灯即为开机
[2024-03-02 14:42:54.502] E (598) task_wdt: esp_task_wdt_init(593): TWDT already initializI/main.lua:60 main - 初始化Air780 Air780E已连接
[2024-03-02 14:42:54.502] I/main.lua:62 main - 初始化Air780 正在检查有无SIM卡
[2024-03-02 14:42:54.608] I/main.lua:41 main - 初始化网络 无线网络连接成功,IP地址:10.10.xx.xx
[2024-03-02 14:42:54.608] I/main.lua:44 main - 初始化网络 配置第1个DNS服务器为119.29.29.29
[2024-03-02 14:42:54.608] I/main.lua:44 main - 初始化网络 配置第2个DNS服务器为223.5.5.5
[2024-03-02 14:42:54.630] I/main.lua:44 main - 初始化网络 配置第3个DNS服务器为8.8.8.8
[2024-03-02 14:42:54.630] I/main.lua:44 main - 初始化网络 配置第4个DNS服务器为1.1.1.1
[2024-03-02 14:42:54.630] I/main.lua:48 main - 初始化网络 等待时间同步
[2024-03-02 14:42:54.630] I/main.lua:75 main - 初始化Air780 正在配置短信功能
[2024-03-02 14:42:54.939] I/main.lua:82 main - 初始化Air780 短信功能配置完成
[2024-03-02 14:42:54.939] I/main.lua:85 main - 初始化Air780 正在禁用RNDIS
[2024-03-02 14:42:54.939] I/main.lua:89 main - 初始化Air780 检查GPRS附着状态
[2024-03-02 14:42:55.062] I/main.lua:96 main - 初始化Air780 GPRS未附着,将在5秒后重新检查
[2024-03-02 14:42:55.549] I/main.lua:50 main - 初始化网络 时间同步完成
[2024-03-02 14:43:00.153] I/main.lua:93 main - 初始化Air780 GPRS已附着
[2024-03-02 14:43:00.153] I/main.lua:102 main - 初始化Air780 正在关闭NET灯闪烁
[2024-03-02 14:43:00.153] I/main.lua:106 main - 初始化Air780 初始化完成,等待新短信...
[2024-03-02 16:36:26.339] I/main.lua:60 main - 初始化Air780 Air780E已连接
[2024-03-02 16:36:26.339] I/main.lua:62 main - 初始化Air780 正在检查有无SIM卡
[2024-03-02 16:36:26.446] I/main.lua:75 main - 初始化Air780 正在配置短信功能
[2024-03-02 16:36:26.767] I/main.lua:82 main - 初始化Air780 短信功能配置完成
[2024-03-02 16:36:26.767] I/main.lua:85 main - 初始化Air780 正在禁用RNDIS
[2024-03-02 16:36:26.767] I/main.lua:89 main - 初始化Air780 检查GPRS附着状态
[2024-03-02 16:36:26.888] I/main.lua:93 main - 初始化Air780 GPRS已附着
[2024-03-02 16:36:26.888] I/main.lua:102 main - 初始化Air780 正在关闭NET灯闪烁
[2024-03-02 16:36:26.888] I/main.lua:106 main - 初始化Air780 初始化完成,等待新短信...
如果顺利将会看到类似上面的日志
#优化
#通电开机
默认情况下 air780epv 通电后需要长按 power 按键开机。
想让开发板上电同时自动开机,这种方式也能实现,但是需要调整开发板上的电阻了。 把下图标准的电阻短接,会将 Air780EP 的 POWKEY 信号拉低,也就实现开发板上电开机。
笔记
尝试使用一坨锡短接,发现连不起来,最后是先在两个触点上锡,再找一段排针连接。
#对英文发件人的支持
海外的一些短信是没有手机号的,只有一个英文名,如 3HK
、 Apple
,而原项目中并为对英文发件人支持,因此转发的短信这些短信的发件人会是一段 16 进制值。
在 50 元内自制短信转发器(Air780E+ESP32C3) (opens new window)一文的留言中,有人提及这个问题,并且项目作者以增加对此的支持,而我使用的是另一个项目 (opens new window)的源码,而这个项目中目前并没有,因此我打算尝试一下提交个 PR。
解码工具:Online SMS PDU Decoder/Converter | Diafaan SMS Server(opens new window)
PDU 协议
时间关系,这里只分析收短信的 PDU 格式,由 wiki 可在 SMS Center (SC) -> Mobile Station (MS)
的 message type (消息类型) 为 SMS-DELIVER
,对应的 TP-MTI 为 00
07915862337418F62410D0C3B0FC5D9F97D96C0000320113324282238CC3B0FC5D9F97D96CD0F04D2EBB40CEB2BD2C07CDD1617919947FD7E5A0F19B5C06DDD3743428ECCEBFDD65500B340CCBDFF57999CD0695DB70F63B5F2ECF41F7349B0D7297ED6539283C5F83CC6F39284D7781B2EFBA1C347E93CBA0F41C24A3C1702E50920E4ACF41F6303B4D0699DF72900CD44EBBEBF4F2DC05
# SMSC
07
91
58 62 33 74 18 F6
# 第一个字节
24
# Originating Address 始发地址
10 #(10 hex = 16 dec,16个半字节 = 8字节)
D0
C3 B0 FC 5D 9F 97 D9 6C # 8字节
#TP-PID
00
# TP-DCS
00
# TP-SCTS
32 01 13 32 42 82 23
# TP-UDL
8C
# TP-UD
C3B0FC5D9F97D96CD0F04D2EBB40CEB2BD2C07CDD1617919947FD7E5A0F19B5C06DDD3743428ECCEBFDD65500B340CCBDFF57999CD0695DB70F63B5F2ECF41F7349B0D7297ED6539283C5F83CC6F39284D7781B2EFBA1C347E93CBA0F41C24A3C1702E50920E4ACF41F6303B4D0699DF72900CD44EBBEBF4F2DC05