Arduino SIM800l проблема отправки СМС

Тема в разделе "Arduino & Shields", создана пользователем VampeerCo, 27 фев 2019.

  1. VampeerCo

    VampeerCo Нуб

    Добрый день. Пытаюсь написать код, в котором по смс включаются реле. Управление работает, но при запросе - ошибка при отправке СМС со статусом.

    Код (C++):
    #include <SoftwareSerial.h>

    SoftwareSerial SIM800(12, 13);

    String textMessage;

    String SistemaState = "LOW";
    String ObogrevState = "LOW";
    String NasosState   = "LOW";

    const int sistema   = 16;
    const int obogrev   = 9;
    const int nasos     = 10;

    void setup() {
      pinMode(sistema,  OUTPUT);
      pinMode(obogrev,  OUTPUT);
      pinMode(nasos,    OUTPUT);

      digitalWrite(sistema, LOW);
      digitalWrite(obogrev, LOW);
      digitalWrite(nasos,   LOW);
     
      Serial.begin(19200);
      SIM800.begin(19200);

      delay(20000);
      Serial.print("SIM800 ready...");

      SIM800.print("AT+CMGF=1\r");
      delay(100);

      SIM800.print("AT+CNMI=2,2,0,0,0\r");
      delay(100);
    }

    void loop(){
      if(SIM800.available()>0){
        textMessage = SIM800.readString();
        Serial.print(textMessage);  
        delay(10);
      }
      if(textMessage.indexOf("ON")>=0){
        // Turn on relay and save current state

        digitalWrite(sistema, HIGH);
        SistemaState = "on";
        Serial.println("Sistema set to ON");

        textMessage = "";  
      }
      if(textMessage.indexOf("OFF")>=0)
      {
        digitalWrite(sistema, LOW);
        SistemaState = "off";
        Serial.println("Sistema set to OFF");

        textMessage = "";
      }
      if(textMessage.indexOf("STATUS")>=0){
        String message = "System is " + SistemaState;
        sendSMS(message);
        Serial.println("System state resquest");

        textMessage = "";
      }
    }

    void sendSMS(String message){

      SIM800.print("AT+CMGF=1\r");
      delay(100);

      SIM800.println("AT + CMGS = \"+79026218696\"");
      delay(100);
      SIM800.println(message);
      delay(100);

      SIM800.println((char)26);
      delay(100);
      SIM800.println();
      delay(5000);
    }
    Ответ от системы такой:

    +CMT: "+79026218696","","19/02/27,08:17:23+12"
    STATUS
    System state resquest
    AT+CMGF=1

    OK
    AT + CMGS = "+79026218696"

    ERROR
    System is on

    Подскажите, пожалуйста, где накосячил. Спасибо
     
  2. Radius

    Radius Гик

    У меня работает вот такой код:
    Код (C++):
    printf("AT+CMGS=%s", num);
    HAL_Delay(500);
    printf("%s\x1A\r", msg);
    HAL_Delay(500);    
    Правда это для STM32.
     
  3. b707

    b707 Гуру

    формат отправки СМС проверяйте. Там каждый символ имеет значение.
    Описание синтаксиса отправки СМС есть в мануале на модем, для СИМ800 он лежит на каждом углу
    К примеру. совершенно непонятно, почему у вас строчки заверщаются "\r". вроде как правильно "\r\n"
     
  4. VampeerCo

    VampeerCo Нуб

    Спасибо за подсказку. Разобрался. Ошибка в том, что я к сообщению "System is" пытаюсь добавить состояние переменной SistemaState, а нужно писать String(SistemaState).

    Теперь борюсь с другой проблемой - в ответном сообщении приходит ответ с состоянием и после еще одна пустая строка (в этом же сообщении)
     
    Последнее редактирование: 27 фев 2019