基于ESP32 + Air780EPV的短信转发器

QQ图片202210281152031-740x414-1

前言

本来是打算基于 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开发板 可以减少很多不必要的麻烦

#最佳实践

#硬件

202403012115811

202403012114031

由于Air780E开发板需要按下开机键才能开机,而我们需要上电即开机,所以可通过短接此处的焊盘,实现Air780E开发板上电即开机的功能:

接着,我们需要将Air780E开发板ESP32-C3开发板的电源引脚相连(5V与GND)、将ESP32-C3开发板的UART1Air780E开发板MAIN_UART相连,引脚如下(两组的实际位置是相同的):

QQ截图202210281149091

QQ截图202210281149581

分别将两块板子焊接上排针与排母,像这样(能一对一插上就行):

特别提醒:别忘了给Air780开发板插上SIM卡

全搞定后,直接对齐插上去就行了。对接后两侧如下图所示:

————————
#焊接

注意

实践过程中发现,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 的 360337 连接。

202403021553803

#软件

#准备与连接

参考官方视频教程:ESP32C3 – 新版_哔哩哔哩_bilibili(opens new window)

  • 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 信号拉低,也就实现开发板上电开机。

202403021650057

笔记

尝试使用一坨锡短接,发现连不起来,最后是先在两个触点上锡,再找一段排针连接。

#对英文发件人的支持

海外的一些短信是没有手机号的,只有一个英文名,如 3HKApple ,而原项目中并为对英文发件人支持,因此转发的短信这些短信的发件人会是一段 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

Related Post

发表回复