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

VampeerCo
Offline
Зарегистрирован: 07.02.2017

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

#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
 
Подскажите, пожалуйста, где накосячил. Спасибо
andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

попробуйте убрать 34 и 72 строки

вместо 31ой строки

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

 

VampeerCo
Offline
Зарегистрирован: 07.02.2017

andycat пишет:

попробуйте убрать 34 и 72 строки

вместо 31ой строки

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

Так даже управление не работает

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

ошибка в строке отправки СМС 75 уберите все лишние пробелы

скетч первоначальный возьмите

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

 

partizan86
Offline
Зарегистрирован: 21.01.2014

Здравствуйте... пробелы тут не при чем, у себя проверил.. работает если задержки увеличить после SIM800.println(...) до 300, 100 - не работает!!!

partizan86
Offline
Зарегистрирован: 21.01.2014

И ещё, сталкивался с проблемами работы модемов (SIM900, SIM800) на SoftSerial на скорости больше 9600... Отправка куда нигде, прием сообщений сплошные глюки 1раз нормально примерно из 10...

VampeerCo
Offline
Зарегистрирован: 07.02.2017

Ошибка в 62 строке: String(SistemaState). И все заработало. Спасибо за подсказки.
Может подскажите почему в ответном смс, после состояния, идет пустая строка?

partizan86
Offline
Зарегистрирован: 21.01.2014

Загружаю ваш код, ничего не меняю кроме delay-ев, все работает, в ответ на STATUS приходит System is LOW(on) ,без всяких пустых строк.. и скорость порта модема у меня 9600

VampeerCo
Offline
Зарегистрирован: 07.02.2017

Завтра проверю. Спасибо

 

Работает и так и так