- Необхідні матеріали:
- Як все працює?
- Програмування ESP8266-01:
- Підключення ESP8266-01 до Arduino:
- Програма та робота Arduino:
ESP8266-01 був чудовим модулем для втамування всієї нашої спраги проектів IOT. З моменту свого випуску він створив потужну спільноту і перетворився на простий у використанні, дешевий та потужний модуль Wi-Fi. Ще однією платформою з відкритим кодом, яка є набагато популярнішою, є Arduino, на якій вже побудовано безліч проектів. Поєднання цих двох платформ відкриє двері для багатьох інноваційних проектів, тому в цьому підручнику ми дізнаємося, як взаємодіяти модуль ESP8266-01 з Arduino. Таким чином ми зможемо надсилати або отримувати дані між Arduino та Інтернетом.
Для цілей цього підручника ми будемо читати час, дату, температуру та вологість з Інтернету, використовуючи API із ESP8266-01. Потім надішліть ці значення на плату Arduino і відображте їх на РК-екрані 16 * 2. Звучить круто правильно !! Тож давайте почнемо.
Необхідні матеріали:
- Arduino Board (будь-яка версія)
- ESP8266-01
- Плата програміста FTDI з опцією 3,3 В
- РК-дисплей 16x2
- Потенціометр
- Нажимна Кнопка
- Підключення проводів
- Макет
Як все працює?
Перш ніж зануритися, важливо знати, як насправді ця штука буде працювати. В основному, ми повинні почати з модуля ESP8266-01. Ми будемо використовувати IDE Arduino для програмування ESP8266, а код буде записаний для використання API для читання файлу JSON через http-запит. Потім ми сформулюємо цей файл JSON для вилучення лише необхідної інформації з повного файлу JSON.
Після сформулювання інформації ми роздрукуємо її за допомогою послідовного зв’язку. Потім ці послідовні лінії будуть підключені до Arduino, щоб Arduino міг читати інформацію, надіслану з ESP8266. Після прочитання та обробки інформації ми відобразимо її на РК-екрані.
Це нормально, якщо ви цього ще не повністю зрозуміли, адже ми будемо вивчати те саме в решті цього підручника.
Програмування ESP8266-01:
Цей підручник передбачає наявність у вас певного досвіду роботи з модулем ESP8266. Якщо ні, то рекомендується прочитати наступні три підручники, щоб повністю зрозуміти це.
- Початок роботи з ESP8266-01
- Програмування ESP8266-01 за допомогою команд AT
- Програмування ESP8266-01 за допомогою Arduino IDE та прошивання його пам'яті
Ви також можете переглянути всі наші проекти ESP8266 тут.
Тут ми збираємося запрограмувати модуль ESP8266-01 за допомогою IDE Arduino. Для апаратного забезпечення ми використовуємо плату FTDI з напругою 3,3 В для програмування ESP8266, оскільки це значно спростить обладнання. Схема підключення ESP8266 до плати FTDI показана нижче.
Переконайтесь, що виконуються наступні умови
1. ESP8266-01 має толерантність лише до 3,3 В, не використовуйте 5 В. Тому встановлюйте FTDI лише в режимі 3,3 В.
2. GPIO_0 повинен бути заземлений для режиму програмування
3. Штифт для скидання повинен бути підключений кнопкою до штиря заземлення. Цю кнопку слід натиснути безпосередньо перед завантаженням коду. Кожного разу при натисканні кнопки синій світлодіод на модулі ESP8266-01 світиться високо, що вказує на те, що модуль скинуто.
Після завершення підключення відкрийте IDE Arduino та перевірте, чи можете ви успішно завантажити зразок програми. Якщо ви не впевнені, як використовувати IDE Arduino для завантаження програми на ESP8266, дотримуйтесь Програмування ESP8266 на Arduino, щоб вивчити її. На цьому етапі я припускаю, що ви успішно завантажили програму блимання.
. Повна програма подана в кінці цієї сторінки далі, я пояснюю їх як невеликі фрагменти. Програма також вимагає компіляції бібліотеки Arduino JSON, тому якщо ви ще не додали бібліотеку до своєї IDE Arduino, додайте її, завантаживши з бібліотеки Arduino JSON з Github.
ESP8266 повинен з’єднатися з Інтернетом, щоб отримати дані про дату, час, температуру та вологість. Отже, ви повинні дозволити йому під’єднуватися до вашого Wi-Fi, довівши SSID та пароль у нижченаведених рядках
const char * ssid = "JIO-Fi"; // Введіть свій SSID Wi-Fi const char * password = "Pas123"; // Введіть ваш пароль Wi-Fi
Усередині функції setup () ми перевіряємо, чи зможе ESP підключитися до Wi-Fi, якщо ні, він буде чекати там назавжди, просто надрукувавши “Connecting..” на послідовному моніторі.
while (WiFi.status ()! = WL_CONNECTED) {// Зачекайте, поки Wi-Fi буде підключений затримка (1000); Serial.print ("Підключення.."); // Print Connecting.. до встановлення з'єднання }
Наступний крок - це дуже важливий крок. Якщо з’єднання 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. Після закінчення моє виглядало приблизно так нижче
Прокрутіть трохи вниз, щоб побачити програму створення фраз, яка створюється автоматично
Все, що вам потрібно зробити, це вибрати потрібну змінну, скопіювати їх та вставити на свій IDE 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; // під поточним_спостереженням JsonObject & current_observation_observation_location = поточним_спостереженням; // під спостереженням_розташування 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_humidity = current_observation; // "73%" // отримуємо значення вологості
Я щойно скопіював змінні current_observation_station_id, current_observation_local_time_rfc822, current_observation_temperature_string і current_observation_relative_humidity . Оскільки ми плануємо відображати лише ці чотири дані на нашому РК-екрані.
Нарешті, ми отримали потрібні нам дані з Інтернету та зберегли їх як змінну, яку ми можемо зручно використовувати. Щоб надіслати ці дані в 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_humidity); // надсилаємо дані про вологість на Arduino delay (100); // затримка стабільності
Зауважте, що я використовував Serial.print (), а не Serial.println (), оскільки команда Serial.println () додасть a / n та / r разом із даними, які нам не потрібні. Ми також додали затримку в 10 секунд, щоб ESP надсилав ці значення Arduino лише через 10 секунд.
Підключення ESP8266-01 до Arduino:
Поки що ми запрограмували наш ESP8266-01 для зчитування необхідних даних з Інтернету через інтервал 10 секунд і послідовної розсилки. Тепер ми повинні взаємодіяти ESP з Arduino, щоб ми могли читати ці послідовні дані. Ми також повинні додати РК-дисплей 16 * 2 до Arduino, щоб ми могли відображати дані, отримані від модуля ESP8266. Схема для сполучення ESP8266 модуль з Arduino показаний нижче
Переконайтеся, що штифт GPIO_0 залишився вільним, підключіть модуль лише до 3,3 В виводу Arduino і натисніть кнопку, щоб ввести модуль ESP в робочий модуль. Тепер програма, яку ми завантажили в ESP, повинна була запрацювати, і модуль повинен надсилати дані через послідовний штифт на Arduino. Ці послідовні висновки підключені до виводів No 6 і 7 на Arduino. Отже, ми можемо використовувати опцію послідовного програмного забезпечення на Arduino для зчитування цих послідовних даних зі штифтів.
Програма та робота Arduino:
Повна Arduino програма також дається разом з кодом ESP в кінці цієї сторінки. Ви можете прокрутити вниз, щоб переглянути програму, або прочитати далі, якщо хочете зрозуміти програму.
Програма взаємодії досить проста, нам просто потрібно скористатися послідовною бібліотекою програмного забезпечення для зчитування даних з контактів 6 і 7 та відображення їх на РК-екрані. Оскільки дані, що отримуються, мають формат рядків, ми повинні використовувати опцію підрядка, щоб розбити корисне навантаження відповідно до наших вимог або навіть перетворити його на ціле число, якщо потрібно. Отже, ми починаємо з визначення штифтів, до яких підключений РК-дисплей.
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // Шпильки, до яких підключений РК- дисплей LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Оскільки ми з'єднали виводи Rx і Tx ESP8266 з 6-м і 7- м висновками Arduino, ми повинні ініціалізувати серійний номер програмного забезпечення для цих висновків, щоб ми могли отримувати від них послідовні дані. У мене є імена ESP_Serial, ви можете називайте їх як завгодно
SoftwareSerial ESP_Serial (6,7); // Tx, Rx
Усередині функції setup () ми ініціюємо послідовний зв’язок для послідовного монітора, а також для послідовного програмного забезпечення. Якщо ви пам'ятаєте, ми створили програму ESP для зв'язку зі швидкістю 9600 бод, тому нам доведеться використовувати ту саму швидкість передачі даних для послідовного порту програмного забезпечення. Ми також відображаємо невелике вступне повідомлення на РК-дисплеї протягом 2 секунд.
void setup () {lcd.begin (16, 2); // Ми використовуємо РК-дисплей 16 * 2 lcd.print ("Arduino & ESP"); // Відображення вступного повідомлення Serial.begin (115200); ESP_Serial.begin (9600); затримка (2000); lcd.clear (); }
Усередині функції основного циклу () ми повинні перевірити, чи ESP8266 нічого не надсилає. Якщо це так, тоді ми читаємо рядок з ESP8266 і зберігаємо його у змінну, яка називається корисним навантаженням. Змінна корисне навантаження має тип String, і вона буде містити повну інформацію, надіслану з модуля ESP8266.
while (ESP_Serial.available ()> 0) {payload = ESP_Serial.readString ();
Тепер ми повинні розділити цей рядок на невеликі шматки, щоб ми могли використовувати їх для власних цілей, у цьому випадку ми повинні розділити їх, щоб відобразити на РК-екрані. Це можна легко зробити, використовуючи подстроку функції в Arduino. Ви повинні знати положення кожного символу, щоб використовувати цю функцію підрядка . Ви можете роздрукувати корисне навантаження на послідовному моніторі, щоб знати положення символів і використовувати їх для класифікації підрядків, як показано нижче
local_date = payload.substring (14, 20); local_time = payload.substring (26, 31); температура = корисне навантаження.подсистема (48, 54); Вологість = корисне навантаження.підсистема (55, 60);
Тепер я можу продовжувати використовувати ці змінні або для їх друку на послідовному моніторі, або просто для друку на РК-дисплеї. Однак їх друк на послідовному моніторі допоможе нам перевірити, чи правильно розділені підрядки. Далі ми просто роздруковуємо їх на РК-дисплеї, використовуючи наступні рядки
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 і переконайтеся, що з'єднання такі, як показано на схемі вище. Налаштовуйте контрастність РК-дисплея, доки ви не будете чітко розглядати речі. Ви повинні побачити вступне повідомлення на РК-дисплеї, а потім через кілька секунд такі дані, як дата, час, температура та вологість, повинні відображатися на РК-екрані, як показано нижче.
Ви також можете помітити синій світлодіод на ESP8266, що блимає кожного разу, коли надходять дані. Якщо ви цього не бачите, це означає, що ESP не перебуває в режимі програмування, спробуйте натиснути кнопку Скинути, а також перевірити з'єднання.
Подібно до цього, ви можете використовувати будь-який API для отримання будь-яких необхідних даних з Інтернету та передачі їх до Arduino та обробки вашої роботи з Arduino. В Інтернеті доступно безліч API, і з усіма тими можна створити необмежену кількість проектів. Сподіваюся, ви зрозуміли проект і сподобалось його будувати. Якщо у вас виникли проблеми, опублікуйте їх у розділі коментарів нижче або на наших форумах.
Всі наші пов'язані з ESP8266 проекти ви можете знайти тут.