SIM800L mini

alfik777
alfik777 аватар
Offline
Зарегистрирован: 29.06.2015

 А вообще карточку-то видит, PIN- kod проглатывает? Уровень сигнала какой? Ну и вообще -   AT+CGATT?
 

kipkap
Offline
Зарегистрирован: 18.01.2016

ДА!Есть! Я это конечно не сам придумал(тут взял, 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!!!"); // передача текста сообщения
   delay(500);
   mySerial.print((char)26); // передача ^Z
   mySerial.print((char)13);
    }
kipkap
Offline
Зарегистрирован: 18.01.2016

alfik777 пишет:

 А вообще карточку-то видит, PIN- kod проглатывает? Уровень сигнала какой? Ну и вообще -   AT+CGATT?
 

Видит, Pina не было, Tele2 игнорирует, на мегафоне экспериментирую.

Спасибо за ответы!=)

Hibernator
Offline
Зарегистрирован: 18.10.2015

Помогите советом, куда рыть?

Купил SIM800L, подключил через DC-DC, ток 0,8-1А, пробовал напряжение от 3,8V до 4,2V подавать. Часто мигает в Сети не регистрируется, SIM - карта живая, модуль видит Операторов.

Спасибо. 

kipkap
Offline
Зарегистрирован: 18.01.2016

А антенна есть?

Hibernator
Offline
Зарегистрирован: 18.10.2015

kipkap пишет:

А антенна есть?

Да, что была в поставке, не внешняя.

kipkap
Offline
Зарегистрирован: 18.01.2016

У меня так было с Теле2, тоже не ловил сеть, с мегафона все поймал... 

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

СИМКАРТУ!! ставить срезом уголка наружу!! короче шиворот навыворот, обычно в симдержателях срезанный уголок внутрь вставляют, а у этих китайцев - наоборот.

фото модуля ниже.

LarryLost
Offline
Зарегистрирован: 13.12.2014

Питание 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...");
}

 

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

 максимум - 4,5в питание, еще выдержит, но наверное будет ругаться.

я подаю 4в от своего импульсного источника питания.

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

кто сталкивался, вставил симку в sim800  от теле2 , сигнал не находит что ли   (часто мигает светодиод),  а когда мегафон воткнул, перестал быстро мигать. читал про питание симки,может быть это? и как проверить?

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

при звонке проседает с 4,2 на 3,9 ???  значит в импульсе еще больше падает!!

выбросьте свой БП или  тонкие провода от него(конактами не соединять!! все толкоо паять!!)  - на помойку..

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

в том то и дело , что напруга не прыгает 4.1 вольта , использую бп от компа , 12 вольт, понижающий шилд до 3 ампер, вот только SIM800 припаял штырьки которые были в комплекте, а на платку припаял колодки как на ардуинке, вроди эстетично... но говорите не надежно?

может всетаки дело в симкарте или в пинкоде?

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

симкарту впихнули правильно? абонент в зоне?

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

да , стороной правильно вставлял. на мобике овит tele2 хоrошо

Hibernator
Offline
Зарегистрирован: 18.10.2015

Ни кто, случаем, не мучал SIM800L для FTP?

Сколько не пытаюсь, не получается, может кто поможет?

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

Hibernator что именно у Вас не получается? в интернете видил примеры попадались по FTP, но мне не особо итересно поэтому их пропускал, если более подробно опишите проблему возможно смогу подсказать что знаю.

И если не секрет, как хотите использовать FTP?

Я снова подыму вопрос по оператору Теле2, кто что может подсказать (самый дешовый на мой взгляд тариф) и к сожалению не работает. Получилось ли у кого подключить теле2 к модулю SIM800-900 ?

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Пост #59 пробовали?

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

Пробовал, все работает на мегафоне отлично, и если отправляю запрос на поиск всех доступных сетей то как раз теле2 там нет, хотя на мобилке антена полная.  Вот и пробовал 2 симкарты от теле 2 (сеть не находит)

В чем причина может быть?

Nestor Mahno
Offline
Зарегистрирован: 03.10.2015

alfik777 пишет:

Для пробы всё же попробую эти датчики, по их "поведению"  будем делать  выводы . А пока хотел бы вернуться к 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)?

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Baks, в каком диапазоне работает модуль? Теле2 работает только в сетях выше 2G. Т.е. в простой телефон, типа нокии 3210 если симку вставить, то она в нем работаь не будет, ибо он поддерживает 1G-2G, но не выше. Смотрите спецификацию на модуль.

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

del

alfik777
alfik777 аватар
Offline
Зарегистрирован: 29.06.2015

Я вроде по этому поводу отписался. Проблемы оказались в размере входного буфера для приема данных, вот данные  каким то образом урезались , увеличил размер - и  всё поехало...

Nestor Mahno пишет:

Здравствуйте! Подскажите, пожалуйста, как решили проблему отправки СМС из терминала? Как завершить сообщение (ctrl+z)?

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

как прописать в скетче строку? :

gsm.println("AT+CSCS="GSM"")

компилятор чет ругается, не нравится ему два раза кавычки??

 

alfik777
alfik777 аватар
Offline
Зарегистрирован: 29.06.2015

А так  ?

gsm.println("AT+CSCS=\"GSM\"")

Short Circuit пишет:

как прописать в скетче строку? :

gsm.println("AT+CSCS="GSM"")

компилятор чет ругается, не нравится ему два раза кавычки??

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

о, так похоже ОК, спасибо.

 

если еще кто подскажет - не могу второй день найти ат команду (мне казалось она есть)

чтобы при входящем звонке и записаным этим номером на симкарту - отображалось что номер есть на симкарте?

или ссылку с прмерами, может есть  такая, еще раз спасибо.

Nestor Mahno
Offline
Зарегистрирован: 03.10.2015

alfik777 пишет:

Я вроде по этому поводу отписался. Проблемы оказались в размере входного буфера для приема данных, вот данные  каким то образом урезались , увеличил размер - и  всё поехало...

Nestor Mahno пишет:

Здравствуйте! Подскажите, пожалуйста, как решили проблему отправки СМС из терминала? Как завершить сообщение (ctrl+z)?

Я если честно не понял, что это относится к проблеме отправки СМС. У меня буфер на максимуме. И я не совсем понимаю, как отправить "ctrl+z" в терминал.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Всем доброго дня!

Пользую бибилиотеку SIM900.

Пытаюсь получить запрос по балансу на своем модуле. Приходит СМС, но в буфере вместо текста и цифр вот такая строка 003100390033002E003900340440002E (при этом смс с телефона модуль корректно отрабатывает и корректно отсылает смс обратно).

Методом научного тыка выяснил, что это ничто иное, как кодировка символов.

0031 - цифра 1, 0039 - цифра 9, 0033 - цифра 3, 002E - точка  и т.д., т.е. в принципе пришло что нужно, только почему-то в закодированном виде (т.е. баланс на момент получения этого смс был что-то порядка 193.95 р.) Теперь вот не пойму, то ли переводить это безобразие каким-то образом в читабельный вид, то ли копать, почему в буфере такая фигня.

Кто-нибудь сталкивался с такой ситуацией?

Skvo
Offline
Зарегистрирован: 13.03.2016

dr.lmg пишет:

Пытаюсь получить запрос по балансу на своем модуле. Приходит СМС, но в буфере вместо текста и цифр вот такая строка 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/

 

dr.lmg пишет:
(т.е. баланс на момент получения этого смс был что-то порядка 193.95 р.)

Онлайн калькулятор PDU - http://smspdu.benjaminerhart.com/

Декодирует твой ответ "003100390033002E003900340440002E" как "193.94р."

 

 

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

dr.lmg пишет:

Кто-нибудь сталкивался с такой ситуацией?

Да это именно PDU. Как только в тексте SMS попадется не латинский символ, SMS сразу кодится в PDU.

Отправка SMS  с русскими символами тоже должна производится в PDU кодировке.

Выше все ссылки уже приведены. И на декодеры и на доку.

 

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Skvo, спасибо, дружище!!!!

Получается, что если нужно отправлять и получать СМС в кириллице, то нужно для отправки закодировать, а при получении раскодировать. Так?

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

dr.lmg пишет:

Всем доброго дня!

Пользую бибилиотеку SIM900.

Пытаюсь получить запрос по балансу на своем модуле. Приходит СМС, но в буфере вместо текста и цифр вот такая строка 003100390033002E003900340440002E (при этом смс с телефона модуль корректно отрабатывает и корректно отсылает смс обратно).

Методом научного тыка выяснил, что это ничто иное, как кодировка символов.

А зачем применять "глубокие научные реории", если есть пдфы на эти модули  и там все эти моменты описаны?

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Научный тык занял 5 минут. ПДЭФЫ на эти модули на агнлийском и размером листов в 50 мелкого текста. Лопатить пдф это конечно прекрасно и достойно, однако форум для того и существует, чтобы поделиться с ближним проблемой и, если эту проблему уже кто-то решал, или, как минимум, с ней сталкивался, то получить совет или нужное направление. И совет и нужное направление получил. Теперь буду дальше ковыряться.

 

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

Может этот код поможет. Спер его тут на форуме. 
У меня на меге работает. На 6 пин вешаем кнопку, по нажатию уходит СМС. Максимально 70 символов.
Номер телефона только свой установите в 22 строке.
Думаю код еще можно причесать, но не до этого было. расшифровать тоже думаю будет не проблема, но мне это не надо, поэтому не писал алгоритм, я управлять с помощью DTMF планирую.


// на 6 пин вешаем кнопку одним контактом, другим контактом кнопку вешаем на землю.
int btnPin = 6;
boolean prevBtn = HIGH;

void setup()
{
  Serial.begin(115200);
  Serial1.begin(115200);
  delay(500);

  pinMode(btnPin, INPUT);
  digitalWrite(btnPin, HIGH);
}

void loop()
{
  boolean currBtn = digitalRead(btnPin);

  if (prevBtn != currBtn && currBtn == LOW) {

  // МАКСИМАЛЬНО 70 СИМВОЛОВ
    SendPDUSMS("+7xxxxxxxxxx", "абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвг");
  }
  prevBtn = currBtn;
  delay(100);
}

String SendPDUSMS(String phone_nr, String message) {
  char commandPDU[32];
  char dataPDU[320];
  byte original_byte, newbyte;
  String SMSmessage, phone, preffix, newphone_nr, comm1, comm2 ;
  int pdu_length, counter, numlength;

  // не забываем при инциализации модема, сказать ему, что будем работать с PDU AT+CMGF=0
  Serial1.print("AT+CMGF=0\r");
  delay(200);

  Serial.print("Send message: "); Serial.print(message); Serial.print(" to number: "); Serial.println(phone_nr);
  numlength = phone_nr.length() - 1; if (numlength % 2 != 0 ) {
    phone_nr += "F";
  }
  for (int x = 0; x < numlength; x = x + 2) {
    newphone_nr.concat(phone_nr.charAt(x + 2));
    newphone_nr.concat(phone_nr.charAt(x + 1));
  }
  int textlength = 0;
  for (int j = 0; j < message.length(); j++) {
    original_byte = message.charAt(j);
    if (bitRead(7, original_byte) == 0) {
      textlength++;
    } else {
      j++;
      textlength++;
    } textlength++;
  }
  if (numlength % 2 != 0) {
    pdu_length = (8 + (numlength + 1) / 2 + textlength);
  } else {
    pdu_length = (8 + numlength / 2 + textlength);
  }
  comm1 = String("AT+CMGS=") + int(pdu_length - 1);
  comm1.toCharArray(commandPDU, 32);
  Serial1.println(commandPDU);
  Serial.println(commandPDU);
  delay(1000);
  //Serial.println(commandPDU);
  //SerialTO();
  int msgtmp = textlength;
  comm2 = String("0001000B");
  comm2 = comm2 + String("91") + String(newphone_nr) + String("0008");
  if (msgtmp < 16) {
    comm2 = comm2 + String("0");
  }
  comm2 = comm2 + String(msgtmp, HEX);
  for (int j = 0; j < message.length(); j++) {
    original_byte = message.charAt(j);
    if (bitRead(7, original_byte) == 0) {
      preffix = "00";
      newbyte = original_byte;
    } else {
      preffix = "04"; j++; original_byte = message.charAt(j);
      if ( original_byte < 144 ) {
        newbyte = original_byte - 64;
      } else {
        newbyte = original_byte - 128;
      }
    }
    comm2 = comm2 + String(preffix);
    if (newbyte < 16) {
      comm2 = comm2 + String("0");
    }
    comm2 = comm2 + String(newbyte, HEX);
  }
  comm2.toUpperCase();
  comm2.toCharArray(dataPDU, 320);
  Serial1.print(dataPDU);
  delay(200);
  Serial1.write((char)26);
  Serial.println(dataPDU);
}
dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Andrey12, спасибо за код.

Перерыл сегодня весь интернет, насколько мог. Но не смог найти адекватный код именно для перевода строки 003100390033002E003900340440002E в символы.

В С++ я, честно говоря, не очень, ткните носом, какой метод / функция может преобразовывать из кода ASCII в символ?

Разобрать строку на коды по четыре символа  не пролема, но вот как эти 4 символа (0031) преобразовать в символ 1 (ну и двлее в цикле все остальные), я никак не допетрю..

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

ну и?  теперь поняли, что лучше латиницу передавать и не морочится с кирилицей, которая еще и не на всех телефонах нормально отображается? с латиницей вообще ноль проблем.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Да я как бы особо насчет кириллицы не парился никогда. Читайте внимательно проблему: такая строка приходит при запроса баланса. И мне нужно перевести эту строку в читабельный вид, чтобы извлечь из нее сумму остатка денег, проанализировать и при достижении определенного порога уведомить об этом меня.

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

звоните оператору, и просите присылать ответ в латинице... и делов то.. или спрашиваете другой юссд код который отвечает в латинице.

скажите что ваш телефон видит в ответ кракозяблы..

alfik777
alfik777 аватар
Offline
Зарегистрирован: 29.06.2015

Попробуйте в запросе USSD  первый символ # . Есть 2 варианта запроса USSD, начиная со * или с # . При первом варианте ответ приходит на русском,  во втором - латиница ( если оператор поддерживает такой запрос).

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

alfik777, я с GSM модуля через СМС запрос отправляю.

Неужели на C++ нет функции или процедуры дял перевода кода символа в символ? Свою что ли писать?

alfik777
alfik777 аватар
Offline
Зарегистрирован: 29.06.2015

dr.lmg пишет:

alfik777, я с GSM модуля через СМС запрос отправляю.

А можно увидеть текст этого СМС - запрос баланса ?

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

ну напишите вы, будет программа. и тут оператор "что-то" у себя поменяет, или нужно будет симкарту иного оператора вставить, и что тогда? опять переписывать софт? имхо софт должен быть универсален. И универсальность дефакто - с латинскими символами.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

alfik777 пишет:

dr.lmg пишет:

alfik777, я с GSM модуля через СМС запрос отправляю.

А можно увидеть текст этого СМС - запрос баланса ?

GSM модуль, подключенный к  ардуино, отправляет на номер 000100 пустое СМС. (если на этот номер отправить пустое СМС, то придет ответное сообщение от оепартора с указанием баланса сим-карты).

Текста запроса нет. Почитайте внимательно. Мне не нужно отправлять смс в кириллице. Мне нужно преобразовать коды ASCII в символы.

От оператора приходит набор кодов 003100390033002E003900340440002E что в переводе на символы означает 193,94р.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Short Circuit, Вы сами-то понимаете, о чем пишете?

При чем тут оператор, при чем тут сим карта? СМС приходят в двух форматах, либо латиницей либо в кодах ASCII (т.н. SMS-PDU), если есть хоть один не латинский символ в смс. Латиницу модуль и так читает распрекрасно. Универсальность и заключается втом, чтобы программно расшифровать PDU. А Вы ахинею какую-то несете.

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

я знаю, что смс приходит в таких форматах.

нет, ну если вам так удобнее и интереснее - то я не против, делайте как считаете для себя нужным, нет проблем.

 

можно уточнить какие вы АТ команды модулю даете для принятия текстового формата ответа  в смс, и какой модуль используете: 590й или 800й ?

 

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

См. пост #78

AT команды я вообще не использую.

alfik777
alfik777 аватар
Offline
Зарегистрирован: 29.06.2015

dr.lmg пишет:

AT команды я вообще не использую.

А как же Вы управляете модулем ,как отправляете СМС?

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Я использую библиотеку SIM900.

отправка например происходит простой командой (с синтаксисом могу напутать, ардуино нет под рукой, но суть такова)

SMS.sendSMS ("номер телефона", "текст сообщения");

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

dr.lmg пишет:

Неужели на 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 тоже, там только латиница и китайские иероглифы. Поэтому с выводом русского могу ошибаться.

alfik777
alfik777 аватар
Offline
Зарегистрирован: 29.06.2015

Может я, конечно, чего-то не понимаю, но может проще не  изобретать велосипед? Почему  нельзя использовать нормальный USSD- запрос  и получить адекватный ответ типа ".... Vash balans 193,94 r." ?