- Необходими материали:
- Как работят нещата?
- Програмиране на ESP8266-01:
- Свързване на ESP8266-01 с Arduino:
- Програма и работа на Arduino:
ESP8266-01 е чудесен модул за утоляване на цялата ни жажда за IOT проекти. След излизането си, той разработи силна общност и се превърна в лесен за използване, евтин и мощен Wi-Fi модул. Друга платформа с отворен код, която е много по-популярна, е Arduino, тя вече има множество проекти, изградени около нея. Комбинирането на тези две платформи ще отвори врати за много иновативни проекти, така че в този урок ще научим как да свързваме модула ESP8266-01 с Arduino. По този начин ще можем да изпращаме или получаваме данни между Arduino и Интернет.
За целите на този урок ще прочетем времето, датата, температурата и влажността от интернет, използвайки API с ESP8266-01. След това изпратете тези стойности на платка Arduino и ги покажете на LCD екрана 16 * 2. Звучи яко готино !! Така че нека да започнем.
Необходими материали:
- Arduino Board (всяка версия)
- ESP8266-01
- Платка за програмиране FTDI с опция 3.3V
- 16x2 LCD
- Потенциометър
- Натисни бутона
- Свързващи проводници
- Макет
Как работят нещата?
Преди да се потопим, важно е да знаем как всъщност ще работи това нещо. По принцип трябва да започнем с модула ESP8266-01. Ще използваме Arduino IDE за програмиране на ESP8266 и кодът ще бъде написан, за да използва API за четене на JSON файл чрез http заявка. След това ще формулираме този JSON файл, за да извлечем само необходимата информация от пълния JSON файл.
След като информацията бъде формулирана, ние ще я отпечатаме с помощта на серийната комуникация. След това тези серийни линии ще бъдат свързани към Arduino, за да може Arduino да чете информацията, изпратена от ESP8266. След като информацията бъде прочетена и обработена, ние ще я покажем на LCD екрана.
Добре е, ако не сте разбрали напълно това, защото ние ще учим същото в останалата част от този урок.
Програмиране на ESP8266-01:
Този урок предполага, че имате известен опит с модула ESP8266. Ако не, тогава се препоръчва да прочетете следните три урока, за да разберете напълно за него.
- Първи стъпки с ESP8266-01
- Програмиране на ESP8266-01 с помощта на AT команди
- Програмиране на ESP8266-01 с помощта на Arduino IDE и мигане на паметта му
Можете също да проверите всички наши проекти ESP8266 тук.
Тук ще програмираме модула ESP8266-01 с помощта на Arduino IDE. За хардуер използваме FTDI платката с 3.3V за програмиране на ESP8266, тъй като това ще направи хардуера много прост. Схемата за свързване на вашия ESP8266 с FTDI платка е показана по-долу.
Уверете се, че са изпълнени следните условия
1. ESP8266-01 е устойчив само на 3.3V, не използвайте 5V. Така че настройте FTDI само в режим 3.3V.
2. GPIO_0 трябва да е заземен за режим на програмиране
3. Пинът за нулиране трябва да бъде свързан чрез бутон към заземяващия щифт. Този бутон трябва да бъде натиснат непосредствено преди качването на кода. При всяко натискане на бутона синият светодиод на модула ESP8266-01 ще се издига високо, за да покаже, че модулът е нулиран.
След като свържете връзките, отворете IDE на Arduino и проверете дали можете да качите примерна програма успешно. Ако не сте сигурни как да използвате Arduino IDE за качване на програма в ESP8266, следвайте Програмирането ESP8266 с Arduino, за да го научите. На този етап предполагам, че сте качили успешно програмата за мигане.
. Пълната програма е дадена в края на тази страница по-долу. Обяснявам ги като малки фрагменти. Програмата също така изисква да се компилира библиотеката Arduino JSON, така че ако още не сте добавили библиотеката към вашата IDE на Arduino, добавете я, като я изтеглите от библиотеката Arduino JSON от Github.
ESP8266 трябва да се свърже с интернет, за да получи данни за дата, час, температура и влажност. Така че трябва да му позволите да се свърже с вашия Wi-Fi, като докажете SSID и паролата в долните редове
const char * ssid = "JIO-Fi"; // Въведете своя Wi-Fi SSID const char * password = "Pas123"; // Въведете вашата Wi-Fi парола
Във вътрешността на настройка () функцията ние проверите дали ESP е в състояние да се свържете с Wi-Fi, ако не той ще чакам там завинаги само чрез печатане на "Свързване.." на серийния монитора.
while (WiFi.status ()! = WL_CONNECTED) {// Изчакайте, докато Wi-Fi бъде свързан забавяне (1000); Serial.print ("Свързване.."); // Печат на свързване.. до установяване на връзка }
Следващата стъпка е много важната стъпка. Ако Wi-Fi връзката е успешна, трябва да извикаме http заявка за получаване, за да прочетем JSON файла от интернет. В този урок използвам API, предоставен от wunderground.com. Така че, ако планирате да използвате същото, можете да влезете във връзка и да се регистрирате за безплатния API ключ или да използвате всеки API по ваш избор. След като финализирате с вашия API, ще получите връзка от типа по-долу
Забележка: Промених API ключа на тази връзка, така че това няма да работи. Пазете вашия API ключ защитен и не споделяйте.
Моят API тук се използва за получаване на данни за времето в Ченай. Можете да използвате всеки API. Но когато заредите API във всеки браузър, той трябва да върне JSON файл. Например моят API връща следния JSON файл
Вашият може да върне файл с различни данни. Можем да проверим дали този JSON файл е получен и от нашия ESP8266, като го прочетем и отпечатаме JSON на нашия сериен монитор, като използваме следните редове
int httpCode = http.GET (); // предаваме заявка за получаване if (httpCode> 0) {// Проверяваме връщащия код // payload = http.getString (); // Съхраняваме стойността в вариабилен полезен товар за отстраняване на грешки // Serial.println (полезен товар); // Отпечатваме полезния товар за отстраняване на грешки, в противен случай коментираме двата реда
Коментирах тези редове, тъй като те са необходими само за тестване. След като сте се уверили, че ESP8266 е в състояние да получи JSON данните, е време за формулиране на данните. Както можете да видите, тези данни са огромни и повечето от стойностите са безполезни, с изключение на тези, които се изискват за нас като дата, час, температура и влажност.
Затова използваме библиотеката JSON Arduino, за да отделим необходимите за нас стойности и да я съхраним в променлива. Това е възможно, защото стойностите в JSON файла се присвояват като двойки стойности на имена. Така че това име е низ, който ще съдържа стойността, необходима за нас.
За целта трябва да преминем към уебсайт, който ще анализира JSON файла и ще ни даде кода на Arduino. Да, толкова е лесно. Преминете към https://arduinojson.org/assistant/ и поставете JSON файла, който сме заредили в браузъра си, и натиснете enter. Когато приключихте, моят изглеждаше по подобен начин по-долу
Превъртете малко надолу, за да видите програмата за фрази, която се създава автоматично
Всичко, което трябва да направите, е да изберете променливата, която искате, да ги копирате и да я поставите на вашия ID на Arduino, както направих тук
/ * Данни за фразиране с помощта на JSON библиотека * / // Използвайте https://arduinojson.org/assistant/, за да получите стойностите на фразата за вашия 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 ()); / * Край на фразиращите данни * / // Адресирайте стойността sin към желаните променливи JsonObject & current_observation = root; // под current_observation JsonObject & current_observation_observation_location = current_observation; // под наблюдение_локация const char * current_observation_station_id = current_observation; // "ICHENNAI1" // получавам данните за местоположението const char * current_observation_local_time_rfc822 = текущо_наблюдение; // Местно време // получаваме местно време const char * current_observation_temperature_string = current_observation; // "90,7 F (32,6 C)" // получаваме температурната стойност const char * current_observation_relative_huminity = current_observation; // "73%" // получаваме стойността на влажността
Току-що копирах променливите current_observation_station_id, current_observation_local_time_rfc822, current_observation_temperature_string и current_observation_relative_huminity . Тъй като планираме да покажем само тези четири данни на нашия LCD екран.
И накрая, ние получихме необходимите данни от интернет и ги запазихме като променлива, която можем да използваме удобно. За да изпратим тези данни на Arduino, ние просто трябва да ги запишем последователно чрез серийния монитор. Следващите редове ще направят абсолютно същото
// Отпечатваме променливите чрез сериен монитор Serial.print (current_observation_station_id); // изпращаме подробностите за местоположението на Arduino delay (100); // забавяне на стабилността Serial.print (current_observation_local_time_rfc822); // изпращаме подробности за местното време на Arduino delay (100); // забавяне на стабилността Serial.print (current_observation_temperature_string); // изпращаме подробностите за температурата на Arduino delay (100); // забавяне на стабилността Serial.print (current_observation_relative_huminity); // изпращаме подробности за влажността на Arduino delay (100); // забавяне на стабилността
Имайте предвид, че използвах Serial.print (), а не Serial.println (), тъй като командата Serial.println () ще добави a / n и / r заедно с данните, които не са необходими за нас. Също така сме добавили закъснение от 10 секунди, така че ESP да изпраща тези стойности само на интервал от 10 секунди до Arduino.
Свързване на ESP8266-01 с Arduino:
Досега сме програмирали нашия ESP8266-01 да чете необходимите данни от интернет на интервал от 10 секунди и да ги изпраща последователно. Сега трябва да свържем ESP с Arduino, за да можем да четем тези серийни данни. Също така трябва да добавим 16 * 2 LCD дисплей към Arduino, за да можем да показваме данните, получени от модула ESP8266. В диаграмата верига към интерфейса на ESP8266 модул с Arduino е показано по-долу
Уверете се, че GPIO_0 щифтът е оставен свободен, захранвайте модула само с 3.3V щифт на Arduino и натиснете бутона, за да поставите ESP модула в операционен модул. Сега програмата, която качихме в ESP, трябваше да започне да работи и модулът трябва да изпраща данните чрез сериен щифт до Arduino. Тези серийни щифтове са свързани към щифтове с номера 6 и 7 на Arduino. Така че можем да използваме опцията за сериен софтуер на Arduino, за да прочетем тези серийни данни от щифтовете.
Програма и работа на Arduino:
Най- пълен Arduino Програмата също така се дава заедно с кода ESP в края на тази страница. Можете да превъртите надолу, за да видите програмата или да прочетете допълнително, ако искате да разберете програмата.
Програмата за свързване е доста проста, просто трябва да използваме серийната библиотека на софтуера, за да прочетем данните от щифтовете 6 и 7 и да ги покажем на LCD екрана. Тъй като данните, които се получават, са в низов формат, трябва да използваме опцията substring, за да разделим полезния товар според нашето изискване или дори да го преобразуваме в цяло число, ако е необходимо. Затова започваме с дефиниране на щифтовете, към които е свързан LCD дисплеят.
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // щифтове, към които е свързан LCD LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Тъй като сме свързали Rx и Tx щифтовете на ESP8266 с 6 и 7 -ия щифт на Arduino, трябва да инициализираме серийния софтуер за тези щифтове, за да можем да получим серийните данни от тях. Имам имена като ESP_Serial, можете да дайте им име, каквото пожелаете
SoftwareSerial ESP_Serial (6,7); // Tx, Rx
Във функцията за настройка () инициализираме серийната комуникация за сериен монитор, а също и за серийния софтуер. Ако можете да си спомните, направихме програмата ESP да комуникира със скорост 9600 бода, така че трябва да използваме същата скорост на предаване за серийния порт на софтуера. Също така показваме малко въвеждащо съобщение на LCD за 2 секунди.
void setup () {lcd.begin (16, 2); // Използваме 16 * 2 LCD дисплей lcd.print ("Arduino & ESP"); // Показване на встъпително съобщение Serial.begin (115200); ESP_Serial.begin (9600); забавяне (2000); lcd.clear (); }
Във функцията main loop () трябва да проверим дали ESP8266 изпраща нещо. Ако е, тогава четем низа от ESP8266 и го запазваме в променлива, наречена полезен товар. Променливият полезен товар е от тип String и ще съдържа пълната информация, изпратена от модула ESP8266.
докато (ESP_Serial.available ()> 0) {payload = ESP_Serial.readString ();
Сега трябва да разделим този низ на малки парчета, за да можем да ги използваме за собствена цел, в този случай трябва да ги разделим, за да ги покажем на LCD екрана. Това може да стане лесно, като с помощта на подниз функция в Arduino. Трябва да знаете позицията на всеки знак, за да използвате тази функция на подниза . Можете да отпечатате полезния товар на сериен монитор, за да знаете позицията на символите и да ги използвате, за да категоризирате поднизовете, както е показано по-долу
local_date = payload.substring (14, 20); local_time = payload.substring (26, 31); температура = полезен товар.подстрока (48, 54); Влажност = полезен товар.подстрока (55, 60);
Сега мога да продължа и да използвам тези променливи, за да ги отпечатам на сериен монитор или просто да ги отпечатам на LCD. Отпечатването им на серийния монитор обаче ще ни помогне да проверим дали поднизовете са разделени правилно. След това просто ги отпечатваме на LCD дисплея, като използваме следните редове
lcd.clear (); lcd.setCursor (1, 0); lcd.print (local_date); lcd.setCursor (8, 0); lcd.print (local_time); lcd.setCursor (1, 1); lcd.print (температура); lcd.setCursor (10, 1); lcd.print (влажност);
Качете програмата на Arduino и се уверете, че връзките са, както е показано в горната схема. Регулирайте контраста на LCD дисплея, докато видите нещата ясно. Трябва да видите съобщението Intro на LCD и след няколко секунди подробностите като дата, час, температура и влажност трябва да бъдат показани на LCD екрана, както е показано по-долу.
Можете също така да забележите, че синият светодиод на ESP8266 мига всеки път, когато данните влязат. Ако не можете да видите това, това означава, че ESP не е в режим на програмиране, опитайте да натиснете бутона Reset и проверете връзките.
Подобно на това можете да използвате всеки API, за да получите всички необходими данни от интернет и да ги подадете на Arduino и да обработите работата си с Arduino. В интернет има тонове API, които можете да направите с неограничен брой проекти. Надявам се, че сте разбрали проекта и ви е било приятно да го изградите. Ако сте се сблъскали с някакъв проблем, публикувайте ги в раздела за коментари по-долу или на нашите форуми.
Можете да намерите всички наши проекти, свързани с ESP8266, тук.