Air724UG 4G模块调试实战:AT指令短信与MQTT接入华为云IoT
2026/9/6 12:31:30 网站建设 项目流程

简介:一份关于合宙4G模块Air724UG调试全流程的PDF资料,面向物联网开发者、嵌入式工程师及需要快速上手Cat.1模组的硬件设计人员,聚焦从串口接线、AT指令交互到业务功能联调的实际问题。包体仅含1个PDF文件,约24.7MB,适合直接查阅或打印对照操作。已有730人学习下载。内容覆盖硬件连接与供电要求、厂商信息与信号质量查询、英文及中文短信发送(含Unicode转换)、华为云IOT平台接入与MQTT通信配置等关键环节,并附官方文档地址与调试接线注意事项。资料以分步截图和命令行示例呈现,能帮助读者减少摸索时间,规避SIM卡识别、APN设置、短消息格式等常见坑点,快速完成模块集成与云端数据上传。 调试合宙Air724UG这块4G模块,前前后后折腾了一周多,从最基础的AT指令到把数据顶到华为云IoT平台,中间踩的坑比想象中多得多。一个还没硬币大的模块,既要负责短信告警,又要承担数据上云,链路一长,问题就藏不住了。这篇文章就把整个调试过程完整记录下来,从硬件接线、模块自检,到短信发送、MQTT接入华为云,再到各种疑难杂症的排查思路,希望能帮到正在和4G模块搏斗的朋友。

先说说这个项目是干嘛的:用Air724UG实现两件事,一是通过AT指令发送短信,二是将采集到的传感器数据通过MQTT协议上传到华为云IoT平台,并支持云端命令下发。整个方案非常适合刚接触4G模块的软硬件工程师,也适合想把设备快速接入云平台的嵌入式玩家。

1. 项目拆解与方案选型:为什么选Air724UG而不选其他4G模块

1.1 核心需求拆解:短信、上云,还要稳定

接到这个项目时,需求其实很明确:现场设备需要一个通信模块,既能主动发短信告警,又能定时把运行数据上报到云端平台。以前这类场景很多人用2G模块,比如SIM800系列,成本低、短信方便,但2G退网是大趋势,新项目再用2G等于给自己埋雷。nb-iot虽然省电,但短信能力弱、带宽有限,不太符合要求。所以选型时直接锁定了Cat.1阵营的4G模块。

Air724UG是合宙推出的LTE Cat.1模块,基于国产UIS8910DM平台,支持最大下行10Mbps、上行5Mbps的速率,带双卡单待和VoLTE语音,最关键的是同时支持AT指令和Lua二次开发两种方式。对于我这种习惯用串口指令调试的人来说,AT指令方式上手最快;后期如果想做复杂逻辑,又能直接切到LuatOS脚本开发,灵活性很高。模块还引出了丰富的外设接口,包括UART、I2C、SPI、ADC等,做物联网网关绰绰有余。

1.2 模块选型对比:Air724UG与同类4G模块怎么选

热词里提到的EC801也是目前市面上常见的4G模块,很多人在它和Air724UG之间犹豫。我的看法是:如果只是纯粹做数据透传,EC801的性价比确实不错;但如果要兼顾短信、语音、低功耗和二次开发便利性,Air724UG的资源更丰富,社区资料也更多,调试遇到问题时能查到的案例更多。另外,Air724UG支持宽电压输入(3.4V到4.2V),对电源设计的要求相对友好,对新手来说容错率更高。

选型还有一个容易被忽略的点——天线接口和频段支持。Air724UG支持国内三大运营商的LTE频段,B1/B3/B5/B8这几个主力频段全覆盖,无论是移动、联通还是电信卡,都能正常注册网络。这一点在实际项目中非常关键,有的模块频段阉割严重,换了运营商就掉线,Air724UG在这方面省心很多。

1.3 硬件准备清单与接线要点

调试前准备的硬件如下:

  • Air724UG开发板一块
  • 4G吸盘天线一根(必须接,不接信号会很差)
  • 中国移动4G SIM卡一张
  • USB转串口模块一个(推荐CP2102或CH340)
  • 5V/2A的独立电源或者台式电源
  • 杜邦线若干

接线时要注意Air724UG工作在3.4V到4.2V的电压范围,但开发板一般自带稳压电路,可以直接用USB-5V供电。我建议千万不要只靠USB转串口模块取电,4G模块在发射瞬间电流峰值可以到2A,USB转串口模块根本带不动,模块会反复重启,非常误导人。先用独立电源给模块供电,再共地连接串口模块,这是最稳定的组合。另外,模块的PWRKEY引脚要拉低一下触发开机,开发板上通常已经有按键或者上拉处理,但如果是自己画板子,这块电路要特别注意,后面我会专门讲。

2. 环境搭建与模块自检:先确认模块“活着”

2.1 调试工具链:Luatools、串口助手、电源一个都不能少

Air724UG的调试工具链不复杂,但配齐很重要。我用的是三件套:合宙官方Luatools工具、串口调试助手XCOM、独立5V电源。Luatools主要用于固件烧录和日志查看,虽然用AT指令调试时不一定天天烧固件,但模块如果出现异常,重新烧录官方AT固件是最快的恢复手段,建议提前下载好对应版本的固件放入工具目录。

串口助手的选择上,XCOM或者SSCOM都行,关键是稳定、能发十六进制数据。因为短信发送的结束符0x1A是十六进制字符,很多串口助手下拉框里没有这个字符,需要手动输入,我用的是支持自定义发送的版本,可以预先配置好几组常用指令,切换发送很方便。

2.2 上电自检三步走:AT、CPIN、CSQ

模块上电后,不要急着发短信或者连平台,先做三个基础自检:

第一步,串口输入“AT”,回车,如果模块返回“OK”,说明AT指令通路正常。如果没反应,优先检查串口接线和波特率——Air724UG默认波特率是115200,这个和很多2G模块的9600不同,特别容易踩坑。

第二步,输入“AT+CPIN?”,返回“+CPIN: READY”才说明SIM卡正常识别。如果返回“+CME ERROR: SIM not inserted”,大概率是SIM卡没放好或者接触不良,重新插拔一下。这里还要注意一个问题,SIM卡有PIN码锁定的话,模块会返回“+CPIN: SIM PIN”,需要用“AT+CPIN=1234”解锁,否则后续入网全部失败。

第三步,输入“AT+CSQ”查看信号强度。返回的格式是“+CSQ: 23,99”,第一个数字是信号质量,范围0到31,越大越好,我测试时12以上就能稳定联网,低于10就要检查天线了。第二个数字“99”表示误码率未知,不用管它。

做完这三步,再输入“AT+CREG?”确认网络注册状态,返回“+CREG: 1,1”或者“+CREG: 1,5”说明已注册上4G网络,可以开始正式调试了。

3. 短信发送功能调通:AT指令实操与PDU模式避坑

3.1 文本模式发短信:AT+CMGS的标准操作

先来最简单的英文短信。发送流程如下:

AT+CMGF=1 OK AT+CMGS="13800138000" > hello world +CMGS: 172 OK

第一条“AT+CMGF=1”是将短信设为文本模式,默认是0(PDU模式),新手容易忽略。第二条“AT+CMGS=手机号”输入后,模块会返回一个“>”提示符,此时输入短信内容,输入完不要按回车,而是直接发送十六进制字符0x1A(对应ASCII码的Ctrl+Z),模块才会真正执行发送。返回“+CMGS: 172”就说明短信已经交给运营商了。

这个流程看着简单,实际调的时候很多人卡在最后一步:有的串口工具发送0x1A需要在“发送新行”里配置,有的需要手动在内容后面追加十六进制字节,如果直接按回车,短信内容后面会带一个换行符,部分运营商会把换行当作合法字符导致发送异常。

3.2 中文短信必须用PDU模式

文本模式发英文没问题,但发中文基本会乱码,因为文本模式本身是为GSM默认的7bit或者UCS2编码设计的,不同运营商的兼容性也不一样。项目里要发中文告警信息,就必须切到PDU模式。

PDU模式的流程稍微复杂一点:

AT+CMGF=0 OK AT+CMGS=26 > 0891683108200505F011000B813100293488F10008A7044F60597DFF01 +CMGS: 173 OK

这里“AT+CMGS=26”后面的数字是PDU串的字节长度,具体计算方式是:整个PDU串去掉开头的“08”和后面的“91”等SMSC地址部分之后,剩余字节数的二分之一。这块极其容易数错,数错了模块会一直不返回结果或者报错误。我建议尽量用工具生成PDU串,比如在电脑上先用Python脚本或者在线工具把中文转成Unicode编码,再拼装完整的PDU报文,不要手工去数。

如果你用的是LuatOS二次开发,这个问题就简单多了,合宙的短信库直接支持中文发送,底层已经帮你处理了PDU编码,所以我的建议是:短信需求复杂的话,直接上Lua脚本,别在AT指令的PDU上死磕。

3.3 短信调试中容易忽略的细节

短信功能调了两天,有几点体会很深:

信号强度直接影响短信发送成功率。我在室内测试时+CSQ只有10左右,经常出现发送后返回“+CMS ERROR: 515”的情况,这是运营商返回的“短消息中心超时”错误。把天线挪到窗边,信号到20以上,基本一打一个准。所以调试短信时一定先把信号调到稳定水平。

SIM卡要开通短信业务。现在很多物联网卡默认只开通流量套餐,短信功能是关闭的,这类卡发短信必然失败。排查方法很简单:把卡换到普通手机上发一条短信试试,如果能发,说明卡没问题,问题在模块配置;如果在手机上也不行,赶紧找运营商开通业务。

发送成功不等于对方立刻收到。模块返回“+CMGS: xxx”只代表短信从模块发到了运营商短信中心,端到端的送达还取决于接收端信号和运营商网络。短信下发会有延迟,项目里做告警功能时,要注意不能把“已发送”当“已送达”处理,更稳妥的做法是让接收方回复确认短信,或者在应用层处理重发逻辑。

4. 接华为云IoT平台:MQTT三要素生成与数据上报

4.1 华为云IoT平台侧:产品、模型、设备三步准备

短信调通后进入硬骨头环节——把数据上传到华为云IoT。平台侧配置一共三步。

第一步,在华为云IoT平台创建产品。产品类型选“直连设备”,协议选“MQTT”,数据格式建议选“JSON”,这样上报和下发数据都是标准的JSON格式,调试起来直观。

第二步,在产品的模型定义里添加属性和命令。比如温度传感器产品,可以定义一个名为“temperature”的属性,数据类型选int,最小值最大值按量程设置;再定义一个“set_frequency”命令,用于云端下发修改上报频率。这里我建议一开始不要定义太多服务,用一个服务承载三五个属性就够了,后面需要再加,避免模型太复杂增加调试难度。

第三步,注册设备。在产品页面添加设备,填写设备标识符,平台会自动生成设备ID和设备密钥,这两个参数是后续MQTT接入的核心凭据,一定要保存好。

4.2 MQTT接入参数生成:clientId、username、password

华为云IoT的MQTT接入有三个关键参数:clientId、username、password,网上很多教程在这里都栽了跟头,尤其是password的生成规则,不同版本的平台生成格式略有差异。

我现在手头验证过的生成规则是这样的:以设备ID作为MQTT的clientId和username;password使用设备密钥对时间戳做HMAC-SHA256计算,再按照平台要求的格式拼接。以下是参考代码:

import hmac import hashlib import time device_id = "你的设备ID" device_secret = "你的设备密钥" timestamp = str(int(time.time() * 1000)) secret = hmac.new(device_secret.encode(), timestamp.encode(), hashlib.sha256).hexdigest() # 拼接规则以华为云平台最新文档为准,我这里用的是本地验证过的格式 password = timestamp + "|" + secret print("clientId:", device_id) print("username:", device_id) print("password:", password)

注意,这里有一个高频坑:直接对device_secret做HMAC计算是不对的,必须先取当前UTC毫秒级时间戳作为被签名的内容,再用设备密钥作为签名密钥。我最初就是把device_secret当作内容去签,结果平台一直报认证失败,查了很长时间才发现是理解反了。

另外,不同版本的平台可能要求在password前后追加固定前缀或后缀,如果按上面的方式连不上,去设备详情页看平台给出的“连接参数示例”,照抄它的生成逻辑。我的建议是先用MQTT客户端软件(比如MQTTX)离线验证这三个参数能不能连通,确认没问题再动模块侧代码,这样能把问题边界划分清楚。

4.3 设备侧上报数据:Topic与Payload格式

华为云IoT的数据上报主题格式如下:

$oc/devices/{device_id}/sys/properties/report

payload是一个JSON串,格式为:

{ "services": [ { "service_id": "temp_hum", "properties": { "temperature": 23.5, "humidity": 60 } } ] }

这里service_id必须跟平台侧产品模型里定义的“服务ID”保持一致,属性字段名也要一致,否则平台会报“属性不存在”或者干脆静默丢弃。

在Air724UG上,我强烈建议直接用LuatOS脚本的mqtt库来做上报,而不是用AT指令去拼MQTT报文。用AT指令需要处理AT+QMTOPEN和AT+QMTCONN的异步响应,还要自己计算报文长度和心跳包时间,容易出错;LuatOS里一条publish函数就搞定了:

local topic = "$oc/devices/" .. device_id .. "/sys/properties/report" local payload = json.encode({ services = { { service_id = "temp_hum", properties = { temperature = temp, humidity = hum } } } }) mqtt.publish(topic, payload)

实测下来,LuatOS的方式稳定很多,日志也更容易定位问题。

4.4 命令下发与响应

数据能上报之后,命令下发也不能少。在Air724UG上订阅主题:

$oc/devices/{device_id}/sys/commands/#

这样云端通过平台下发命令时,模块会收到一条JSON消息,格式类似:

{ "object_device_id": "设备ID", "command_name": "set_frequency", "paras": { "frequency": 120 } }

收到命令后,需要向响应主题回复处理结果,响应主题是以request_id为标识的:

$oc/devices/{device_id}/sys/commands/response/request_id={请求ID}

响应payload要返回对应的结果码和信息。刚开始调试命令下发时,我忽略了这个响应,结果平台侧一直显示命令“超时”,但模块其实已经执行了动作。所以记住:收到命令、执行完业务逻辑后,一定记得回响应,否则平台会认为下发失败并不断重试。

5. 常见问题与排查技巧:调试一周踩过的坑全记录

5.1 高频问题速查表

把这次调试遇到的问题整理成一张表,方便大家直接查:

问题现象可能原因解决办法
串口输入AT无响应波特率不对/接线错误确认使用115200波特率,检查TX/RX是否交叉相连,共地
AT+CPIN?返回SIM PINSIM卡启用PIN码用AT+CPIN=1234解锁,或手机关闭PIN码
短信发送返回+CMS ERROR信号差/短信中心未配置/物联网卡未开通短信检查AT+CSQ信号值,AT+CSCA查询短信中心,联系运营商开通短信
中文短信乱码文本模式编码不兼容切换PDU模式,或改用LuatOS短信库
MQTT连接认证失败password生成规则不对检查时间戳是否为毫秒级、签名方向是否正确、是否有前缀后缀
数据上报平台看不到service_id或属性名不一致核对产品模型定义的字段,和payload逐字符比对
命令下发超时收到命令后未发送响应订阅commands主题后执行完逻辑必须回response

5.2 电源、天线与开关机检测:稳定性比什么都重要

调试后期还遇到一个很头疼的问题:模块运行一两个小时就自动掉线,AT+CFUN?查出来模块还在线,但MQTT连接断了,重连也不成功。后来用示波器抓VBAT电压才定位到原因——供电电源在模块发射瞬间跌落严重,导致模块射频功率异常,进而触发基带保护性掉线。

这个问题的根源就是前面提过的电源设计。4G模块特点是“瞬时大电流、脉冲式功耗”,发射时电流可以冲到2A,平均功耗倒是不高。这要求供电电路必须有足够的储能电容和低阻抗路径。如果是自己设计原理图,建议在VBAT引脚附近放置一个大容量钽电容或电解电容(220uF以上)搭配多个100nF高频去耦电容。开关机检测电路上,可以用模块的STATUS引脚接一个LED或者MCU的GPIO,实时判断模块是否处于正常工作状态,避免误把“有供电”当“已开机”。

天线这块也不能含糊。天线要尽量远离主控芯片、电源走线和扬声器,最好不要悬空贴着外壳金属件。磁吸天线测试时信号很好,装进塑料壳后衰减厉害,换用外置吸盘天线后问题解决。如果设备结构空间小,建议用IPEX接口的PCB天线并做好天线匹配,不要图省事直接用一根导线当天线,信号会非常不稳定。

6. 调试心得与后续扩展

这次用Air724UG从AT指令起步,最终落在LuatOS脚本上,中间虽然踩了不少坑,但整个过程让我对4G模块的工作机制有了更立体的认识。最大的体会是:调试这类模块,一定要把问题边界划清楚。模块连不上云,先用手边的MQTT客户端软件测参数,确认参数没问题再怀疑模块;模块发不出短信,先换普通手机验证SIM卡本身没问题,再查AT指令。千万不要在整条链路都不确定的情况下盲目调代码,那只会让问题的定位越来越难。

如果后续项目要扩展,我可能会在Air724UG上继续加GPS定位上报、远程固件升级(OTA)这些功能。短信这块可以做成触发性告警,比如温度超限时自动推送短信,再配合华为云IoT的设备影子做离线状态的缓存,整体方案的可靠性还能再上一个台阶。正在做类似项目的朋友,建议先从最简单的链路开始,把供电和信号这两个基础问题解决好,后面所有的调试都会顺畅很多。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询