- Potřebné materiály:
- Jak věci fungují?
- Programování ESP8266-01:
- Připojení ESP8266-01 k Arduinu:
- Program a práce Arduino:
ESP8266-01 byl skvělý modul, který uklidnil všechny naše touhy po projektech IOT. Od svého vydání si vyvinula silnou komunitu a vyvinula se v snadno použitelný, levný a výkonný modul Wi-Fi. Další open-source platforma, která je mnohem populárnější, je Arduino, které již má kolem sebe postaveno spoustu projektů. Kombinace těchto dvou platforem otevře dveře mnoha inovativním projektům, takže v tomto tutoriálu se naučíme, jak propojit modul ESP8266-01 s Arduino. Tímto způsobem budeme moci odesílat nebo přijímat data mezi Arduino a Internetem.
Pro účely tohoto tutoriálu budeme číst čas, datum, teplotu a vlhkost z internetu pomocí API s ESP8266-01. Poté odešlete tyto hodnoty na desku Arduino a zobrazte je na 16 * 2 LCD obrazovce. Zní to dobře !! Pojďme tedy začít.
Potřebné materiály:
- Deska Arduino (libovolná verze)
- ESP8266-01
- Programátorská deska FTDI s možností 3,3 V.
- 16x2 LCD
- Potenciometr
- Stiskněte tlačítko
- Připojovací vodiče
- Nepájivá deska
Jak věci fungují?
Než se ponoříme, je důležité vědět, jak vlastně tato věc bude fungovat. V zásadě musíme začít s modulem ESP8266-01. K programování ESP8266 budeme používat Arduino IDE a kód bude napsán tak, aby používal API ke čtení souboru JSON prostřednictvím požadavku http. Pak vytvoříme frázi tohoto souboru JSON, abychom z úplného souboru JSON extrahovali pouze požadované informace.
Jakmile jsou informace formulovány, vytiskneme je pomocí sériové komunikace. Tyto sériové linky budou poté připojeny k Arduinu, aby Arduino mohlo číst informace odeslané z ESP8266. Jakmile jsou informace načteny a zpracovány, zobrazíme je na obrazovce LCD.
Je to v pořádku, pokud jste tomu úplně nerozuměli, protože ve zbytku tohoto tutoriálu se naučíme totéž.
Programování ESP8266-01:
Tento kurz předpokládá, že máte nějaké zkušenosti s modulem ESP8266. Pokud tomu tak není, doporučuje se přečíst si následující tři výukové programy, abyste o tom úplně porozuměli.
- Začínáme s ESP8266-01
- Programování ESP8266-01 pomocí AT příkazů
- Programování ESP8266-01 pomocí Arduino IDE a blikání jeho paměti
Můžete si také prohlédnout všechny naše projekty ESP8266 zde.
Zde budeme programovat modul ESP8266-01 pomocí Arduino IDE. U hardwaru používáme k programování ESP8266 desku FTDI s 3,3 V, protože hardware bude mnohem jednodušší. Schéma zapojení pro připojení vašeho ESP8266 k desce FTDI je uvedeno níže.
Ujistěte se, že jsou splněny následující podmínky
1. ESP8266-01 je pouze 3,3V tolerantní, nepoužívejte 5V. Nastavte tedy FTDI pouze v režimu 3,3 V.
2. GPIO_0 musí být uzemněn pro programovací režim
3. Resetovací kolík by měl být připojen pomocí tlačítka k uzemňovacímu kolíku. Toto tlačítko by mělo být stisknuto těsně před nahráním kódu. Při každém stisknutí tlačítka se modrá LED na modulu ESP8266-01 rozsvítí vysoko, což znamená, že se modul resetoval.
Po dokončení připojení otevřete IDE Arduino a zkontrolujte, zda jste schopni úspěšně nahrát ukázkový program. Pokud si nejste jisti, jak použít IDE Arduino k nahrání programu na ESP8266, učte se podle Programování ESP8266 s Arduinem. V tomto okamžiku předpokládám, že jste úspěšně nahráli program blikání.
. Celý program je uveden na konci této stránky dále, vysvětluji je jako malé úryvky. Program také vyžaduje kompilaci knihovny Arduino JSON, takže pokud jste knihovnu do svého IDE Arduino již nepřidali, přidejte ji stažením z knihovny Arduino JSON z Githubu.
ESP8266 se musí připojit k internetu, aby získal údaje o datu, čase, teplotě a vlhkosti. Musíte tedy povolit připojení k vaší Wi-Fi tak, že na následujících řádcích prokážete SSID a heslo
const char * ssid = "JIO-Fi"; // Zadejte své Wi-Fi SSID const char * heslo = "Pas123"; // Zadejte heslo Wi-Fi
Uvnitř setup () funkce jsme zjistit, jestli ESP je možné se připojit pomocí Wi-Fi, pokud ne, bude tam čekat věčně jen vytištěním „Connecting..“ na sériovém monitoru.
while (WiFi.status ()! = WL_CONNECTED) {// Počkejte, až se připojí Wi-Fi, zpoždění (1000); Serial.print ("Připojování.."); // Tisk Připojování.. dokud není navázáno připojení }
Dalším krokem je velmi důležitý krok. Pokud je připojení Wi-Fi úspěšné, musíme vyvolat požadavek http get ke čtení souboru JSON z internetu. V tomto tutoriálu používám API poskytované wunderground.com. Pokud tedy plánujete použít to samé, můžete se dostat do odkazu a registrace bezplatného klíče API nebo použít libovolné API podle vašeho výběru. Jakmile dokončíte své API, dostanete odkaz jako je tento níže
Poznámka: Změnil jsem klíč API tohoto odkazu, takže to nebude fungovat. Udržujte svůj klíč API zabezpečený a nesdílejte.
Moje API zde slouží k získání údajů o počasí v Chennai. Můžete použít jakékoli API. Ale když načtete API v jakémkoli prohlížeči, měl by vrátit soubor JSON. Například moje API vrací následující soubor JSON
Váš může vrátit soubor s různými daty. Můžeme zkontrolovat, zda tento soubor JSON také přijal náš ESP8266 čtením a tiskem JSON na našem sériovém monitoru pomocí následujících řádků
int httpCode = http.GET (); // předat požadavek na získání if (httpCode> 0) {// Zkontrolovat návratový kód // payload = http.getString (); // Uložení hodnoty na varibale Payload pro ladění // Serial.println (payload); // Vytiskněte užitečné zatížení pro ladění, jinak komentujte oba řádky
Tyto řádky jsem okomentoval, protože jsou potřebné pouze pro testování. Jakmile se ujistíte, že ESP8266 je schopen získat data JSON, je čas na frázování dat. Jak vidíte, tato data jsou obrovská a většina hodnot je k ničemu, kromě těch, které jsou pro nás vyžadovány jako datum, čas, teplota a vlhkost.
Proto používáme knihovnu JSON Arduino k oddělení hodnot, které jsou pro nás potřebné, a uložení do proměnné. To je možné, protože hodnoty v souboru JSON jsou přiřazeny jako páry název-hodnota. Toto jméno je tedy řetězec, který bude obsahovat požadovanou hodnotu.
Abychom to mohli udělat, musíme přejít na web, který bude analyzovat soubor JSON a dá nám kód Arduino. Ano, je to tak snadné. Pokračujte na https://arduinojson.org/assistant/ a vložte soubor JSON, který jsme načetli v našem prohlížeči, a stiskněte klávesu Enter. Když to bylo hotové, dole vypadalo něco takového
Posunutím dolů zobrazíte program vytváření frází, který se vytváří automaticky
Jediné, co musíte udělat, je vybrat požadovanou proměnnou, zkopírovat je a vložit do vašeho Arduino IDE, jako jsem to udělal zde
/ * Data frázování pomocí JSON librarey * / // Použijte https://arduinojson.org/assistant/ k získání hodnot frázování pro váš řetězec JSON const size_t bufferSize = JSON_OBJECT_SIZE (0) + JSON_OBJECT_SIZE (1) + JSON_OBJECT_SIZE (2) + 2 * JSON_OBJECT_SIZE (3) + JSON_OBJECT_SIZE (8) + JSON_OBJECT_SIZE (12) + JSON_OBJECT_SIZE (56) + 2160; DynamicJsonBuffer jsonBuffer (bufferSize); JsonObject & root = jsonBuffer.parseObject (http.getString ()); / * Konec dat frázování * / // Adresujte hodnotu sin požadovaným proměnným JsonObject & current_observation = root; // pod current_observation JsonObject & current_observation_observation_location = current_observation; // pod pozorovacím_ umístěním const char * current_observation_station_id = current_observation; // "ICHENNAI1" // získání informací o poloze const char * current_observation_local_time_rfc822 = current_observation; // Místní čas // získat místní čas const char * current_observation_temperature_string = current_observation; // "90,7 F (32,6 C)" // získání hodnoty teploty const char * current_observation_relative_humidity = current_observation; // "73%" // získá hodnotu vlhkosti
Právě jsem zkopíroval proměnné current_observation_station_id, current_observation_local_time_rfc822, current_observation_temperature_string a current_observation_relative_humidity . Protože plánujeme na naší LCD obrazovce zobrazit pouze tato čtyři data.
Nakonec jsme z internetu získali data, která potřebujeme, a uložili jsme je jako proměnnou, kterou můžeme pohodlně použít. Chcete-li odeslat tato data do Arduina, stačí je zapsat sériově přes Sériový monitor. Následující řádky budou dělat přesně to samé
// Tisk proměnných přes sériový monitor Serial.print (current_observation_station_id); // odeslání podrobností o poloze na Arduino delay (100); // zpoždění stability Serial.print (current_observation_local_time_rfc822); // odeslání podrobností o místním čase na Arduino delay (100); // zpoždění stability Serial.print (current_observation_temperature_string); // odeslání údajů o teplotě na Arduino delay (100); // zpoždění stability Serial.print (current_observation_relative_humidity); // odeslání údajů o vlhkosti do Arduino delay (100); // zpoždění stability
Všimněte si, že jsem použil Serial.print () a ne Serial.println (), protože příkaz Serial.println () připojí / n a / r spolu s daty, která pro nás nejsou nutná. Přidali jsme také zpoždění 10 sekund, takže ESP bude tyto hodnoty odesílat do Arduina pouze v intervalu 10 sekund.
Připojení ESP8266-01 k Arduinu:
Dosud jsme naprogramovali náš ESP8266-01 na čtení požadovaných dat z internetu v intervalu 10 sekund a jejich sériové odesílání. Nyní musíme propojit ESP s Arduino, abychom mohli načíst tato sériová data. Také musíme do Arduina přidat 16 * 2 LCD displej, abychom mohli zobrazit data přijatá z modulu ESP8266. Schéma zapojení rozhraní pro ESP8266 modul s Arduino je uvedeno níže
Zajistěte, aby pin GPIO_0 zůstal volný, napájejte modul pouze pomocí kolíku 3,3 V Arduina a stisknutím tlačítka vložte modul ESP do provozního modulu. Nyní měl program, který jsme nahráli do ESP, začít pracovat a modul by měl odesílat data přes sériový pin do Arduina. Tyto sériové piny jsou připojeny k pinům číslo 6 a 7 na Arduinu. Můžeme tedy použít softwarovou sériovou volbu na Arduinu ke čtení těchto sériových dat z kolíků.
Program a práce Arduino:
Kompletní Arduino Program je také uveden spolu s kódem na konci této stránky ESP. Můžete se posunout dolů a program zobrazit, nebo si přečíst další, pokud chcete programu porozumět.
Program propojení je docela jednoduchý, stačí použít softwarovou sériovou knihovnu ke čtení dat z pinů 6 a 7 a jejich zobrazení na LCD obrazovce. Vzhledem k tomu, že přijímaná data jsou ve formátu řetězce, musíme použít volbu podřetězce, abychom rozdělili užitečné zatížení podle našeho požadavku, nebo jej dokonce v případě potřeby převést na celé číslo. Tak jsme se začít tím, že definuje kolíky, ke kterému je připojená LCD.
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // Kolíky, ke kterým je připojen LCD LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Protože jsme spojeni s Rx a Tx kolíky ESP8266 se 6. a 7. ročník pin z Arduino musíme inicializaci sériového softwaru pro ty piny, takže můžeme přijímat sériová data z nich.I mají názvy to jako ESP_Serial, můžete pojmenujte je, co chcete
SoftwareSerial ESP_Serial (6,7); // Tx, Rx
Uvnitř funkce setup () inicializujeme sériovou komunikaci pro Serial monitor a také pro softwarové sériové rozhraní. Pokud byste si mohli vzpomenout, vytvořili jsme program ESP pro komunikaci s přenosovou rychlostí 9600, takže musíme použít stejnou přenosovou rychlost pro sériový port softwaru. Na 2 sekundy také zobrazíme malou úvodní zprávu na LCD displeji.
void setup () {lcd.begin (16, 2); // Používáme 16 * 2 LCD displej lcd.print ("Arduino & ESP"); // Zobrazit úvodní zprávu Serial.begin (115200); ESP_Serial.begin (9600); zpoždění (2000); lcd.clear (); }
Uvnitř funkce main loop () musíme zkontrolovat, zda ESP8266 něco odesílá. Pokud je, přečteme řetězec z ESP8266 a uložíme jej do proměnné zvané užitečné zatížení. Variabilní užitečné zatížení je typu String a bude obsahovat úplné informace odeslané z modulu ESP8266.
while (ESP_Serial.available ()> 0) {payload = ESP_Serial.readString ();
Nyní musíme tento řetězec rozdělit na malé bloky, abychom je mohli použít pro vlastní účely, v tomto případě je musíme rozdělit, abychom je mohli zobrazit na obrazovce LCD. To lze provést jednoduše pomocí podřetězec funkce v Arduino. Abyste mohli používat tuto podřetězcovou funkci, musíte znát pozici každého znaku. Můžete vytisknout užitečné zatížení na sériovém monitoru, abyste poznali polohu znaků, a použít je ke kategorizaci podřetězců, jak je uvedeno níže
local_date = payload.substring (14, 20); local_time = payload.substring (26, 31); teplota = užitečné zatížení.substring (48, 54); Vlhkost = užitečné zatížení.substring (55, 60);
Nyní můžu pokračovat a použít tyto proměnné k jejich tisku na sériovém monitoru nebo jen k tisku na LCD. Jejich tisk na sériový monitor nám však pomůže o zkontrolovat, zda jsou podřetězce správně rozděleny. Dále je pouze vytiskneme na LCD displeji pomocí následujících řádků
lcd.clear (); lcd.setCursor (1, 0); lcd.print (local_date); lcd.setCursor (8, 0); lcd.print (local_time); lcd.setCursor (1, 1); lcd. tisk (teplota); lcd.setCursor (10, 1); lcd.print (vlhkost);
Nahrajte program do Arduina a ujistěte se, že připojení jsou znázorněna ve výše uvedeném schématu zapojení. Upravte kontrast LCD displeje tak, abyste věci viděli jasně. Na LCD displeji by se měla zobrazit úvodní zpráva a po několika sekundách by se na obrazovce LCD měly zobrazit podrobnosti, jako je datum, čas, teplota a vlhkost, jak je uvedeno níže.
Můžete si také všimnout, že modrá LED na ESP8266 bliká pokaždé, když přijdou data. Pokud to nevidíte, znamená to, že ESP není v programovacím režimu, zkuste stisknout tlačítko Reset a zkontrolujte také připojení.
Podobně můžete použít jakékoli API k získání požadovaných dat z internetu a jejich odeslání do Arduina a zpracování vaší práce s Arduino. Na internetu je spousta API a se všemi můžete vytvořit neomezený počet projektů. Doufám, že jste pochopili projekt a užili jste si jeho stavbu. Pokud jste se setkali s jakýmkoli problémem, zveřejněte je v sekci komentářů níže nebo na našem fóru.
Zde najdete všechny naše projekty související s ESP8266.