Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2016:esp8266-alarm

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
2016:esp8266-alarm [2017/01/14 11:49]
Luboš Tlustoš [Tabulka]
2016:esp8266-alarm [2017/01/15 20:54] (aktuální)
Luboš Tlustoš [Závěr]
Řádek 19: Řádek 19:
 Obr. 3     ​Zapojení pinů u modulu s integrovanou anténou. Obr. 3     ​Zapojení pinů u modulu s integrovanou anténou.
  
-Resetovací signál je aktivní v logické nule a příslušný pin s označením RST musí být osazen externím pull-up odporem. Pin s označením CH_PD povoluje rádiovou komunikace a je aktivní v logické jedničce. Programování tohoto modulu probíhá přes sériovou komunikaci. Před samotným programováním je zapotřebí uvést modul do flashovacího režimu, toto se provede resetem při kterém je pin GPIO0 držen ve stavu logické nuly. Dveřní alarm navržený v tomto projektu bude napájen bateriemi, proto je zapotřebí využít úsporný režim modulu. Dostupné úsporné režimy a jejich spotřeba je uvedena v tabulce.+Modul umí pracovat jako klient, server i AP. Resetovací signál je aktivní v logické nule a příslušný pin s označením RST musí být osazen externím pull-up odporem. Pin s označením CH_PD povoluje rádiovou komunikace a je aktivní v logické jedničce. Programování tohoto modulu probíhá přes sériovou komunikaci. Před samotným programováním je zapotřebí uvést modul do flashovacího režimu, toto se provede resetem při kterém je pin GPIO0 držen ve stavu logické nuly. Pro programování modu lze využít vývojové prostředí Arduino IDE. Dveřní alarm navržený v tomto projektu bude napájen bateriemi, proto je zapotřebí využít úsporný režim modulu. Dostupné úsporné režimy a jejich spotřeba je uvedena v tabulce.
  
 ^ Item           ^ Modem sleep     ^ Light sleep        ^ Deep sleep      ^ ^ Item           ^ Modem sleep     ^ Light sleep        ^ Deep sleep      ^
Řádek 27: Řádek 27:
 | CPU            | ON              | Pending ​           | OFF             | | CPU            | ON              | Pending ​           | OFF             |
 | Current ​       | 15 mA           | 0.4 mA             | 20 µA           | | Current ​       | 15 mA           | 0.4 mA             | 20 µA           |
 +
 +Jako nejvhodnější se jeví režim Deep sleep s proudovým odběrem pouhých 20 µA. Probuzení modulu z tohoto režimu lze provést pouze resetem na pinu RST.
 +
 +Pro převod POST požadavku na email nebo SMS jsem použil server IFTTT.com. Na tomto serveru si každý uživatel může vytvořit tzv. Maker ke kterému obdrží jedinečný klíč (ApiKey). Tímto maker lze spouštět jednotlivé applety, které mohou mimo jiné zasílat emaily nebo SMS na ověřené adresy a telefonní čísla. Jediným omezením je zaslání maximálně 10 SMS na měsíc. Požadavkem na maker můžeme také zasílat užitečná data, která lze vložit to textu samotné zprávy.
  
 ---- ----
Řádek 32: Řádek 36:
 ===== Hardware ===== ===== Hardware =====
  
-----+Pro reset uspaného modulu při otevření dveří byl vytvořen detektor náběžné hrany, tento detektor vytváří resetovací impulz. Aby se příliš nezvedal proudový odběr z baterie, je detektor navržen jako RC derivační člen, jehož výstup je zesílen a invertován tranzistorem T1. Při zavřených dveřích je odběr navýšen o 7 µA a při otevřených dveřích je odběr detektoru 20 µA.
  
-===== Software =====+{{ :​2016:​wifi_alarm_s_esp8266:​schema.png?​nolink |}} 
 + 
 +Obr. 4 Schéma zapojení. 
 + 
 +Na následujícím obrázku jsou průběhy napětí změřené na vstupu a výstupu detektoru náběžné hrany. Vstupem je jazýčkový kontakt umístěný na dveřích. Výstupní signál je veden přímo na pin RST. 
 + 
 +{{ :​2016:​wifi_alarm_s_esp8266:​kontakt.jpeg?​nolink |}} 
 +{{ :​2016:​wifi_alarm_s_esp8266:​detektor.jpeg?​nolink |}} 
 +Obr. 5 Vstupní a výstupní napětí detektoru náběžné hrany.
  
 ---- ----
 +===== Software =====
  
 +Program pro mikroprocesor ESP8266 byl napsán ve vývojovém prostředí Arduino IDE a jsou v něm využity funkce knihovny ESP8266WiFi.h. Na samotném začátku programu je definováno jméno sítě a její heslo, dále je definován server ke kterému se modul bude připojovat a apiKey pro konkrétní Maker. Ve funkci setup() je nastavena komunikace UART a modul se pokusí připojit do sítě, pokud se připojení nezdaří do definovaného času, modul vypíše informaci o této situaci a přejde do hlubokého spánku. Pokud se připojení zdaří modul vypíše na UART IP adresu kterou obdržel z DHCP serveru. Ve funkci loop() se alarm pokusí navázat spojení se serverem, pokud se spojení na portu 80 nezdaří opět modul vypíše error a přejde do režimu spánku. V případě navázání spojení je vytvořen a odeslán POST požadavek. Po tomto odeslání se modul uspí a čeká na další reset, který je vytvořen otevřením dveří.
 +
 +    #include <​ESP8266WiFi.h>​
 +    ​
 +    #define EMAIL     //if define EMAIL then send email else send SMS
 +    ​
 +    const char* ssid =      "​xxxxxxxx"; ​        //​your SSID
 +    const char* password =  "​yyyyyyyy"; ​        //​your PASSWORD
 +    const char* host =      "​maker.ifttt.com"; ​ //webserver
 +    const char* apiKey =    "​zzzzzzzz"; ​        //​your Api Key
 +    ​
 +    #ifdef EMAIL
 +      const char* applets = "​Alarm_email"; ​     //Applets name for Email
 +    #else
 +      const char* applets= ​ "​Alarm_sms"; ​       //Applets name for SMS
 +    #endif
 +    ​
 +    const char* text =      "Dvere byly otevreny, vyhlasen poplach !!!"; ​ //Send text in Email or SMS
 +    const int   port = 80;         //​http port
 +    const int   wait = 100;        //waiting to connect wifi (wait * 0.1s)
 +    const int   ​baudrate = 115200; //UART baud rate
 +    ​
 +    void setup() {
 +        int counter = 0;
 +      ​
 +        Serial.begin(baudrate);​
 +        delay(100);
 +        ​
 +        Serial.println();​
 +        Serial.println();​
 +        Serial.println("​Door Alarm"​);​
 +        Serial.println();​
 +        Serial.print("​Connecting to ");
 +        Serial.println(ssid);​
 +    ​
 +        WiFi.begin(ssid,​ password);
 +    ​
 +        while (WiFi.status() != WL_CONNECTED) {
 +          delay(100);
 +          Serial.print(">"​);​
 +          counter++;
 +          if(counter > wait) {
 +            Serial.println();​
 +            Serial.println("​Connection failed"​);​
 +            Serial.println("​ESP8266 go to sleep mode"​);​
 +            ESP.deepSleep(0);​
 +          }
 +        }
 +      ​
 +        Serial.println(""​);​
 +        Serial.println("​WiFi connected"​);  ​
 +        Serial.println("​IP address: ");
 +        Serial.println(WiFi.localIP());  ​
 +    }
 +    ​
 +    void loop() {
 +    ​
 +        Serial.print("​Connecting to ");
 +        Serial.println(host);​
 +        ​
 +        WiFiClient client;
 +        if (!client.connect(host,​ port)) {
 +          Serial.println("​Connection failed"​);​
 +          Serial.println("​ESP8266 go to sleep mode"​);​
 +          ESP.deepSleep(0);​
 +        }
 +    ​
 +        String url = "/​trigger/";​
 +        url += applets;
 +        url += "/​with/​key/";​
 +        url += apiKey;
 +        ​
 +        int len = strlen(text);​
 +        len += 7;
 +        ​
 +        Serial.print("​Requesting URL: ");
 +        Serial.println(url);​
 +        client.print(String("​POST ") + url + " HTTP/​1.1\r\n"​ +
 +                            "Host: " + host + "​\r\n"​ + 
 +                            "​Content-Type:​ application/​x-www-form-urlencoded\r\n"​ + 
 +                            "​Content-Length:​ " + len + "​\r\n\r\n"​ +
 +                            "​value1="​ + text + "​\r\n"​);​
 +    ​
 +        Serial.println("​ESP8266 go to sleep mode"​);​
 +        ESP.deepSleep(0);​
 +    }
 +
 +Jak vypadá výpis alarmu na sériovou linku při bezchybné činnosti je vidět na následujícím obrázku.
 +
 +{{ :​2016:​wifi_alarm_s_esp8266:​terminal.png?​nolink |}}
 +
 +Obr. 6 Výpis do terminálu.
 +
 +Jak mohou vypadat jednotlivé Applety na serveru IFTTT.com je vidět na následujícím obrázku.
 +
 +{{ :​2016:​wifi_alarm_s_esp8266:​ifttt.png?​nolink |}}
 +
 +Obr. 7 Applety na serveru IFTTT.
 +
 +----
 ===== Ukázkové video ===== ===== Ukázkové video =====
 +
 +Video s alarmem odesílajícím email.
 +{{ youtube>​ITOvel4OPCg?​medium }}
 +
 +Video s alarmem odesílajícím SMS.
 +{{ youtube>​KvaLJijYAmU?​medium }}
 +
 +Na videu je použit jazýčkový kontakt typu NO a proto obvod detekuje přiložení magnetu. Pro detekci vzdálení magnetu je třeba zapojení osadit kontaktem typu NC.
  
 ---- ----
  
 ===== Závěr ===== ===== Závěr =====
 +
 +V tomto projektu jsem se seznámil s obvodem ESP8266 a funkcemi serveru IFTTT.com. Dále jsem navrhl obvod pro dveřní alarm a napsal program pro mikroprocesor. Takovéto řešení alarmu není příliš spolehlivé,​ protože při výpadku síťového napájení routeru, nebo při jiném výpadku připojení k internetu je tento alarm nefunkční. Navíc zde není řešena možnost odpojení alarmu majitelem objektu, takže každý průchod je alarmem nahlášen. Zapojení je navrženo s ohledem na spotřebu, protože se jedná o bateriemi napájený obvod. Proudový odběr v režimu hlubokého spánku je kolem 400 µA, tuto spotřebu lze snížit odletováním PWR LED z modulu na pouhých 27 µA při zavřených dveřích a 40 µA při otevřených dveřích.
2016/esp8266-alarm.1484390984.txt.gz · Poslední úprava: 2017/01/14 11:49 autor: Luboš Tlustoš