- Tarvittavat materiaalit:
- Miten asiat toimivat?
- ESP8266-01: n ohjelmointi:
- ESP8266-01: n liittäminen Arduinoon:
- Arduino-ohjelma ja työskentely:
ESP8266-01 on ollut loistava moduuli, joka sammuttaa kaikki janomme IOT-projekteille. Julkaisunsa jälkeen se on kehittänyt vahvan yhteisön ja kehittynyt helppokäyttöiseksi, halpaksi ja tehokkaaksi Wi-Fi-moduuliksi. Toinen avoimen lähdekoodin foorumi, joka on paljon suositumpi, on Arduino, sen ympärille on jo rakennettu tonnia projekteja. Näiden kahden alustan yhdistäminen avaa ovia monille innovatiivisille projekteille, joten tässä opetusohjelmassa opitaan, kuinka ESP8266-01-moduuli voidaan liittää Arduinoon. Tällä tavalla voimme lähettää tai vastaanottaa tietoja Arduinon ja Internetin välillä.
Tässä opetusohjelmassa luemme kellonajan, päivämäärän, lämpötilan ja kosteuden Internetistä käyttämällä ESP8266-01-sovellusliittymää. Lähetä sitten nämä arvot Arduino-kortille ja näytä ne 16 * 2 LCD-näytöllä. Kuulostaa hyvältä oikein! Joten aloitetaan.
Tarvittavat materiaalit:
- Arduino Board (mikä tahansa versio)
- ESP8266-01
- FTDI-ohjelmointikortti, 3,3 V -vaihtoehto
- 16x2 LCD
- Potentiometri
- Paina nappia
- Johtojen liittäminen
- Leipälauta
Miten asiat toimivat?
Ennen kuin sukelamme sisään, on tärkeää tietää, miten tämä asia todella toimii. Pohjimmiltaan meidän on aloitettava ESP8266-01-moduulista. Käytämme Arduino IDE: tä ESP8266: n ohjelmointiin ja koodi kirjoitetaan API: n avulla JSON-tiedoston lukemiseen http-pyynnön kautta. Sitten muotoilemme tämän JSON-tiedoston ilmaisemaan vain vaaditut tiedot täydellisestä JSON-tiedostosta.
Kun tiedot on muotoiltu, tulostamme ne sarjaliikenteen avulla. Nämä sarjaliitännät kytketään sitten Arduinoon, jotta Arduino voisi lukea ESP8266: lta lähetetyt tiedot. Kun tiedot on luettu ja käsitelty, näytämme ne LCD-näytöllä.
On okei, jos et ole täysin ymmärtänyt tätä, sillä opimme saman loppuoppaassa.
ESP8266-01: n ohjelmointi:
Tässä opetusohjelmassa oletetaan, että sinulla on jonkin verran kokemusta ESP8266-moduulista. Jos ei, niin on suositeltavaa lukea seuraavat kolme opetusohjelmaa ymmärtääksesi sen kokonaan.
- ESP8266-01: n käytön aloittaminen
- ESP8266-01: n ohjelmointi AT-komentojen avulla
- ESP8266-01: n ohjelmointi Arduino IDE: n avulla ja sen muistin vilkkuminen
Voit myös tarkistaa kaikki ESP8266-projektimme täältä.
Täällä aiomme ohjelmoida ESP8266-01-moduulin Arduino IDE: n avulla. Laitteistolle käytämme FTDI-korttia 3,3 V: lla ESP8266: n ohjelmointiin, koska se tekee laitteistosta paljon yksinkertaisen. Piirikaavio ESP8266: n liittämiseksi FTDI-korttiin on esitetty alla.
Varmista, että seuraavat ehdot täyttyvät
1. ESP8266-01 on vain 3,3 V suvaitsevainen, älä käytä 5 V: tä. Joten aseta FTDI vain 3.3V-tilassa.
2. GPIO_0 on maadoitettava ohjelmointitilaa varten
3. Palautustappi tulee kytkeä napin kautta maadoitustapiin. Tätä painiketta on painettava juuri ennen koodin lataamista. Aina kun painiketta painetaan, ESP8266-01-moduulin sininen LED-valo nousee korkealle osoittamaan, että moduuli on nollattu.
Kun yhteydet on tehty, avaa Arduino IDE ja tarkista, pystytkö lataamaan esimerkkiohjelman onnistuneesti. Jos et ole varma, kuinka Arduino IDE: tä käytetään lataamaan ohjelma ESP8266: een, opi se seuraamalla ESP8266: n ohjelmointia Arduinolla. Oletan tässä vaiheessa, että olet ladannut vilkkumisohjelman onnistuneesti.
. Koko ohjelma on tämän sivun lopussa jäljempänä. Selitän niitä pieninä katkelmina. Ohjelma vaatii myös Arduino JSON -kirjaston kääntämisen, joten jos et ole vielä lisännyt kirjastoa Arduino IDE: hen, lisää se lataamalla Arduino JSON -kirjastosta Githubilta.
ESP8266: n on oltava yhteydessä Internetiin saadakseen tietoja päivämäärästä, ajasta, lämpötilasta ja kosteudesta. Joten sinun on sallittava sen muodostaa yhteys Wi-Fi-verkkoon osoittamalla SSID ja salasana alla olevilla riveillä
const char * ssid = "JIO-Fi"; // Syötä Wi-Fi SSID: si const char * password = "Pas123"; // Anna sinulle Wi-Fi-salasana
Sisällä setup () funktio me tarkista ESP pystyy muodostamaan yhteyden Wi-Fi, jos ei se odottaa siellä ikuisesti vain tulostamalla ”Connecting..” on Serial Monitor.
while (WiFi.status ()! = WL_CONNECTED) {// Odota, kunnes Wi-Fi on yhdistetty, viive (1000); Serial.print ("Yhdistetään.."); // Tulosta yhteys.. kunnes yhteys on muodostettu }
Seuraava vaihe on erittäin tärkeä vaihe. Jos Wi-Fi-yhteys onnistuu, joudumme kutsumaan http get -pyynnön lukeaksesi JSON-tiedoston Internetistä. Tässä opetusohjelmassa käytän wunderground.comin tarjoamaa sovellusliittymää. Joten jos aiot käyttää samaa, pääset linkkiin ja rekisteröidy ilmaiseen API-avaimeen tai käytä mitä tahansa valitsemaasi sovellusliittymää. Kun olet viimeistellyt sovellusliittymän kanssa, pääset alla olevaan linkkiin
Huomaa: Olen muuttanut tämän linkin API-avainta, joten tämä ei toimi. Pidä API-avain suojattuna äläkä jaa sitä.
Tässä olevaa sovellusliittymääni käytetään Chennain säätietojen saamiseen. Voit käyttää mitä tahansa sovellusliittymää. Mutta kun lataat sovellusliittymän mihin tahansa selaimeen, sen pitäisi palauttaa JSON-tiedosto. Esimerkiksi sovellusliittymä palauttaa seuraavan JSON-tiedoston
Sinun saattaa palauttaa tiedoston, jossa on eri tietoja. Voimme tarkistaa, onko ESP8266 vastaanottanut myös tämän JSON-tiedoston lukemalla sen ja tulostamalla JSON sarjamonitorillemme seuraavilla riveillä
int httpCode = http.GET (); // välittää hakupyynnön, jos (httpCode> 0) {// Tarkista palaava koodi // hyötykuorma = http.getString (); // Tallenna arvo varibale-hyötykuormalle virheenkorjausta varten // Serial.println (hyötykuorma); // Tulosta virheenkorjauksen hyötykuorma, muuten kommentoi molempia rivejä
Olen kommentoinut näitä rivejä, koska niitä tarvitaan vain testaukseen. Kun olet varmistanut, että ESP8266 pystyy hankkimaan JSON-tiedot, on aika muotoilla tiedot. Kuten näette, nämä tiedot ovat valtavia ja suurin osa arvoista on hyödyttömiä lukuun ottamatta niitä, joita meille vaaditaan, kuten päivämäärä, aika, lämpötila ja kosteus.
Joten käytämme JSON Arduino -kirjastoa erottaaksemme meille tarvittavat arvot ja tallentaaksemme sen muuttujaan. Tämä on mahdollista, koska JSON-tiedoston arvot määritetään nimiarvopareiksi. Joten tämä nimi on merkkijono, joka pitää sisällään meille vaaditun arvon.
Tätä varten meidän on siirryttävä verkkosivustolle, joka analysoi JSON-tiedoston ja antaa meille Arduino-koodin. Kyllä, se on yhtä helppoa kuin se. Siirry osoitteeseen https://arduinojson.org/assistant/ ja liitä selaimeemme lataamasi JSON-tiedosto ja paina Enter. Kun valmis, minun näytti alla olevan tältä
Selaa hieman alaspäin nähdäksesi automaattisesti luodun muotoiluohjelman
Sinun tarvitsee vain valita haluamasi muuttuja, kopioida ne ja liittää se Arduino IDE -laitteeseesi, kuten olen tehnyt täällä
/ * Tietojen muotoilu käyttämällä JSON-kirjastoa * / // Käytä https://arduinojson.org/assistant/ saadaksesi JSON-merkkijonon lauseen arvot 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 (puskurikoko); JsonObject & root = jsonBuffer.parseObject (http.getString ()); / * Datan muotoilun loppu * / // Osoita arvo sin haluttuihin muuttujiin JsonObject & current_observation = root; // kohdassa current_observation JsonObject & current_observation_observation_location = current_observation; // havainnossa_sijainti const char * current_observation_station_id = current_observation; // "ICHENNAI1" // hanki sijaintitiedot const char * current_observation_local_time_rfc822 = current_observation; // Paikallinen aika // hanki paikallinen aika const -merkki * current_observation_temperature_string = current_observation; // "90,7 F (32,6 C)" // saat lämpötila-arvon const char * current_observation_relative_humidity = current_observation; // "73%" // saadaan kosteusarvo
Olen juuri kopioinut muuttujat current_observation_station_id, current_observation_local_time_rfc822, current_observation_temperature_string ja current_observation_relative_humidity . Koska aiomme näyttää vain nämä neljä tietoa nestekidenäytöllä.
Lopuksi olemme saaneet tarvitsemamme tiedot Internetistä ja tallentaneet ne muuttujaksi, jota voimme käyttää mukavasti. Jos haluat lähettää nämä tiedot Arduinolle, meidän on vain kirjoitettava ne sarjakuvanäytön kautta. Seuraavat rivit tekevät täsmälleen saman
// Tulosta muuttujat sarjamonitorilla Serial.print (current_observation_station_id); // lähetä sijaintitiedot Arduinolle delay (100); // vakausviive Serial.print (current_observation_local_time_rfc822); // lähetä paikallisen ajan tiedot Arduinolle delay (100); // vakausviive Serial.print (current_observation_temperature_string); // lähetä lämpötilatiedot Arduinon viiveelle (100); // vakausviive Serial.print (current_observation_relative_humidity); // lähetä kosteustiedot Arduino delay (100): een; // stabiilisuusviive
Huomaa, että olen käyttänyt Serial.print () ja en Serial.println (), koska komento Serial.println () liittää a / n ja / r yhdessä tietojen kanssa, joita ei tarvita meille. Olemme myös lisänneet 10 sekunnin viiveen, jotta ESP lähettää nämä arvot vain 10 sekunnin välein Arduinolle.
ESP8266-01: n liittäminen Arduinoon:
Tähän mennessä olemme ohjelmoineet ESP8266-01: n lukemaan vaaditut tiedot Internetistä 10 sekunnin välein ja lähettämään ne sarjana. Nyt meidän on liitettävä ESP Arduinoon, jotta voimme lukea nämä sarjatiedot. Meidän on myös lisättävä 16 * 2 LCD-näyttö Arduinoon, jotta voimme näyttää ESP8266-moduulista vastaanotetut tiedot. Piirikaavio välisenä ESP8266 moduuli Arduino on esitetty alla
Varmista, että GPIO_0-nasta on jätetty vapaaksi, virtaa moduuliin vain Arduinon 3,3 V: n nastalla ja paina painiketta asettaaksesi ESP-moduulin käyttömoduuliin. Nyt ESP: lle lataamamme ohjelman olisi pitänyt alkaa toimia ja moduulin tulisi lähettää tiedot sarjatapin kautta Arduinoon. Nämä sarjaliittimet on kytketty Arduinon tapiin numeroihin 6 ja 7. Joten voimme käyttää ohjelmistosarjavaihtoehtoa Arduinolla lukemaan nämä sarjatiedot nastoista.
Arduino-ohjelma ja työskentely:
Täydellinen Arduino Ohjelma on myös antanut yhdessä ESP koodin lopussa tämän sivun. Voit vierittää alas nähdäksesi ohjelman tai lukea lisää, jos haluat ymmärtää ohjelmaa.
Liitäntäohjelma on melko yksinkertainen, meidän on vain käytettävä ohjelmistosarjakirjastoa lukemaan tiedot nastoista 6 ja 7 ja näyttämään ne LCD-näytöllä. Koska vastaanotettavat tiedot ovat merkkijonomuodossa, joudumme käyttämään alimerkkivaihtoehtoa hyötykuorman jakamiseksi vaatimuksemme mukaan tai jopa muuntamaan se kokonaislukuksi tarvittaessa. Joten aloitamme määrittämällä nastat, joihin LCD on kytketty.
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // nastat, joihin LCD on kytketty LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Koska meillä on kytketty Rx ja Tx nastat ESP8266 kanssa 6 ja 7 : nnen pin Työläs meillä alustamaan ohjelmisto sarjanumero niille nastat, jotta voimme saada sarja tietoja niistä.I ovat nimiä tätä ESP_Serial, voit nimeä heille mitä haluat
SoftwareSerial ESP_Serial (6,7); // Tx, Rx
Sisällä setup () funktio me alustamaan sarjaliikennejärjestelmää Serial seurata ja myös ohjelmiston sarjanumeron. Jos muistat, teimme ESP-ohjelman kommunikoimaan 9600 baudinopeudella, joten meidän on käytettävä samaa baudinopeutta ohjelmiston sarjaporttiin. Näytämme myös pienen intro-viestin nestekidenäytössä 2 sekunnin ajan.
void setup () {lcd.begin (16, 2); // Käytämme 16 * 2 LCD-näyttöä lcd.print ("Arduino & ESP"); // Näytä esittelyviesti Serial.begin (115200); ESP_Serial.begin (9600); viive (2000); lcd.clear (); }
Sisällä tärkein loop () funktio meidän täytyy tarkistaa, jos ESP8266 lähettää mitään. Jos on, luemme merkkijonon ESP8266: sta ja tallennamme sen muuttujaan nimeltä hyötykuorma. Muuttuja hyötykuorma on tyyppiä String ja se sisältää kaikki ESP8266-moduulista lähetetyt tiedot.
while (ESP_Serial.available ()> 0) {hyötykuorma = ESP_Serial.readString ();
Nyt meidän on jaettava tämä merkkijono pieniksi paloiksi, jotta voimme käyttää niitä omaan tarkoitukseensa, tässä tapauksessa meidän on jaettava ne näyttämään ne LCD-näytöllä. Tämä voidaan tehdä helposti käyttämällä Aldu- toimintoa Arduinossa. Sinun on tiedettävä jokaisen merkin sijainti, jotta voit käyttää tätä alitoimintoa . Voit tulostaa hyötykuorman sarjamonitorille, jotta tiedät merkkien sijainnin, ja käyttää niitä luokittelemaan alaotsakkeet alla esitetyllä tavalla
paikallinen_päivämäärä = hyötykuorma.substring (14, 20); paikallinen_aika = hyötykuorma. alaosuus (26, 31); lämpötila = hyötykuorma. alaosa (48, 54); Kosteus = hyötykuorma. Alaosa (55, 60);
Nyt voin mennä eteenpäin ja käyttää näitä muuttujia joko tulostamaan ne sarjamonitorille tai vain tulostamaan nestekidenäytölle. Niiden tulostaminen sarjamonitorille auttaa kuitenkin meitä tarkistamaan, ovatko alaotsat oikein jaettuina. Seuraavaksi tulostamme ne vain LCD-näytölle seuraavia rivejä käyttäen
lcd.clear (); lcd.setCursor (1, 0); lcd.print (paikallinen_päivämäärä); lcd.setCursor (8, 0); lcd.print (paikallinen_aika); lcd.setCursor (1, 1); lcd-tulos (lämpötila); lcd.setCursor (10, 1); lcd.print (kosteus);
Lataa ohjelma Arduinoon ja varmista, että yhteydet ovat yllä olevan piirikaavion mukaisia. Säädä nestekidenäytön kontrastia, kunnes näet asiat selvästi. Sinun pitäisi nähdä Intro-viesti nestekidenäytössä ja sitten muutaman sekunnin kuluttua yksityiskohdat, kuten päivämäärä, kellonaika, lämpötila ja kosteus, pitäisi näkyä nestekidenäytössä alla olevan kuvan mukaisesti.
Voit myös huomata , että ESP8266: n sininen led vilkkuu aina, kun data tulee sisään. Jos et näe tätä, se tarkoittaa, että ESP ei ole ohjelmointitilassa. Yritä myös painaa nollauspainiketta ja tarkistaa liitännät.
Samoin voit käyttää mitä tahansa sovellusliittymää saadaksesi tarvittavat tiedot Internetistä ja syöttämällä ne Arduinoon ja käsittelemään työsi Arduinon kanssa. Internetissä on tonnia API: ta, ja kaikkien kanssa voit tehdä rajattoman määrän projekteja. Toivottavasti ymmärrät projektin ja nautit sen rakentamisesta. Jos sinulla on ollut ongelmia, lähetä ne alla olevaan kommenttiosioon tai foorumeillemme.
Löydät kaikki ESP8266-projektiimme täältä.