SMS по-русски SIM900R

Тема в разделе "Arduino & Shields", создана пользователем makimu, 16 дек 2015.

  1. makimu

    makimu Нуб

    Доброго времени суток всем! Родителем этой темы является эта: http://forum.amperka.ru/threads/iskra-neo-gprs-shield-от-Амперки-нет-инициализации.6770/ . С теми же комплектующими:

    1.ИСКРА NEO
    2. GPRS шилд от Амперки
    3. Работает это все на библиотеке GPRS Shield v1.0.
    Код:
    Код (C++):
    // библиотека для работы с GPRS устройством
    #include <GPRS_Shield_Arduino.h>
    #include <sim900.h>
    // библиотека для эмуляции Serial порта
    // она нужна для работы библиотеки GPRS_Shield_Arduino
    #include <SoftwareSerial.h>
    // номер на который будем отправлять сообщение
    #define PHONE_NUMBER  "XXXXXXXXXX"
    // текст сообщения, которое будем отправлять
    #define MESSAGE  "Привет от Ардуино"

    // создаём объект класса GPRS.

    GPRS gprs(19200);
    void setup()
    {
      pinMode(5, INPUT_PULLUP);
      pinMode(7, OUTPUT);
      pinMode(6, OUTPUT);
      pinMode(13, OUTPUT);
      digitalWrite(6, LOW);
      digitalWrite(7, LOW);
      digitalWrite(13, LOW);
     
      gprs.powerUpDown();

      // проверяем, есть ли связь с GPRS-устройством
      while (!gprs.init()) {
        // если связи нет, ждём 1 секунду
         // процесс повторяется в цикле,
        // пока не появится ответ от GPRS-устройства
        delay(1000);
     
       digitalWrite(7, LOW);
      }
       digitalWrite(7, HIGH);
     

    }
    void loop()
    {
      if (!digitalRead(5))
      {
        digitalWrite(6, HIGH);
        digitalWrite(13, HIGH);
        //Отправляем SMS
        gprs.sendSMS("XXXXXXXXXX", MESSAGE);
        } else
        {
          digitalWrite(6, LOW);
          digitalWrite(13, LOW);
          }
    }
    Лампочки для красоты =))
    Захотел я отправить русские символы - получил кракозябры.
    АТ командами выставил AT+CSCS="UCS2". СМС тогда вообще не отправляются.
    В коде самой библиотеки обнаружил вот такую штуку:
    Код (C++):
    bool GPRS::sendSMS(char *number, char *data)
    {
        //char cmd[32];
        if(!sim900_check_with_cmd("AT+CMGF=1\r\n", "OK\r\n", CMD)) { // Set message mode to ASCII
          return false;
        }
        delay(500);
        sim900_send_cmd("AT+CMGS=\"");
        sim900_send_cmd(number);
        //sprintf(cmd,"AT+CMGS=\"%s\"\r\n", number);
        //snprintf(cmd, sizeof(cmd),"AT+CMGS=\"%s\"\r\n", number);
    //    if(!sim900_check_with_cmd(cmd,">",CMD)) {
        if(!sim900_check_with_cmd("\"\r\n",">",CMD)) {
          return false;
        }
        delay(1000);
        sim900_send_cmd(data);
        delay(500);
        sim900_send_End_Mark();
        return true;
      }
    А конкретно вот эта строка:
    Код (C++):
    if(!sim900_check_with_cmd("AT+CMGF=1\r\n", "OK\r\n", CMD)) { // Set message mode to ASCII
          return false;
        }
    Проверял, AT+CMGF равен 1. Согласно мануалу в режиме "TEXT". Если поставить режим PDU, то при последующем вызове метода sendSMS() режим снова "TEXT".
    Люди добрые, как заставить это писать по-русски? или дохлый номер?
     
  2. Airbus

    Airbus Радиохулиган Модератор

    Код (C++):

    // Передача СМС в режиме PDU
    Serial.begin(9600);  //скорость 9600 бод
    delay(1000); //на 1 сек
    }
    void loop(){
    if (digitalRead(buttonPin)==HIGH){
    delay(100); //если на кнопке "плюс"(PIN12 не на минусе)
    Serial.println("AT+CMGF=0\r"); // выставляем режим сообщений PDU
    delay(300);
    Serial.println("AT+CMGS=35"); //передали
    Serial.print((char)13); // символ <cr>
    delay(300);
    Serial.print("07919722728288F80100009100081C041F044004350432043504340020043C043504340432043504340021"); // Пишем PDU пакет Привет Мир
    delay(300);
    Serial.print((char)26); // Отправляем Ctrl+Z, обозначая, что сообщение готово
    Serial.print((char)13); // символ <cr>
    delay(10000);
          }
       }

     
    Русский-только в PDU.Где то я уже писал как правда давно это было.Идём сюда http://tinyurl.com/qv6lzt чтоб из текста получить PDU вводим номер получателя +7******* СМС центра +7****** (если не знаем оставим окошко пустым)Alphabet Size 16 (потому что русский)и текст.Жмём Конверт и в среднем окошке всё для отправки PDU. Далее пишем такой скетч то что помечено красным вставляем из среднего окошка.Компилим-грузим и всё!"AT+CMGF=0\r" можно убрать в Setup будет работать проверено!
     
  3. Airbus

    Airbus Радиохулиган Модератор

    Можно ещё одним способом отправлять русские СМС на телефоне пробовал на шилде ещё пока нет
     
  4. makimu

    makimu Нуб

    Оперативно!! СпасиБО, буду пробовать!! :)
     
  5. makimu

    makimu Нуб

    Да, а вот как бы самому закодировать в PDU =))) но зачем, когда есть сервис =)
     
  6. makimu

    makimu Нуб

    ОГРОМНЕЙШЕЕЕЕЕ спасиБО!!!! Человек с большой буквы Ч!!! Шлет по-русски =))) Вы не пробовали сами написать кодировщик в PDU?
     
  7. Airbus

    Airbus Радиохулиган Модератор

    всё можно но сложно-попробуйте вот интересное про PDU http://tinyurl.com/q879jbc
    А зачем?
     
  8. makimu

    makimu Нуб

    СпасиБО Вам за ссылку. Буду просвещаться дальше =))