Нет, вы не можете отправлять AT-команды таким образом. Начните с чтения V.250 (все главы 5) и спецификации 27.005 (команда AT + CMGS), ссылки находятся в tag info page. Эти документы научат вас многому в отношении обработки, синтаксиса и поведения AT-команд.
Худшая ошибка заключается в отправке командных строк AT без ожидания окончательного кода результата. Точно так же вы не будете писать HTTP-клиент, который полностью игнорирует ответы с HTTP-сервера, вам не следует отправлять AT-команды и полностью игнорировать ответы от модема.
И для AT+CMGS
команды вы должны ждать с не передавать данные смс полезной нагрузки до тех пор, после того, как вы получили префикс "\r\n> "
(см первую часть this answer для деталей).
Другие вещи, командные строки AT должны быть завершены только \r
, а не \r\n
. Это может быть проблемой при открытии и закрытии модемного устройства снова и снова, как перенаправление нескольких команд командной оболочки. Это полностью зависит от конкретного модема, и нет гарантии, что это будет работать надежно.
Для решения этих последних вопросов я написал программу 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).
Я категорически возражаю против закрытия этого вопроса как «непонятного, о чем вы спрашиваете». Вопрос, возможно, немного короток в тексте прозы, но присутствует требуемый инфомация. На самом деле вопрос действительно хорошо задан для нового пользователя. Он хорошо отформатирован, и Venkat искал значение ошибки 96 и включал описание. – hlovdal