Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Отправка СМС через ATmega164
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Сотовая связь и ее приложения
KIG
Здравствуйте.
Пытаюсь написать программу на С++ для AVR микроконтроллера, которая будет отправлять СМС через GSM модем. СМС отправляю в PDU режиме. Для этого требуется специальная кодировка. Может у кого-нибудь есть пример (исходник) функции по отправке СМС, формирующий кодовую посылку в модем, который можно взять за образец. Заранее спасибо.
chief_olimp
В какой кодировке собираетесь отправлять текст? где он хранится? Откуда номера? Наверное правильнее написать программу самому а что не понятно - спросить. Например можно воспользоваться програмой SiMoCo (для Siemens) что бы отследить данные отправляемые на телефон. Или программой PDUSpy для формирования и расшифровки СМС.
Для затравки PDU
KIG
Конкретно меня интересует компактный код, позволяющий преобразовать данные из массива типа char в pdu строку. Мне подошел бы любой образец.
shb
Цитата(Baser @ Dec 28 2008, 21:55) *
Но везде подходить творчески могут быть ошибки как здесь. При описании Поля SCA (поле адрес сервисного центра) фраза
Цитата
Длина адреса определяется, как количество цифр в номере! В это количество входят только цифры, то есть ни знак + для международного номера, ни дополняющий до четного количества символ F (см. ниже) цифрами НЕ являются и в длину не входят!
относится не к этому полю а к Полям ОА (адрес источника) и DA (адрес приемника). В первом же случае длина это количество байт (не цифр) вместе с типом номера SC и добавленного символа F (он для того и добавляется чтобы при нечетном количестве цифр номера получить целый байт).
MiklPolikov
Пытаюсь отправить СМС .

Говорю 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
Читал SIM300_AN_V1.2RUS.pdf? Там всё популярно описано.
MiklPolikov
Цитата(PIC_Embedder @ Jan 3 2009, 19:32) *
Читал SIM300_AN_V1.2RUS.pdf? Там всё популярно описано.


А где его взять ?
Поисковики на SIM300_AN вообще ничего не находят.
Киньте на мыло 3_141592@mail.ru

Спасибо !
PIC_Embedder
Взял с сайта Гаммы. Лучше здесь выложу, может ещё кому-то пригодится.
MiklPolikov
Делаю вроде бы всё как в SIM300_AN_V1.2RUS.pdf

AT+CMGS="+79055314063"
0x0D //это ENTER
>
HELLO
0x1A //это CTRL+Z


Sim300 отвечает ERROR . Что неправильно ?
Спасибо !
M_Z
Цитата(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" // устанавливаю кодировку юникод (Это из Вашего предыдущего топика)
то слать в него нужно в юникоде.
rvk
Модем может быть не зарегистрирован, покажите полный лог с терминала, без комментариев.
Желательно его реакцию на команды AT+CREG и AT+CSQ, а также настройки оператора
SMS, может номер сервис центра не введен, дайте расширенную диагностику этого ERROR
при помощи AT+CMEE и AT+CEER команд

http://www.marlix.ir/PDFs/SIM300_ATC_V1.06.pdf
MiklPolikov
Рассказываю подробно :

После включения питания и отправки
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
что отвечает на "AT+CMGF?" ?
MiklPolikov
Цитата(chief_olimp @ Jan 11 2009, 14:53) *
что отвечает на "AT+CMGF?" ?


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


Было установлено IRA , поменял на GSM , всё равно СМС пустая приходит
chief_olimp
проверьте что посылаете побитно прогой COMPUMP например. Может что и прояснится. Еще раз перечитайте SIM300_AN_V1.2RUS.pdf
MiklPolikov
Цитата(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
У меня работает с терминала.

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
Цитата(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
ответ выше
Палыч
Цитата(MiklPolikov @ Jan 11 2009, 18:43) *
Вопрос : ENTER после ввода телефона - это 0x0D или 0x0D 0x0A ?
АТ команды заканчиваются вводом символа с кодом 0x0D, если вопрос был про это...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.