50元内自制短信转发器(Air780E+ESP32C3)

这是什么

短信转发器这个东西一般是给备用卡,开一个保号套餐,然后用来接收验证码短信之类的东西来用的。市面上的方案大部分都是用一个安卓手机,开着有这类功能的一个软件来实现。本篇文章给大家另一个实现思路,使用4G cat1模组+wifi来实现相同的功能。

方案选择

因为4G cat1模组本身就是可编程的,所以有两种方案:

  1. 4G cat1模组自行处理接收短信+推送到服务器的功能。这个方案的问题在于:备用卡大部分为保号套餐,不带流量。所以此方案pass(当然实在想用这个方案的话,我也提供了对应的脚本,点击这句话打开工程,看看注释改改信息刷进去就能用

  2. 外接一个wifi板子,使用wifi芯片通过AT命令控制4G cat1模组,并使用wifi芯片上传消息到服务器

本文采用的是第二种方案

准备材料

  • 合宙ESP32-C3开发板简约款(合宙淘宝/拼多多官方店9.9元包邮的简约款即可,不用买经典款)
  • 合宙Air780E开发板(购买途径同上)
  • 焊接工具与必要的排针、排母(上面板子应该附赠排针的)
  • 用来接收短信用的卡
  • 2.4G Hz的wifi,用来联网
  • 对接的服务器有几个选择
    • LuatOS社区提供的推送服务器(点击GitHub图标即可登录,然后点击左边的消息通道新建一个推送方式)
    • server酱(免费用户每天只能发送五条)
    • 你也可以对接自己的推送服务器,但是代码要自己稍微改改

硬件对接

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

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

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

接着别忘了再给Air780开发板上插上SIM卡

全搞定后,直接对齐插上去就行了:

刷入固件与脚本

接下来需要为esp32c3刷入写好的固件与脚本

如果不会烧录,请先看一下esp32c3烧录教程

这里我们需要使用新版的V10xx固件,可以直接去下载快照版固件

脚本可以在这个仓库下载:chenxuuu/sms_forwarding – GitHub,这个项目使用的工程在script文件夹中,别选错了

我们需要修改脚本中的notify.lua,按注释要求改为自己的逻辑:

--你的wifi名称和密码
local wifiName = ""
local wifiPasswd = ""

--这里默认用的是LuatOS社区提供的推送服务,无使用限制
--官网:https://push.luatos.org/ 点击GitHub图标登陆即可
--支持邮件/企业微信/钉钉/飞书/电报/IOS Bark

--是否使用server酱,false则使用LuatOS社区提供的推送服务
local useServerChan = false

--LuatOS社区提供的推送服务 https://push.luatos.org/
--这里填.send前的字符串就好了
--如:https://push.luatos.org/ABCDEF1234567890ABCD.send/{title}/{data} 填入 ABCDEF1234567890ABCD
local luatosPush = "ABCDEF1234567890ABCD"

--server酱的配置,免费用户每天仅可发送五条推送消息
--server酱的SendKey,如果你用的是这个就需要填一个
--https://sct.ftqq.com/sendkey 申请一个
local serverKey = ""

如果需要用自己的推送服务,还可以把下面的http请求改成自己服务器支持的格式

测试功能

烧录脚本和固件后,可以看到设备的日志,正常连上wifi与连上了基站

[time] I/user.air780    got recv    AT
[time] I/user.air780    check sim card
[time] D/wlan esp_wifi_init ret 0
[time] D/wlan wifi event 2
[time] D/wlan esp_wifi_start ret 0
[time] D/wlan esp_wifi_connect ret 0
[time] I/user.wlan  wait for IP_READY
[time] I/user.air780    got recv    AT+CPIN?
[time] I/user.air780    configrate
[time] D/wlan wifi event 4
[time] D/wlan wifi station start
[time] D/wlan wifi connected!!!
[time] I/user.air780    got recv    AT+CMGF=0
[time] D/wlan ip event 0
[time] D/wlan IP_EVENT_STA_GOT_IP 192.168.0.128
[time] I/user.wlan  ready !!
[time] I/user.notify    wait for a new sms~
[time] I/user.air780    got recv    AT+CSCS="UCS2"
[time] D/sntp time sync done
[time] I/user.air780    got recv    AT+CNMI=2,2,0,0,0
[time] I/user.air780    wait for connection
[time] I/user.air780    got recv    AT+CGATT?
[time] I/user.air780    connection status   true
[time] I/user.air780    connected! wait sms

接下来我们发一条短信试试,脚本内部对长短信进行了处理,所以长短信也可以完美支持。可以看到设备端的日志:

[time] I/user.air780    connected! wait sms
[time] I/user.sms   recv    13112341234 这是一条长短信【领5G流量活动推荐】尊敬的客户:您目前的手机支持5G网络,现邀请您参与“用5G网络,领5G流量”活动。即日起,使用5G 22/10/28,11:39:38+32    true    2   1
[time] I/user.air780    found a long sms    2   1
[time] I/user.sms   recv    13112341234 网络流量,次月即可领取流量。多用多领,最高可领取5GB国内通用流量。活动参与请点击xxx我们百倍努力,只为您10分满意。【中国移动】  22/10/28,11:39:38+32    true    2   2
[time] I/user.air780    a part of long sms  2   2
[time] I/user.air780    got a long sms  这是一条长短信【领5G流量活动推荐】尊敬的客户:您目前的手机支持5G网络,现邀请您参与“用5G网络,领5G流量”活动。即日起,使用5G网络流量,次月即可领取流量。多用多领,最高可领取5GB国内通用流量。活动参与请点击xxx我们百倍努力,只为您10分满意。【中国移动】
[time] I/user.notify    got sms 13112341234 这是一条长短信【领5G流量活动推荐】尊敬的客户:您目前的手机支持5G网络,现邀请您参与“用5G网络,领5G流量”活动。即日起,使用5G网络流量,次月即可领取流量。多用多领,最高可领取5GB国内通用流量。活动参与请点击xxx我们百倍努力,只为您10分满意。【中国移动】
[time] I/http HTTP POST
[time] D/http esp_http_client_perform 0
[time] I/user.notify    pushed sms notify   200 {"code":0,"message":"","data":{"pushid":"xxxxxx","readkey":"xxxxxxxx","error":"SUCCESS","errno":0}} 13112341234 这是一条长短信【领5G流量活动推荐】尊敬的客户:您目前的手机支持5G网络,现邀请您参与“用5G网络,领5G流量”活动。即日起,使用5G网络流量,次月即可领取流量。多用多领,最高可领取5GB国内通用流量。活动参与请点击xxx我们百倍努力,只为您10分满意。【中国移动】
[time] I/user.notify    wait for a new sms~

同时我们收到了推送来的消息:

如果是server酱,那么是这样的:

75 Comments

  1. Google Chrome 86.0.4240.198 Google Chrome 86.0.4240.198 Windows 10 x64 Edition Windows 10 x64 Edition

    里面的1001固件总是下载失败是为什么啊 波特率921600 简约版c3 usb口换了 官网的1001可以烧录但是这个不行 luatoos版本2.1.72

      1. Google Chrome 86.0.4240.198 Google Chrome 86.0.4240.198 Windows 10 x64 Edition Windows 10 x64 Edition

        就是您文章里说的下载快照版固件连接里的 官网的是说的在https://gitee.com/openLuat/LuatOS/releases里面下载的编号为1001的固件

  2. Google Chrome 107.0.0.0 Google Chrome 107.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7

    按照博主的教程 已成功,测试我的移动卡短信接收正常,民生通讯的卡貌似不支持电信制式的
    如果可以使用流量发短信,那就可以做成便携设备了,虽然便携没啥用哈哈哈哈

    1. Firefox 106.0 Firefox 106.0 Windows 10 x64 Edition Windows 10 x64 Edition

      电信短信走的cdma2000/volte
      air780不支持volte,cdma2000更不用说了,基本没什么模组会支持
      所以电信卡想收短信,需要开通volte功能,然后用air724这类支持volte的模组才可以

        1. Microsoft Edge 124.0.0.0 Microsoft Edge 124.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition

          不能直接替换,但是我研究出来724UG的了,代码比780E的要简单好多https://github.com/simotsukiyuki/sms_forwarding_724ug_uart
          不过我需求不太一样,我是把短信通过uart虚拟串口传到win10工控机上再发邮件

  3. Google Chrome 107.0.0.0 Google Chrome 107.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition

    按教程焊好,联通卡没问题,插电很快就能收到短信。
    香港移动会连续刷屏10分钟左右如下日志
    [2022-11-14 17:52:08.478] I/user.air780 connection status false
    [2022-11-14 17:52:09.276] I/user.air780 got recv AT+CGATT?
    才能收到
    I/user.air780 connection status true

    香港卡插手机上2分钟内就有信号。是板子的天线太小了吗?

  4. Google Chrome 107.0.0.0 Google Chrome 107.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7

    跟风买了两块芯片,今天拿出来按博主的教程,正常收到短信了!如果支持一下接到电话也推消息,就好了~

  5. Google Chrome 109.0.0.0 Google Chrome 109.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition

    有办法用一个esp32c3拖多个air780e吗?
    我再下单一套试试,顺便试试新到的giffgaff卡能不能用

  6. Microsoft Edge 110.0.1587.57 Microsoft Edge 110.0.1587.57 Windows 10 x64 Edition Windows 10 x64 Edition

    请问一下,明明刷入了了符合要求的固件,却还是提示固件类型不符合要求,是怎么回事呢?

    log:
    [2023-03-04 17:04:44.942] I/user.警告 固件类型或版本不满足要求,请使用esp32c3 v1002及以上版本固件。当前:LuatOS-SoC_V1003_ESP32C3
    [2023-03-04 17:04:44.942] I/user.air780 sent at AT
    [2023-03-04 17:04:45.154] I/user.air780 sent at AT
    [2023-03-04 17:04:45.370] I/user.air780 sent at AT
    [2023-03-04 17:04:45.433] I/user.警告 固件类型或版本不满足要求,请使用esp32c3 v1002及以上版本固件。当前:LuatOS-SoC_V1003_ESP32C3
    [2023-03-04 17:04:45.550] I/user.air780 sent at AT
    [2023-03-04 17:04:45.761] I/user.air780 sent at AT

      1. Microsoft Edge 110.0.1587.57 Microsoft Edge 110.0.1587.57 Windows 10 x64 Edition Windows 10 x64 Edition

        是这样子的

        [2023-03-04 17:26:10.440] ESP-ROM:esp32c3-api1-20210207
        [2023-03-04 17:26:10.440] Build:Feb 7 2021
        [2023-03-04 17:26:10.440] rst:0x15 (USB_UART_CHIP_RESET),boot:0xc (SPI_FAST_FLASH_BOOT)
        [2023-03-04 17:26:10.440] Saved PC:0x4038b012
        [2023-03-04 17:26:10.440] SPIWP:0xee
        [2023-03-04 17:26:10.440] mode:DIO, clock div:1
        [2023-03-04 17:26:10.440] load:0x3fcd5820,len:0xed4
        [2023-03-04 17:26:10.440] load:0x403cc710,len:0x740
        [2023-03-04 17:26:10.440] load:0x403ce710,len:0x2b74
        [2023-03-04 17:26:10.440] entry 0x403cc710
        [2023-03-04 17:26:10.815] I/main LuatOS@ESP32C3 base 22.12 bsp V1003 32bit
        [2023-03-04 17:26:10.815] I/main ROM Build: Feb 16 2023 10:44:34
        [2023-03-04 17:26:10.815] I/fs script zone as luadb
        [2023-03-04 17:26:10.815] D/main loadlibs luavm 131064 13216 13216
        [2023-03-04 17:26:10.815] D/main loadlibs sys 124600 53572 53572
        [2023-03-04 17:26:10.815] I/user.main sms_forwarding 1.0.0
        [2023-03-04 17:26:10.862] E (489) task_wdt: esp_task_wdt_init(593): TWDT already initialized
        [2023-03-04 17:26:10.909] I/user.air780 sync at
        [2023-03-04 17:26:10.909] I/user.air780 sent at AT
        [2023-03-04 17:26:11.112] I/user.air780 sent at AT
        [2023-03-04 17:26:11.315] I/user.air780 sent at AT

      1. Microsoft Edge 110.0.1587.57 Microsoft Edge 110.0.1587.57 Windows 10 x64 Edition Windows 10 x64 Edition

        在我更新您修改过的脚本后,还是会出现同样的报错。

        [2023-03-04 18:27:20.540] DBG: Cannot open serial portCOM4
        [2023-03-04 18:27:21.726] I/user.air780 sent at AT
        [2023-03-04 18:27:21.758] D/wlan wifi event 4
        [2023-03-04 18:27:21.758] D/wlan wifi connected!!!
        [2023-03-04 18:27:21.758] I/user.警告 固件类型或版本不满足要求,请使用esp32c3 v1004及以上版本固件。当前:LuatOS-SoC_V1003_ESP32C3
        [2023-03-04 18:27:21.931] I/user.air780 sent at AT
        [2023-03-04 18:27:22.134] I/user.air780 sent at AT
        [2023-03-04 18:27:22.277] I/user.警告 固件类型或版本不满足要求,请使用esp32c3 v1004及以上版本固件。当前:LuatOS-SoC_V1003_ESP32C3
        [2023-03-04 18:27:22.339] I/user.air780 sent at AT
        [2023-03-04 18:27:22.542] I/user.air780 sent at AT
        [2023-03-04 18:27:22.743] I/user.air780 sent at AT
        [2023-03-04 18:27:22.743] D/wlan ip event 0
        [2023-03-04 18:27:22.743] D/lwip net_lwip_task 1343:2,0,1
        [2023-03-04 18:27:22.743] D/lwip CALL net_lwip_check_network_ready index 2
        [2023-03-04 18:27:22.743] D/lwip net_lwip_check_network_ready 1423:network ready
        [2023-03-04 18:27:22.743] D/lwip net_lwip_check_network_ready 1437:DNS0:223.5.5.5
        [2023-03-04 18:27:22.743] D/lwip net_lwip_check_network_ready 1437:DNS1:114.114.114.114
        [2023-03-04 18:27:22.774] D/wlan IP_EVENT_STA_GOT_IP 192.168.1.115
        [2023-03-04 18:27:22.774] gc1 39.01074
        [2023-03-04 18:27:22.774] I/user.wlan ready !!
        [2023-03-04 18:27:22.774] gc2 39.42188
        [2023-03-04 18:27:22.774] I/user.notify wait for a new sms~
        [2023-03-04 18:27:22.774] gc3 39.47559
        [2023-03-04 18:27:22.774] I/user.警告 固件类型或版本不满足要求,请使用esp32c3 v1004及以上版本固件。当前:LuatOS-SoC_V1003_ESP32C3
        [2023-03-04 18:27:22.949] I/user.air780 sent at AT
        [2023-03-04 18:27:23.121] I/user.air780 sent at AT
        [2023-03-04 18:27:23.215] D/sntp time sync done

  7. Google Chrome 110.0.0.0 Google Chrome 110.0.0.0 GNU/Linux x64 GNU/Linux x64

    测试了一个月,目前很稳定,收到短信之后推送的速度也很快。
    使用下来发现有两个痛点:
    1是长短信分隔的阈值太低了,看到最新代码已经更新了,晚点试试。
    2是我的卡是日租卡,0流量的那种,实际用下来每天都会跑几百KB流量,每天会扣1毛话费。这个能告知下是什么原因吗?有没有对应的解决方法呢?

    1. Google Chrome 115.0.0.0 Google Chrome 115.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition

      我的卡也是没流量的,然后因为它跑了一下网络,运营商就会发短信过来让我开通流量功能,有没有版本关闭这个流量功能呢?

  8. Google Chrome 113.0.0.0 Google Chrome 113.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition

    关于移动运营商收不到短信的问题,现已查明是我的SIM卡开了PIN码的问题。

  9. Microsoft Edge 115.0.1901.183 Microsoft Edge 115.0.1901.183 Windows 10 x64 Edition Windows 10 x64 Edition

    博主您好,我也买了一个780e的板子,但是我想把收到的短信通过UART串口输出到电脑上,但是我的板子是只有一个USB公口没有其他引脚的,我想请教一下luatos下有没有办法利用用户虚拟串口输出短信内容?
    前几天看了很多资料,也试了例程,但是用户虚拟串口始终没有输出,我想请教一下这个应该是什么原因导致的,谢谢!

      1. Microsoft Edge 115.0.1901.188 Microsoft Edge 115.0.1901.188 Windows 10 x64 Edition Windows 10 x64 Edition

        可以用了,我后来去官方论坛找到原因了,是要写成uartid = uart.VUART_0这样就行了。
        不过还是谢谢大佬,我已经实现了通过电脑的USB虚拟串口收发短信的功能了。

          1. Microsoft Edge 124.0.0.0 Microsoft Edge 124.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition

            你可以来我的博客(https://simotsukiyuki.github.io/post/sms780e/)看全套教程,或者也可以参考https://github.com/simotsukiyuki/SMS780E。
            我做了Windows版客户端

  10. Google Chrome 116.0.0.0 Google Chrome 116.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition

    博主你好,看了你的教程我有几个疑问(最近才开始接触luat)
    1,两个板子合在一起了,那连接电脑用哪个板子的usb口?
    2,air780e是只需要刷入core底层核心吗?不用写入任何脚本是吗?

    我尝试给air780e刷入了官方的最新780e固件,然后给esp32c刷入你文中链接的固件,和你github仓库的脚本。插入sim卡,
    然后usb一头插在电脑,一头插在esp32c的板子上。但是并不能转发短信,
    我的操作方式哪里有问题吗?

  11. Microsoft Edge 117.0.2045.31 Microsoft Edge 117.0.2045.31 Windows 10 x64 Edition Windows 10 x64 Edition

    你好博主,在我准备好一切之后,能收到验证码但是推送不出去
    具体日志是这样的: E/http NOT SUPPORT TLS
    请问是什么原因

  12. Google Chrome 102.0.0.0 Google Chrome 102.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition

    用了大佬的脚本,分享1点心得
    现在有卖排针焊接好的版本了,买一个焊好的air780e,和一个普通的ESP32C3,直接对插即可,无需工具
    另外请教大佬,邮件的推送怎么写

  13. Google Chrome 118.0.0.0 Google Chrome 118.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7

    发现一个情况,air780e在接收到短信之前网络指示灯的闪烁频率比较慢,接收到短信后闪烁频率变快,并且在短信结束后一直维持这个频率,不知道大家有没有这个情况,不确定是不是固件的bug

  14. Google Chrome 117.0.0.0 Google Chrome 117.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7

    香港公司或者外国发的短信,发件人号码大多是公司名,比如Amex, Paypal, Carousell等,对应到PDU协议,就是TP-OA节,TON=101。这个时候电话号码不能用BCD编码解码,而是要用gsm7bitdecode,还望楼主可以帮忙完善一下pdu.lua,在if num:sub(1, 2) “91”下面加一个分支:if num:sub(1, 2) “D0”

    参考:https://en.wikipedia.org/wiki/GSM_03.40#Message_Content
    参考PDU:
    07915862337418F62410D0C3B0FC5D9F97D96C0000320113324282238CC3B0FC5D9F97D96CD0F04D2EBB40CEB2BD2C07CDD1617919947FD7E5A0F19B5C06DDD3743428ECCEBFDD65500B340CCBDFF57999CD0695DB70F63B5F2ECF41F7349B0D7297ED6539283C5F83CC6F39284D7781B2EFBA1C347E93CBA0F41C24A3C1702E50920E4ACF41F6303B4D0699DF72900CD44EBBEBF4F2DC05

      1. Safari 17.3.1 Safari 17.3.1 iPhone iOS 17.3.1 iPhone iOS 17.3.1

        还有就是想问下at固件能取到本机号码吗,毕竟刷luatos固件的时候可以通过mobile.number()拿到,换成at固件反而没有接口了

  15. Google Chrome 122.0.0.0 Google Chrome 122.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7

    你好大佬,可以用esp8266么。。家里有一堆esp8266,懒得再去买esp32了,谢谢!

  16. Google Chrome 122.0.0.0 Google Chrome 122.0.0.0 Mac OS X  10.15.7 Mac OS X 10.15.7

    我的是giffgaff卡, 程序卡在AT+CGATT? 结果一直为false,GPRS无法附着网络
    我试着用AT+CPNETAPN=2,giffgaff.com,gg,p改了APN后可以成功附着网络,但是没法收到短信。
    我看上面评论博主也是这个卡, 想请教一下是否有必要配置APN?

    PS:上面的APN来自运营商官网https://www.giffgaff.com/help/articles/internet-apn-settings-guide

  17. Google Chrome 122.0.0.0 Google Chrome 122.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition

    大佬,是不是全程我只用把esp32插到电脑烧录固件和脚本,air780e是不用写入任何固件的对吗?

    为啥我操作了两个版本固件,都是不断重复: I/user.air780 sent at AT

    比如:

    [2024-03-08 22:56:23.063] I/main LuatOS@ESP32C3 base 23.11 bsp V1006 32bit
    [2024-03-08 22:56:23.063] I/main ROM Build: Jan 11 2024 10:59:24
    [2024-03-08 22:56:23.068] I/fs script zone as luadb
    [2024-03-08 22:56:23.095] D/main loadlibs luavm 114680 14672 14736
    [2024-03-08 22:56:23.095] D/main loadlibs sys 155184 59184 59184
    [2024-03-08 22:56:23.099] I/user.main sms_forwarding 1.0.0
    [2024-03-08 22:56:23.143] E (597) task_wdt: esp_task_wdt_init(593): TWDT already initialized
    [2024-03-08 22:56:23.191] I/user.air780 sync at
    [2024-03-08 22:56:23.191] I/user.air780 sent at AT
    [2024-03-08 22:56:23.395] I/user.air780 sent at AT
    [2024-03-08 22:56:23.602] I/user.air780 sent at AT
    [2024-03-08 22:56:23.808] I/user.air780 sent at AT
    [2024-03-08 22:56:23.997] I/user.air780 sent at AT
    [2024-03-08 22:56:24.251] D/wlan wifi event 2
    [2024-03-08 22:56:24.251] I/user.wlan wait for IP_READY
    [2024-03-08 22:56:24.251] D/wlan wifi station start
    [2024-03-08 22:56:24.251] I/user.air780 sent at AT
    [2024-03-08 22:56:24.314] D/wlan wifi event 4
    [2024-03-08 22:56:24.314] D/wlan wifi connected!!!
    [2024-03-08 22:56:24.458] I/user.air780 sent at AT
    [2024-03-08 22:56:24.663] I/user.air780 sent at AT
    [2024-03-08 22:56:24.853] I/user.air780 sent at AT
    [2024-03-08 22:56:25.058] I/user.air780 sent at AT
    [2024-03-08 22:56:25.264] I/user.air780 sent at AT
    [2024-03-08 22:56:25.311] D/wlan ip event 0
    [2024-03-08 22:56:25.311] D/net network ready
    [2024-03-08 22:56:25.311] D/wlan sta_ip 192.168.1.19
    [2024-03-08 22:56:25.311] gc1 44.71680
    [2024-03-08 22:56:25.311] I/user.wlan ready !!
    [2024-03-08 22:56:25.311] gc2 45.14355
    [2024-03-08 22:56:25.311] I/user.notify wait for a new sms~
    [2024-03-08 22:56:25.311] gc3 45.19727

    然后接下来就一直都是重复 I/user.air780 sent at AT了,不会停止

    请问这是为什么呀?

发表评论

您的电子邮箱地址不会被公开。