ДА!Есть! Я это конечно не сам придумал(тут взял, http://podrugomu.com/node/1379 код) я так подозреваю я пару Enter'ов не отправил. =))) 3.45 часа прошли не впустую!
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // RX, TX
int i=0;
void setup() {
Serial.begin(9600); //Скорость порта для связи Arduino с компьютером
//Serial.println("Goodnight moon!");
mySerial.begin(9600); //Скорость порта для связи Arduino с GSM модулем
//mySerial.println("AT");
mySerial.print("AT+CMGF=1");
mySerial.print((char)13);
delay(100); // даём время на усваивание команды
mySerial.print("AT+CSCS=");
mySerial.print((char)34); // передача в порт символа "
mySerial.print("IRA");
mySerial.print((char)34); // передача в порт символа "
mySerial.print((char)13);
sendTextMessage();
}
void loop() {
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
mySerial.write(Serial.read());
}
void sendTextMessage() {
delay(1500);
// Устанавливаем адресата: телефонный номер в международном формате
mySerial.print("AT+CMGS="); // send the SMS the number
mySerial.print((char)34); // передача в порт символа "
mySerial.print("+79111111111"); // передача номера телефона
mySerial.print((char)34); // передача в порт символа "
mySerial.print((char)13);
delay(1500);
// \" - это enter?
mySerial.println("Ura!!!"); // передача текста сообщения
Купил SIM800L, подключил через DC-DC, ток 0,8-1А, пробовал напряжение от 3,8V до 4,2V подавать. Часто мигает в Сети не регистрируется, SIM - карта живая, модуль видит Операторов.
СИМКАРТУ!! ставить срезом уголка наружу!! короче шиворот навыворот, обычно в симдержателях срезанный уголок внутрь вставляют, а у этих китайцев - наоборот.
Питание 4,2V это максимум, и не от ардуины!!! Общий минус (земля) для SIM800L и ардуины. В коде после команды AT или ATZ ставь delay(20000); - надо дать время соединиться с сетью. Если симка без пина, то все нормально, если теле2 с пином 0000, тогда
"If your SIM card is locked with a PIN code, you will need to enter the pin before you can connect to a network via the 'AT+CPIN' command. For example if the pin is 1234 you need to enter 'AT+CPIN=0000"."
ну и снова delay(немного); . Ниже рабочий код, собирал с нескольких источников:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
void setup() {
Serial.begin(19200); //Скорость порта для связи Arduino с компьютером
Serial.println("Welcome"); // Вывести в апаратный порт "Arduino START OK"
Serial.println("Start 800L");
mySerial.begin(19200); //Скорость порта для связи Arduino с GSM модулем
mySerial.println("ATZ"); // АТ команда модему "ATZ" (програмный сброс)
//mySerial.println("AT");
delay(20000); // give time to log on to network!!!!
mySerial.println("AT+CMGDA=\"DEL ALL\""); // АТ команда модему , удалить все сообщения с sim карты
delay(500); // Пауза 0,5 секунды
mySerial.println("AT+CMGF=1\r"); // устанавливаем текстовый режим SMS (1 - включить, 0 - отключить)
delay(100);
mySerial.println("AT+CSCS=\"GSM\""); // selece TE character set - GMS 7-bit default alfabet
delay(100);
mySerial.println("AT+IFC=1,1"); //настройка SIM900 Serial bufer --- Контроль передачи данных, при "0", оключен обеими
delay(100);
mySerial.print("AT+CNMI=1,2,2,1,0");
//mySerial.println("AT+CNMI=1,2,0,0,0"); // Включить перехват SMS, перед этой командой должно быть "AT+CMGF=0" - Переход в PDU mode
delay(100);
Serial.println("Ready...");
smsa(String("System ready"),String("+7912XXXXXXX"));
mySerial.println("AT+CUSD=1,\"#100#\""); // запрос баланса
Serial.println("OK");
}
void loop() {
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
mySerial.write(Serial.read());
}
void smsa(String text, String phone) {
mySerial.print("AT+CMGS=\"");
mySerial.print(phone);
mySerial.println("\"");
delay(1000);
mySerial.print(text);
delay(500);
mySerial.write(0x1A);
mySerial.write(0x0D);
mySerial.write(0x0A);
Serial.println("Ready3...");
}
void ballance() {
//mySerial.println("AT+CUSD=1,\"#100#\""); //так
mySerial.println("ATD#100#"); // или так
Serial.println("Ready2...");
}
кто сталкивался, вставил симку в sim800 от теле2 , сигнал не находит что ли (часто мигает светодиод), а когда мегафон воткнул, перестал быстро мигать. читал про питание симки,может быть это? и как проверить?
в том то и дело , что напруга не прыгает 4.1 вольта , использую бп от компа , 12 вольт, понижающий шилд до 3 ампер, вот только SIM800 припаял штырьки которые были в комплекте, а на платку припаял колодки как на ардуинке, вроди эстетично... но говорите не надежно?
Hibernator что именно у Вас не получается? в интернете видил примеры попадались по FTP, но мне не особо итересно поэтому их пропускал, если более подробно опишите проблему возможно смогу подсказать что знаю.
И если не секрет, как хотите использовать FTP?
Я снова подыму вопрос по оператору Теле2, кто что может подсказать (самый дешовый на мой взгляд тариф) и к сожалению не работает. Получилось ли у кого подключить теле2 к модулю SIM800-900 ?
Пробовал, все работает на мегафоне отлично, и если отправляю запрос на поиск всех доступных сетей то как раз теле2 там нет, хотя на мобилке антена полная. Вот и пробовал 2 симкарты от теле 2 (сеть не находит)
Для пробы всё же попробую эти датчики, по их "поведению" будем делать выводы . А пока хотел бы вернуться к sim800. Неожиданно возникла проблемка. После того, как начал пробовать массовую отправку смс, у кого -то из нас что-то с крышей...:-) . После отправки смс пропали ответы от модуля типа +CMGS: 23, хотя смс получатель принимает. Иногда появляется плюсик...
----------------------------------
Send test-SMS na nomer 0553332211 with text- TEST
AT+CMGS="0553332211"
> TEST
+
--------------------------------
Пробую в терминалке AT-команды - на все команды вроде исправно откликается. Пробую отправить смс. Ввожу номер телефона, после появления знака приглашения > ввожу текст, пытаюсь завершить CTRL+Z ,а ничего не происходит, т.е. "закончить" смс не получается, так на приглашении и висит. Выйти могу только RST. Что бы это значило?
> AT+CMGS="0553332211"
>
Здравствуйте! Подскажите, пожалуйста, как решили проблему отправки СМС из терминала? Как завершить сообщение (ctrl+z)?
Baks, в каком диапазоне работает модуль? Теле2 работает только в сетях выше 2G. Т.е. в простой телефон, типа нокии 3210 если симку вставить, то она в нем работаь не будет, ибо он поддерживает 1G-2G, но не выше. Смотрите спецификацию на модуль.
Я вроде по этому поводу отписался. Проблемы оказались в размере входного буфера для приема данных, вот данные каким то образом урезались , увеличил размер - и всё поехало...
Nestor Mahno пишет:
Здравствуйте! Подскажите, пожалуйста, как решили проблему отправки СМС из терминала? Как завершить сообщение (ctrl+z)?
Я вроде по этому поводу отписался. Проблемы оказались в размере входного буфера для приема данных, вот данные каким то образом урезались , увеличил размер - и всё поехало...
Nestor Mahno пишет:
Здравствуйте! Подскажите, пожалуйста, как решили проблему отправки СМС из терминала? Как завершить сообщение (ctrl+z)?
Я если честно не понял, что это относится к проблеме отправки СМС. У меня буфер на максимуме. И я не совсем понимаю, как отправить "ctrl+z" в терминал.
Пытаюсь получить запрос по балансу на своем модуле. Приходит СМС, но в буфере вместо текста и цифр вот такая строка 003100390033002E003900340440002E (при этом смс с телефона модуль корректно отрабатывает и корректно отсылает смс обратно).
Методом научного тыка выяснил, что это ничто иное, как кодировка символов.
0031 - цифра 1, 0039 - цифра 9, 0033 - цифра 3, 002E - точка и т.д., т.е. в принципе пришло что нужно, только почему-то в закодированном виде (т.е. баланс на момент получения этого смс был что-то порядка 193.95 р.) Теперь вот не пойму, то ли переводить это безобразие каким-то образом в читабельный вид, то ли копать, почему в буфере такая фигня.
Пытаюсь получить запрос по балансу на своем модуле. Приходит СМС, но в буфере вместо текста и цифр вот такая строка 003100390033002E003900340440002E (при этом смс с телефона модуль корректно отрабатывает и корректно отсылает смс обратно).
Методом научного тыка выяснил, что это ничто иное, как кодировка символов
Передача SMS может идти в символьном режиме (только латинские символы) или в PDU (все остальные языки).
В твоем ответе как раз используется кириллица, поэтому ответ получен в PDU формате (кодировка Unicode UCS2)
Пытаюсь получить запрос по балансу на своем модуле. Приходит СМС, но в буфере вместо текста и цифр вот такая строка 003100390033002E003900340440002E (при этом смс с телефона модуль корректно отрабатывает и корректно отсылает смс обратно).
Методом научного тыка выяснил, что это ничто иное, как кодировка символов.
А зачем применять "глубокие научные реории", если есть пдфы на эти модули и там все эти моменты описаны?
Научный тык занял 5 минут. ПДЭФЫ на эти модули на агнлийском и размером листов в 50 мелкого текста. Лопатить пдф это конечно прекрасно и достойно, однако форум для того и существует, чтобы поделиться с ближним проблемой и, если эту проблему уже кто-то решал, или, как минимум, с ней сталкивался, то получить совет или нужное направление. И совет и нужное направление получил. Теперь буду дальше ковыряться.
Может этот код поможет. Спер его тут на форуме. У меня на меге работает. На 6 пин вешаем кнопку, по нажатию уходит СМС. Максимально 70 символов.
Номер телефона только свой установите в 22 строке.
Думаю код еще можно причесать, но не до этого было. расшифровать тоже думаю будет не проблема, но мне это не надо, поэтому не писал алгоритм, я управлять с помощью DTMF планирую.
Перерыл сегодня весь интернет, насколько мог. Но не смог найти адекватный код именно для перевода строки 003100390033002E003900340440002E в символы.
В С++ я, честно говоря, не очень, ткните носом, какой метод / функция может преобразовывать из кода ASCII в символ?
Разобрать строку на коды по четыре символа не пролема, но вот как эти 4 символа (0031) преобразовать в символ 1 (ну и двлее в цикле все остальные), я никак не допетрю..
ну и? теперь поняли, что лучше латиницу передавать и не морочится с кирилицей, которая еще и не на всех телефонах нормально отображается? с латиницей вообще ноль проблем.
Да я как бы особо насчет кириллицы не парился никогда. Читайте внимательно проблему: такая строка приходит при запроса баланса. И мне нужно перевести эту строку в читабельный вид, чтобы извлечь из нее сумму остатка денег, проанализировать и при достижении определенного порога уведомить об этом меня.
Попробуйте в запросе USSD первый символ # . Есть 2 варианта запроса USSD, начиная со * или с # . При первом варианте ответ приходит на русском, во втором - латиница ( если оператор поддерживает такой запрос).
ну напишите вы, будет программа. и тут оператор "что-то" у себя поменяет, или нужно будет симкарту иного оператора вставить, и что тогда? опять переписывать софт? имхо софт должен быть универсален. И универсальность дефакто - с латинскими символами.
alfik777, я с GSM модуля через СМС запрос отправляю.
А можно увидеть текст этого СМС - запрос баланса ?
GSM модуль, подключенный к ардуино, отправляет на номер 000100 пустое СМС. (если на этот номер отправить пустое СМС, то придет ответное сообщение от оепартора с указанием баланса сим-карты).
Текста запроса нет. Почитайте внимательно. Мне не нужно отправлять смс в кириллице. Мне нужно преобразовать коды ASCII в символы.
От оператора приходит набор кодов 003100390033002E003900340440002E что в переводе на символы означает 193,94р.
Short Circuit, Вы сами-то понимаете, о чем пишете?
При чем тут оператор, при чем тут сим карта? СМС приходят в двух форматах, либо латиницей либо в кодах ASCII (т.н. SMS-PDU), если есть хоть один не латинский символ в смс. Латиницу модуль и так читает распрекрасно. Универсальность и заключается втом, чтобы программно расшифровать PDU. А Вы ахинею какую-то несете.
Неужели на C++ нет функции или процедуры дял перевода кода символа в символ? Свою что ли писать?
Переводов множество, но специально для PDU нету конечно. Там каждый символ кодируется 4мя байтами. Нужно написать свой несложный декодер, например так
String message = "003100390033002E003900340440002E";
void setup()
{
Serial.begin(9600);
Serial.println(message);
char key = 0;
char* letter = "";
String decode = "";
long int lchar;
for (int i = 0; i < message.length(); i= i+4)
{
key = message.charAt(i+1);
letter[0] = message[i + 2];
letter[1] = message[i + 3];
letter[2] = 0;
lchar = strtol(letter,NULL,16);
Serial.println(letter);
// если вотрой символ в 4ке символов 0 значит латиница
if (key == '0')
{
decode = decode + char(lchar);
}
else
{ // иначе значит кирилица
decode = decode + char((lchar+128));
}
}
Serial.println(decode);
}
// the loop routine runs over and over again forever:
void loop() {
}
ПисАл на коленке, но думаю направление понятно. Я в сях тоже не силен, может есть более оптимальный алгоритм. И еще, в принципе в терминал у меня русский не выводится, на LCD тоже, там только латиница и китайские иероглифы. Поэтому с выводом русского могу ошибаться.
Может я, конечно, чего-то не понимаю, но может проще не изобретать велосипед? Почему нельзя использовать нормальный USSD- запрос и получить адекватный ответ типа ".... Vash balans 193,94 r." ?
А вообще карточку-то видит, PIN- kod проглатывает? Уровень сигнала какой? Ну и вообще - AT+CGATT?
ДА!Есть! Я это конечно не сам придумал(тут взял, http://podrugomu.com/node/1379 код) я так подозреваю я пару Enter'ов не отправил. =))) 3.45 часа прошли не впустую!
А вообще карточку-то видит, PIN- kod проглатывает? Уровень сигнала какой? Ну и вообще - AT+CGATT?
Видит, Pina не было, Tele2 игнорирует, на мегафоне экспериментирую.
Спасибо за ответы!=)
Помогите советом, куда рыть?
Купил SIM800L, подключил через DC-DC, ток 0,8-1А, пробовал напряжение от 3,8V до 4,2V подавать. Часто мигает в Сети не регистрируется, SIM - карта живая, модуль видит Операторов.
Спасибо.
А антенна есть?
А антенна есть?
Да, что была в поставке, не внешняя.
У меня так было с Теле2, тоже не ловил сеть, с мегафона все поймал...
СИМКАРТУ!! ставить срезом уголка наружу!! короче шиворот навыворот, обычно в симдержателях срезанный уголок внутрь вставляют, а у этих китайцев - наоборот.
фото модуля ниже.
Питание 4,2V это максимум, и не от ардуины!!! Общий минус (земля) для SIM800L и ардуины. В коде после команды AT или ATZ ставь delay(20000); - надо дать время соединиться с сетью. Если симка без пина, то все нормально, если теле2 с пином 0000, тогда
"If your SIM card is locked with a PIN code, you will need to enter the pin before you can connect to a network via the 'AT+CPIN' command. For example if the pin is 1234 you need to enter 'AT+CPIN=0000"."
ну и снова delay(немного); . Ниже рабочий код, собирал с нескольких источников:
максимум - 4,5в питание, еще выдержит, но наверное будет ругаться.
я подаю 4в от своего импульсного источника питания.
кто сталкивался, вставил симку в sim800 от теле2 , сигнал не находит что ли (часто мигает светодиод), а когда мегафон воткнул, перестал быстро мигать. читал про питание симки,может быть это? и как проверить?
при звонке проседает с 4,2 на 3,9 ??? значит в импульсе еще больше падает!!
выбросьте свой БП или тонкие провода от него(конактами не соединять!! все толкоо паять!!) - на помойку..
в том то и дело , что напруга не прыгает 4.1 вольта , использую бп от компа , 12 вольт, понижающий шилд до 3 ампер, вот только SIM800 припаял штырьки которые были в комплекте, а на платку припаял колодки как на ардуинке, вроди эстетично... но говорите не надежно?
может всетаки дело в симкарте или в пинкоде?
симкарту впихнули правильно? абонент в зоне?
да , стороной правильно вставлял. на мобике овит tele2 хоrошо
Ни кто, случаем, не мучал SIM800L для FTP?
Сколько не пытаюсь, не получается, может кто поможет?
Hibernator что именно у Вас не получается? в интернете видил примеры попадались по FTP, но мне не особо итересно поэтому их пропускал, если более подробно опишите проблему возможно смогу подсказать что знаю.
И если не секрет, как хотите использовать FTP?
Я снова подыму вопрос по оператору Теле2, кто что может подсказать (самый дешовый на мой взгляд тариф) и к сожалению не работает. Получилось ли у кого подключить теле2 к модулю SIM800-900 ?
Пост #59 пробовали?
Пробовал, все работает на мегафоне отлично, и если отправляю запрос на поиск всех доступных сетей то как раз теле2 там нет, хотя на мобилке антена полная. Вот и пробовал 2 симкарты от теле 2 (сеть не находит)
В чем причина может быть?
Для пробы всё же попробую эти датчики, по их "поведению" будем делать выводы . А пока хотел бы вернуться к sim800. Неожиданно возникла проблемка. После того, как начал пробовать массовую отправку смс, у кого -то из нас что-то с крышей...:-) . После отправки смс пропали ответы от модуля типа +CMGS: 23, хотя смс получатель принимает. Иногда появляется плюсик...
----------------------------------
Send test-SMS na nomer 0553332211 with text- TEST
AT+CMGS="0553332211"
> TEST
+
--------------------------------
Пробую в терминалке AT-команды - на все команды вроде исправно откликается. Пробую отправить смс. Ввожу номер телефона, после появления знака приглашения > ввожу текст, пытаюсь завершить CTRL+Z ,а ничего не происходит, т.е. "закончить" смс не получается, так на приглашении и висит. Выйти могу только RST. Что бы это значило?
> AT+CMGS="0553332211"
>
Здравствуйте! Подскажите, пожалуйста, как решили проблему отправки СМС из терминала? Как завершить сообщение (ctrl+z)?
Baks, в каком диапазоне работает модуль? Теле2 работает только в сетях выше 2G. Т.е. в простой телефон, типа нокии 3210 если симку вставить, то она в нем работаь не будет, ибо он поддерживает 1G-2G, но не выше. Смотрите спецификацию на модуль.
del
Я вроде по этому поводу отписался. Проблемы оказались в размере входного буфера для приема данных, вот данные каким то образом урезались , увеличил размер - и всё поехало...
Здравствуйте! Подскажите, пожалуйста, как решили проблему отправки СМС из терминала? Как завершить сообщение (ctrl+z)?
как прописать в скетче строку? :
компилятор чет ругается, не нравится ему два раза кавычки??
А так ?
как прописать в скетче строку? :
компилятор чет ругается, не нравится ему два раза кавычки??
о, так похоже ОК, спасибо.
если еще кто подскажет - не могу второй день найти ат команду (мне казалось она есть)
чтобы при входящем звонке и записаным этим номером на симкарту - отображалось что номер есть на симкарте?
или ссылку с прмерами, может есть такая, еще раз спасибо.
Я вроде по этому поводу отписался. Проблемы оказались в размере входного буфера для приема данных, вот данные каким то образом урезались , увеличил размер - и всё поехало...
Здравствуйте! Подскажите, пожалуйста, как решили проблему отправки СМС из терминала? Как завершить сообщение (ctrl+z)?
Я если честно не понял, что это относится к проблеме отправки СМС. У меня буфер на максимуме. И я не совсем понимаю, как отправить "ctrl+z" в терминал.
Всем доброго дня!
Пользую бибилиотеку SIM900.
Пытаюсь получить запрос по балансу на своем модуле. Приходит СМС, но в буфере вместо текста и цифр вот такая строка 003100390033002E003900340440002E (при этом смс с телефона модуль корректно отрабатывает и корректно отсылает смс обратно).
Методом научного тыка выяснил, что это ничто иное, как кодировка символов.
0031 - цифра 1, 0039 - цифра 9, 0033 - цифра 3, 002E - точка и т.д., т.е. в принципе пришло что нужно, только почему-то в закодированном виде (т.е. баланс на момент получения этого смс был что-то порядка 193.95 р.) Теперь вот не пойму, то ли переводить это безобразие каким-то образом в читабельный вид, то ли копать, почему в буфере такая фигня.
Кто-нибудь сталкивался с такой ситуацией?
Пытаюсь получить запрос по балансу на своем модуле. Приходит СМС, но в буфере вместо текста и цифр вот такая строка 003100390033002E003900340440002E (при этом смс с телефона модуль корректно отрабатывает и корректно отсылает смс обратно).
Методом научного тыка выяснил, что это ничто иное, как кодировка символов
Передача SMS может идти в символьном режиме (только латинские символы) или в PDU (все остальные языки).
В твоем ответе как раз используется кириллица, поэтому ответ получен в PDU формате (кодировка Unicode UCS2)
Вот тут почитай теории:
http://hardisoft.ru/soft/samodelkin-soft/otpravka-sms-soobshhenij-v-formate-pdu-teoriya-s-primerami-na-c-chast-1/
Онлайн калькулятор PDU - http://smspdu.benjaminerhart.com/
Декодирует твой ответ "003100390033002E003900340440002E" как "193.94р."
Кто-нибудь сталкивался с такой ситуацией?
Да это именно PDU. Как только в тексте SMS попадется не латинский символ, SMS сразу кодится в PDU.
Отправка SMS с русскими символами тоже должна производится в PDU кодировке.
Выше все ссылки уже приведены. И на декодеры и на доку.
Skvo, спасибо, дружище!!!!
Получается, что если нужно отправлять и получать СМС в кириллице, то нужно для отправки закодировать, а при получении раскодировать. Так?
Всем доброго дня!
Пользую бибилиотеку SIM900.
Пытаюсь получить запрос по балансу на своем модуле. Приходит СМС, но в буфере вместо текста и цифр вот такая строка 003100390033002E003900340440002E (при этом смс с телефона модуль корректно отрабатывает и корректно отсылает смс обратно).
Методом научного тыка выяснил, что это ничто иное, как кодировка символов.
А зачем применять "глубокие научные реории", если есть пдфы на эти модули и там все эти моменты описаны?
Научный тык занял 5 минут. ПДЭФЫ на эти модули на агнлийском и размером листов в 50 мелкого текста. Лопатить пдф это конечно прекрасно и достойно, однако форум для того и существует, чтобы поделиться с ближним проблемой и, если эту проблему уже кто-то решал, или, как минимум, с ней сталкивался, то получить совет или нужное направление. И совет и нужное направление получил. Теперь буду дальше ковыряться.
Может этот код поможет. Спер его тут на форуме.
У меня на меге работает. На 6 пин вешаем кнопку, по нажатию уходит СМС. Максимально 70 символов.
Номер телефона только свой установите в 22 строке.
Думаю код еще можно причесать, но не до этого было. расшифровать тоже думаю будет не проблема, но мне это не надо, поэтому не писал алгоритм, я управлять с помощью DTMF планирую.
Andrey12, спасибо за код.
Перерыл сегодня весь интернет, насколько мог. Но не смог найти адекватный код именно для перевода строки 003100390033002E003900340440002E в символы.
В С++ я, честно говоря, не очень, ткните носом, какой метод / функция может преобразовывать из кода ASCII в символ?
Разобрать строку на коды по четыре символа не пролема, но вот как эти 4 символа (0031) преобразовать в символ 1 (ну и двлее в цикле все остальные), я никак не допетрю..
ну и? теперь поняли, что лучше латиницу передавать и не морочится с кирилицей, которая еще и не на всех телефонах нормально отображается? с латиницей вообще ноль проблем.
Да я как бы особо насчет кириллицы не парился никогда. Читайте внимательно проблему: такая строка приходит при запроса баланса. И мне нужно перевести эту строку в читабельный вид, чтобы извлечь из нее сумму остатка денег, проанализировать и при достижении определенного порога уведомить об этом меня.
звоните оператору, и просите присылать ответ в латинице... и делов то.. или спрашиваете другой юссд код который отвечает в латинице.
скажите что ваш телефон видит в ответ кракозяблы..
Попробуйте в запросе USSD первый символ # . Есть 2 варианта запроса USSD, начиная со * или с # . При первом варианте ответ приходит на русском, во втором - латиница ( если оператор поддерживает такой запрос).
alfik777, я с GSM модуля через СМС запрос отправляю.
Неужели на C++ нет функции или процедуры дял перевода кода символа в символ? Свою что ли писать?
alfik777, я с GSM модуля через СМС запрос отправляю.
ну напишите вы, будет программа. и тут оператор "что-то" у себя поменяет, или нужно будет симкарту иного оператора вставить, и что тогда? опять переписывать софт? имхо софт должен быть универсален. И универсальность дефакто - с латинскими символами.
alfik777, я с GSM модуля через СМС запрос отправляю.
GSM модуль, подключенный к ардуино, отправляет на номер 000100 пустое СМС. (если на этот номер отправить пустое СМС, то придет ответное сообщение от оепартора с указанием баланса сим-карты).
Текста запроса нет. Почитайте внимательно. Мне не нужно отправлять смс в кириллице. Мне нужно преобразовать коды ASCII в символы.
От оператора приходит набор кодов 003100390033002E003900340440002E что в переводе на символы означает 193,94р.
Short Circuit, Вы сами-то понимаете, о чем пишете?
При чем тут оператор, при чем тут сим карта? СМС приходят в двух форматах, либо латиницей либо в кодах ASCII (т.н. SMS-PDU), если есть хоть один не латинский символ в смс. Латиницу модуль и так читает распрекрасно. Универсальность и заключается втом, чтобы программно расшифровать PDU. А Вы ахинею какую-то несете.
я знаю, что смс приходит в таких форматах.
нет, ну если вам так удобнее и интереснее - то я не против, делайте как считаете для себя нужным, нет проблем.
можно уточнить какие вы АТ команды модулю даете для принятия текстового формата ответа в смс, и какой модуль используете: 590й или 800й ?
См. пост #78
AT команды я вообще не использую.
AT команды я вообще не использую.
А как же Вы управляете модулем ,как отправляете СМС?
Я использую библиотеку SIM900.
отправка например происходит простой командой (с синтаксисом могу напутать, ардуино нет под рукой, но суть такова)
SMS.sendSMS ("номер телефона", "текст сообщения");
Неужели на C++ нет функции или процедуры дял перевода кода символа в символ? Свою что ли писать?
Переводов множество, но специально для PDU нету конечно. Там каждый символ кодируется 4мя байтами. Нужно написать свой несложный декодер, например так
ПисАл на коленке, но думаю направление понятно. Я в сях тоже не силен, может есть более оптимальный алгоритм. И еще, в принципе в терминал у меня русский не выводится, на LCD тоже, там только латиница и китайские иероглифы. Поэтому с выводом русского могу ошибаться.
Может я, конечно, чего-то не понимаю, но может проще не изобретать велосипед? Почему нельзя использовать нормальный USSD- запрос и получить адекватный ответ типа ".... Vash balans 193,94 r." ?