Система управления и мониторинга по СМС

Тема в разделе "Глядите, что я сделал", создана пользователем _jah_69_, 31 мар 2017.

  1. bsn_zhodino

    bsn_zhodino Нуб

    Все работает прекрасно) А как отправлять смс о состоянии звонящему?
     
  2. _jah_69_

    _jah_69_ Гик

    Том в ответ на звонок отправляет статус собранную из температур и состояний
     
  3. bsn_zhodino

    bsn_zhodino Нуб

    Какой Том?
     
  4. _jah_69_

    _jah_69_ Гик

    Там опечатался
     
  5. bsn_zhodino

    bsn_zhodino Нуб

    А как добавить датчик температуры DS18B20.
     
  6. _jah_69_

    _jah_69_ Гик

    Библиотеку поменять на другую.
     
  7. zoldaten

    zoldaten Нерд

    добрый день.
    модуль A6C AI Thinker. принципы работы схожи. проблема: формат получаемого сообщения не содержит самого смс-текста.
    на выводе только +CMT: «+7913*******»,,»16/01/26,22:24:55+36″.
    хотя если прогнать команды модуля в Terminal v1.9b все работает. команды следующие:
    AT+CMGF=1
    AT+CSDH=1
    AT+CNMI=0,2,0,0,0
    Вывод при получении смс:
    +CMT: "+7913********",,"2017/05/11,17:41:57+03",145,17,0,0,"+7916*********",145,2

    test


    В чем может быть дело ? Может надо делать какой-нибудь перевод строки в Arduino IDE ?

    ps. с кнопками реле разобрались ?
     
  8. ИгорьК

    ИгорьК Гуру

    :) как техника шагнула вперед
     
    Последнее редактирование: 12 май 2017
  9. _jah_69_

    _jah_69_ Гик

    Ещё как.
     
  10. zoldaten

    zoldaten Нерд

    Я так понимаю, помощи не ждать ((
     
  11. _jah_69_

    _jah_69_ Гик

    Serial.begin(9600); // Скорость порта 9600
    GsmSerial.begin(9600); // Устанавливаем скорость связи Ардуино и модема
    GsmSerial.println("ATE0"); // выключаем эхо
    delay(100);
    GsmSerial.println("AT+CLIP=1"); // Включаем АОН
    delay(100);
    GsmSerial.println("AT+CMGF=1"); // Формат СМС = ASCII текст
    delay(100);
    GsmSerial.println("AT+CSCS=\"GSM\""); // Режим кодировки текста = GSM (только англ.)
    delay(100);
    GsmSerial.println("AT+CNMI=2,2"); // Текст смс выводится в com-порт
    delay(100);
    String str="";
    while(str.indexOf("+COPS: 0") == -1) // Ждем пока модем будет готов
    {
    GsmSerial.println("AT+COPS?"); // Информация об операторе
    str=ReadCom();
    delay(300);
    }

    }
    void loop()
    {

    String strSms = ReadCom(); // Читаем смс, если есть
    while (strSms.length()==0)
    {
     
    Последнее редактирование: 12 май 2017
  12. zoldaten

    zoldaten Нерд

    да, я видел код. выставлял не только GSM формат выдачи сообщения, но и PDU. все равно приходит обрезанная версия сообщения без текста самого сообщения. я думаю дело в функции символьного считывания смс в коде. возможно, она режет длину смс. но не могу понять почему.
    в терминале команды одна за одной отрабатывают правильно и смс приходит полное.
     
  13. _jah_69_

    _jah_69_ Гик

  14. _jah_69_

    _jah_69_ Гик

    Как вариант могут АТ команды отличаться для разных модулей
     
  15. zoldaten

    zoldaten Нерд

    стандартные AT команды идентичны для всех модулей. кроме, того для модуля вводил согласно datasheet. и в терминальной программе все отрабатывает корректно.
     
  16. _jah_69_

    _jah_69_ Гик

    А стандартные скетчи работают
     
  17. zoldaten

    zoldaten Нерд

    короче, вот рабочий код под A6C от AI Thinker:
    #include <SoftwareSerial.h>
    SoftwareSerial mySerial(2, 3);

    byte led = 13;

    void setup() {
    delay(2000);
    pinMode(led, OUTPUT);
    digitalWrite(led, LOW);
    Serial.begin(9600);
    mySerial.begin(9600);
    Serial.println("GSM NEOWAY promote site istarik.ru");
    Serial.println();
    Serial.println("Turn on AOH:");
    mySerial.println("AT+CLIP=1"); //включить АОН
    delay(300);
    Serial.println("Text format sms:");
    mySerial.println("AT+CMGF=1"); // текстовый формат SMS
    delay(300);
    Serial.println("Mode GSM:");
    mySerial.println("AT+CSCS=\"GSM\""); // кодировка текста - GSM
    delay(300);
    Serial.println("SMS to terminal:");
    mySerial.println("AT+CNMI=0,2,0,0,0"); // вывод смс в консоль
    delay(300);

    }

    void loop()
    {
    if(mySerial.available()) //если модуль что-то послал
    {
    char ch = ' ';
    String val = "";

    while(mySerial.available())
    {
    ch = mySerial.read();
    val += char(ch); //собираем принятые символы в строку
    delay(3);
    }

    Serial.print("Neo send> ");
    Serial.println(val);

    if(val.indexOf("+CMT") > -1) //если есть входящее sms
    {
    if(val.indexOf("led13on") > -1) // смотрим, что за команда
    {
    Serial.println("On D13");
    digitalWrite(led, HIGH); //включаем светодиод
    }

    if(val.indexOf("led13off") > -1) // смотрим, что за команда
    {
    digitalWrite(led, LOW); //выключаем
    Serial.println("Off D13");
    }
    }
    }
    }