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.

ESP8266 - vývojová deska WeMos D1

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.

ESP8266 - vývojová deska WeMos D1 1

V otevřeném dialogovém okně najdeme kolonku „Správce dalších desek URL“, do kterého vložíme odkaz http://arduino.esp8266.com/stable/package_esp8266com_index.json. Skrze tento odkaz umožníme do prostředí IDE přidat podporu pro ESP8266.

ESP8266 - vývojová deska WeMos D1 2

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.

ESP8266 - vývojová deska WeMos D1 3

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.

ESP8266 - vývojová deska WeMos D1 4

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“.

ESP8266 - vývojová deska WeMos D1 5

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.

ESP8266 - vývojová deska WeMos D1 rychlosti

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:

Zahajeni skenovani..
3 WiFi siti v okoli. Seznam:
1: SilentB (-25)*
2: ** (-69)*
3: *** (-74)*

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 odkaz\n\n";
  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.

Seznam použitých komponent:

http://dratek.cz/arduino/1457-esp8266-esp-12e-ota-wemos-d1-ch340-wifi-arduino-ide-uno-r3-1478466175.html

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.

http://dratek.cz/arduino/1235-nodemcu-lua-esp8266-ch340-wi-fi-1458422121.html

http://dratek.cz/arduino/911-internet-veci-je-tady-tcp-ip-wifi-esp8266-1420990568.html

http://dratek.cz/arduino/1230-esp8266-wifi-vyvojova-deska-1458416459.html

http://dratek.cz/arduino/1162-internet-veci-nodemcu-lua-wi-fi-esp8266-cp2102-1449950921.html

http://dratek.cz/arduino/1351-esp8266-esp-12f-vyvojovy-modul-s-ch340-zakladnou-a-tlacitky-1466633636.html

http://dratek.cz/arduino/1455-esp8266-wifi-modul-esp-07-bezdratovy-1478175998.html

http://dratek.cz/arduino/1352-esp8266-bezdratovy-modul-esp-12f-ap-sta-1466634666.html

FB tw

Další podobné články