Arduino-przekazniki sterowane sms-em

Masz problem, z którym nie możesz sobie poradzić? Pisz śmiało!
ODPOWIEDZ
gintur
Młodszy majsterkowicz
Posty: 21
Rejestracja: 12 lip 2017, 20:03

Arduino-przekazniki sterowane sms-em

Post autor: gintur » 11 mar 2018, 17:53

Witam.
Poniższy kod steruje 2 przekaźnikami za pomocą sms-a i działa jak na moje potrzeby.Chciałbym rozbudować ten kod o dodatkową funkcje,chodzi mi o smsa zwrotnego ze dane polecenie zostało wykonane np.jeżeli wyśle sms o treści "ON" to na wyjściu 5 pojawi się stan "WYSOKI" i chciałbym dostać sms-a na konkretny nr. o treści np. " Pin 5 HIGH".

Kod: Zaznacz cały

[code]
#include <SoftwareSerial.h>
SoftwareSerial mySerial(11,12);  // (Rx,Tx  > Tx,Rx) 
 
char incomingByte; 
String inputString;
int relay = 5;// Wyjście do sterowania przekaźnikiem
 int relaya = 4;
void setup() 
{
      pinMode(relay, OUTPUT);
      pinMode(relaya,OUTPUT);
      digitalWrite(relay, LOW); // Stan wyjścia przekaźnikowego po uruchomieniu układu
      digitalWrite(relaya,LOW);
      Serial.begin(9600);
      mySerial.begin(9600); 
 
     while(!mySerial.available()){
        mySerial.println("AT");
        delay(1000); 
        Serial.println("Connecting...");
        }
      Serial.println("Connected!");  
      mySerial.println("AT+CMGF=1");  //Ustawiamy SMSy w tryb tekstowy
      delay(1000);  
      mySerial.println("AT+CNMI=1,2,0,0,0");  //Procedura, która obsługuje nadchodzące wiadomości  
      delay(1000);
      mySerial.println("AT+CMGL=\"REC UNREAD\""); // Komdenda odczytu nowych wiadomości
     }
 
void loop()
{  
  if(mySerial.available()){
      delay(100);
 
      // Serial Buffer
      while(mySerial.available()){
        incomingByte = mySerial.read();
        inputString += incomingByte; 
        }
 
        delay(10);      
 
        Serial.println(inputString);
        inputString.toUpperCase(); // Zmiana wszystkich liter na wielkie w odebranej wiadomości
 
        //turn RELAY ON or OFF
        if (inputString.indexOf("ON") > -1){
          digitalWrite(relay, HIGH);
          }
         if (inputString.indexOf("OFF") > -1){
          digitalWrite(relay, LOW);
          }          
 
        delay(50);
         if (inputString.indexOf("WL") > -1){
          digitalWrite(relaya, HIGH);
          }
         if (inputString.indexOf("WY") > -1){
          digitalWrite(relaya, LOW);
          }          
 
        delay(50);
 
        // Tutaj kasujemy wiadomości w modemie, aby oszczędzać pamięć
        if (inputString.indexOf("OK") == -1){
        mySerial.println("AT+CMGDA=\"DEL ALL\"");
 
        delay(1000);}
 
        inputString = "";
  }
}

[/code]
Próbowałem wstawić cos takiego ale działało nie do końca prawidłowo .Sms zwrotny przychodzi ale nie jeden tylko leci cała seria i nie wiem dlaczego przy okazji załącza się wyjście 4.

Kod: Zaznacz cały

[code][code]
#include <SoftwareSerial.h>
SoftwareSerial mySerial(11,12);  // (Rx,Tx  > Tx,Rx) 
 
char incomingByte; 
String inputString;
int relay = 5;// Wyjście do sterowania przekaźnikiem
 int relaya = 4;
void setup() 
{
      pinMode(relay, OUTPUT);
      pinMode(relaya,OUTPUT);
      digitalWrite(relay, LOW); // Stan wyjścia przekaźnikowego po uruchomieniu układu
      digitalWrite(relaya,LOW);
      Serial.begin(9600);
      mySerial.begin(9600); 
 
     while(!mySerial.available()){
        mySerial.println("AT");
        delay(1000); 
        Serial.println("Connecting...");
        }
      Serial.println("Connected!");  
      mySerial.println("AT+CMGF=1");  //Ustawiamy SMSy w tryb tekstowy
      delay(1000);  
      mySerial.println("AT+CNMI=1,2,0,0,0");  //Procedura, która obsługuje nadchodzące wiadomości  
      delay(1000);
      mySerial.println("AT+CMGL=\"REC UNREAD\""); // Komdenda odczytu nowych wiadomości
     }
 
void loop()
{  
  if(mySerial.available()){
      delay(100);
 
      // Serial Buffer
      while(mySerial.available()){
        incomingByte = mySerial.read();
        inputString += incomingByte; 
        }
 
        delay(10);      
 
        Serial.println(inputString);
        inputString.toUpperCase(); // Zmiana wszystkich liter na wielkie w odebranej wiadomości
 
        //turn RELAY ON or OFF
        if (inputString.indexOf("ON") > -1){
          digitalWrite(relay, HIGH);
          mySerial.println("AT+CMGF=1");    //Sets the GSM Module in Text Mode
  delay(1000);  // Delay of 1000 milli seconds or 1 second
  mySerial.println("AT+CMGS=\"+48xxxxxxxxx\"\r"); // Replace x with mobile number
  delay(1000);
  mySerial.println("Wlaczona 5");// The SMS text you want to send
  delay(100);
       
          }
         if (inputString.indexOf("OFF") > -1){
          digitalWrite(relay, LOW);
          }          
 
        delay(50);
         if (inputString.indexOf("WL") > -1){
          digitalWrite(relaya, HIGH);
          }
         if (inputString.indexOf("WY") > -1){
          digitalWrite(relaya, LOW);
          }          
 
        delay(50);
 
        // Tutaj kasujemy wiadomości w modemie, aby oszczędzać pamięć
        if (inputString.indexOf("OK") == -1){
        mySerial.println("AT+CMGDA=\"DEL ALL\"");
 
        delay(1000);}
 
        inputString = "";
  }
}
Pomoże ktoś ?

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


mghjaatgkktuejdj
Majsterkowicz
Posty: 134
Rejestracja: 12 lut 2016, 16:35

Re: Arduino-przekazniki sterowane sms-em

Post autor: mghjaatgkktuejdj » 12 mar 2018, 16:52

Po każdym wysłaniu sms ustaw flagę na 1, a przed wysłaniem sprawdzaj jej stan. Kiedyś zrobiłem podobny projekt.
Awatar użytkownika
_KamilK
Młodszy majsterkowicz
Posty: 3
Rejestracja: 25 mar 2018, 21:40

Re: Arduino-przekazniki sterowane sms-em

Post autor: _KamilK » 25 mar 2018, 22:18

Polecam mój projekt https://majsterkowo[kropka]pl/telefoniczne-sterowanie-przekaznikiem/ Co prawda jest o wiele bardziej rozbudowany i pracochłonny niż Twój kod, ale działa i ma spore możliwości. Możesz ograniczyć listę numerów które mogą wysyłać wiadomości. Możesz przesyłać do siebie wiadomości które przychodzą na SIM, np o wygaśnięciu ważności czy braku środków. Możesz wykonywać zdalnie komendy AT na modemie za pomocą SMSa. Możesz się wdzwonić, zamiast wysyłać wiadomość SMS.
ODPOWIEDZ

Strony partnerskie: