User manual
Automatická konfigurace
Následující základní příkazy můžete manuálně otestovat. Dozvíte se zároveň jakým způsobem mohou
být příkazy automaticky používány samotným kontrolérem. Naučíte se i jiné příkazy, které můžete
použít pro testování dosažitelnosti počítače nebo serveru v síti. V následujícím experimentu bude
odeslán diagnostický příkaz (ping) na internetový server Google. Použít proto můžete program
P02_GooglePing, který automatizuje celou řadu různých procesů, které jinak musíte zadávat ručně.
Kontrolér odešle příkaz do ESP modulu v takovém pořadí, v jakém dochází k připojení do WLAN.
Různé časové limity tak dávají modulu dostatek času na odeslání odpovědi. Proto, aby mohl program
správně pracovat, musíte zadat pro vaší WLAN data #define SSID a #define PASSWORD přímo
na začátek zdrojového kódu programu. Modul však vyžaduje přístup k internetu, aby mohl spustit
svůj poslední příkaz. Příkaz AT+PING se odešle na všechna zařízení v síti. Příkaz „ping“ odešle dotaz
ke zjištění, zda je počítač v síti dosažitelný. V tomto případě je server Google dotazován příkazem
AT+PING=“www.google.com“. Po obdržení odpovědi se zobrazí korespondující indikace na sériovém
monitoru a LED „D3“, která je připojena k pinu D13 se aktivuje. Tím došlo k prvnímu úspěšnému
navázání komunikace s internetem.
Program
V této části ověříme funkce programu krok po kroku. Jako první se budeme zabývat komunikací
s modulem.
1) Serial communication (sériový přenos)
Tato komunikace pracuje prostřednictvím sériového softwarového rozhraní a Software-Serial-Library.
Při samotné inicializaci je nezbytné provést indikaci pinů, v tomto případě pinů 11 a 12.
#include <SoftwareSerial.h>
SoftwareSerial esp8266(11, 12);
Stejně jako u běžného sériového rozhraní můžete přenést bajty nebo celé řádky pomocí příkazů
esp8266.print nebo esp8266.println. Příkazy esp8266.find a esp8266.findUntil, díky kterým dochází
k přenosu, mohou být rovněž využity. Zároveň je díky tomu možné velmi jednoduše zachytit odezvu
modulu. Pokud se však nezobrazí očekávaný řetězec znaků, může trvat nějakou dobu, než bude
program pokračovat v dalším procesu. Doba (time-out) je definována esp8266.setTimeout. Příkaz
findUntil() je možné použít pro určení druhého řetězce znaků, u kterých dojde k zastavení vyhledávání
a návratu hodnot false coby hodnoty pro návrat. Tohoto procesu použijeme díky funkci sendCom():
//-------Controll ESP--------
boolean sendCom(String command, char respond[])
{
esp8266.println(command);
if (esp8266.findUntil(respond, "ERROR"))
{
return true;
}
else
{
debug("ESP SEND ERROR: " + command);
return false;
}
}
Při použití této funkce je nezbytné potvrdit příkaz a očekávanou hodnotu pro návrat funkce, například
AT a očekávanou hodnotu návratu OK. Zadání println() vyšle příkaz a vyčkává přijetí očekávaného
hodnoty pro návrat nebo obdržení chybového stavu ERROR. Pakliže dojde k obdržení očekávané
hodnoty, funkce vrátí hodnotu true. V opačném případě bude modul používat funkci debug() pro
návrat ESP SEND ERROR a odešle příkaz. Tím je pak velmi snadné zjistit, který příkaz způsobil
chybový stav.
Ne však všechny AT příkazy mají unikátní nebo one-line hodnotu pro návrat. Jestliže například byl
odeslán dotaz na IP adresu, není většinou předem známa hodnota. Proto druhá funkce sendCom()
bude platná pouze při zadání parametru příkazu a vrácení celého přijatého řetězce.
Řetězec by však neměl být příliš dlouhý, aby nedocházelo k přetížení bufru SofwareSerial.
String sendCom(String command)
{
esp8266.println(command);
return esp8266.readString();
}
2) Řešení problémů
Během samotného programového vývoje dojde k mnoha potížím a různým konfliktům.
Pro maximální a efektivní odstraňování programových chyb jsou na výběr 2 možnosti, které můžete
aktivovat nebo deaktivovat prostřednictvím parametrů zadávaných na začátku programu.
#define DEBUG true
Tato první možnost neprovádí žádný proces. Poskytuje pouze zjednodušený textový výstup
prostřednictvím sériového rozhraní, které je definováno jako výchozí. V případě, že konstanta DEBUG
je true, obsah řetězce Msg bude odeslán.
void debug(String Msg)
{
if (DEBUG)
{
Seriál.println(Msg);
}
}
Druhou funkci je pak možné velmi jednoduše vysvětlit. Po volání (call) funkce serialDebug,
se program přepne do trvalé smyčky (permanent loop) a od té chvíle se bude chovat jako první
testovaný SoftwareSerial program. Všechna data odeslána do kontroléru přes sériový monitor
budou předány do modulu a stejně tak i obráceně. V případě chybového stavu můžete volat
funkci a manuálně odeslat příkazy pro zjištění chybové oblasti.
//---Debug Functions---
void serialDebug(){
while (true)
{
If (esp8266.available())
Serial.write(esp8266.read())
if (Serial.available())
esp8266.write(Serial.read());
}
}
3) Konfigurace
Pro maximální vylepšení a celkovou programovou přehlednost došlo k odstranění většiny nastavení u
jednotlivých funkcí. V první řadě tomu tak je u funkce espConfig, ve které jsou nejdůležitější parametry
příslušného programu již nastaveny.
//---Config ESP8266---
boolean espConfig()
{
boolean success=true;
esp8266.setTimeout(5000);
success&=sendCom(„AT+RST,“ready“);
esp8266.setTimeout(1000);
if (configStation(SSID,PASSWORD)) }
else
{
success&=false;
}
success&=sendCom(“AT+CIPMODE=0“,“OK“);
success&=sendCom(“AT+CIPMUX=0“,“OK“);
return success;
}










