Chytrá WiFi zásuvka Sonoff S26
Chytrá domácnost umožňuje ovládat elektrické spotřebiče na dálku. A přesně to umožní zásuvka Sonoff S26.
Už jste se zajisté setkali s použitím sběrnice I2C v různých návodech a projektech. Často se ale stává, že připojený modul nereaguje či nevíme, na které adrese se nachází. Pro tyto účely jsem připravil z volně dostupných kódů jeden ucelený I2C skener, který nám umožní na různých Arduino deskách prohledat všechna připojená I2C zařízení, a to i s nastavením libovolných pinů.
Na začátku programu se nachází připojení potřebné knihovny Wire, která je součástí instalace Arduina. A poté můžeme zapsat čísla propojovacích I2C pinů, pokud je možné je u naší desky přenastavit jako například u desek s čipem ESP.
Ve funkci setup provedeme zahájení komunikace po sběrnici I2C, přičemž můžeme vybrat mezi zahájením bez definice pinů (například u Arduino UNO) či použít druhou variantu s nastavenými čísly pinů výše. Jako druhý bod pak zahájíme komunikaci po sériové lince, abychom si mohli vypsat výsledky hledání do počítače.
Nekonečná smyčka loop obsahuje na svém začátku vytvoření pomocných proměnných, do kterých si budeme ukládat výsledky hledání. V dalším kroku se totiž nachází for smyčka, která projde adresy v rozsahu 1 až 126, co odpovídá povolenému rozsahu adres pro I2C zařízení. V této smyčce vždy zahájíme komunikaci se zařízením na dané adrese, poté ji ukončíme a ověříme, jestli nám zařízení něco odpoví. Pokud nám odpoví hodnotou nula, tak víme, že existuje, a proto při splnění této if podmínky vypíšeme jeho adresu po sériové lince společně s inkrementací čítače nalezených zařízení. Další možnou odpovědí je hodnota 4, která odpovídá chybě v komunikaci. V tomto případě opět o této situaci vypíšeme hlášku na sériovou linku.
Po ukončení vyhledávací for smyčky zkontrolujeme počítadlo zařízení, přičemž jak v případě nula zařízení, tak alespoň jednoho vypíšeme o tomto stavu informaci na sériovou linku a vyčkáme nastavený čas před novým během smyčky loop.
// Arduino I2C skener // navody.dratek.cz // připojení potřebné knihovny #include <Wire.h> // nastavení čísel propojovacích pinů #define I2C_SDA 21 #define I2C_SCL 22 void setup() { // zahájení komunikace po I2C sběrnici, // lze použít buď výchozí piny s variantou () // nebo specifikovat piny např. u ESP desek (SDA, SCL) Wire.begin(); //Wire.begin(I2C_SDA, I2C_SCL); // zahájení komunikace po sériové lince Serial.begin(9600); Serial.println("Start I2C skeneru..."); } void loop() { // vytvoření pomocných proměnných byte chyba, adresa; int pocetZarizeni = 0; Serial.println("Zacatek hledani..."); // smyčka pro hledání zařízení // I2C zařízení mohou mít adresu 1-126 for (adresa = 1; adresa < 127; adresa++ ) { // zahájení komunikace a jeho následné ukončení, // při ukončení probíhá detekce zařízení pomocí // kontroly návratové hodnoty Wire.beginTransmission(adresa); chyba = Wire.endTransmission(); // pokud nám zařízení odpoví '0', // tak funguje správně if (chyba == 0) { // vytištění informací o zařízení včetně // jeho adresy v hexa formátu Serial.print("I2C zarizeni nalezeno na adrese 0x"); Serial.print(adresa, HEX); Serial.println(" !"); // inkrementace počítadla zařízení pocetZarizeni++; } // při chybě v komunikaci je chybný výstup 4 else if (chyba == 4) { // vytištění informací o zařízení včetně // jeho adresy v hexa formátu Serial.print("Neznama chyba na adrese 0x"); Serial.println(adresa, HEX); } } // kontrola počítadla zařízení if (pocetZarizeni == 0) { // nebylo nalezeno žádné zařízení, protože neproběhla inkrementace Serial.println("Zadne I2C zarizeni nebylo nalezeno."); } else { // oznámení o konci hledání Serial.print("Konec hledani, nalezeno "); Serial.print(pocetZarizeni); Serial.println(" zarizeni."); } // pauza před novým během smyčky delay(5000); }
Po nahrání uvedeného ukázkového kódu do Arduino UNO desky dostaneme například tento výsledek v Sériovém monitoru, přičemž při prvním hledání nebylo nic připojeno a pro druhé hledání jsem připojil modul se senzorem BMP085:
Zacatek hledani... Zadne I2C zarizeni nebylo nalezeno. Zacatek hledani... I2C zarizeni nalezeno na adrese 0x77 ! Konec hledani, nalezeno 1 zarizeni.
I2C skener je vhodný program pro situace, kdy máte před sebou nový I2C senzor a chcete si ověřit, že je správně připojený či jednoduše zjistit jeho adresu. U některých modulů lze měnit pomocí jednoho či více pinů výslednou I2C adresu a někdy se může stát, že ji výrobce nastaví jinak, než bychom čekali. Díky tomuto programu pak můžeme prohledat všechny adresy a rychle vědět, na které je naše zařízení k dispozici. A pro desky jako je například ESP32, u kterých lze I2C sběrnici nastavit na různé piny, můžeme toto nastavení pohodlně provést na začátku programu.
Seznam použitých komponent:
https://dratek.cz/arduino/1258-klon-arduino-uno-r3-atmega328p-ch340g-usb-typ-b-kabel-1459967190.html
https://dratek.cz/arduino/1581-esp-32s-esp32-development-board-2-4ghz-dual-mode-wifi-bluetooth-antenna-module.html
Chytrá domácnost umožňuje ovládat elektrické spotřebiče na dálku. A přesně to umožní zásuvka Sonoff S26.
e-Paper displeje už jsou dostupné i pro bastlení za rozumné ceny a pro jejich ovládání se hodí tento Driver.