home alarm ardino

Salve

sto cercando di realizzare un impianto di allarme con ARDUINO MEGA + ETHERNET + KEYESTUDIO GSM 800C

Ecco il primo problema,non si collega ad internet infatti facendo anche il ping non comunica con arduino , quindi non posso configurare l’app di blynk.
Io vorrei usare tutte e due le schede in maniera tale da avere una doppia comunicazione , in caso di mancanza rete gsm ho la lan che invia i miei comandi ad arduino e li riceve e viceversa.

//Librerie e definizione hardware
#define BLYNK_PRINT Serial
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
#include <BlynkSimpleEthernet.h>
#include <SoftwareSerial.h>

#define SIM800_TX_PIN 8                                //SIM800 TX al pin D8 di to Arduino
#define SIM800_RX_PIN 7                                //SIM800 TX al pin D7 di to Arduino
SoftwareSerial mySerial(SIM800_TX_PIN, SIM800_RX_PIN); //Creazione software serial per SIM800C
#define reed 6
#define tamper 5
#define led_1 9
#define led_2 10
#define W5100_CS  10
#define SDCARD_CS 4
SimpleTimer timer;

WidgetTerminal terminal (V30);
//per app blynk con terminal input
BLYNK_CONNECTED() {
      Blynk.syncVirtual(V30);
  }
BLYNK_WRITE(V30)
{
  if (String("1111") == param.asStr()) {
terminal.println("Password Accettata!") ;
Blynk.notify("Attenzione, password impianto accettata, stato impianto OFF");
digitalWrite (2, LOW);
  } else {
terminal.print("Password Errata!!!!!");
Blynk.notify("Attenzione, tentativo di violazione impianto allarme !!!");
Blynk.email("xxxx@gmail.com", "Accesso errato , forzatura impianto allarme!!!");
terminal.write(param.getBuffer(), param.getLength());
terminal.println();
digitalWrite (2,HIGH);
  }
  terminal.flush();
}


// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

//sync time ntp
EthernetUDP Udp;
IPAddress server_ip (139, 59, 206, 133); //cloud blynk

// Mac address should be different for each device in your LAN
byte arduino_mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
IPAddress arduino_ip ( 192, 168, 188, 98);
IPAddress dns_ip     (  8,   8,   8,   8);
IPAddress gateway_ip ( 192, 168, 188, 001);
IPAddress subnet_mask(255, 255, 255, 000);
EthernetServer server = EthernetServer(80);


//variabili lettura sms in entrata
char stringa[100];
char comando[31] = {0};

// variabili antifurto
bool stato_imp = false;
volatile int stato_reed  = LOW;
volatile int stato_tamper = LOW;
String number = "xxxxxxxxxxx";


void setup()
{
  Serial.begin(9600);
  mySerial.begin(9600);
  delay(10000);                             // attendo che il GSM abbia agganciato la linea
  mySerial.print("AT+CMGF=1\r\n");          // imposta il formato del messaggio SMS come testo
  delay(1000);
  mySerial.print("AT+CNMI=1,2,0,0,0\r\n");  // specifica come devono essere gestiti i messaggi SMS appena arrivati
  delay(1000);
  pinMode(reed, INPUT);
  attachInterrupt(digitalPinToInterrupt(reed), line_reed, FALLING );    // FALLING = da alto a basso.
  pinMode(tamper, INPUT);
  attachInterrupt(digitalPinToInterrupt(tamper), line_tamper, FALLING );  // FALLING = da alto a basso.
  pinMode(led_1, OUTPUT);
  digitalWrite(led_1, LOW);
  pinMode(led_2, OUTPUT);
  digitalWrite(led_2, LOW);
    Blynk.begin(auth, "blynk-cloud.com", 8080, arduino_ip, dns_ip, gateway_ip, subnet_mask, arduino_mac);
}


void loop()
{
  lettura_sms();
  antifurto();
  Blynk.run();
  timer.run();
}


void line_reed()
{
  stato_reed = HIGH;
}


void line_tamper()
{
  stato_tamper = HIGH;
}


void antifurto() {
  if (stato_imp = true) { // flag impianto inserito
    number1inserito();
    number2inserito();
    digitalWrite(led_1, HIGH);  // accende led impianto inserito
    if (stato_reed == HIGH) { // contatto porta aperto
      number1allarme();
      number2allarme();
      digitalWrite(led_2, HIGH);  // accende led segnalazione allarme
    }
    if (stato_tamper == HIGH) { // linea tamper aperta
      number1allarme();
      number2allarme();
      digitalWrite(led_2, HIGH); // accende led segnalazione allarme
    }
  }
  else if (stato_imp = false) { // flag impianto disinserito
    number1disinserito();
    number2disinserito();
    digitalWrite(led_1, LOW);  // spengne led a impianto disinserito
  }
}


void number1allarme()
{
  Serial.println("OK");
  delay(1000);
  Serial.print("AT+CMGF=1\r\n");
  delay(500);
  Serial.print("AT+CMGS=\"");
  Serial.print("+39xxxxxxxxxx");
  Serial.print("\"\r\n");
  delay(2000);
  Serial.print("Attenzione, centrale in allarme");
  Serial.write(0x1A);
  delay(1000);
}


void number2allarme()
{
  Serial.println("OK");
  delay(1000);
  Serial.print("AT+CMGF=1\r\n");
  delay(500);
  Serial.print("AT+CMGS=\"");
  Serial.print("+39xxxxxxxxxxx");
  Serial.print("\"\r\n");
  delay(2000);
  Serial.print("Attenzione centrale in allarme");
  Serial.write(0x1A);
  delay(1000);
}


void number1inserito()
{
  Serial.println("OK");
  delay(1000);
  Serial.print("AT+CMGF=1\r\n");
  delay(500);
  Serial.print("AT+CMGS=\"");
  Serial.print("+39xxxxxxxxxxxxxx");
  Serial.print("\"\r\n");
  delay(2000);
  Serial.print("Sistema allarme inserito");
  Serial.write(0x1A);
  delay(1000);
}


void number2inserito()
{
  Serial.println("OK");
  delay(1000);
  Serial.print("AT+CMGF=1\r\n");
  delay(500);
  Serial.print("AT+CMGS=\"");
  Serial.print("+39xxxxxxxxxxxxx");
  Serial.print("\"\r\n");
  delay(2000);
  Serial.print("Sistema allarme inserito");
  Serial.write(0x1A);
  delay(1000);
}


void number1disinserito()
{
  Serial.println("OK");
  delay(1000);
  Serial.print("AT+CMGF=1\r\n");
  delay(500);
  Serial.print("AT+CMGS=\"");
  Serial.print("+39xxxxxxxxxxxxxxxx");
  Serial.print("\"\r\n");
  delay(2000);
  Serial.print("Sistema allarme OFF");
  Serial.write(0x1A);
  delay(1000);
}


void number2disinserito()
{
  Serial.println("OK");
  delay(1000);
  Serial.print("AT+CMGF=1\r\n");
  delay(500);
  Serial.print("AT+CMGS=\"");
  Serial.print("+39xxxxxxxxxxxxx");
  Serial.print("\"\r\n");
  delay(2000);
  Serial.print("Sistema allarme OFF");
  Serial.write(0x1A);
  delay(1000);
}


void lettura_sms() {
  if (mySerial.available()) {
    mySerial.readString().toUpperCase();                         // rendo maiuscola tutta la stringa per evitare errori di sintassi
    mySerial.readString().toCharArray(stringa, 100);              // converto la stringa message nell'array stringa
      strncpy(comando, stringa, 30);                                // copio in comando la prima parte del messaggio ricevuto ossia: +CMT "+39numerotelefono"
    Serial.println(comando);
      if (strncmp(comando, "+39xxxxxxxxx", 13) == 0) {             // poi controllo se in comando sia presente il numero del mittente autorizzato
      if (strncmp(comando, "ON", 2) == 0) {                       // e inserisco impianto
        stato_imp = true;
      }
      else if (strncmp(comando, "OFF", 3) == 0) {                  // o disinserisco impianto
        stato_imp = false;
      }
    }
    mySerial.print("AT+CMGDA=\"");
    mySerial.println("DEL ALL\"");                                // cancello tutti i messaggi
  }
}

che ne pensate del codice?

mi date una mano a capire se la parte blynk , mi gestisce bene on / off impianto ?

i led di segnalazione mi stanno sempre in on ....

ho risolto diversi problemi unica cosa che sto impazzendo e nel gestire l'impianto on/off tramite terminale ....

se metto un classico bottone funziona tutto accensione e spegnimento impianto

int x;
BLYNK_CONNECTED() {
      Blynk.syncVirtual(V30);
  }

BLYNK_WRITE(V30){
 x = param.asInt();
 }

void antifurto() {
  if (x == 1) {
  if (stato_imp = true) { // flag impianto inserito
    number1inserito();
    number2inserito();
    digitalWrite(led_1, HIGH);  // accende led impianto inserito
    delay(1200); // 
    digitalWrite(led_1, LOW); // spegne il LED (LOW l'uscita viene disalimentata)
    delay(400); //
    if (stato_reed == HIGH) { // contatto porta aperto
      number1allarme();
      number2allarme();
      digitalWrite(led_2, HIGH);  // accende led segnalazione allarme
    
    }

ma se inserisco il widget terminale quindi con inserimento password , non riesco a inserire nel codice la variabile int x per on/off

WidgetTerminal terminal (V30);
BLYNK_CONNECTED() {
      Blynk.syncVirtual(V30);
  }

BLYNK_WRITE(V30){
  if (String("1111") == param.asStr()) {
terminal.println("Password OK") ;
Blynk.notify("Pass ok , impianto allarme");

  } else {
terminal.print("Password ERRATA!!!!!");
Blynk.notify("forzatura impianto allarme ");
Blynk.email("YOUR EMAIL HERE", "accesso fallito " );
terminal.write(param.getBuffer(), param.getLength());
terminal.println();

  }
  terminal.flush();
}
void antifurto() {
  if (x == 1) {
  if (stato_imp = true) { // flag impianto inserito
    number1inserito();
    number2inserito();
    digitalWrite(led_1, HIGH);  // accende led impianto inserito
    delay(1200); // 
    digitalWrite(led_1, LOW); // spegne il LED (LOW l'uscita viene disalimentata)
    delay(400); //
    if (stato_reed == HIGH) { // contatto porta aperto
      number1allarme();
      number2allarme();
      digitalWrite(led_2, HIGH);  // accende led segnalazione allarme
}

avevo pensato di convertite la mia string in Int, in maniera tale da attivare il mio impianto, quindi gestire la password come un bottone .....

sono nella confusione piu totale :cry: