2016-02-22 62 views
1
echo -ne "ATZ\r\n" > /dev/ttyUSB0 
echo -ne "AT+CMGF=1\r\n" > /dev/ttyUSB0 
echo -ne "AT+CMGS=\"888XXXXXXX\"\rhello\x1a\n" > /dev/ttyUSB0 

由於CMS ERROR-96用於強制信息丟失。獲取+ CMS錯誤:96雖然嘗試通過AT命令發送短信

+0

我強烈反對把這個問題作爲「不清楚你在問什麼」。這個問題在散文文本上可能有點不足,但所需的信息是存在的。事實上,這個問題實際上很適合新用戶。它的格式很好,Venkat查找了錯誤值96幷包含了描述。 – hlovdal

回答

0

不,您不能以這種方式發送AT命令。首先閱讀V.250(全部第五章)和27.005規範(AT + CMGS命令),鏈接位於tag info page。這些文檔將教你很多關於AT命令處理,語法和行爲的知識。

最糟糕的錯誤是發送AT命令行而不等待最終結果代碼。以同樣的方式,你不會寫一個完全忽略HTTP服務器響應的HTTP客戶端,你不應該發送AT命令並完全忽略來自調制解調器的響應。

而對你有發送短信的有效載荷數據,直到你收到了"\r\n> "前綴後(見this answer有關詳細信息,第一部分),以等待AT+CMGS命令。

其他東西,AT命令行應該只用\r而不是\r\n來終止。反覆打開和關閉調制解調器設備(如多個shell命令重定向)會導致問題。這完全取決於具體的調制解調器,並且不能保證這將可靠地工作。

爲了解決這些問題,我編寫了atinout程序,使得從命令行發送AT命令簡單可靠。前兩個AT命令可以被作爲

$ echo ATZ | atinout - /dev/ttyUSB0 - 
ATZ 
OK 
$ echo AT+CMGF=1 | atinout - /dev/ttyUSB0 - 
AT+CMGF=1 
OK 
$ 

或可替代

$ echo ATZ > commands.txt 
$ echo AT+CMGF=1 >> commands.txt 
$ atinout commands.txt /dev/ttyUSB0 output.txt 

但AT + CMGS我想你必須use expect爲是時間(在未來atinout將有一個伴侶程序專門用於發送AT + CMGS)。