ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

西门子TC35模块AT命令定时发短信:TaoToken统一Key接入配置与串口验证

西门子TC35模块AT命令定时发短信:TaoToken统一Key接入配置与串口验证 1. 从一块 TC35 到一条能落地的告警短信西门子 TC35 是一块经典的 GSM 模块自带 RS232 电平的串口能打电话、发短信、跑数据工作电压 3.3V 到 5.5V支持 900MHz 和 1800MHz 两个频段。它的核心价值在于你不需要懂蜂窝协议栈只要会往串口写 AT 命令就能让一块 51 单片机把告警短信发到手机上。适合谁做物联网告警、机房断电通知、农业大棚温湿度上报、共享设备离线提醒的嵌入式开发者尤其是手头还压着几块 TC35 或者 TC35i 的老项目维护者。但真正上手你会发现两个坑。第一TC35 本身只负责“把短信发出去”它不负责“什么时候发、发给谁、发什么内容”定时逻辑得靠单片机定时器或者外部 RTC 来兜。第二模块上电后要等它注册网络、SIM 卡就绪这个时间窗口里你发 AT 命令它可能根本不回很多人卡在“串口有回显但短信发不出去”。这篇就按“模块上电 → 串口初始化 → AT 握手 → 定时触发 → 短信触达”的闭环来写同时把 TaoToken 的统一 Key 通道配置骨架给出来方便你后面把告警链路接到模型侧做内容生成或状态查询。先明确一个边界TC35 走的是 GSM 基站短信通道TaoToken 走的是 API 通道两者不是替代关系。TC35 负责“最后一公里”的短信触达TaoToken 负责“告警内容生成、设备状态语义化、多设备统一鉴权”。你把这两段拼起来才是一个完整的告警系统。2. TaoToken 统一 Key 前置准备在动 TC35 之前先把 TaoToken 侧的通道配好。为什么先做这个因为很多人的告警短信内容是固定的“设备离线”但实际运维里你希望短信里带上“哪台设备、什么时间、可能原因”这部分文本如果靠单片机硬编码改一次烧一次固件。用 TaoToken 的统一 Key你可以在服务端生成告警文案再通过串口下发给 TC35单片机只负责透传。TaoToken 的定位是统一模型接入层一个 Key 可以走多个模型通道适合做告警语义化、设备日志摘要、异常分类。你需要先拿到 API Key入口在控制台的 API Keys 页面https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite拿到 Key 之后模型对话调试入口在这里用来验证 Key 是否可用、模型是否返回正常https://taotoken.net/model-chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite如果你后面要把告警链路做成长期运行的 Agent比如“设备离线 → 模型判断严重等级 → 决定是否发短信”那更适合用 Coding Plan 做长期编码和 Agent 编排https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite接入文档在这里配置字段、请求格式、错误码都以文档为准https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewriteAPI 基础地址是https://taotoken.net/api注意这个地址不带 UTM 参数直接用于代码里的 base_url。官网入口是https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content里面能看到完整的控制台入口。2.1 settings.json 配置骨架如果你用的是 VS Code 插件或者某些支持 settings.json 的客户端可以按下面这个骨架填。核心是base_url指向 TaoToken 的 API 地址api_key填你控制台生成的 Keymodel填你要用的模型名。{ taotoken.base_url: https://taotoken.net/api, taotoken.api_key: sk-你的TaoTokenKey, taotoken.model: 你的模型名, taotoken.timeout: 30000, taotoken.max_retries: 2 }这里timeout建议给 30 秒因为告警场景下网络可能不稳定重试 2 次足够。max_retries不要给太大否则短信会重复发。2.2 config.toml 配置骨架如果你用的是 Rust 系或者支持 TOML 的工具链用这个[taotoken] base_url https://taotoken.net/api api_key sk-你的TaoTokenKey model 你的模型名 timeout_ms 30000 max_retries 2 [taotoken.alert] enabled true template 设备{device_id}在{timestamp}触发{alert_type}请检查template这一段是给告警文案用的单片机侧只需要把device_id、timestamp、alert_type三个变量通过串口传给上位机上位机调 TaoToken 生成完整文案再回传给 TC35 发送。2.3 环境变量方式如果你不想把 Key 写进配置文件用环境变量export TAOTOKEN_BASE_URLhttps://taotoken.net/api export TAOTOKEN_API_KEYsk-你的TaoTokenKey export TAOTOKEN_MODEL你的模型名然后在代码里读环境变量。这种方式适合 CI/CD 或者容器化部署避免 Key 泄露到 Git 仓库。3. TC35 串口 AT 命令初始化序列TC35 的串口是 RS232 电平如果你直接接单片机中间要加 MAX232 或者类似的电平转换芯片。波特率默认 96008 位数据位1 位停止位无校验。下面这套初始化序列是我实测下来比较稳的顺序每一步都有明确的返回预期。3.1 硬件上电与 IGT 启动TC35 的 40 引脚 ZIF 连接器里IGT 引脚负责启动模块。启动时序是IGT 拉低至少 100ms然后拉高再等模块注册网络。下面这段是 51 单片机的启动代码#include reg52.h #define uchar unsigned char #define uint unsigned int sbit IGT P3^7; void Delay_ms(uint i) { uint j; for(; i 0; i--) for(j 0; j 125; j); } void Start_GSM(void) { IGT 0; Delay_ms(1000); IGT 1; Delay_ms(1000); }启动后不要立刻发 AT 命令模块需要时间搜网。实测下来上电到能稳定响应 AT大概要 8 到 12 秒取决于当地信号强度。你可以用ATCREG?查询网络注册状态返回CREG: 0,1表示已注册到本地网络0,5表示漫游。3.2 串口初始化51 单片机的串口初始化定时器 1 工作在方式 2波特率 9600void UART_init(void) { TMOD 0x21; TH0 (65535 - 50000) / 256; TL0 (65535 - 50000) % 256; PCON 0x00; SCON 0x50; TH1 0xFD; TL1 0xFD; EA 1; TR1 1; ET0 1; TR0 1; }TH1 0xFD对应 9600bps如果你用的是 11.0592MHz 晶振这个值是对的。如果是 12MHz 晶振会有误差建议换 11.0592MHz。3.3 AT 握手与短信格式设置初始化序列按这个顺序发uchar code AT[] AT; uchar code AT_CMGF[] ATCMGF1; uchar code AT_CMGS[] ATCMGS\8613588888888\; void sendchar(uchar ch) { SBUF ch; while(TI 0); TI 0; } void sendstring(uchar *p) { while(*p) { sendchar(*p); p; } sendchar(0x0D); sendchar(0x0A); } void GSM_INIT(void) { sendstring(AT); Delay_ms(1000); sendstring(AT_CMGF); Delay_ms(1000); }AT是握手返回OK说明串口通了。ATCMGF1设置短信为 TEXT 模式返回OK。如果你要用 PDU 模式改成ATCMGF0但 PDU 模式需要自己编码TEXT 模式对小白更友好。3.4 定时发送逻辑定时用定时器 050ms 中断一次累计 600 次就是 30 秒uint tt 0; bit flag 0; void timer0() interrupt 1 { TH0 (65535 - 50000) / 256; TL0 (65535 - 50000) % 256; tt; if(tt 600) { tt 0; flag 1; } } void sendshuju(void) { sendstring(AT_CMGS); Delay_ms(1000); sendstring(This is a test for TC35.); Delay_ms(30); sendchar(0x1A); } void main(void) { Start_GSM(); Delay_ms(10000); UART_init(); Delay_ms(100); GSM_INIT(); Delay_ms(1000); while(1) { if(flag 1) { flag 0; sendshuju(); } Delay_ms(100); } }关键点ATCMGS发出去之后模块会返回一个符号这时候才能发短信内容。内容发完发0x1ACtrlZ作为结束标志。如果你发的是0x1BESC就是取消发送。4. 验证请求与成功结果4.1 串口助手验证先用 USB 转 TTL 接 TC35波特率 9600发AT看有没有OK返回。如果有说明串口和模块都正常。然后发ATCMGF1返回OK。再发ATCMGS8613588888888返回然后输入短信内容最后发0x1A。如果手机收到短信说明整条链路通了。4.2 TaoToken 侧验证用 curl 验证 Key 是否可用curl -X POST https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer sk-你的TaoTokenKey \ -H Content-Type: application/json \ -d { model: 你的模型名, messages: [ {role: user, content: 设备A在2025-01-01 12:00触发高温告警请生成一条短信文案} ] }如果返回正常你会拿到一段生成的文案。把这段文案通过串口下发给 TC35就完成了“模型生成内容 → TC35 发送”的闭环。4.3 定时发送验证烧录单片机程序上电后等 10 秒然后每 30 秒发一条短信。你可以用手机接收也可以用串口助手看模块返回。成功发送后模块会返回CMGS: 1和OK。如果返回ERROR看下一节的排查。5. 本篇常见错排查5.1 串口有回显但 AT 不返回 OK这种情况通常是波特率不对。TC35 默认 9600但有些模块被改过。你可以试ATIPR9600强制设置但前提是你能先通一次。如果完全不通检查 MAX232 的电平转换是否接反TC35 的 TX 接单片机的 RXRX 接 TX。5.2 返回 CME ERROR: 10这是 SIM 卡未就绪。检查 SIM 卡是否插好是否欠费是否被 PIN 锁。可以用ATCPIN?查询返回CPIN: READY才是正常。如果返回CPIN: SIM PIN需要先发ATCPIN1234解锁。5.3 返回 CMS ERROR: 500这是短信发送失败常见原因是号码格式不对。TEXT 模式下号码要带国家码比如8613588888888不要带空格和横线。另外短信中心号码要设置正确用ATCSCA?查询如果不对用ATCSCA8613800100500设置这是北京移动的短信中心具体问运营商。5.4 定时不准51 单片机的定时器受晶振影响如果你用 12MHz 晶振50ms 中断会有误差。建议换 11.0592MHz或者用外部 RTC 芯片比如 DS1302。另外Delay_ms函数是软件延时中断里不要调用否则会拖慢定时。5.5 TaoToken 返回 401Key 不对或者过期。去控制台重新生成一个注意不要有多余空格。如果用的是环境变量检查echo $TAOTOKEN_API_KEY是否有值。6. 把告警链路接起来TC35 负责短信触达TaoToken 负责内容生成和统一鉴权这两段拼起来就是一个完整的告警系统。你可以把单片机采集到的温度、湿度、电压通过串口传给上位机上位机调 TaoToken 生成告警文案再回传给 TC35 发送。这样改文案不用烧固件换模型也不用改硬件。如果你后面要做多设备管理建议用 Coding Plan 把告警编排做成长期运行的 Agent入口在这里https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite接入文档和 API Keys 入口再放一次方便你直接跳https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewritehttps://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite实测下来TC35 最稳的用法就是“单片机只管透传内容生成交给服务端”。这样你既保留了 GSM 通道的可靠性又拿到了模型侧的灵活性。
返回列表