You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向ESP32 LilyGo-T-Call-SIM800发送AT命令?求助

解决LilyGo-TCall-SIM800模块无法响应AT命令的问题

我使用LilyGo-TCall-SIM800模块多日,此前用random nerd tutorials的示例代码能正常联网向云端发送数据,但无法向SIM800L芯片发送AT命令并获取回应。尝试过Serial1、Serial2,配置不同RX/TX引脚及波特率,发送AT\r后始终收不到预期的"OK"回应。简化后的测试代码如下:

/*
 Name:      TestAT.ino
 Created:   08/12/2022 23:15:28
 Author:    user
*/

// Set serial for debug console (to the Serial Monitor, speed 115200)
#define SerialMon Serial

// Comunications between ESP32 and SIM800L
#define SerialAT Serial1

//Comunications between ESP32 ans SIM800L go thought TX and RX pins on Serial1 Port 
#define MODEM_RX1 16
#define MODEM_TX1 17

void setup() {
    // Set console baud rate
    SerialMon.begin(115200);
    delay(1000);

    //Set SerialAT baud rate
    SerialAT.begin(38400, SERIAL_8N1, MODEM_RX1, MODEM_TX1);

    //Set timeLimit for SerialAT reads
    SerialAT.setTimeout(2000);

}

void loop() {
     String  returned = "";
     char ATcommand[] = { 'A','T','\r' };

    SerialAT.print(ATcommand);
    delay(1000);
    returned = SerialAT.readString();

    SerialMon.print(millis());
    SerialMon.print(" - ");
    SerialMon.print(ATcommand);
    SerialMon.print(" - SerialAT returned:");
    SerialMon.println(returned);

}

以下是针对性的解决思路:

  • 核对硬件引脚:LilyGo-TCall-SIM800的默认AT通信引脚通常是TX=27、RX=26(部分版本可能有差异),你当前使用的16/17可能不是模块的AT串口引脚。务必查模块官方引脚定义,同时确认ESP32与SIM800L的TX/RX交叉连接(ESP的TX接SIM的RX,ESP的RX接SIM的TX)。
  • 匹配波特率:SIM800L默认波特率常见为9600、19200、38400,建议逐个测试这些值。另外,模块联网成功时的通信波特率可直接复用,因为联网时的串口参数就是AT命令的参数。
  • 调整启动延迟:在初始化SerialAT前,给SIM800L多留启动时间,比如添加delay(3000),确保模块完成上电初始化再发送AT命令。
  • 检查硬件流控:部分SIM800L模块依赖CTS/RTS流控引脚,LilyGo-TCall可能默认启用了流控。若代码未配置流控引脚,会导致通信阻塞,可尝试在SerialAT.begin中添加流控参数,或核对模块硬件是否需要连接流控引脚。
  • 硬件直连测试:用USB转TTL模块(3.3V电平)直接连接SIM800L的TX/RX引脚,通过串口助手发送AT\r。如果能收到"OK",说明问题出在ESP32的代码或引脚配置;如果硬件测试也无响应,可能是模块硬件故障或供电不足。
  • 优化代码细节:
    • 用SerialAT.println("AT")替代手动构造字符数组,println会自动添加\r\n,符合多数AT命令的标准结尾格式;
    • 替换readString()为逐字节读取,避免超时或缓存异常:
      String returned = "";
      unsigned long start = millis();
      while (millis() - start < 2000 && SerialAT.available()) {
          returned += (char)SerialAT.read();
      }
      
  • 排查供电稳定性:SIM800L联网时峰值电流较大,若供电不足会导致模块通信异常。确保使用5V/2A以上的电源供电,避免用电流受限的USB口直接供电。

内容的提问来源于stack exchange,提问作者ORParga ORParga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 19:30:54