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

ESP32搭配SIM800L与MicroPython发送短信失败求助:网络未连接

SIM800L未联网+短信发送失败问题排查与修复

一、先解决SIM800L每秒闪烁(未注册网络)的问题

SIM800L指示灯每秒闪说明模块未注册到移动网络,先排查硬件:

  • 确认SIM卡为2G兼容卡(模块仅支持2G),卡已激活、无欠费,插卡方向正确(金属触点朝下)
  • 必须给SIM800L单独提供5V/2A电源,不能直接用ESP32引脚供电,峰值电流不足会直接导致无法联网
  • 外接天线需拧紧,尽量放置在开阔无遮挡的区域
  • 用串口助手测试基础AT指令验证模块状态:
    • 发送AT,返回OK说明模块可正常响应
    • 发送AT+CREG?,返回+CREG: 0,1或+CREG: 0,5才算注册成功(0,0=未注册,0,2=正在注册)

二、原代码问题及修复

原代码缺少调试环节、短信中心配置,且流程逻辑不够可靠,修复后的代码如下:

import machine
import time

# 初始化UART,ESP32的UART2引脚TX=17、RX=16,确保这两个引脚未被其他外设占用
uart = machine.UART(2, baudrate=9600, tx=17, rx=16, timeout=1000)

def read_uart():
    # 读取模块返回内容,用于调试定位问题
    if uart.any():
        return uart.read().decode('utf-8', errors='ignore')
    return ''

def send_sms(number, message):
    # 设置短信为文本模式
    uart.write('AT+CMGF=1\r\n')
    time.sleep(0.5)
    print(read_uart())
    
    # 配置短信中心号码,替换为你所在地区的运营商中心号(例:中国移动为+8613800XXX500,XXX为区号)
    uart.write('AT+CSCA="+8613800100500"\r\n')
    time.sleep(0.5)
    print(read_uart())
    
    # 触发短信发送指令
    uart.write(f'AT+CMGS="{number}"\r\n')
    time.sleep(0.5)
    resp = read_uart()
    print(resp)
    # 等待模块返回>符号后再发送短信内容,比固定延时更可靠
    if '>' in resp:
        uart.write(f'{message}\r\n')
        time.sleep(0.5)
        # 发送结束符Ctrl+Z(十六进制0x1A)
        uart.write('\x1A')
        time.sleep(2)
        print(read_uart())
    else:
        print("模块未回应发送指令")

# 替换为你的目标手机号和短信内容
target_number = '+8613XXXXXXXXX'
test_message = '这是一条测试短信'

# 先测试模块是否正常响应
uart.write('AT\r\n')
time.sleep(0.5)
print("模块初始响应:", read_uart())

send_sms(target_number, test_message)

三、关键修复说明

  • 新增read_uart()函数,可查看模块返回信息,方便定位问题节点
  • 补充短信中心号码配置,这是短信发送的必要前提,未配置无法完成发送
  • 改为等待模块返回>符号后再发送内容,替代固定延时,逻辑更稳定
  • 调整延时时长,减少不必要等待的同时,给发送结束环节留足处理时间
  • 开头增加AT指令测试,先确认ESP32与SIM800L的串口连接正常

内容的提问来源于stack exchange,提问作者Mr.Programmer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 01:24:53