AT指令傳送簡訊
阿新 • • 發佈:2020-09-01
一、英文簡訊 發:AT 收:OK 發:AT+CMGF=1 收:OK 發:AT+CMGS=13911139197 收:> 發:data→ //test 為傳送內容,→為傳送符(ctrl+z,十六進位制0x1A) 收:+CMGS: 54 OK 二、中文PDU簡訊 本文以一個例項來解說AT指令傳送PDU簡訊的全過程,假如我要傳送下面的簡訊: 接收號碼:+8613902433649 簡訊內容:工作愉快! 簡訊中心號碼:+8613800100500 1、簡訊中心號碼處理:用字串 addr 表示 a、將簡訊息中心號碼去掉+號,看看長度是否為偶數,如果不是,最後新增F 即 addr = "+8613800100500" => addr = "8613800100500F" b、將奇數位和偶數位交換。=> addr = "683108100005F0" c、將簡訊息中心號碼前面加上字元91,91是國際化的意思 => addr = "91683108100005F0" d、算出 addr 長度,結果除2,格式化成2位的16進位制字串,16 / 2 = 8 => "08" => addr = "0891683108100005F0" 2、手機號碼處理:用字串 phone a、將手機號碼去掉+號,看看長度是否為偶數,如果不是,最後新增F 即 phone = "+8613902433649" => phone = "8613902433649F" b、將手機號碼奇數位和偶數位交換。 => phone = "683109423346F9" 3、簡訊息部分處理:用字串 msg 表示 a、轉字串轉換為Unicode程式碼,例如“工作愉快!”的unicode程式碼為 5DE54F5C61095FEBFF01,(轉換在linux裡可用iconv函式實現。) b、將 msg 長度除2,保留兩位16進位制數,即 5DE54F5C61095FEBFF01= 20 / 2 => "0A",再加上 msg => msg = "0A5DE54F5C61095FEBFF01" 4、組合 a、手機號碼前加上字串 11000D91(1100:固定,0D:手機號碼的長度,不算+號,十六進位制表示,91:傳送到手機為91,傳送到小靈通為81) 即 phone = "11000D91" + phone => 11000D91683109423346F9 b、手機號碼後加上 000800 和剛才的簡訊息內容,000800也寫死就可以了 即 phone = phone + "000800" + msg 即 11000D91683109423346F9 + 000800 + 0A5DE54F5C61095FEBFF01 => phone = 11000D91683109423346F90008000A5DE54F5C61095FEBFF01 c、phone 長度除以2,格式化成2位的十進位制數 即 11000D91683109423346F90008000A5DE54F5C61095FEBFF01=> 50位 / 2 => 25 5、所以要傳送的內容為 發:AT 收:OK 發:AT+CMGF=0 收:OK 發:AT+CMGS=25 收:> 發:addr+phone→ //→為傳送符(ctrl+z,十六進位制0x1A) 收:+CMGS: 54 OK 6、如果返回不是ERROR,恭喜你,傳送成功了 三、幾個要注意的問題 1、傳送的指令用0x0D結尾,注意不是通常認為的0x0D,0x0A。 特別是在傳送PDU簡訊的AT+CMGS=25命令時, 一定只能以0x0D結尾。 2、在傳送簡訊內容時,以0x1A(代表ctrl+Z的虛擬鍵值)結尾。 3、用AT+CMEE=1命令,可以在簡訊貓返回ERROR時帶上原因,這樣方便除錯。