AT指令如何读取短信?

在移动通信和嵌入式系统开发领域,AT指令集是调制解调器(Modem)与主机设备进行通信的核心协议,通过标准化的AT指令,开发者可以控制Modem完成拨号、短信收发、网络注册等多种功能,利用AT指令读取短信是物联网设备、智能终端等场景下的基础需求,本文将系统介绍AT指令读取短信的原理、常用指令、实现步骤及注意事项,帮助开发者快速掌握这一关键技术。

at指令读取短信

AT指令与短信通信基础

AT指令(Attention指令)起源于Hayes调制解调器,每条指令以”AT”开头,以回车符(r或n)结束,通过串口与Modem交互,短信通信主要基于GSM/GPRS、NB-IoT等蜂窝网络协议,短信内容通过SIM卡存储,Modem通过AT指令指令集实现对SIM卡短信的读取、删除和管理。

短信通常分为两种类型:Text Mode(文本模式)PDU Mode(PDU模式),Text模式以可读文本格式传输短信内容,兼容性好但功能有限;PDU模式以十六进制编码传输,支持所有短信类型(如中文、长短信、短信中心号码等),但解析较为复杂,实际开发中,需根据设备需求选择模式,多数场景优先推荐Text模式以简化开发流程。

读取短信的核心AT指令

初始化与模式设置

在读取短信前,需确保Modem已正确初始化并进入短信工作模式,常用指令包括:

  • AT:测试Modem是否就绪,返回”OK”表示正常。
  • AT+CMGF=1:设置短信模式为Text模式(0为PDU模式)。
  • AT+CPMS="SM":选择短信存储位置,"SM"为SIM卡存储,"ME"为设备存储,"MT"为合并存储。

列出短信索引

读取短信前需获取短信列表,包括短信索引、状态(未读/已读/发送)、时间等信息,核心指令为:

  • AT+CMGL="ALL":列出所有短信("REC UNREAD"为未读,"REC READ"为已读,"STO UNSENT"为待发送)。
  • AT+CMGL="REC UNREAD":仅列出未读短信,适用于需优先处理新消息的场景。

指令执行后,Modem返回类似以下格式的响应:

+CMGL: 1,"REC UNREAD","+86138xxxx1234",,"23/10/01,15:30:00+32"  
Hello, this is a test message.  
OK  

1为短信索引,+86138xxxx1234为发送方号码,时间戳为短信接收时间,最后一行为短信内容。

at指令读取短信

读取指定短信内容

若已知短信索引,可直接通过+CMGR指令读取具体内容:

  • AT+CMGR=1:读取索引为1的短信。

响应格式与+CMGL类似,但仅返回单条短信信息。

删除短信

为避免SIM卡存储溢出,读取后通常需删除短信:

  • AT+CMGD=1:删除索引为1的短信;
  • AT+CMGD=1,1:删除索引为1的短信及其相关子短信(适用于长短信)。

读取短信的完整流程

步骤1:硬件连接与串口配置

确保Modem通过串口(如UART、USB转串口)与主机连接,配置串口参数:波特率(常见9600/115200)、数据位(8)、停止位(1)、校验位(无)、流控(无),在Python中可通过pyserial库配置:

import serial  
ser = serial.Serial('/dev/ttyUSB0', 115200, timeout=1)  

步骤2:发送AT指令并解析响应

向Modem发送指令后,需正确解析响应,以读取未读短信为例,代码逻辑如下:

  1. 发送AT+CMGF=1设置Text模式;
  2. 发送AT+CMGL="REC UNREAD"获取未读短信列表;
  3. 遍历响应,提取短信索引、发送方、内容及时间;
  4. 处理完成后发送AT+CMGD删除短信(可选)。

步骤3:错误处理与超时控制

Modem响应可能因信号干扰、指令错误等原因失败,需增加错误处理机制:

at指令读取短信

  • 指令发送后未收到”OK”或错误响应(如ERROR),需重试;
  • 设置串口超时(如1秒),避免程序阻塞;
  • 检查Modem状态(如AT+CSQ查询信号质量),确保网络正常。

不同短信模式的适用场景

模式 优点 缺点 适用场景
Text模式 指令简单,内容可直接读取 不支持中文、长短信、短信中心号码配置 简单英文短信、低功耗设备
PDU模式 支持所有短信类型,功能强大 需解析十六进制编码,开发复杂度高 中文短信、长短信、需自定义短信中心场景

以PDU模式读取短信为例,指令为AT+CMGR=1,响应为PDU编码字符串,需解码获取内容,PDU "0891683108200055F0040B911082016121000006A00415F746F6B656E"可解析为:短信中心号码+8613800200505、目标号码+8613810820161"Token"

注意事项与最佳实践

  1. SIM卡存储空间:SIM卡短信存储容量有限(通常30-100条),需定期清理或设置自动删除。
  2. 短信编码格式:Text模式下,中文短信需使用AT+CSCS="GSM"设置编码为GSM(支持UCS2编码需AT+CSCS="UCS2")。
  3. 长短信处理:长短信(超过140字符)会被拆分为多条,需通过+CSMP参数设置或合并PDU字段。
  4. 并发安全:多线程/多进程同时发送AT指令可能导致冲突,建议加锁或串行处理。

相关问答FAQs

Q1:为什么AT+CMGL指令返回”ERROR”?
A:可能原因包括:① 串口参数配置错误(波特率、校验位不匹配);② 短信存储位置未正确设置(需先执行AT+CPMS);③ Modem未就绪(需先发送AT测试);④ 指令格式错误(如缺少回车符),建议检查硬件连接、串口配置及指令格式,并通过AT+CSQ确认Modem信号质量。

Q2:如何读取中文短信?
A:Text模式下需设置编码为UCS2,步骤如下:① 发送AT+CSCS="UCS2"设置编码;② 发送AT+CMGF=1进入Text模式;③ 使用AT+CMGLAT+CMGR读取短信,内容将以UCS2编码返回(如"4F60597D"解码为”你好”),若需转换为可读字符串,需将每两个字符转换为对应的Unicode字符。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/71034.html

(0)
酷番叔酷番叔
上一篇 2025年12月13日 12:46
下一篇 2025年12月13日 12:58

相关推荐

  • 安全应急响应如何秒杀风险隐患?

    在数字化时代,网络安全威胁日益严峻,攻击手段不断升级,从勒索软件、数据泄露到分布式拒绝服务攻击(DDoS),任何一次安全事件都可能对企业的正常运营造成致命打击,传统的安全响应模式往往依赖人工分析和手动处置,不仅耗时耗力,更难以应对“秒级”攻击的爆发式增长,在此背景下,“安全应急响应秒杀”理念应运而生,它强调通过……

    2025年11月24日
    7100
  • desktop文件如何实现应用启动?

    Desktop文件是Linux桌面环境中应用程序的启动配置文件,遵循freedesktop.org规范,它以.desktop为后缀,包含程序名称、图标、执行命令、分类等元数据,用于在桌面环境菜单和启动器中创建统一的应用入口。

    2025年7月6日
    10900
  • ASP如何实现音乐播放功能?

    在当今互联网技术快速发展的时代,动态网页开发已成为构建交互式用户体验的核心,ASP(Active Server Pages)作为一种成熟的服务器端脚本技术,为开发者提供了强大的功能来创建动态、数据驱动的网站,ASP音乐播放功能的应用,不仅丰富了网站的多媒体表现力,也为用户带来了更加沉浸式的听觉体验,本文将围绕A……

    2025年12月14日
    4300
  • A类IP地址的网络地址是什么?

    A类IP地址的网络地址是互联网协议(IP)地址体系中的重要组成部分,属于IPv4地址的第一类,在互联网的早期设计中,IP地址被分为A、B、C、D、E五类,其中A类地址因其大范围的地址空间,被广泛分配给大型网络,如跨国企业、国家级机构或大型互联网服务提供商(ISP),本文将详细探讨A类IP地址的网络地址结构、特点……

    2025年11月27日
    4200
  • 安全态势感知平台,哪家更优?

    在数字化转型加速的今天,企业面临的安全威胁日益复杂,从勒索软件、APT攻击到内部数据泄露,传统安全工具已难以应对动态威胁,安全态势感知平台作为安全运营的核心“大脑”,通过整合多源安全数据、关联分析威胁情报、可视化呈现安全态势,成为企业构建主动防御体系的关键,安全态势感知平台哪家好?选择时需重点关注哪些维度?本文……

    2025年11月23日
    4000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信