Vlastní Arduino kód pro ovládání chytré zásuvky Sonoff S20 s ESP8266
- January 30 2022
- Návody a rady / Tutorials
- 2214x Přečteno
Před lety jsem si koupil chytrou Wi-Fi zásuvku (vypínač) k televizi + Raspberry Pi + repro atd. Při používání mě ale hrozně štvala nutnost mít aplikaci ewLink, který se strašně dlouho připojoval na server, celá aplikace byla zbytečně nepřehledná a aplikace mě neustále odhlašovala. Teď, po letech, jsem zásuvku rozebral a přeprogramoval pro spínání pomocí služby The IoT Guru Cloud.
Zásuvku Sonoff S20 řídí populární a známý čip ESP8266 - ten najdete ve všech levných zařízeních.
Přeprogramování je velmi jednoduché, výrobce nebrání přeprogramování - třeba zamčená paměť pro nahrání, nedostupné programovací konektory atd.
Po otevření zásuvky (3 křížové šrouby) se před vámi otevře jednoduchý plošňák rozdělený na 2 části - silová, napájecí se spínacím relé a druhá ovládací s ESP8266.
Na té ovládací je čip ESP8266, externí paměť, stabilizátor a nějaké další smetí jako kondíky, rezistory.
A také tam najdete místo pro konektor se čtyřmi dírami s roztečí 2.54 mm. To je programovací konektor, kam musíte přivést 3.3V, GND, TX a RX.
!!! Přeprogramování musí probíhat bez zapojené zásuvky !!! Na vlastní nebezpečí !!!
Na stránce tasmota jsem našel obrázek s rozložením pinů, protože moje verze už je bez popisků, ale pinout se shoduje.
Celá domácnost mi běží na službě The IoT Guru Cloud, proto jsem nechtěl použít Tasmota.
Zdroj: https://tasmota.github.io/docs/devices/Sonoff-S20/#serial-connection
K zásuvce je dostupné i schéma zapojení, které je najdete na wiki iteadstudio - https://wiki.iteadstudio.com/File:S20_EU.SCH.pdf
Ze schématu je vidět, že LED - zelená je připojena přímo na pin ESP8266, GPIO13.
Modrá LED je zapojena přes tranzistor společně s relátkem na GPIO12. Tedy když svítí modrá LED, je sepnuto i RELÉ. Nelze vypnout modrou LED bez toho, aby stále spínalo relé.
Tlačítko je zase připojeno na GPIO0. A tento GPIO0 právě potřebujeme pro nahrání našeho programu.
!!! Přeprogramování musí probíhat bez zapojené zásuvky !!! Na vlastní nebezpečí !!!
Postup je následující:
Propojíme USB-UART převodník k zásuvce (ale nezapojujeme do počítače):
3.3V - 3.3V
GND - GND
TX - RX
RX - TX
Zmáčkneme tlačítko a držíme, zasuneme USB převodník do počítače, poté tlačítko uvolníme. ESP je v bootloader módu a čeká na přichozí pakety z UARTu.
V Arduino IDE programujeme jako "General ESP8266". Po nahrání restartujte zásuvku odpojením od 3.3V napětí.
A teď přejdeme ke službě The IoT Guru Cloud.
Celý koncept zařízení - nódů a fieldů ukazuje obrázek níže.
Po registraci na stránkách si vytvoříme nové zařízení - třeba s názvem smartplugs.
Vytvoříme nový Node - třeba sonoffs20
A vytvoříme nový Field - třeba general_plug
Každý Node a Field má unikátní název, identifikátor a klíč. Některé z těchto dat potřebujete k připojení na server - jaké jsou popsány v jednotlivých příkladech.
Například:
/**
* Initialize the connection with the cloud.
*/
String userShortId = "xxxxxxxxxxxxxxxxxxxxxx";
String deviceShortId = "yyyyyyyyyyyyyyyyyyyyyy";
String deviceKey = "zzzzzzzzzzzzzzzzzzzzzz";
IoTGuru iotGuru = IoTGuru(userShortId, deviceShortId, deviceKey);
/**
* Constants of the MQTT channel check.
*/
String nodeShortId = "nnnnnnnnnnnnnnnnnnnnnn";
String fieldName = "relay";
Device setting vypadá například takto.
Pro ovládání zásuvky potřebujete aplikaci IoT Guru Cloud. Tu najdete jak pro telefony Apple, tak i s OS Android.
https://play.google.com/store/apps/details?id=live.iotguru&hl=cs&gl=US
Po příhlášení si v aplikaci můžete přidat různé prvky - grafy různých velikostí, zobrazení veličiny, tahadla, nebo i tlačítka ON / OFF. Což potřebujeme pro tento případ my.
Svůj kód jsem založil na jejich vzorovém kódu pro spínání
https://github.com/IoTGuruLive/theiotguru-arduino-library/blob/master/examples/05_mqtt_relay_android/05_mqtt_relay_android.ino
!!! Přeprogramování musí probíhat bez zapojené zásuvky !!! Na vlastní nebezpečí !!!
Kód jsem upravil pro mé potřeby, tedy:
- během připojování k Wi-Fi svítí zelená LED
- po připojení zhasne
- FW funguje s původním tlačítkem - pokud jej zmáčknu, relé se vždy vypne
- pokud svítí modrá LED, je sepnuto i RELÉ - jinak to kvůli HW nejde udělat.
- kód najdete na mém githubu https://github.com/petus/Sonoff_S20-Arduino-IoT_Guru_Cloud/tree/main
A závěrem, aplikace The IoT Guru Cloud se přihlásí během chvíle, reakce na událost - zmáčknutí tlačítka je téměř okamžitá.
Do IoT Guru Cloud neposílám jenom data pro zásuvku, ale i data z mé meteostanice, HomeMonitoru s čidlem CO2 a další.