Obecnie zajmuje się tworzeniem projektu do sterowania 2 przekaźnikami SONOFF na Arduino NANO opartego o komunikację GSM modułem SIM800L.
Do tej pory udało mi się ogarnąć komunikację I mogę "klikać" sobie przekaźnikiem w pętli głównej programu.
Mam dwa problemy:
Pierwszy dotyczy prozaicznej rzeczy jak reakcja przycisku na zbocze opadające i wykonanie podprogramu nie w czasie gdy przycisk jest cały czas wciśnięty, a tylko w momencie jego naciśnięcia (przyciski na pinach D2-D4). Pierwsze dwa służą do sterowania przekaźnikami 3 do sprawdzenia stanu.
Druga sprawa to jak obsłużyć protokół HTTPS na arduino tak, aby po odczycie przez link bezpośredni zaświecił mi diodę LED (np czerwoną gdy przekaźnik jest otwarty).
Zdoła ktoś pomóc biednemu studentowi?
Wstawiam kod, który udało mi się do tej pory urodzić w bólach...
Code: Select all
#include <SoftwareSerial.h>
#include <Wire.h>
SoftwareSerial mySerial(10, 11);
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
// set the data rate for the SoftwareSerial port
mySerial.begin(9600);
pinMode(2, INPUT); //wjazd
//attachInterrupt(digitalPinToInterrupt(2),gsm_sendhttp,HIGH);
delay(10000);
}
void loop() { // run over and over
gsm_sendhttp(); //Start the GSM-Modul and start the transmisson
delay(1000); //Wait one minute
}
void gsm_sendhttp() {
mySerial.println("AT");
runsl();//Print GSM Status an the Serial Output;
delay(1000);
mySerial.println("AT+SAPBR=3,1,Contype,GPRS");
runsl();
delay(1000);
mySerial.println("AT+SAPBR=3,1,APN,internet");
runsl();
delay(100);
mySerial.println("AT+SAPBR =1,1");
runsl();
delay(1000);
mySerial.println("AT+HTTPINIT");
runsl();
delay(100);
mySerial.println("AT+HTTPPARA =CID,1");
runsl();
delay(100);
mySerial.println("AT+HTTPSSL =1");
runsl();
delay(100);
mySerial.println("AT+HTTPPARA=URL,https://svr22.supla.org/direct/153/ZzNZwJkDjj/toggle");
runsl();
delay(100);
mySerial.println("AT+HTTPPARA =REDIR,1");
runsl();
delay(100);
mySerial.println("AT+HTTPACTION =2");
runsl();
delay(10000);
mySerial.println("AT+HTTPTERM");
runsl();
delay(100);
mySerial.println("AT+SAPBR =0,1");
runsl();
delay(2000);
}
//Print GSM Status
void runsl() {
while (mySerial.available()) {
Serial.write(mySerial.read());
}
}
