Ciao a tutti, da poco ho acquistato una scheda ESP32 come da titolo e vorrei utilizzarla per mandare un SMS quando ho una certa condizione.
Mi spiego meglio;
L'ESP32 vorrei collegarlo ad un relè con contatto normalmente aperto di una centralina per un allarme casalingo, quando l'allarme suona il contatto si chiude e questo fa si che l'ESP, tramite il modulo SIM800L, mandi un messaggio a 2/3 numeri che imposto.
Per riuscire fare ciò sto seguendo un codice che ho trovato online su questo sito ma che comunque vista la mia scarsa abilità nella programmazione non riesco ad implementare.
Buongiorno e benvenuto,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (…punto 13, primo capoverso), ti chiedo cortesemente di presentartiIN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il succitato REGOLAMENTO ... Grazie.
Guglielmo
P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nel rispetto del suddetto regolamento nessuno ti risponderà (eventuali risposte verrebbero cancellate), quindi ti consiglio di farla al più presto.
In un programma Arduino hai due funzioni o blocchi.
setup eseguito all'accensione del Arduino/Esp una sola volta
loop eseguito di continuo (in ciclo) dopo la setup
Il codice che indichi al link spedisce il SMS una sola volta alla fine del setup
Il loop invece è un ciclo infinito che non fa nulla
Devi quindi spostare l'invio del sms nel loop, ma...
ponendolo dentro una condizione if
void loop()
{ if( condizione==vera)
{ // To send an SMS, call modem.sendSMS(SMS_TARGET, smsMessage)
String smsMessage = "Hello from ESP32!";
if(modem.sendSMS(SMS_TARGET, smsMessage))
{ SerialMon.println(smsMessage);
}
else
{ SerialMon.println("SMS failed to send");
}
}
}
La condizione deve essere la lettura dello stato del pin a cui collegherai il rele.
digitalRead(pin) legge HIGH o LOW a seconda che ci sia o no segnale. E nella setup() devi fare un
pinMode(pin,INPUT); per dire che quel pin lo usi come input
Ma... da quel rele... hai idea di quanti volt escono ? Sei sicuro sia compatibile con i pin di Esp32 ?
I pin del Esp32 lavorano a 3,3V
Ok, allora sul pin 13 configurato come ingresso metti una R10k in parallelo a C 100nF verso GND per formare una rete antirimbalzo detta debounce. La R10k funge da pull-down fornendo al pin un riferimento stabile letto come LOW. Quando il relay si chiude la 3.3V carica il condensatore da 100n con una costante di tempo.
In che senso "un optoisolatore", dalla descrizione ha un contatto pulito già galvanicamente isolato, e al massimo la 3.3v dall'esp la fa passare attraverso un resistore da 1k prima di collegarla ad uno dei terminali del contatto pulito, l'altro contatto pulito di ritorna va al pin 13.
Ok ho capito, per ulteriore sicurezza il relay accendo o meno il led dell'optoaccoppiatore, certo si puo fare e alle volte è addirittura obbligatorio farlo con l'opto.
Per sviluppare il codice al momento non ci sono indicazioni per usare obbligatoriamente l'opto,
Esattamente, che poi è lo schema che si usa per connettere un pulsante tattile anche esso afflitto da rimbalzi dei contatti. Con la pull-down la logica è positiva e quindi leggerai 1 quando il contatto del relay è chiuso e zero viceversa.
Se vuoi risparmiare una resistenza puoi usare la logica negata invertendo tra loro S1 e R1. La R1 la ottieni impostando il pin con pinMode(pin, `INPUT_PULLUP). C1 resta li come prima.