WeMos D1 je vývojová deska, která obsahuje WiFi modul ESP8266. Tento komunikační modul od firmy Espresiff dokáže pracovat s WiFi na frekvenci 2,4 GHz a to jak v módu klienta, tak i v módu stanice. Velmi zajímavou možností je také využití modulu ESP8266 jako Arduino čipu, kdy právě deska WeMos D1 obsahuje rozložení pinů skoro identické s Arduino UNO. A právě toto rozložení nám také umožňuje využít různé Arduino Shieldy. Modul ESP8266 obsahuje celkem 11 vstupně-výstupních pinů a jeden analogový pin. Je však nutné zdůraznit, že všechny piny pracují pouze na napětí +3,3 Voltů a případné připojení 5 V datových pinů může modul ESP zničit. Pokud tedy chceme propojit s WeMos deskou ostatní moduly, je nutné vyhledat kompatibilitu s napájením na 3,3 V.
Pro možnost programování ESP8266 skrze Arduino IDE je nutné provést několik kroků. Prvním krokem je otevření Arduino IDE a následné otevření nabídky Soubor-Vlastnosti.
Po úspěšném vložení odkazu na ESP desky pokračujeme do Manažéru desek pomocí otevření nabídky Nástroje-Vývojová deska-Manažér desek.
Po otevření Manažéru desek se nám otevře dialogové okno, kde stačí do vyhledávacího řádku napsat text „esp8266“ a poté kliknout na vyhledaný výsledek a potvrdit instalaci.
Jakmile proběhne úspěšně instalace, máme skoro hotovo. V posledním kroku tedy už jen znovu otevřeme nabídku Nástroje-Vývojová deska a zde zvolíme naší vývojovou desku „Wemos D1“.
Jako první ukázkový program je připraveno blikání dvěma dostupnými LED diodami. První LED dioda je přímo na modulu, ke které máme přístup v Arduino IDE přes klíčové slovo LED_BUILTIN. Tato LED dioda je zvláštní v tom, že má obrácenou logiku řízení, tedy pokud jí chceme zapnout, je nutné na ní přivést logickou nulu. Druhá LED dioda je připojena na pin 14 a je řízena klasickým způsobem. Po nastavení obou LED diod jako výstupních v podprogramu setup se přesuneme rovnou na nekonečnou smyčku loop, kde jako první blikneme rychleji vestavěnou LED diodou a následně blikneme pomaleji LED diodou na pinu 14.
// ESP8266 blikání dvou LED diod
// nastavení propojovacího pinu LED diody
#define LEDka 14
void setup() {
// nastavení obou LED diod jako výstupních
pinMode(LED_BUILTIN, OUTPUT);
pinMode(LEDka, OUTPUT);
}
void loop() {
// blikání vestavěnou diodou na ESP,
// pro zapnutí musíme přivést logickou 0 - LOW
digitalWrite(LED_BUILTIN, LOW);
delay(500);
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
// blikání LED diodou na desce,
// pro zapnutí musíme přivést logickou 1 - HIGH
digitalWrite(LEDka, HIGH);
delay(1000);
digitalWrite(LEDka, LOW);
delay(1000);
}
Při nahrávání programu je možné, že bude nutné snížit rychlost nahrávání. Pokud tedy máte problém s chybovými hláškami při nahrávání, stačí otevřít nabídku Nástroje-Upload Speed a zde zvolit například rychlost 115200 kbps.
Druhý ukázkový program už je praktičtější a obsahuje skener WiFi sítí v okolí modulu ESP8266. Program na začátku obsahuje připojení potřebné knihovny a poté v podprogramu setup jako první nastavení komunikace po sériové lince. Pro úspěšné vyhledávání WiFi sítí je nutné jako další krok nastavit WiFi modul do módu stanice a pro jistotu provést odpojení od jakékoliv sítě. V nekonečné smyčce loop vytiskneme informaci o zahájení skenování po sériové lince a následně načteme do vytvořené proměnné počet sítí v okolí včetně všech dostupných informací o těchto sítích. Poté zkontrolujeme počet načtených sítí a v případě nuly pouze vypíšeme informaci o nedostupnosti viditelných sítí. Pokud ale máme nějaké sítě v dosahu, provedeme v následujících řádcích vytištění informací o nich. Jako první tedy vytiskneme celkový počet načtených sítí a následně pomocí for smyčky vytiskneme pro každou WiFi síť její název, sílu signálu a druh zabezpečení. Na konci celého programu pak už jen vyčkáme pět vteřin před novým načtením seznamu sítí.
// ESP8266 WiFi skener
// připojení potřebné knihovny
#include "ESP8266WiFi.h"
void setup() {
// zahájení komunikace po sériové lince
Serial.begin(9600);
// nastavení WiFi do módu stanice a odpojení od předchozí sítě
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
}
void loop() {
Serial.println("Zahajeni skenovani..");
// načtení WiFi sítí v okolí a uložení jejich počtu do proměnné
int n = WiFi.scanNetworks();
// v případě nulového počtu sítí vypíšeme informaci
// po sériové lince
if (n == 0) {
Serial.println("Zadne viditelne WiFi site v okoli.");
}
// pokud byly nalezeny WiFi sítě v okolí,
// vypíšeme jejich počet a další informace
else {
Serial.print(n);
Serial.println(" WiFi siti v okoli. Seznam:");
// výpis všech WiFi sítí v okolí,
// vypíšeme název, sílu signálu a způsob zabezpečení
for (int i = 0; i < n; ++i)
{
Serial.print(i + 1);
Serial.print(": ");
Serial.print(WiFi.SSID(i));
Serial.print(" (");
Serial.print(WiFi.RSSI(i));
Serial.print(")");
Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":"*");
delay(10);
}
}
// ukončení výpisu
Serial.println("");
// pauza po dobu pěti vteřin před novým skenováním
delay(5000);
}
Po nahrání druhého ukázkového kódu do Arduino ESP8266 desky dostaneme například tento výsledek:
Třetí ukázkový kód obsahuje jednoduchý příklad využití ESP jako webserveru v domácí síti. Na začátku programu se nachází připojení všech potřebných knihoven a vytvoření proměnných s uloženým nastavením názvu a hesla pro WiFi síť, do které se budeme připojovat. Jako další je provedena inicializace webserveru na portu 80 a nastaven propojovací pin indikační LED diody. Podprogram zpravaHlavni obsahuje kód, který se provede při přístupu na hlavní stránku. Jako první tedy zapneme LED diodu a poté vytvoříme proměnné s načtením informací o analogové hodnotě z pinu A0 společně s časem od spuštění Arduina. Následně vytvoříme proměnnou se zprávou, do které postupně přidáme všechny chtěné informace. Na konci provedeme příkazem send vytištění zprávy se statusem 200, tedy OK, a vypneme LED diodu. Podprogram zpravaNeznamy funguje obdobným způsobem, jen slouží pro informování o přístupu na neexistující odkaz webserveru. Opět tedy blikneme LED diodou a vypíšeme kompletní informace o neexistujícím odkazu včetně metody a argumentů, s kterými bylo přistupováno. Podprogram setup na svém začátku obsahuje nastavení LED diody jako výstupní společně s jejím vypnutím. Následně zahájíme komunikaci po sériové lince a zahájíme komunikace s WiFi routerem pomocí našich uložených přihlašovacích údajů. Po zahájení následuje while smyčka, která vyčkává na potvrzení připojení a v mezičase tiskne tečky po sériové lince. Jakmile jsme úspěšné připojení, vytiskneme informace o připojení po sériové lince včetně názvu připojené sítě a přidělené IP adrese z routeru. Poté proběhne kontrola MDNS responderu. Jako další je nutné přidělit tištění zpráv k jednotlivým adresám. Pro přístup na IP adresu samotnou tedy například přidělíme volání podprogramu zpravaHlavni. Avšak není nutné pro každou zprávu vytvářet podprogram, proto tedy následuje ukázka s odkazem /ukázka, který obsahuje vytištění krátké zprávy. Pro přístup na jakoukoli jinou nedefinovanou stránku slouží nastavení onNotFound, ke kterému přidělíme náš podprogram zpravaNeznamy. Po veškerém nastavení pak stačí už jen zahájit aktivitu webserveru. Nekonečná smyčka loop v tomto případě obsahuje pouze kontrolování připojených klientů, kdy při detekci klienta už sám program provede veškerou práci skrze nastavení provedená v podprogramu setup.
// ESP8266 Web Server
// připojení potřebných knihoven
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
// vytvoření proměnných s názvem WiFi sítě a heslem
const char* nazevWifi = "nazev";
const char* hesloWifi = "12345";
// incializace webserveru na portu 80
ESP8266WebServer server(80);
// propojovací pin indikační LED diody
#define LEDka 14
// podprogram s hlavní zprávou, která je vytištěna
// při zadání IP adresy do prohlížeče
void zpravaHlavni() {
// zapnutí LED diody
digitalWrite(LEDka, HIGH);
// načtení hodnoty analogového pinu a času
// od spuštění Arduina ve formátu String
String analog = String(analogRead(A0));
String cas = String(millis()/1000);
// vytvoření zprávy, která bude vytištěna
// v prohlížeči (n znamená nový řádek)
String zprava = "Ahoj Arduino svete!n";
zprava += "Analogovy pin A0: ";
zprava += analog;
zprava += "nCas od spusteni Arduina je ";
zprava += cas;
zprava += " vterin.";
// vytištění zprávy se statusem 200 - OK
server.send(200, "text/plain", zprava);
// vypnutí LED diody
digitalWrite(LEDka, LOW);
}
// podprogram s chybovou zprávou, která je vytištěna
// při zadání IP adresy s neexistující podstránkou
void zpravaNeznamy() {
// zapnutí LED diody
digitalWrite(LEDka, HIGH);
// vytvoření zprávy s informací o neexistujícím odkazu
// včetně metody a zadaného argumentu
String zprava = "Neexistujici odkaznn";
zprava += "URI: ";
zprava += server.uri();
zprava += "nMetoda: ";
zprava += (server.method() == HTTP_GET)?"GET":"POST";
zprava += "nArgumenty: ";
zprava += server.args();
zprava += "n";
for (uint8_t i=0; i<server.args(); i++){
zprava += " " + server.argName(i) + ": " + server.arg(i) + "n";
}
// vytištění zprávy se statusem 404 - Nenalezeno
server.send(404, "text/plain", zprava);
// vypnutí LED diody
digitalWrite(LEDka, LOW);
}
void setup(void) {
// nastavení LED diody jako výstupní a její vypnutí
pinMode(LEDka, OUTPUT);
digitalWrite(LEDka, LOW);
// zahájení komunikace po sériové lince
Serial.begin(9600);
// zahájení komunikace po WiFi s připojením
// na router skrze zadané přihl. údaje
WiFi.begin(nazevWifi, hesloWifi);
// čekání na úspěšné připojení k routeru,
// v průběhu čekání se vytiskne každých
// 500 milisekund tečka po sériové lince
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
// odřádkování a výpis informací o úspěšném připojení
// včetně přidelené IP adresy od routeru
Serial.println("");
Serial.print("Pripojeno k WiFi siti ");
Serial.println(nazevWifi);
Serial.print("IP adresa: ");
Serial.println(WiFi.localIP());
// kontrola funkčnosti MDNS
if (MDNS.begin("esp8266")) {
Serial.println("MDNS responder je zapnuty.");
}
// nastavení vytištění hlavní zprávy po přístupu
// na samotnou IP adresu
server.on("/", zpravaHlavni);
// pokud chceme vytisknout pouze menší zprávy, není
// nutné je vytvářet v podprogramech jako zpravaHlavni,
// viz. ukázka níže
// nastavení vytištění jiné zprávy po přístupu na
// podstránku ukazka, tedy např. 10.0.0.31/ukazka
server.on("/ukazka", []() {
String zprava = "Ukazka odkazu pro vice stranek.";
server.send(200, "text/plain", zprava);
});
// nastavení vytištění informací o neznámém
// odkazu pomocí podprogramu zpravaNeznamy
server.onNotFound(zpravaNeznamy);
// zahájení aktivity HTTP serveru
server.begin();
Serial.println("HTTP server je zapnuty.");
}
void loop(void) {
// pravidelné volání detekce klienta,
// v případě otevření stránky se provedou
// funkce nastavené výše
server.handleClient();
delay(10);
}
Po nahrání třetího ukázkového kódu do Arduino ESP8266 desky dostaneme například tento výsledek v Sériovém monitoru a v prohlížeči při přístupu na samotnou IP adresu:
Pripojeno k WiFi siti SilentB
IP adresa: 10.0.0.31
MDNS responder je zapnuty.
HTTP server je zapnuty.
Ahoj Arduino svete!
Analogovy pin A0: 3
Cas od spusteni Arduina je 54 vterin.
WeMos D1 s komunikačním modulem ESP8266 je velice všestranná vývojová deska, která vyniká svým vysokým výkonem, velkou kompatibilitou s deskou Arduino UNO, WiFi funkcionalitou a také například svojí výhodnou cenou. Je však nutné zdůraznit poměrně silnou nevýhodu, kterou jsou digitální pin a jeden analogový pin pracující pouze na napětí 3,3 V. Pro práci s dalšími moduly je tedy nutné tyto pečlivě vybírat nebo využít převodníky napěťových úrovní. Zde je ještě uveden seznam všech pinů včetně jejich funkcí pro používané sběrnice.
Pin
Funkce
ESP-8266 Pin
TX
TXD
TXD
RX
RXD
RXD
A0
Analogový vstup, max 3,3V
A0
D0
IO
GPIO16
D1
IO, SCL
GPIO5
D2
IO, SDA
GPIO4
D3
IO, 10k Pull-up
GPIO0
D4
IO, 10k Pull-up, BUILTIN_LED
GPIO2
D5
IO, SCK
GPIO14
D6
IO, MISO
GPIO12
D7
IO, MOSI
GPIO13
D8
IO, 10k Pull-down, SS
GPIO15
G
Zem
GND
5V
5V
-
3V3
3.3V
3.3V
RST
Reset
RST
Pokud chcete vyzkoušet také ukládání údajů na internet pomocí ESP8266, podívejte se na další článek o Thingspeaku.
Je možné také zakoupit další vývojové desky s ESP8266 nebo ESP modul samotný. Při programování stačí použít příslušný název desky nebo možnost Generic ESP8266. A pokud používáte samotný modul, je nutné ho propojit s počítačem skrze UART-USB převodník kompatibilní s napětím 3,3 V.
Motorizovaný kulový ventil. Má široké uplatnění v různých průmyslových a obytných instalacích. Může být integrován do automatických systémů řízení, kde je možné ovládat průtok dálkově nebo automatizovaně podle předem nastavených podmínek.
Motorizované kulové vently s obvodem CR01, CR02, CR03 nebo CR04 je poměrně jednoduché po elektrické stránce správně zapojit. U ventilu s obvodem CR05 je tomu ale trochu jinak - ventil si sám nehlídá krajní polohy otevření, nebo zavření. Z toho důvodu vznikl tento článek, ukazující některé výhody, použití a především správné zapojení ventilu s obvodem CR05.