Полная версия этой страницы:
Отправка СМС через ATmega164
Здравствуйте.
Пытаюсь написать программу на С++ для AVR микроконтроллера, которая будет отправлять СМС через GSM модем. СМС отправляю в PDU режиме. Для этого требуется специальная кодировка. Может у кого-нибудь есть пример (исходник) функции по отправке СМС, формирующий кодовую посылку в модем, который можно взять за образец. Заранее спасибо.
chief_olimp
Dec 28 2008, 14:11
В какой кодировке собираетесь отправлять текст? где он хранится? Откуда номера? Наверное правильнее написать программу самому а что не понятно - спросить. Например можно воспользоваться програмой SiMoCo (для Siemens) что бы отследить данные отправляемые на телефон. Или программой PDUSpy для формирования и расшифровки СМС.
Для затравки
PDU
Конкретно меня интересует компактный код, позволяющий преобразовать данные из массива типа char в pdu строку. Мне подошел бы любой образец.
chief_olimp
Dec 28 2008, 14:57
Цитата(Baser @ Dec 28 2008, 21:55)

Но везде подходить творчески могут быть ошибки как здесь. При описании Поля SCA (поле адрес сервисного центра) фраза
Цитата
Длина адреса определяется, как количество цифр в номере! В это количество входят только цифры, то есть ни знак + для международного номера, ни дополняющий до четного количества символ F (см. ниже) цифрами НЕ являются и в длину не входят!
относится не к этому полю а к Полям ОА (адрес источника) и DA (адрес приемника). В первом же случае длина это количество байт (не цифр) вместе с типом номера SC и добавленного символа F (он для того и добавляется чтобы при нечетном количестве цифр номера получить целый байт).
MiklPolikov
Jan 3 2009, 16:19
Пытаюсь отправить СМС .
Говорю SIM300 :
AT+CSCS="UCS2" // устанавливаю кодировку юникод
AT+CMGF=1 // устанавливаю текстовый режим
AT+CSMP=17,167,0,25 //устанавливаю параметры текстового режима
// + 7 9 0 5 5 3 1 4 0 6 3 телефон в юникод
AT+CMGS="002B00370039003000350035003300310034003000360033"<HELLOW
На последнюю строчку SIM300 отвечает ошибка Operation not allowed
Почему ?
Спасибо !
PIC_Embedder
Jan 3 2009, 16:32
Читал SIM300_AN_V1.2RUS.pdf? Там всё популярно описано.
MiklPolikov
Jan 3 2009, 16:44
Цитата(PIC_Embedder @ Jan 3 2009, 19:32)

Читал SIM300_AN_V1.2RUS.pdf? Там всё популярно описано.
А где его взять ?
Поисковики на SIM300_AN вообще ничего не находят.
Киньте на мыло 3_141592@mail.ru
Спасибо !
PIC_Embedder
Jan 3 2009, 16:51
Взял с сайта Гаммы. Лучше здесь выложу, может ещё кому-то пригодится.
MiklPolikov
Jan 10 2009, 16:12
Делаю вроде бы всё как в SIM300_AN_V1.2RUS.pdf
AT+CMGS="+79055314063"
0x0D //это ENTER
>
HELLO
0x1A //это CTRL+Z
Sim300 отвечает ERROR . Что неправильно ?
Спасибо !
Цитата(MiklPolikov @ Jan 10 2009, 19:12)

Делаю вроде бы всё как в SIM300_AN_V1.2RUS.pdf
AT+CMGS="+79055314063"
0x0D //это ENTER
>
HELLO
0x1A //это CTRL+Z
Sim300 отвечает ERROR . Что неправильно ?
Спасибо !
Если Вы программируете модем в юникоде,
AT+CSCS="UCS2" // устанавливаю кодировку юникод (Это из Вашего предыдущего топика)
то слать в него нужно в юникоде.
Модем может быть не зарегистрирован, покажите полный лог с терминала, без комментариев.
Желательно его реакцию на команды AT+CREG и AT+CSQ, а также настройки оператора
SMS, может номер сервис центра не введен, дайте расширенную диагностику этого ERROR
при помощи AT+CMEE и AT+CEER команд
http://www.marlix.ir/PDFs/SIM300_ATC_V1.06.pdf
MiklPolikov
Jan 11 2009, 11:28
Рассказываю подробно :
После включения питания и отправки
AT+CMGS="+79055314063"
0x0D
>
HELLO
0x1A
SIM300 отвечает
+CMS ERROR: 517
На все последующие попытки отправить смс получаю ответ
ERROR ERROR
После попытки отправить смс отправляю AT+CMEE? получаю
+CMEE: 1 OK
Если отправляю AT+CEER получаю
+ СEE: No cause was given OK
На AT+CSQ отвечает
+CSQ:21,0 OK
На AT+CREG? отвечает
+CREG: 0,1 OK
С входящими и исходящими звонками проблем нет
chief_olimp
Jan 11 2009, 11:53
что отвечает на "AT+CMGF?" ?
MiklPolikov
Jan 11 2009, 12:11
Цитата(chief_olimp @ Jan 11 2009, 14:53)

что отвечает на "AT+CMGF?" ?
Спасибо ! Переключился в text mode и СМС стали отправлятся . Но на нелефон приходит не слово HELO а просто пустая строка , как будто пробел отправили. Почему так ?
chief_olimp
Jan 11 2009, 12:29
поройтесь в командах по моему у вас выставлена другая кодировка. txt mode работает только с 7 битными символами если я не ошибаюсь. По умолчанию у меня работало. Может у вас UCS2 установлено например
MiklPolikov
Jan 11 2009, 12:47
Цитата(chief_olimp @ Jan 11 2009, 15:29)

поройтесь в командах по моему у вас выставлена другая кодировка. txt mode работает только с 7 битными символами если я не ошибаюсь. По умолчанию у меня работало. Может у вас UCS2 установлено например
Было установлено IRA , поменял на GSM , всё равно СМС пустая приходит
chief_olimp
Jan 11 2009, 13:11
проверьте что посылаете побитно прогой COMPUMP например. Может что и прояснится. Еще раз перечитайте SIM300_AN_V1.2RUS.pdf
MiklPolikov
Jan 11 2009, 14:13
Цитата(chief_olimp @ Jan 11 2009, 16:11)

проверьте что посылаете побитно прогой COMPUMP например. Может что и прояснится. Еще раз перечитайте SIM300_AN_V1.2RUS.pdf
Я не с компьютера это делаю.
Вот что интересно :
Отправляю сейчас в юникоде
AT+CMGS="002B00370039003000350035003300310034003000360033"
0x0D
>
041a043e043e044004340438043d04300442044b
0x1A
Должно прийти слово "коордтнаты", а приходит "A C D"
То есть номер в юникоде передаётся правильно, а текст -нет.
Если отправить 041a придёт A вместо русской К
chief_olimp
Jan 11 2009, 14:46
У меня работает с терминала.
AT+CMGF=1(0x0D)(0x0A)
OK
AT+CSCS="UCS2"(0x0D)(0x0A)
OK
AT+CSMP=17,167,0,25(0x0D)(0x0A)
OK
AT+CMGS="002B003X003X003X003X003X003X003X003X003X003X003X003X"(0x0D)(0x0A) Х - подмена цифры
>
041F0420041E041204150420041A0410002004210412042F04170418(0x1A) (текст "ПРОВЕРКА СВЯЗИ")
+CMGS: 158
OK
MiklPolikov
Jan 11 2009, 15:43
Цитата(chief_olimp @ Jan 11 2009, 17:46)

У меня работает с терминала.
AT+CMGF=1(0x0D)(0x0A)
OK
AT+CSCS="UCS2"(0x0D)(0x0A)
OK
AT+CSMP=17,167,0,25(0x0D)(0x0A)
OK
AT+CMGS="002B003X003X003X003X003X003X003X003X003X003X003X003X"(0x0D)(0x0A) Х - подмена цифры
>
041F0420041E041204150420041A0410002004210412042F04170418(0x1A) (текст "ПРОВЕРКА СВЯЗИ")
+CMGS: 158
OK
У меня работает , если всё сдвинуть на 4 бита влево.
Т.е что бы передать "ПРОВЕРКА СВЯЗИ" нужно 41F0420041E041204150420041A0410002004210412042F04170418 , без нолика вначале.
Вопрос : ENTER после ввода телефона - это 0x0D или 0x0D 0x0A ?
chief_olimp
Jan 11 2009, 16:03
ответ выше
Цитата(MiklPolikov @ Jan 11 2009, 18:43)

Вопрос : ENTER после ввода телефона - это 0x0D или 0x0D 0x0A ?
АТ команды заканчиваются вводом символа с кодом 0x0D, если вопрос был про это...
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.