📄 接收短信流程
字号:
连接好数据线、插入SIM卡、接上Modem电源线,配置好minicom之后,打开minicom1.AT+CMGF=0 回车(采用PDU格式)返回OK:******************************AT+CMGF=0OK******************************2.AT+CNMI=2,1 (设置为mode=2, mt=1)返回OK:******************************AT+CNMI=2,1OK******************************可以查看设置是否成功:AT+CNMI? (再查看当前设置)******************************AT+CNMI?+CNMI: 2,1,0,0,0OK******************************3.当短信到来时会自动提醒(过了一段时间,有一条消息到达)******************************+CMTI: "SM",5******************************通知:消息已经存储在ME内存中,序号为84.查看短信(用序号指定)******************************AT+CMGR=5 (读第5条消息)+CMGR: 0,,24 0891683108100005F0240D91685121004572F0000880210191342323044F60597D OK******************************08 91 683108100005F0 24 0D 91 685121004572F0 00 08 80210191342323 04 4F60597D 08 91 8613800100500F 24 0D 91 8615120054270F 00 08 08121019433223 04 4F60597D08:SMSC地址信息的长度共 8 个八位字节(包括 91)91:SMSC地址格式(TON/NPI) 用国际格式号码(在前面加‘+’)68 31 08 10 00 05 F0:SMSC地址8613800100500,补‘F’凑成偶数个24:基本参数(TP-MTI/MMS/RP) 接收0D 回复地址数字个数共 13 个十进制数(不包括 91 和‘F’)91 回复地址格式(TON/NPI) 国际格式68 51 21 00 45 72 F0:回复地址(TP-RA) 8613910199192,补‘F’凑成偶数个00:协议标识(TP-PID) 是普通 GSM 类型,点到点方式08:用户信息编码方式(TP-DCS) UCS2 编码80 21 01 91 34 23 23:服务时间戳(TP-SCTS) 2008-12-10 19:43:3204:用户信息长度(TP-UDL) 实际长度 4个字节4F60597D:用户信息(TP-UD) “你好”08 91 683108100005F0 04 0D 91 685121004903F1 00 08 80210102226223 0A 6211662F4F605927723708 91 683108100005F0 24 0D 91 685121004572F0 00 08 80210191342323 04 4F60597D 08 91 8613800100500F 24 0D 91 8615120054270F 00 08 08121019433223 04 4F60597D解码,求出时间、对方号码以及短信内容(将UCS2编码格式转换成utf-8格式)/*将接收到的PDU字符串进行解码,求出时间、对方号码以及短信内容(将UCS2编码格式转换成utf-8格式)pdu:接收到的PDU字符串time:时间,格式为“年/月/日,时:分:秒”phone:发送方的手机号码,格式为“86XXXXXXXXXXX”,总共11位(不算“86”)msg:短信内容,已经转换为utf-8格式转换成功则返回0;否则返回-1*/int get_message(const char *pdu,char *time,char *phone,char *msg);算法流程:/* 获取并处理时间 */将pdu的第42位(从0开始)到第53位复制到my_time, (=> my_time <- "802101913423")并对my_time进行奇偶位交换 (=> my_time <- "081210194332")格式化为“年/月/日,时:分:秒”到time上。/* 获取手机号码 */将pdu的第24位(从0开始)到第37位复制到my_phone, (=> my_phone <- "685121004572F0")对my_phone进行奇偶位交换 (=> my_phone <- "8615120054270F")将my_phone最后一位('F')清除后复制到phone/* 获取短信内容 */将pdu的第56、57位转化为数字并存放在num中 (=> num <- 4)将pdu的第58位到第(57+num*2)位复制到my_msg中 (=> my_msg <- "4F60597D")对my_msg转换成utf-8格式并复制到msg中
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -