SUPLA GSM czyli sim800L komunikacja z SUPLA tam gdzie nie ma wifi a jest sieć GSM.

Awatar użytkownika
QLQ
Posty: 2276
Rejestracja: ndz wrz 03, 2017 9:13 am
Lokalizacja: Koszalin

Od paru tygodni nęka mnie taka rzecz. Chcę stworzyć coś w rodzaju SuplaButton ale w wersji GSM. Było by to świetne rozwiązanie gdzie jak w temacie nie ma zasięgu wifi a mamy do dyspozycji sieć GSM. Modół sim800l komunikuje się przez RX/TX więc każde esp8266 się z nim "dogada"
tu przykład jaki znalazłem w sieci www:

Kod: Zaznacz cały

#include <SoftwareSerial.h>

#define DEBUG 1
#define SIM800_TX_PIN 4
#define SIM800_RX_PIN 5

SoftwareSerial serialSIM800(SIM800_TX_PIN,SIM800_RX_PIN);
char responseBuffer[256];

char *gprsStart[]     = {
                          (char *)"AT+SAPBR=3,1,\"Contype\", \"GPRS\"\r\n", // Configure bearer profile
                          (char *)"AT+SAPBR=3,1,\"APN\",\"internet\"\r\n",
                          (char *)"AT+SAPBR=1,1\r\n", // Open a GPRS context
                          (char *)"AT+SAPBR=2,1\r\n" // Query the GPRS context
                        };
char *gprsEnd[]       = { (char *)"AT+SAPBR=0,1\r\n" }; // Close a GPRS context

char *httpStart[]     = {
                          (char *)"AT+HTTPINIT\r\n", // Init HTTP service
                          (char *)"AT+HTTPPARA=\"CID\",1\r\n", // Set parameters for HTTP session
                          (char *)"AT+HTTPPARA=\"PROIP\",\"https://svr5.supla.org/direct/123/RUMYMNyNmmim4/turn-off\"\r\n",
                          (char *)"AT+HTTPPARA=\"CONTENT\",\"image\"\r\n",
                          (char *)"AT+HTTPDATA=5,10000\r\n", // POST the data, params (size as bytes, input latency time ms)
                          (char *)"DEBUG", // POST Data
                          (char *)"AT+HTTPACTION=1\r\n", // POST Session start
                          (char *)"AT+HTTPREAD\r\n" // Read the data
                        };
char *httpEnd[]       = { (char *)"AT+HTTPTERM\r\n" }; // Terminate HTTP Service

char *locationQuery[] = { (char *)"AT+CIPGSMLOC=1,1\r\n" }; // Base station Location: 1)type = 1, get longitude and latitude


void setup() {
  Serial.begin(9600);
  while(!Serial);
  serialSIM800.begin(9600);

  if(DEBUG) Serial.println("SETUP");
  delay(3000);
  setGprs();
  postData();
  terminateHttp();
  getLocation();
  endGprs();
}

void loop() {

}

void setGprs() {
  if(DEBUG) Serial.println("setGprs");
  writeToSim(gprsStart, sizeof(gprsStart)/sizeof(*gprsStart));
}

void endGprs() {
  if(DEBUG) Serial.println("endGprs");
  writeToSim(gprsEnd, sizeof(gprsEnd)/sizeof(*gprsEnd));
}

void postData() { // TODO Insert payload
  if(DEBUG) Serial.println("postData");
  writeToSim(httpStart, sizeof(httpStart)/sizeof(*httpStart));
}

void terminateHttp() {
  if(DEBUG) Serial.println("terminateHttp");
  writeToSim(httpEnd, sizeof(httpEnd)/sizeof(*httpEnd));
}

void getLocation() {
  if(DEBUG) Serial.println("getLocation");
  writeToSim(locationQuery, sizeof(locationQuery)/sizeof(*locationQuery));
  // TODO Scanf coordinates from responseBuffer
  Serial.println(readSim(responseBuffer, 5000));
}

void writeToSim(char *commands[], int size) {
  for(int i = 0; i < size; i++) {
    serialSIM800.write(commands[i]);
    if(DEBUG) { Serial.print("Writing: "); Serial.println(commands[i]); }
    delay(1000);
  }

  while(serialSIM800.available()) serialSIM800.read(); // Ignore written commands
}

// Read Sim response until timeout
char* readSim(char* buffer, int timeout) {
  unsigned long timeStart = millis();
  int charCount = 0;

  while(1) {
    if(serialSIM800.available()) buffer[charCount++] = serialSIM800.read();

    if(millis() - timeStart > timeout) break;
  }
  buffer[charCount++] = 0;
  return buffer;
}
Esp8266 ładnie wysyła komendy do sim800. Widać to po pracy diody statusu modułu sim.
Jako że jak kiedyś pisałem programista ze mnie jak z koziej d..py trąba potrzebuję Waszej pomocy.
Sim800l komunikuje sie po RX/TX przez komendy AT+"coś tam" np
chcę włączyć komunikację GPRS :

Kod: Zaznacz cały

AT+SAPBR=3,1,"Contype","GPRS"
AT+SAPBR=3,1,"APN","internet"
AT+SAPBR=1,1
Wyłączyć GPRS:

Kod: Zaznacz cały

AT+SAPBR=0,1
Wszystko było by fajnie gdyby można było tak otrzworzyć link do "linków bezpośrednich" ale się nie da. Modół może wysyłać dane do strony przez komendę :

Kod: Zaznacz cały

T+HTTPINIT
AT+HTTPPARA="CID",1
AT+HTTPPARA="URL","http://....tu link gdzie ma wysyłać dane  /  lub skąd ma je czytać 
Da się nim wysyłać bez problemu SMS/ EMAIL ale NIE MA KOMENDY DO OTWARCIA LINKU w dodatku nie HTTPS tylko HTTP. Coś poradzicie?


i tu moje zagadnienie - PROBLEM - jak połączyć komunikację esp z sim800 aby powstał GSM Supla Button?
Ostatnio zmieniony sob mar 09, 2019 9:05 pm przez QLQ, łącznie zmieniany 4 razy.
jak coś nie działa to włącz zasilanie.....
Awatar użytkownika
maffiu
Posty: 500
Rejestracja: śr lis 30, 2016 9:30 pm
Lokalizacja: Kraków/Skawina

Mnie ten moduł właśnie interesował jako powiadomienie SMS z sensorów ale ze mnie jeszcze większa trąba to nawet nie poruszałem tematu

Chodziło mi po głowie nawet żeby inny moduł sterowany skryptami z przekaźnikami na żywca zawierał odpowiednie piny z konkretnymi komendami

Ale to takie moje teoretyzowanie :/
Awatar użytkownika
QLQ
Posty: 2276
Rejestracja: ndz wrz 03, 2017 9:13 am
Lokalizacja: Koszalin

Sterowanie przez SMS tam jest dziecinnie proste. Wysyłanie sms też jako np alarm po wykryciu ruchu z pir. Nawet na YT jest projekt takiego alarmu.
Ale nie ma kuźwa otwarcia linku🙁

A ja chciałem to n jako button Gsm. Ma fajną antenę mikropasmową, która bym przylkeił do elementu skrzynki plus aku 18650 i Deep sleep mode. A tu ni diabła nie ma takiej komendy at. Ale kurna mail sobie bez problemu wyślę.

@elmaya, @pzygmunt, @lesny8 może Wy coś poradzicie?

Koncepcja naprzyszłość innych projektów gdzie nie ma wifi.


Idę spać. Tylko teraz coś mogę zdłubać bo inaczej żona, dzieci. Nie da rady w ciagu dnia.
jak coś nie działa to włącz zasilanie.....
Awatar użytkownika
lesny8
Posty: 2808
Rejestracja: pn gru 11, 2017 9:43 pm

QLQ pisze: pt mar 01, 2019 10:14 pm Da się nim wysyłać bez problemu SMS/ EMAIL ale NIE MA KOMENDY DO OTWARCIA LINKU w dodatku nie HTTPS tylko HTTP. Coś poradzicie?
Popatrzyłem na dokumentacje i wygląda na to, że się da obsłużyć HTTPS, ale nie mam na czym potestować, sprawdź noc jeszcze młoda ;)
Czekam na kolejne Supla Offline Party 👍
Awatar użytkownika
QLQ
Posty: 2276
Rejestracja: ndz wrz 03, 2017 9:13 am
Lokalizacja: Koszalin

Trochę posiedziałem i SIĘ UDAŁO !! :D :mrgreen:
Na razie ogarnąłem komendy AT, które obsługują mi link bezpośrednie np TURN-OFF z modemu GSM Sim800l:

Tu macie:

Kod: Zaznacz cały

// włączamy połączenie GPRS - tu akurat dla karty T-Mobile bo taka była pod ręką
AT+CIPSHUT
AT+CGATT=1
AT+SAPBR=3,1,"CONTYPE","GPRS"
AT+SAPBR=3,1,"APN","internet"
AT+CSTT="internet"
AT+SAPBR=1,1
AT+CIICR

//inicjacja połączenia HTTP
AT+HTTPINIT
AT+HTTPPARA="CID",1

AT+HTTPSSL=1   // obłsuga HTTPS

AT+HTTPPARA="URL","https://svr5.supla.org/direct/130/COŚ_TAM/turn-off"   // analogicznie będzie z TURN-ON
AT+HTTPPARA = "REDIR",1
AT+HTTPACTION=2

AT+HTTPTERM
I ŚWIATŁO PIĘKNIE GAŚNIE :)

Muszę to jeszcze wrzucić do kodu ESP8266 z opcją button i energy save. Jak wiemy ESP8266 i sim800l mają taką opcję . ESP w wykonaniu SUPLA BUTTON do sim800l muszę jeszcze doczytać

EDIT:
TAk na szybko kod dla ArduinoUNO (przerobiony z www.aeq-web.com?ref=arduinoide):

Kod: Zaznacz cały


#include <SoftwareSerial.h>
#include <Wire.h>

SoftwareSerial mySerial(12, 11);            // RX, TX Pins
String apn = "internet";                       //APN

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);
  delay(10000);
}

void loop() { // run over and over
  
    gsm_sendhttp(); //Start the GSM-Modul and start the transmisson
    delay(10000); //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," + apn);
  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://svr5.supla.org/direct/130/gjMD5dMGmZ/turn-off");
  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());
  }

}


jak coś nie działa to włącz zasilanie.....
Awatar użytkownika
QLQ
Posty: 2276
Rejestracja: ndz wrz 03, 2017 9:13 am
Lokalizacja: Koszalin

SIM800L
DEEP SLEP MODE 1: AT+CSCLK=1 // tu wybudzamy przez pull down pinu DTR, ew dzwoniąc / SMS do modemu
DEEP SLEP MODE 2: AT+CSCLK=2 // chyba lepsza opcja z uwagi na wybudzenie komunikacją RX/TX

w obu przypadkach pobór prądu (A) ~ 0,00-0,002A
jak coś nie działa to włącz zasilanie.....
Awatar użytkownika
QLQ
Posty: 2276
Rejestracja: ndz wrz 03, 2017 9:13 am
Lokalizacja: Koszalin

Przedstawiam testy na żywym organiźmie:
Tu filmik z poboru prądu samego sim800l ( razem z ArduinoNano pobiera 0,010 Ampera )
https://youtu.be/WvIkpg7glq0

Natomiast tutaj przedstawione działanie SUPLA GSM BUTTON:
https://youtu.be/fOUabq6AbgA
Ostatnio zmieniony śr mar 13, 2019 9:03 pm przez QLQ, łącznie zmieniany 1 raz.
jak coś nie działa to włącz zasilanie.....
Awatar użytkownika
QLQ
Posty: 2276
Rejestracja: ndz wrz 03, 2017 9:13 am
Lokalizacja: Koszalin

lesny8 pisze: sob mar 02, 2019 9:44 pm
QLQ pisze: pt mar 01, 2019 10:14 pm Da się nim wysyłać bez problemu SMS/ EMAIL ale NIE MA KOMENDY DO OTWARCIA LINKU w dodatku nie HTTPS tylko HTTP. Coś poradzicie?
Popatrzyłem na dokumentacje i wygląda na to, że się da obsłużyć HTTPS, ale nie mam na czym potestować, sprawdź noc jeszcze młoda ;)
Udało się. Aby obsłużyć https wystarczy wywołać "AT+HTTPSSL"



Dziś tj 13.03 zrobiony Soft pod esp8266 z uwagi na Deep sleep i b. Mały pobór prądu.
Moduły razem esp8266 i sim800l pobierają mniej niż 0.002 Amp!.
Obsługa 2 linków bezpośrednich jak w supla button made in @Duch_ tyle ze na gsm gdzie nie mamy wi fi i zasilania. Zasilanie z aku 3.7v
jak coś nie działa to włącz zasilanie.....
michal363
Posty: 90
Rejestracja: pn lip 16, 2018 8:25 pm

Czy da radę zrobić soft pod sonoffa?
Arek.kandula
Posty: 393
Rejestracja: pn gru 24, 2018 8:52 am

Ciekawy projekt czekamy na efekt końcowy wraz z softem oraz lista podzespołów użytych do projektu
ODPOWIEDZ

Wróć do „Pomoc”