Мікроконтролер ESP8266: підключення та налаштування. Оновлення прошивки Wi-Fi модуля ESP8266

Як перевірити ESP8266

Для перевірки ESP8266, який ви щойно придбали, потрібно .

Увага!Допустимий діапазон напруги живлення модуля ESP8266 від 3,0 до 3,6 вольт. Подача підвищеної напруги живлення на модуль гарантовано призведе до виходу ESP8266.

Щоб перевірити ESP8266 ESP-01, достатньо підключити три піна: VCC і CH_PD (chip enable) до живлення 3,3 вольт, а GND до землі. Якщо у вас не ESP-01, а інший модуль і на ньому виведений GPIO15, то додатково потрібно підключити GPIO15 до землі.

При успішному старті заводської прошивки на модулі ESP8266 загориться червоний світлодіод (індикатор живлення, на деяких версіях модуля, наприклад ESP-12, може бути відсутній) і кілька разів блимає синій (це індикатор передачі даних від модуля до терміналу по лінії TX-RX, може мати інший колір) і у вашій бездротової мережімає з'явитися нова точка доступу з ім'ям ESP_XXXX, яку ви зможете побачити з будь-якого WiFi пристрою. Назва точки доступу залежить від виробника прошивки та може бути іншою, наприклад AI-THINKER_AXXXXC. Якщо точка доступу з'явилася, то можна продовжити експерименти далі, якщо ні, то ще раз перевірте живлення, CH_PD, GND і якщо все правильно підключено то, швидше за все, у вас несправний модуль, але є надія, що прошивка в модулі з нестандартними налаштуваннями і можливо, вам допоможе перепрошивка.

Як швидко підключити ESP8266

У мінімальний набір для підключення та прошивки модуля ESP8266 входить:

Увага! На правому малюнку підключення UTXD (TX) та URXD (RX) модуля ESP8266 до п'ятивольтової TTL логіки ви здійснюєте на свій страх та ризик! Документація на SoC ESP8266 повідомляє, що модуль толерантний тільки до 3.3 вольтової логіки. У більшості випадків підключення ESP8266 до п'ятивольтової логіки не призводить до виходу з ладу ESP8266, проте саме вашому модулю може не пощастити. Для унеможливлення ризику виходу модуля ESP8266 з ладу рекомендується використовувати USB-TTL конвертер на 3,3 вольта, або TTL 5v-3.3v конвертери або дільник на резисторах (на малюнку не показаний). Докладніше про узгодження логічних рівнів можете прочитати. Ризикові гіки, подібні до мене, підключають ESP8266 до п'ятивольтової TTL логіки безпосередньо і не морочаться.

Увага! На правому малюнку показано підключення стабілізатора живлення 1117 без додаткового обв'язування. Це працює, але все ж таки, ми рекомендуємо використовувати схему підключення з конденсаторною обв'язкою - звірте схему підключення з датажит на ваш стабілізатор або використовуйте готовий модуль на базі 1117 .

ESP8266 - підключення

Червоний - харчування 3,3в

Чорний - GND

Жовтий – на стороні ESP8266 – RX, на стороні USB-TTL – TX

Зелений - на стороні ESP8266 - TX, на стороні USB-TTL - RX

Помаранчевий – CH_PD (CHIP ENABLE) – повинен бути завжди підтягнутий до харчування

Синій – GPIO0 – підключений через вимикач до землі для увімкнення режиму перепрошивки модуля. Для звичайного старту модуля GPIO0 можна залишити не підключеним.

Рожевий на правій схемі - нестабілізоване харчування 5-8 вольт

4. Для старту модуля розірвіть ланцюг GPIO0 - GND і можете подавати харчування (причому саме в такому порядку: спочатку переконуємося, що GPIO0 "висить у повітрі", потім подаємо харчування на VCC і CH_PD)

Увага! У вищенаведених, реально працюючих прикладах підключення ESP8266 використовується підключення висновків ESP8266 «безпосередньо» до землі та харчування, або «висить у повітрі», як у нас нікуди не підключений RESET, що є абсолютно неправильним і придатним тільки для пари перших експериментів, хоча і цілком працездатно на переважній більшості модулів. "Напряму" до живлення підключається тільки висновок VCC, інші висновки: CH_PD, RESET, GPIO0, GPIO2, повинні бути підтягнуті (pullup) до живлення (VCC) через резистор від 4,7 до 50 кОм. «Напряму», до мінуса (загального дроту) живлення підключаємо тільки GND, а GPIO0 підтягуємо (pulldown) теж через резистор до 10k до GND для переведення модуль у режим завантаження прошивки. Якщо ви плануєте і далі експериментувати з ESP8266, то зробіть так само, як і для будь-яких інших мікроконтролерів. Детальний опис pullup і pulldown виходить за межі цієї статті, але ви зможете легко нагуглити опис правильного підключенняпортів введення-виведення. Підключення дозволить вам уникнути безлічі «чудес» і проблем і буде неминуче необхідним при виникненні труднощів із запуском або перепрошивкою модуля ESP8266.

Як правильно підключити ESP8266

Якщо ви плануєте займатися з ESP8266 більше, ніж один вечір, вам знадобиться варіант підключення, що забезпечує вищу стабільність. Нижче наводяться дві схеми підключення: з підтримкою автозавантаження прошивки з і без неї.

Схема підключення ESP8266 (без автозавантаження прошивки, прошиваємося попередньо встановивши перемичку BURN та перезавантаживши модуль)

Схема підключення з підтримкою автозавантаження прошивки з Arduino IDE, UDK, Sming. Для Flash Download Tool та XTCOM_UTIL, можливо, буде потрібно відключення RTS/DTR. Якщо RTS і DTR вам відключати незручно, можна додати у схему перемички

На цих схемах не показано підключення ADC і вільних GPIO - їх підключення залежатиме від того, що ви захочете реалізувати, але якщо хочете стабільності, то не забудьте притягнути все GPIO до живлення (pullup), а ADC до землі (pulldown) через резистори, що підтягують. .

Резистори на 10k можуть замінити інші від 4,7k до 50k, крім GPIO15 — його номінал має бути до 10k. Номінал конденсатора, що згладжує високочастотні пульсації, може бути іншим.

З'єднання RESET і GPIO16 через резистор deep sleep на 470 Ом вам знадобиться, якщо ви використовуватимете режим deep sleep: для виходу з режиму глибокого сну модуль перезавантажує сам себе, подаючи низький рівень на GPIO16. Без цього з'єднання глибокий сон буде вічним для вашого модуля.

На перший погляд, на цих схемах здається, що GPIO0, GPIO2, GPIO15, GPIO1 (TX), GPIO3 (RX) зайняті і ви не можете їх використовувати для своїх цілей, але це не так. Високий рівень на GPIO0 і GPIO2, низький на GPIO15 потрібні тільки для старту модуля, а в подальшому ви можете використовувати їх на свій розсуд, тільки не забудьте забезпечити потрібні рівні до перезавантаження модуля.

Можна використовувати і TX, RX як GPIO1 і GPIO3 відповідно, не забуваючи про те, що при старті модуля будь-яка прошивка буде смикати TX, відправляючи налагоджувальну інформацію в UART0 на швидкості 74480, але після успішного завантаження ви можете використовувати їх не тільки як UART0 для обміну даними з іншим пристроєм, а й як звичайні GPIO.

Для модулів, що мають меншу кількість розведених пінів, наприклад ESP-01 підключення нерозведених пінів не потрібно, тобто. на ESP-01 розведені тільки: VCC, GND, GPIO0, GPIO2, CH_PD та RESET - ось тільки їх і підтягуєте. Немає жодної необхідності припаюватися прямо до мікросхеми ESP8266EX і притягувати нерозведені піни, тільки якщо це вам .

Дані схеми підключення народилися після безлічі експериментів, проведених нашими форумчанами і зібрані по крихтах з розрізненої і недоступної спочатку документації нашим співтовариством, я лише постарався об'єднати ці знання в одному місці. Безліч порад з підключення ви знайдете. Там же ви зможете задати питання, що вас цікавлять, або знайти. Якщо ви побачили помилку, неточність у цій статті або є що додати, то .

Увага! Навіть ці схеми не можна назвати «ідеальними». Досконало немає межі: зручно підключити другий USB-TTL до UART1 (з ESP8266 можна взяти тільки GND і UTXD1, тобто GPIO2) для підключення терміналу налагодження (потрібний другий USB-TTL конвертер) — тоді можна буде прошивати модуль ESP8266 через UART0 без відключення терміналу налагодження на UART1. Непогано буде підключити резистори малого номіналу до висновків обох UART, поставити діод у лінію RTS, додати конденсатор до лінії живлення для гасіння низькочастотних імпульсів і т.д. Дуже зручно, наприклад, зроблено в цій налагоджувальній платі: на всі GPIO підключені світлодіоди, на ADC підключений фоторезистор, але шкода, що немає кнопки RESET і перемичка лише одна на GPIO0.

Правильним буде сказати вам, що не існує ідеальної і водночас універсальної схемипідключення ESP8266 Вся справа в тому, що багато залежить від прошивки, яку ви збираєтеся туди залити. Наведені вище схеми розраховані на новачків, які тільки починають освоювати ESP8266, для експериментів. Для реальних проектів, можливо, вам доведеться трохи змінити схему. Наприклад, потрібно підключити RTS до GPIO15, а CTS до GPIO13. Також у реальних проектах рекомендую приділити особливу увагу питанню.

Підключення ESP8266 через Arduino

Якщо у вас під рукою не було USB-TTL конвертера на 3,3в, але є Arduino з вбудованим USB-TTL конвертером, то можна використовувати таку схему підключення

На що звернути увагу:

1. Arduino Reset підключений до GND (синій провід) щоб не запускався мікроконтролер на Arduino, в даному виді ми використовуємо Arduino як прозорий USB-TTL конвертер

2. RX і TX підключені не "на перехрест", а прямо - RX - RX (зелений), TX - TX (жовтий)

3. Решта підключено так само, як і в попередніх прикладах

Увага! У цій схемі також потрібно узгоджувати рівні TTL 5 вольт Arduino і 3.3 вольта ESP8266, проте непогано працює і так.

Увага!На Arduino може бути встановлений стабілізатор живлення, який не витримає струм, необхідний для ESP8266, тому перш, ніж робити підключення, звіртеся з даташитом на той стабілізатор, який встановлений саме у вас. Не підключайте інші енергоспоживаючі компоненти одночасно з ESP8266 через ризик виходу з ладу вбудованого в Arduino стабілізатора живлення.

З підключенням до послідовного порту доведеться трохи почаклувати: у зв'язку з різноманітністю прошивок для ESP8266, підключення може здійснюватися на різних швидкостях. Потрібну швидкість можна визначити шляхом простого перебору трьох варіантів: 9600, 57600 та 115200. Як здійснити перебір? Підключаєтеся в термінальній програмі до вашого віртуального послідовного порту, виставивши наступні параметри: 9600 8N1, потім перезавантажуєте модуль, відключивши CH_PD (chip enable) від живлення (USB-TTL при цьому залишається підключеним до USB) і знову вмикаєте (тобто просто перекручує CH_PD , чому не пересмикуємо живлення - читаємо, також можна короткочасно замкнути RESET на землю для перезавантаження модуля) і спостерігаєте дані в терміналі. По-перше, світлодіоди ESP8266 повинні горіти як описано на початку статті в розділі . По-друге, у терміналі ви повинні побачити "сміття" з різних символів, що закінчується рядком "ready". Якщо "ready" ми не бачимо, то перепідключається терміналом на іншій швидкості і знову перезавантажуємо модуль.

На одному з варіантів швидкості "ready" ви все-таки побачите - вітаємо, ваш модуль готовий до роботи. Якщо ні, то ласкаво просимо - ми постараємося допомогти, але попередньо почитайте.

Трохи докладніше про «сміття». Справа в тому, що при старті прошивки, UART модуля ESP8266 перемикається на швидкість передачі 74880 (ось такі кумедні ці китайці) видає в UART налагоджувальну інформацію, потім перемикає швидкість порту на 115200 (ну або на 9600 або 57600 в залежності від версії , Так ось ця налагоджувальна інформація і бачиться нам як сміття, т.к. ми підключаємось до модуля на іншій швидкості. Можете підключитися до ESP8266 на швидкості 74880 ( підтримує цю швидкість) і ви цю налагоджувальну інформацію побачите, буде щось на кшталт цього:

wdt reset load 0x40100000, len 25052, room 16 tail 12 chksum 0x0b ho 0 tail 12 room 4 load 0x3ffe8000, len 3312, room 12 tail 4 chksum 0x5 tail 12 chksum 0x0d csum 0x0d

wdt reset

load 0x40100000 , len 25052 , room 16

load 0x3ffe8cf0 , len 6576 , room 4

tail 12

chksum 0x0d

csum 0x0d

АЛЕ! не побачите "ready" і не зможете керувати модулем, поки не перепідключіться на ту швидкість, на якій працює прошивка.

Що робити далі

Якщо у вас новий модуль, то, швидше за все, в ньому прошита одна із старих кастомних AT прошивок. Швидше за все це якийсь AI-THINKER AT v0.16 SDK v0.9.2. Перевірити версію прошивки можна командою «AT+GMR», тобто. прямо в термінальній програмі набираєте AT+GMR без лапок і тиснете Enter. Модуль повинен відповісти "OK" і видати версію прошивки (наприклад, "0016000092" - в різних версіях AT прошивок (формат виведення версії відрізняється). Управління модулем ESP8266 AT командами заслуговує на окрему статтю, проте ви легко зможете розібратися з цим і самі, скориставшись одним з наших довідників по AT командам:

На момент написання цієї статті)

2. Завантажте одну з утиліт для прошивки ESP8266 в залежності від вашої операційної системи з розділу нашого сайту

… Втім, цей матеріал не обмежується лише однією темою Ардуїно.

Тема ESP8266 - досить непроста. Але якщо працювати з цими Wi-Fi модулями серед розробки Arduino IDE - поріг входження опускається до прийнятного для звичайного ардуинщика рівня. Та й не тільки ардуїнщика, а будь-якої людини, яка має бажання зварганити щось по темі, причому не витрачаючи багато часу читаючи документацію для мікросхеми та вивчення API для цих модулів.

Дане відео повністю дублює матеріал, представлений у статті нижче.

Ну що ж, ми вже вміємо підключати ESP8266 і переводити його в режим програмування, тепер перейдемо до чогось кориснішого.

Скажу відразу - один раз запрограмувавши модуль у середовищі розробки Ардуїно, ми зносимо рідну прошивку, і у нас зникне можливість працювати з модулем за допомогою AT-команд. Особисто мені, від цього, не холодно/не жарко, але якщо комусь це буде потрібно - ближче до кінця статті я покажу, як назад прошити в модуль рідну прошивку, чи якийсь загручик типу NodeMcu.

Для початку, на оф.сайті качаємо останню версію Arduino IDE, на даний момент це 1.6.7. Старіші версії типу 1.0.5. не підійдуть, бо банально не мають потрібного функціоналу, а танці з бубном нас не цікавлять, чи не так?

Запускаємо середовище розробки і відразу йдемо у Файл/Налаштування:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Потім йдемо Інструменти/Плата:/Менеджер плат...:

Перед нами з'явиться вікно менеджера плат, гортаємо його до самого низу, і якщо все зроблено правильно ми побачимо щось подібне до цього:

Клацаємо курсором за написом " esp8266 by ESP8266 Communityпісля цього, у нас з'явилася кнопка «Установка», вибираєте потрібну версіюя беру останню, на сьогоднішній день це 2.1.0. та встановлюю її. Середовище розробки закачає необхідні їй файли (близько 150 мегабайт) і навпаки написи " esp8266 by ESP8266 Community" з'явиться "INSTALLED" тобто встановлено:

Гортаємо список плат вниз і бачимо, що в списку у нас з'явилося багато різних ESP, беремо "Generic ESP8266 Module":

Ідемо в «Інструменти» і вибираємо потрібний COM порт (у мене це COM32), потім ставимо Upload Speed: «115200»:

Виставляємо швидкість 74880 і «NL & CR» і знову ж таки відключаємо і подаємо харчування і він відповість деякою налагоджувальною інформацією:

Зауважте, 74880 - не основна швидкість ESP8266, просто він лише на ній відправляє налагоджувальну інформацію. Якщо модуль нічого не відправляє в консоль, тоді можливо щось підключили не так, як треба.

За замовчуванням швидкість має бути 115200, але в окремих випадках може бути і 9600 та інші… Тож спробуйте підібрати.

Після підбору потрібної швидкості відправляємо модулю AT і він повинен відповісти що все ОК. Команда «AT+GMR» виводить інформацію про прошивку.

Перш ніж почати прошивати ESP8266 в Arduino IDE, я раджу дочитати статтю до кінця.

Тепер спробуємо прошити ESP8266 через Arduino IDE. Переводимо модуль у режим програмування (як це зробити я писав у ).

Давайте зашиємо мигалку штатним світлодіодом:

// By MrПоделкинЦ youtube.com/RazniePodelki // special to сайт/post/271754/ #define TXD 1 // GPIO1/TXD01 void setup() ( pinMode(TXD, OUTPUT); ) void loop() ( digitalWrite(TXD, HIGH);delay(1000);digitalWrite(TXD, LOW);delay(1000);

Замиготів? Значить, все зроблено правильно. Звідки я взяв що світлодіод підключений до першого пін? У попередній статті є картинка з розпинуванням різних модулів і там є розмітка портів, при використанні завантажувача Arduino (піни відзначені рожевим кольором).

Блимання світлодіодом це звичайно добре, але треба якийсь веб-сервер закласти або почати керувати світлодіодом хоча б за допомогою кнопок у браузері, чи не так? Але про це я розповім вже якось іншим разом.

А зараз як прошити назад рідну прошивку, та й як взагалі прошивати модуль сторонніми завантажувачами. Для ESP8266 є така програма як NodeMCU Flasher, яка спочатку призначена для прошивки завантажувача NodeMCU. Але як виявилося, вона добре прошиває й інші прошивки.

Я прикріплю до статті архів з даною програмою та прошивкою для зручності, але завжди можна завантажити нову версію NodeMCU Flasher.

У папці "nodemcu-flasher-master" є 2 папки Win64 і Win32 і залежно від того, яка розрядність у вашої ОС вибираємо потрібну. Далі в папці Release запускаємо "ESP8266Flasher.exe" і бачимо інтерфейс програми:

Вибираємо потрібний COM порт і йдемо у вкладку Config, прибираємо хрестик біля INTERNAL://NODEMCU і ставимо його на один пункт нижче, як на скрині:

(Якщо захочете прошити завантажувач NodeMCU – прибираєте хрестик там, де його не було, і ставите – де він був, тобто біля «INTERNAL://NODEMCU»).

Потім тиснемо по шестерні і вибираємо де лежить наша прошивка, прошивка як правило у форматі *.bin (у прикріпленому архіві це "v0.9.5.2 AT Firmware.bin" яка лежить в основній папці), і так само вибираємо "0x00000" як і вище.

Повертаємось знову на вкладку «Operation» переводимо модуль у режим програмування і тиснемо «Flash»:

Все, модуль почав прошиватися, після перепрошивки не забуваємо перезавантажити модуль і вуаля, він прошитиме потрібною нам прошивкою.

Перевіряємо AT-командою «AT+GMR» чи зробили ми все правильно:

Як бачите, все нормально прошилося.

Багато користувачів вже встигли звернути увагу на чіп ESP8266-12, випущений компанією Espressif. Вартість його значно дешевше в порівнянні зі стандартною платою Bluetooth-адаптера, та й за менших габаритів він відрізняється значно ширшими можливостями. Тепер усі домашні любителі отримали можливість роботи у мережі Wi-Fiвідразу в двох режимах, тобто підключати свій комп'ютер до будь-яких точок доступу або включати його в якості такої точки.

З іншого боку, потрібно правильно розуміти, що такі плати є не просто шилдами, призначеними тільки для зв'язку по Wi-Fi. Сам по собі ESP8266 є мікроконтролером, що має власні UART, GPIO і SPI-інтерфейси, тобто його можна використовувати як абсолютно автономне обладнання. Багато хто після виходу даного чіпа назвали його справжнісінькою революцією, і з часом такі пристрої почнуть вбудовуватися навіть у самі прості видитехніки, але поки що пристрій є порівняно новим і будь-якої стабільної прошивки на нього немає. Багато фахівців по всьому світу намагаються винаходити власні прошивки, адже заливати їх у плату насправді не становить особливих труднощів, але незважаючи на різні труднощі, пристрій вже зараз можна назвати цілком придатним до роботи.

На даний момент розглядається лише два варіанти застосування даного модуля:

  • Використання плати в комбінації з додатковим мікроконтролером або комп'ютером, яким здійснюватиметься контроль над модулем через UART.
  • Самостійне написання прошивки для чіпа, що дозволяє потім використовувати його як самодостатній пристрій.

Цілком природно, що розглядати самостійну прошивку в даному випадку ми не будемо.

Дивлячись на зручність використання та хороші характеристики, багато людей серед безлічі мікроконтролерів віддають свою перевагу моделі ESP8266. Підключення та оновлення прошивки даного пристроює гранично простим і доступним, і виготовляють тому ж залозі, у якому здійснюється підключення устаткування до комп'ютера. Тобто так само через USB-TTL-конвертер або, якщо хтось віддає перевагу іншим варіантам підключення, може здійснюватися через RPi та Arduino.

Як перевірити?

Для того щоб перевірити працездатність щойно купленого пристрою, вам потрібно буде використовувати спеціальне джерело стабілізованої напруги, розраховане на 3,3 вольта. Відразу варто відзначити, що реальний діапазон напруги живлення даного модуля становить від 3 до 3,6 вольт, а подача підвищеної напруги відразу призведе до того, що ви просто виведете з ладу свій ESP8266. Прошивка та інше програмне забезпечення після подібної ситуації може почати некоректно працювати, і вам уже потрібно буде ремонтувати пристрій або якось його виправляти.

Щоб визначити працездатність цієї моделі мікроконтролера, потрібно просто підключити три піна:

  • CH_PD та VCC підключаються до живлення 3,3 вольт.
  • GND підключається до землі.

Якщо вами використовується не ESP-01, а якийсь інший модуль, і на ньому вже спочатку є виведений GPIO15, то в такому випадку вам і його потрібно буде додатково підключити до землі.

Якщо заводська прошивка запустилася нормально, то в такому випадку можна побачити, а потім кілька разів блимає синій. Однак варто відзначити, що червоний індикатор живлення мають не всі серії ESP8266. Прошивка на деяких пристроях не передбачає загоряння червоного індикатора, якщо в модулі він відсутній (зокрема, це стосується моделі ESP-12).

Після підключення до бездротової мережі активується нова точка доступу, яка буде називатися ESP_XXXX, і її можна буде виявити з будь-якого пристрою, який має доступ до Wi-Fi. У цьому випадку назва точки доступу безпосередньо залежить від виробника використовуваної вами прошивки, і тому може бути будь-яким іншим.

Якщо точка дійсно з'являється, ви можете продовжувати експерименти, в іншому випадку потрібно буде проводити повторну перевірку живлення, а також коректність підключення GND і CH_PD, а якщо все підключено правильно, то, швидше за все, ви все-таки намагаєтеся використовувати зламаний модуль або на ньому встановлена ​​прошивка з нестандартними налаштуваннями.

Як його швидко підключити?

Стандартний набір, необхідний для підключення даного модуля, включає наступне:

  • сам модуль;
  • безпайкову макетну плату;
  • повноцінний набір проводів мама-тато, призначені для макетної плати, або спеціальний кабель DUPONT M-F;
  • USB-TTL конвертер на основі PL2303, FTDI або якомусь аналогічному чіпі. Найбільш оптимальний варіант - якщо на USB-TTL адаптер також виводяться RTS і DTR, так як за рахунок цього можна досягти достатньо швидкого завантаженняпрошивки з якогось UDK, Arduino IDE або Sming, не маючи навіть необхідності в ручному перемиканні GPIO0 на землю.

Якщо вами використовується конвертер на 5 вольт, то в такому разі потрібно буде придбати додатковий стабілізатор живлення на базі чіпа 1117 або аналогічному, а також джерело живлення (для стандартного 1117 цілком непогано підійде навіть звичайна зарядка від смартфона на 5 вольт). Рекомендується не використовувати Arduino IDE або USB-TTL як джерело живлення для ESP8266, а застосовувати окремий, тому що за рахунок цього можна позбутися зрештою маси проблем.

Розширений набір для забезпечення комфортної та постійної роботи з модулем передбачає необхідність використання додаткових резисторів, світлодіодів та DIP-перемикачів. Крім цього, можна використовувати недорогий USB монітор, який дозволить вам постійно спостерігати за кількістю споживаного струму, а також забезпечить невеликий захист шину USB від виникнення

Що потрібно робити?

Насамперед варто відзначити той факт, що в ESP8266 управління може бути дещо різним залежно від того, яка саме модель використовується. Таких модулів сьогодні представлено досить багато, і перше, що буде потрібно, - це провести ідентифікацію моделі, що використовується, і визначитися з її розпинуванням. У даній інструкції ми говоритимемо про роботу з модулем ESP8266 ESP-01 V090, і якщо вами використовується якась інша модель з виведеним піном GPIO15 (HSPICS, MTDO), вам потрібно буде притягнути його до землі як для стандартного старту модуля, так і для використання режиму прошивки.

Після цього двічі переконайтеся в тому, що напруга живлення для підключеного модуля становить 3,3 вольта. Як говорилося вище, допустимий діапазон становить від 3 до 3,6 вольт, і в разі підвищення пристрій виходить з ладу, але при цьому напруга живлення може бути навіть значно нижче 3 вольт, які заявлені в документах.

Якщо ви використовуєте USB-TTL конвертер на 3,3 вольта, то в такому випадку підключіть модуль так само, як на лівій частині картинки нижче. Якщо ж вами застосовується виключно п'ятивольтовий USB-TTL, зверніть увагу на праву частину малюнка. Багатьом може здатися, що права схема ефективніша за рахунок того, що в ній застосовується окреме джерело живлення, але насправді у разі застосування USB-TTL конвертера на 5 вольт вкрай бажано зробити додатковий дільник на резисторах, щоб забезпечити узгодження тривольтових і п'ятивольтових рівнів логіки, або просто використовувати модуль перетворення рівнів.

Особливості підключення

На правому малюнку є підключення UTXD (TX), а також URXD (RX) даного модуля до п'ятивольтової логіки TTL, і проведення таких процедур здійснюється тільки на свій страх і ризик. До ESP8266 опис говорить про те, що модуль ефективно працює лише з 3,3-вольтовою логікою. У переважній більшості випадків навіть у разі роботи з п'ятивольтовою логікою обладнання не виходить з ладу, але зрідка відбуваються такі ситуації, тому подібне підключення не рекомендоване.

Якщо у вас немає можливості використовувати спеціалізований USB-TTL конвертер на 3,3 вольт, можна застосувати дільник на резисторах. Також варто відзначити, що на правому малюнку стабілізатор живлення 1117 підключається без додаткової обв'язки, і це дійсно робоча технологія, але все-таки найкраще користуватися схемою підключення 1117 з конденсаторною обв'язкою - потрібно звірити її з ESP8266 datasheet на ваш стабілізатор або використовувати вже повністю готовий модуль, що ґрунтується на базі 1117.

Щоб запустити модуль, потрібно розірвати GPIO0-TND ланцюг, після чого можна подавати живлення. При цьому варто відзначити, що робити все потрібно саме в такому порядку, тобто спочатку переконайтеся в тому, що GPIO0 «висить у повітрі», і лише потім уже подавайте харчування на CH_PD та VCC.

Як правильно підключати?

Якщо ви можете приділити більше одного вечора, щоб нормально підключити модуль ESP8266, ви можете використовувати більш стабільний варіант. На схемі ви бачите варіант підключення з автоматичним завантаженням прошивки.

Варто відзначити, що на зображенні вище не показується використання вільних GPIO або ADC, і їх підключення безпосередньо залежатиме від того, що конкретно ви хочете реалізувати, але якщо ж ви захочете забезпечити стабільність, не забувайте притягувати все GPIO до живлення, а ADC до землі з використанням підтягуючих резисторів.

Резистори на 10k за необхідності можна замінити будь-які інші в діапазоні від 4,7k до 50k, крім GPIO15, оскільки його номінал має бути трохи більше 10k. Номінал конденсатора, що згладжує високочастотні пульсації, може бути дещо іншим.

З'єднання RESET і GPIO16 через використання резистора deep sleep на 470 Ом може стати необхідним під час використання відповідного режиму, оскільки для того, щоб вийти з режиму глибокого сну, модуль здійснює повне перезавантаження, здійснюючи подачу низького рівня на GPIO16. При відсутності даного з'єднаннярежим глибокого сну для вашого модуля триватиме вічно.

На перший погляд може здатися, що GPIO0, GPIO1 (TX), GPIO2, GPIO3 (RX) і GPIO15 зайняті, тому використовувати їх для своїх цілей не вийде, але насправді це далеко не так. Досить високий рівень на GPIO0 і GPIO2, а також низький на GPIO15 можуть знадобитися тільки для початкового запуску модуля, а надалі вже можна застосовувати їх на власний розсуд. Єдине, що варто відзначити - не забувайте забезпечувати потрібні рівні до того, як здійснювати повне перезавантаження вашого обладнання.

Також можна використовувати TX, RX як альтернативу GPIO1 і GPIO3, але при цьому не варто забувати про те, що після старту модуля кожна прошивка починає «смикати» ТХ, паралельно займаючись відправкою налагоджувальної інформації в UART0 зі швидкістю 74480, але після того, як буде проведено успішне завантаження, їх можна використовувати не тільки як UART0 для того, щоб зробити обмін даних з іншим пристроєм, але і як стандартні GPIO.

Для модулів, у яких є невелика кількість розведених пінів (наприклад, ESP-01), не потрібно підключення нерозведених пінів, тобто на ESP-01 розводяться тільки: GND, CH_PD, VCC, GPIO0, GPIO2 і RESET, і саме їх вам потрібно буде підтягувати. Немає жодної потреби в тому, щоб припаюватися безпосередньо до мікросхеми ESP8266EX, а потім притягувати нерозведені піни, якщо це вам дійсно потрібно.

Такі схеми підключення використовувалися після великої кількості експериментів, проведених кваліфікованими фахівцями та зібрані з безлічі різноманітної інформації. При цьому варто відзначити, що навіть такі схеми не можна вважати ідеальними, тому що можна використовувати цілу низку інших, не менш ефективних варіантів.

Підключення через Arduino

Якщо у вас чомусь не виявилося USB-TTL конвертера на 3,3 вольт, то в такому випадку модуль WiFi ESP8266 можна підключити через Arduino з вбудованим конвертером. Тут вам потрібно буде спочатку звернути свою увагу на три основні елементи:

  • При використанні в роботі з ESP8266 Arduino Reset спочатку підключений до GND, щоб унеможливити запуск мікроконтролера, і в даному вигляді він використовувався як прозорий USB-TTL конвертер.
  • RX і TX підключалися не на перехрест, а безпосередньо - RX-RX (зелений), ТХ-ТХ (жовтий).
  • Все інше підключається так само, як зазначено вище.

Що потрібно враховувати

У цій схемі також потрібно узгодження рівнів TTL 5 вольт Arduino, а також 3,3 вольта ESP8266, але при цьому непогано може функціонувати і так.

При підключенні до ESP8266 Arduino може оснащуватися стабілізатором живлення, який не витримує струм, який потрібен для ESP8266, внаслідок чого перед тим, як його активувати, потрібно звіритися з даташипом на той, який використовується у вас. Не спробуйте підключати якісь інші енергоспоживаючі елементи разом з ESP8266, оскільки це може призвести до того, що вбудований в Arduino стабілізатор живлення просто вийде з ладу.

Також є інша схема підключення ESP8266 та Arduino, в якій використовується SoftSerial. Так як для бібліотеки SoftSerial швидкість порту, що дорівнює 115200, має занадто високе значення і не може гарантувати стабільну роботу, такий спосіб підключення використовувати не рекомендується, хоча є деякі випадки, в яких все працює цілком стабільно.

Підключення через RaspberryPi

Якщо ви не маєте взагалі ніяких USB-TTL конвертерів, то в такому випадку можна використовувати RaspberryPi. В даному випадку для ESP8266 програмування та підключення здійснюється практично ідентично, але при цьому тут все не так зручно, а додатково потрібно використовувати також стабілізатор живлення на 3,3 вольта.

Для початку RX, TX та GND нашого пристрою підключаємо до ESP8266, а GND та VCC беремо з розрахованого на 3,3 вольта. Тут окрему увагу слід приділити тому, що потрібно провести з'єднання всіх пристроїв GND, тобто стабілізатора RaspberryPi і ESP8266. Якщо вбудований у вашу модель пристрою стабілізатор може витримувати до 300 міліампер додаткового навантаження, то в такому випадку підключення ESP8266 здійснюється цілком нормально, але це все робиться тільки на свій страх і ризик.

Налаштовуємо параметри

Коли ви розібралися, як підключити ESP8266, потрібно переконатися, що драйвера до ваших пристроїв встановлені коректно, внаслідок чого в системі було додано новий послідовний віртуальний порт. Тут потрібно буде використовувати програму – термінал послідовного порту. У принципі, утиліту можна підібрати будь-яку на свій смак, але при цьому ви повинні правильно розуміти, що будь-яка команда, яка вирушатиме вами в послідовний порт, в кінці повинна мати завершальні символи CR+LF.

Досить широким поширенням користуються утиліти CoolTerm і ESPlorer, причому остання дозволяє не вводити ESP8266 самостійно, і при цьому дає простіше працювати з lua скриптами під NodeMCU, тому її можна цілком використовувати як стандартний термінал.

Для нормального підключення доведеться виконати чимало роботи, так як прошивки для ESP8266 в більшості своїй є різноманітними і активація може проводитися на різних швидкостях. Щоб визначитися з найбільш оптимальним варіантом, вам потрібно буде перебрати три основні варіанти: 9600, 57600 та 115200.

Як перебирати?

Для початку підключіться у термінальній програмі до послідовного віртуального порту, виставляючи параметри 9600 8N1, після чого проводьте повне перезавантаження модуля, відключаючи CH_PD (chip enable) від живлення, після чого знову активуйте його, пересмикуючи CH_PD. Також можна провести короткочасне замикання RESET на землю для того, щоб перезавантажити модуль, та спостерігати за даними у терміналі.

В першу чергу світлодіоди пристрою повинні відображатися точно так, як це показано в описі процедури перевірки. Також ви повинні спостерігати в терміналі набір різних символів, який закінчуватиметься рядком ready, а якщо його немає, проводиться перепідключення до терміналу на іншій швидкості з наступним перезавантаженням модуля.

Коли ви побачите на одному з варіантів швидкості цей рядокможна вважати модуль підготовленим до роботи.

Як оновлювати прошивку?

Після того, як ви встановите ESP8266, підключення пристрою займе всього кілька секунд, і тоді можна буде розпочинати оновлення прошивки. Для встановлення нового програмного забезпеченнявам потрібно зробити таке.

Для початку завантажуйте нову версію прошивки з офіційного сайту, а також завантажуйте спеціальну утилітудля прошивки. Тут окрему увагу слід приділити тому, яка операційна системавстановлена ​​на тій машині, з якою працює ESP8266. Підключення пристрою найкраще проводити до систем старше Windows 7.

Для стандартних ОС Windows цілком оптимально використовувати програму під назвою XTCOM UTIL, яка особливо зручною в роботі, якщо прошивка складається тільки з одного файлу. Найкращим мультиплатформним варіантом варто назвати утиліту esptool, яка, щоправда, вимагає python, а також необхідність вказівки параметрів через командний рядок. Крім цього, в ESP8266 підключення основних функцій дозволяє зручно зробити програма Flash Download Tool, яка має досить велику кількість налаштувань, а також зручну технологіювстановлення прошивок із кількох файлів.

Далі відключайте свою термінальну програму від послідовного порту, а також повністю відключайте CH_PD від живлення, приєднуйте модуля GPIO0 до GND, і після цього CH_PD можна буде повернути назад. Зрештою просто запускайте програму для модульної прошивки та завантажуйте її в ESP8266 реле.

У більшості випадків прошивка завантажується в модуль зі швидкістю в районі 115200, але при цьому спеціальний режим передбачає автоматичне розподілення швидкості, внаслідок чого прошивка може проводитися на швидкості більше 9600, оновлюючи доступні функції ESP8266. Arduino використовувався для підключення або USB-TTL - тут не відіграє особливої ​​ролі, і тут гранична швидкість вже залежить від довжини проводів, конвертера, що використовується, і цілого ряду інших факторів.

Після своєї появи плати на базі Wifi чіпа ESP8266, стали по-справжньому народними. Величезні можливості та мінімальна ціна, яка навіть на старті продажів і вроздріб не перевищувала 5$, зробили свою справу. Навколо чіпа організувалися спільноти, в яких люди діляться інформацією та створюють програмне забезпечення.

У чому причина такої популярності, крім низької ціни?

Справа в тому, що плати на ESP8266 це не просто модулі для зв'язку по WiFi. Чіп по суті є мікроконтролером зі своїми інтерфейсами SPI, UART, а також портами GPIO, а це означає, що модуль можна використовувати автономно без Arduino та інших плат з мікроконтролерами.

Інформація

Наші китайські товариші вже виробляють близько дванадцяти різновидів плат на базі ESP8266: із підключенням зовнішньої антени, з керамічною антеною, з антеною PCB, без антени. Також на різних модулях виведено різну кількість GPIO. Детальніше, можна прочитати на російськомовному сайті.

У цьому огляді я використовуватиму одну з найперших плат ESP-01. Також для повноцінної роботи з чіпом буде потрібно конвертер USB/UART, рекомендую, огляд якого вже був на mysku.

Підключення

Розпинування роз'єму ESP-01, представлене на малюнку:

Якщо у своїх проектах вам не вистачить двох виведених GPIO, а займатися «брудними хаками» немає бажання, то я рекомендую відразу купувати нові плати, наприклад ESP-07або ESP-12. Тільки майте на увазі, що ці плати вимагають самостійної розведення і у продажу для цього є спеціальні мінінабори.

Фотографії даних плат


ESP-01 hacked by Dave Allan, як приклад. Додатково ви отримуєте 4 GPIO: GPIO14, GPIO12, GPIO13 та GPIO15

Схема підключення:
- ESP-01 VCC до USB/UART VCC (+3.3В);
- ESP-01 GND до USB/UART GND;
- ESP-01 URXD до USB/UART TXD;
- ESP-01 UTXD до USB/UART RXD;
- ESP-01 CH_PD до USB/UART VCC (+3.3В);
- ESP-01 GPIO0 до USB/UART GND - тільки під час прошивки!

Прошивка

Для ESP8266 існує SDK і оригінальна прошивка від Espressif Systems, але багатьох вона не влаштовує зважаючи на свою «вогкість», тому випускаються не оригінальні прошивки, такі як NodeMCU, Frankenstein та інші.

У цьому огляді використовуватиметься не оригінальна прошивка NodeMCU. Список команд і прикладів можна подивитися на .

Оновлюємо оригінальну «заводську» прошивку на NodeMCU:
- Завантажуємо утиліту для прошивання -;
- завантажуємо прошивку -;
- Підключаємо по ESP-01 до USB/UART за схемою, яка представлена ​​вище. Не забуваймо підключити GPIO0 до GND. Вставляємо USB/UART в USB порткомп'ютера;
- Запускаємо XTCOM_UTIL.exe, переходимо в Tools -> Config Device, вибираємо COM-порт до якого підключена плата, ставимо швидкість порту 57600, тиснемо Open, потім Connect, програма повинна сказати "Connect with target OK!", Закриваємо вікно налаштувань. Переходимо в меню API TEST, вибираємо (4) Flash Image Download, вказуємо шлях до файлу "nodemcu_512k_latest.bin", адресу залишаємо 0x00000, тиснемо DownLoad. Повинне розпочатися завантаження прошивки, після закінчення буде видано повідомлення;
- Відключаємо живлення плати, висновок GPIO0 від'єднуємо від загального дроту, вмикаємо живлення. Запускаємо термінал Putty, CoolTerm або ін. (УВАГА! Змінюємо швидкість порту на 9600), перевіряємо готовність плати командою
> print(node.chipid())
10013490

Перший скрипт

Якщо при роботі зі скриптами у Вас будуть проблеми, рекомендується подати живлення 3.3V не від USB/UART, а від окремого джерела. Напруга має бути саме 3.3V, наприклад, через модуль стабілізованого живлення на AMS1117 3.3V 800ma.

Для написання та завантаження скриптів в ESP8266, буде використовуватися невелика та зручна IDE - :

Наш перший скрипт буде вимикати і включати світлодіод з періодичністю в 2 секунди:
- Відключаємо живлення, до GPIO2 підключаємо резистор та світлодіод. Включаємо живлення;
- Запускаємо ESPlorer, вибираємо потрібний COM та швидкість порту 9600, натискаємо Open;
- Вставляємо код та натискаємо Save To ESP;

Pin = 4 --GPIO2 gpio.mode(pin, gpio.OUTPUT) for i=1, 10, 1 do gpio.write(pin, gpio.LOW) tmr.delay(2000000) gpio.write(pin, gpio.HIGH ) tmr.delay(2000000) end
- Для повторного запуску натискаємо DoFile.

Підключаємо датчик DHT11

Щоб продемонструвати, більш просунуту роботу з прошивкою NodeMCU підключимо до ESP-01 датчик DHT11:
- DHT11 VCC до USB/UART VCC
- DHT11 GND до USB/UART GND
- DHT11 Out до USB/UART GPIO2

Код користувача Pigs Fly з форуму ESP8266.com

Works for DHT11 on ESP-07 (version w/16pins) and ESP-01 --Тільки 20141219 firmware tested. --Data stream acquisition timing is critical. The's --barely enough speed to work with to make this happen. --Pre-allocate vars used in loop. = 4;gpio.mode(pin,gpio.OUTPUT) gpio.write gpio.mode(pin, gpio.INPUT) --bus will always let up eventually, don"t bother with timeout while (gpio_read(pin)==0) do end c=0 while (gpio_read(pin)= =1 and c<100) do c=c+1 end --bus will always let up eventually, don"t bother with timeout while (gpio_read(pin)==0) do end c=0 while (gpio_read(pin)==1 and c<100) do c=c+1 end --acquisition loop for j = 1, 40, 1 do while (gpio_read(pin)==1 and bitlength<10) do bitlength=bitlength+1 end bitStream[j]=bitlength bitlength=0 --bus will always let up eventually, don"t bother with timeout while (gpio_read(pin)==0) do end end --DHT data acquired, process. Humidity = 0 HumidityDec=0 Temperature = 0 TemperatureDec=0 Checksum = 0 ChecksumTest=0 for i = 1, 8, 1 do if (bitStream >2) then Humidity = Humidity+2^(8-i) end end for i = 1, 8, 1 do if (bitStream > 2) then HumidityDec = HumidityDec+2^(8-i) end end for i = 1, 8, 1 do if (bitStream > 2) then Temperature = Temperature+2^(8-i) end end for i = 1, 8, 1 do if (bitStream > 2) then TemperatureDec = TemperatureDec+2^(8-i ) end end for i = 1, 8, 1 do if (bitStream > 2) the Checksum = Checksum+2^(8-i) end end ChecksumTest=(Humidity+HumidityDec+Temperature+TemperatureDec) % 0xFF print ("Temperature: "..Temperature.."."..TemperatureDec) print ("Humidity: "..Humidity.."."..HumidityDec) print ("ChecksumReceived: "..Checksum) print ("ChecksumTest: "..ChecksumTest )


Перепрошую за якість відео, знімав на телефон.

HTTP сервер

Приклад підключення до Wifi точки доступу та відповідь на запит по HTTP.

Wifi.setmode(wifi.STATION) wifi.sta.config("SSID","password") print(wifi.sta.getip()) srv:listen(80,function(conn) conn:on("receive", function(conn,payload) print(payload) conn:send("

Hello, User.

") end) end)

Епілог

Чіп ESP8266 це безумовно прорив, насамперед у співвідношенні ціна/якість. Звичайно, варто згадати про існуючі проблеми в оригінальних і не оригінальних прошивках, але роботи ведуться і я сподіваюся, що в майбутньому подібні чіпи будуть вбудовані в кожен чайник. Планую купити +156 Додати в обране Огляд сподобався +103 +196

Настільки велика, що окрім прошивок для використання ESP8266 як WiFi-модуля під керуванням зовнішнього мікроконтролера, існує маса прошивок для використання його і як мікроконтролера з різними цільовими призначеннями, у тому числі й у сфері інтернет речей. У цьому циклі статей ми вивчатимемо можливості ESP8266з прошивкою NodeMCUі вивчимо скриптову мову LUA.

Що таке ESP8266?

ESP8266 – це мікроконтролер із WiFi інтерфейсом. Його можна використовувати як модуль WiFi, і як мікроконтролер.

Плюси ESP8266: інтерфейс WiFi, 32-розрядне ядро ​​з достатньою продуктивністю, низька ціна.
Мінуси: У порівнянні з іншими 32-розрядними мікроконтролерами периферія не викликає захоплення.

ESP8266 ідеально підходить для домашніх проектів, інтернет речей. ESP8266 програмується через послідовний порт UART, тому для його прошивки не потрібно спеціального програматора. Особливість цього мікроконтролера полягає в тому, що він може виконувати програму, розташовану на зовнішній Flash пам'яті. Це дозволяє виробнику "нарощувати" обсяг Флеша, що також є плюсом.

На базі ESP8266 випускаються різні модулі:

ESP-01
ESP-02
ESP-03
ESP-04
ESP-05
ESP-06
ESP-07
ESP-08
ESP-09
ESP-10
ESP-11
ESP-12S
ESP-12E
ESP-12F

Існує різні версіїплат із вже запаяними модулями ESP8266, стабілізаторами напруги, мікросхемою для забезпечення роботи послідовного порту UART через USB та розведеними на гребінку висновками, кнопками тощо. Для роботи з такими платами достатньо підключити їх до порту USB комп'ютера. Жодного додаткового обладнання не потрібно. Це дуже зручно. Одна з таких плат – NodeMCU. У прикладах я використовуватиму плату NodeMCU з модулем ESP-12F. Але Ви цілком можете взяти модуль, скажімо ESP-01, підключити до нього UART-USB перехідник і працювати з ним аналогічним чином. ESP-01 матиме менше пам'ятіі менше висновків, які можна задіяти, але в іншому робота з ним аналогічна.


Що таке NodeMCU?

NodeMCU – відкритий безкоштовний проект на основі скриптової мови Lua. Прошивка досить потужна і дозволяє швидко реалізовувати різні типові проекти. Наприклад, сьогодні, як знайомство, ми зробимо WiFi розетку з керуванням з мобільного телефоната з Web-інтерфейсом. Прошивка вміє виконувати Lua-скрипти як із послідовного UART порту (аналогічно AT-командам) так і з внутрішньої flash пам'яті (виконуючи скрипти). Lua скрипти зберігаються у Flash у внутрішній файловій системі. Файлова система пласка, спрощена. Тобто. без підкаталогів. Проте – це круто. Не варто забувати, що ESP8266 – це лише мікроконтролер. Зі скриптів також можна отримати доступ до файлів, читати і зберігати різну інформацію. NodeMCU модульна. Що з одного боку дозволяє нарощувати функціонал, а з іншого зібрати прошивку тільки з необхідних модулів, не витрачаючи даремно пам'ять.

NodeMCU працює з протоколами обміну даними – HTTP, MQTT, JSON, CoAP.
Підтримуються різні датчики
акселерометри ADXL345,
магнітометри HMC5883L,
гіроскопи L3G4200D,
датчики температури та вологості AM2320, DHT11, DHT21, DHT22, DHT33, DHT44
датчики температури, вологості, атмосферного тиску BME280,
датчики температури, атмосферного тиску BMP085,
безліч дисплеїв працюючих по шинах I2C, SPI. З можливістю роботи з різними шрифтами.
TFT дисплеї ILI9163, ILI9341, PCF8833, SEPS225, SSD1331, SSD1351, ST7735,
розумні світлодіоди та LED контролери – WS2812, tm1829, WS2801, WS2812,
підтримуються інтерфейси - 1-Wire, I2C, SPI, UART,

Також можна задіяти модуль шифрування, планувальник завдань, годинник реального часу, протокол синхронізації годинника через інтернет SNTP, таймери, АЦП канал (один), програвати аудіо файли, формувати на виходах ШІМ-сигнал (до 6), використовувати сокети, є підтримка FatFS, тобто можна підключати SD-картки і таке інше.

Що таке мова Lua?

Lua – це інтерпретована мова, яка, як і більшість сучасних інтерпретованих мов, може зберігати скомпіловані версії скриптів. Це дозволяє збільшити швидкість роботи. Lua позиціонується як мультипарадигмовий. Він не складний, і якщо Ви вже програмували будь-якою мовою, то Lua Ви вивчите дуже швидко. Якщо Ви тільки починаєте програмувати, тоді Lua здивує Вас доступністю для початківців.

Є деякі особливості при роботі з Lua на NodeMCU. В основному це пов'язано з кінцевим об'ємом мікроконтролера ESP8266. Потрібно дотримуватись простих правилта витримувати стиль роботи з Lua. Про ці правила розповім трохи пізніше. Якщо ж зберігати такий самий стиль, як і при написанні програм на С, то у Вас не вдасться відчути всієї сили Lua і прошивки NodeMCU. Коли Ви починаєте писати на Lua, це захоплює, і Ви починаєте втілювати в життя більш об'ємні завдання. Ви втрачаєте відчуття того, що ви працюєте з мікроконтролером і мимоволі навантажуєте завданнями, які не під силу мікроконтролеру. Потрібно пам'ятати, що ESP8266 має обмежені ресурси і не слід його вантажити завданнями, які під силу виконати мікрокомп'ютерам або повноцінним комп'ютерам.

Документація з LUA російською мовою: http://www.lua.ru/doc/
Вивчаємо LUA за 15 хвилин: http://tylerneylon.com/a/learn-lua/

Де завантажити NodeMCU?

Звичайно, можна завантажити вихідні коди NodeMCU (https://github.com/nodemcu/nodemcu-firmware/releases/) та скомпілювати з потрібними параметрами. Але ми не будемо так робити. Існує сайт https://nodemcu-build.com, на якому можна зібрати NodeMCU із необхідними Вам модулями. Ви просто відзначаєте ті модулі, які Вам потрібно, вказуєте свій e-mail і натискаєте кнопку “ Start ysour build“. Спочатку на вказаний e-mail надходить лист про те, що складання почалося. А потім повідомлення про закінчення та посилання для скачування integerі floatверсій. Якщо у своєму проекті Ви не використовуватимете обчислення з плаваючою комою, тоді качайте “ integer“. Не варто скупитися та включати ті модулі, які Ви не збираєтеся використовувати. Будь-якої миті можна зібрати нову прошивку, додавши відсутній модуль. Для прикладів я зібрав NodeMCU з такими модулями:

Як залити NodeMCU на ESP8266?

Тепер, коли ми маємо файл прошивки NodeMCU, його потрібно залити в ESP8266. Насамперед, при підключенні плати NodeMCU до комп'ютера має з'явитися віртуальний Comпорт. Як правило, останні версії Windows установкидрайверів не вимагають. Ubuntu відразу розпізнає підключений пристрій.

Прошивка NodeMCU під Windows

git clone https://github.com/themadinventor/esptool.git

Прошити командою:

Sudo python esptool.py --port /dev/ttyUSB0 write_flash 0x00000 The_Path_To_The_NodeMCU_Firmware.bin

/Dev/ttyUSB0– порт, на якому висить ESP8266.
The_Path_To_The_NodeMCU_Firmware.bin- Шлях до файлу прошивки.

До речі, esptoolможна використовувати під Windows. esptoolнаписаний на Pyton, для роботи під Windows необхідно встановити Pyton.

esptoolнагоді нам для заливки бінарних файлів на файлову систему NodeMCU. Можна заливати будь-які файли, зокрема скрипти. Скрипти можна писати хоч у Notepad, але я віддаю перевагу ESPlorer.

ESPlorer, init.lua – пишемо перший скрипт

Для написання та заливки скриптів будемо використовувати програму ESPlorer. Це кросплатформова програма написана на Javaі так само не потребує встановлення. Працює однаково як під Windows, так і під Ubuntu.

Розпаковуємо архів.

Під Windows запускаємо файл ESPlorer.bat

Sudo java-jar ESPlorer.jar

Вказуємо порт та швидкість 9600 :

І натискаємо “ Open“. Побачимо наступне

У ESPlorer виявилася паршива особливість. Він не завжди чітко підключається до NodeMCU. Якщо спробувати надіслати будь-яку команду (кнопкою Send) у консолі пролітає сміття замість нормальної відповіді. Іноді після кількох повторів все налагоджується. Якщо це Вас турбує, спробуйте змінити швидкість підключення на 115200.


Приступимо до створення першого скрипта мовою Lua. Скрипт з ім'ям init.luaстартує автоматично після запуску NodeMCU. Створимо файл init.lua.

надрукуємо всього один рядок:

Print("Yes it works!")

Зберігаємо файл як init.lua. Після збереження файл виконатись і ми повинні побачити роботу першого скрипта.

За замовчуванням файл зберігається на диск комп'ютера і заливається на ESP8266.

Тепер про найбільшу неприємність, яка є у NodeMCU. При деяких критичних помилках (це трапляється не так часто, але якщо трапляється, то запам'ятовується довго) NodeMCU може перезавантажуватися. І найстрашніше, що може статися – це циклічне перезавантаження. Це трапляється якщо допустити критичну помилкуу скрипті який стартує автоматично. NodeMCU стартує, виконує "глючний" скрипт, наривається на критичну помилку і йде в перезавантаження. І так до безкінечності.

Для того, щоб убезпечити себе на етапі вивчення NodeMCU, я використовую наведений нижче прийом. У стартовому скрипті init.luaзапускаємо таймер, який спрацює лише один раз і через вказаний час (в даному випадку через 5 секунд) виконає процедуру запуску іншого скрипту (в даному випадку main.lua). Більше нічого у скрипті init.luaне робимо. Усі операції виконуються у скрипті main.lua. Таким чином, якщо ми припустимося помилки в скрипті main.lua, і NodeMCU піде в циклічне перезавантаження, після перезавантаження ми будемо 5 секунд для того щоб видалити або виправити "глючний" скрипт.

Текст init.lua:

Print ("Waiting ...") tmr.register (0, 5000, tmr.ALARM_SINGLE, function (t) tmr.unregister (0); print ("Starting ..."); dofile ("main.lua") end) tmr.start (0)

Крім того, такий підхід дозволяє легко включати в автозавантаження будь-який потрібний скрипт, достатньо у файлі init.luaзамість main.luaвказати ім'я іншого скрипта. Це дуже зручно, коли ви на одній платі тестуєте кілька проектів чи кілька версій скрипту.

Підключаємось до Wifi або створюємо свою Wifi точку

Для підключення до WiFi створюємо main.lua та пишемо:

WiFi Settup wifi.setmode(wifi.STATION) local cfg=() cfg.ssid="MyWiFi" cfg.pwd="MyWiFiPassword" wifi.sta.config(cfg) cfg = nil collectgarbage()

Після успішного підключення модуль отримати IP-адресу. Дізнатися його можна за допомогою команди:

Wifi.sta.getip()

Якщо ми хочемо, ESP8266 створив свою власну WiFi точку:

WiFi AP Settup wifi.setmode(wifi.STATIONAP) cfg=() cfg.ssid="ESPWIFI" cfg.pwd="1234567890" wifi.ap.config(cfg) cfg = nil collectgarbage()

Примітка: WiFi точкане підніметься, якщо пароль коротше 8 символів. За замовчуванням IP-адреса точки завжди 192.168.4.1

Його можна дізнатися командою:

Wifi.ap.getip()

Що таке collectgarbage()? Функція collectgarbage- Це збирач сміття. Її слід викликати наприкінці кожного скрипта. Зверніть увагу, змінна cfgоголошено як local. Вона буде доступна лише у поточному скрипті. Якщо localприбрати, то змінна cfgбула б глобальною та доступною в інших скриптах.

GPIO. Блимаємо світлодіодом

Для управління реле (адже ми зібралися робити WiFi розетку) потрібно вивчити роботу з висновками GPIO. Поки що спробуємо використати GPIOвиведення в якості виходу та встановлювати високий та низький рівень сигналу. Для наочності підключимо світлодіод, як показано на схемі.

My_pin_nummber = 1 -- Встановлюємо режим роботи як вихід gpio.mode (my_pin_nummber, gpio.OUTPUT) -- Задати високий рівень gpio.write (my_pin_nummber, gpio.HIGH) -- Задати низький рівень gpio.write (my_pin_nummber, gpio.write -- Блимаємо світлодіодом 10 разів gpio.serout (1, gpio.HIGH, (+990000,990000), 10, 1)

Нумерація висновків:

IO indexESP8266 pin
0 GPIO16
1 GPIO5
2 GPIO4
3 GPIO0
4 GPIO2
5 GPIO14
6 GPIO12
7 GPIO13
8 GPIO15
9 GPIO3
10 GPIO1
11 GPIO9
12 GPIO10

D0(GPIO16) може тільки бути використаний як gpio read/write. No support for open-drain/interrupt/pwm/i2c/ow

Плата NodeMCU

Примітка: Існує декілька версій плат Nodemcu. Розпинування Вашої плати може відрізнятись.

Websocket

Тепер зробимо сервер, який працюватиме на вказаному порту (нехай буде 333). Потім ми за допомогою термінальної програми підключимося до нашого сервера, вказавши його IP та порт. І потім обмінюватимемося даними.

Скрипт main.lua:

WiFi AP Settup wifi.setmode(wifi.STATIONAP) cfg=() cfg.ssid="ESPTEST" cfg.pwd="1234567890" wifi.ap.config(cfg) --Create Server sv=net.createServer(net.TCP ) function receiver(sck, data) -- Print received data print(data) -- Send reply sck:send("Recived: ". ("receive", receiver) conn:send("Hello!") end) end print("Started.")

Тепер наш скрипт піднімає Wi-Fi точку, створює сервер, який на порту 333 очікує на підключення. У момент підключення сервер надішле клієнту рядок “ Hello!", а прийнявши від клієнта дані, поверне йому рядок" Recived:” далі все, що він прийняв.

Тепер ми можемо підключитись мобільним телефоном до Wi-Fi точки ESP8266. В принципі створювати крапку не обов'язково. Ви можете переписати скрипт та зробити так, щоб ESP8266 підключався до Вашого WiFi мережі. Тоді Вам потрібно дізнатися його IP і далі використовувати його замість 192.168.4.1, який використовується в прикладах.

Але нам ще потрібна термінальна програма для підключення на IP адресу ESP8266 (192.168.4.1) та вказаний порт (333). На звичайному комп'ютері можна встановити PuTTY. Для мобільних телефонів під Android я використовую JuiceSSH.

Передача даних із мобільного телефону за допомогою JuiceSSH

Встановлюємо та запускаємо RoboRemoFree

Створюємо підключення до сервера. Бажано щоб мобільний телефон/планшет був підключений до тієї ж WiFi мережі, де знаходиться сервер. У цьому випадку наш ESP8266. Заходимо до “Menu”, вибираємо пункт “connect”

Вибираємо тип підключення "Internet (TCP)"

Вказуємо IP та порт

Вибираємо інтерфейс. Програма дозволяє створювати кілька інтерфейсів із різними органами управління.

Потім переходимо в режим редагування інтерфейсу

Натискаємо на вільному просторіі вибираємо, що хочемо встановити. Ми будемо використовувати кнопки. Вибираємо "button"

Після цього на інтерфейс буде встановлена ​​кнопка. Її можна переміщати та змінювати її розміри.

Щоб змінити назву на кнопці, потрібно натиснути на неї і вибрати пункт “Set text”

Потім вкажемо ще один параметр - "set press action". Задамо "1". При натисканні кнопки буде надіслано вказаний рядок за створеним нами підключенням. Тобто. Наш ESP8266 отримає символ “1” та увімкне світлодіод.

Аналогічно створимо кнопку “Off” та встановимо set press action “0”.

Наш інтерфейс готовий. Виходимо з режиму редагування, виконавши пункт меню “don't edit ui”.

Якщо підключення до сервера (ESP8266) було успішним, можна скористатися. Після натискання кнопки “On” світлодіод повинен спалахнути, після натискання кнопки “Off” світлодіод повинен згаснути.

Web інтерфейс

Є й інший шлях – можна зробити Web інтерфейс та керувати світлодіодом ще й через браузер.

Той самий скрипт + Web інтерфейс:

WiFi AP Settup wifi.setmode(wifi.STATIONAP) cfg=() cfg.ssid="ESPTEST" cfg.pwd="1234567890" wifi.ap.config(cfg) --Set Pin mode my_pin_nummber = 1 gpio.mode(my_pin_nu , gpio.OUTPUT) --Create Server sv=net.createServer(net.TCP) функція receiver(sck, data) if string.sub (data, 0, 1) == "1" then gpio.write(my_pin_nummber, gpio .HIGH) else if string.sub (data, 0, 1) == "0" . ) conn:on("receive", receiver) conn:send("Hello!") end) end --Create HTTP Server http=net.createServer(net.TCP) function receive_http(sck, data) local request = string. match(data,"([^\r,\n]*)[\r,\n]",1) if request == "GET /on HTTP/1.1" then gpio.write(my_pin_nummber, gpio.HIGH) end if request == "GET /off HTTP/1.1" then gpio.write(my_pin_nummber, gpio.LOW) end sck:on("sent", function(sck) sck:close() end) local response = "HTTP/ 1.0 200 OK\r\nServer: NodeMCU on ESP8266\r\nContent-Type: text/html\r\n\r".. " NodeMCU on ESP8266".. "

NodeMCU on ESP8266

".. "
".. "On Off".. "" sck:send(response) end if http then http:listen(80, function(conn) conn:on("receive", receive_http) end) end print("Started.")

Невелике пояснення, як працює web-сервер взагалі, і наш скрипт зокрема. Стандартний портдля Web-сервера - 80. Тобто. коли Ви в браузері набираєте http://192.168.4.1/, то браузер підключається до сервера (192.168.4.1) на порт 80 і надсилає запит. Запит виглядає приблизно так:

GET / HTTP / 1.1 Host: 192.168.4.1 User-Agent: Mozilla / 5.0 (Windows NT 5.1; rv: 2.0.1) Gecko / 20100101 Firefox Accept: text / html, application / xhtml + xml, ap q = 0.9, * / *; q = 0.8 Accept-Language: ru-RU, ru; q = 0.8, en-US; q = 0.5, en; q = 0.3 Accept-Encoding: gzip, deflate Connection: keep-alive Upgrade-Insecure-Requests: 1

Для нас цікавить перший рядок запиту: “ GET/HTTP/1.1“. У ній вказано URL-адресу. Якщо у браузері набрати http://192.168.4.1/ on , тоді в першому рядку запиту буде “ GET /on HTTP/1.1“. А якщо у браузері набрати http://192.168.4.1/ off тоді буде “ GET / off HTTP/1.1“. Саме цей рядок і аналізує скрипт і в залежності від отриманого URL-адреси включає або відключає світлодіод.

Далі скрипт відправляє html сторінку. Але після надсилання потрібно розірвати підключення. Оскільки відправка займає деякий час, а чекати на закінчення відправки технічно безглуздо, на подію “ sent” (відправлено) підключимо функцію з рядком sck:close(). Це робиться у рядку: sck:on(“sent”, function(sck) sck:close() end). Ппісля чого виконується відправка html сторінки sck: send (response). Зкрипт продовжує роботу. Коли відповідь буде повністю надіслана, спрацює sck:close().

Сторінки великого розміру в такий спосіб відправити не вийде. Вагомий вміст потрібно надсилати шматками. Докладніше про це буде розказано в іншій статті.

Підключаємо реле із навантаженням

Увага! Напруга понад 40 Вольт небезпечна для життя людини! Будьте уважні та акуратні, збираючи схему та підключаючи побутові прилади. Не торкайтеся струмовідних частин.

А тепер замість світлодіода підключимо модуль реле, а як навантаження – скажімо лампу, обігрівач, компресор для акваріума, вентилятор і т.п.

При підключенні реле може бути нюанси. Якщо блок реле з оптичною розв'язкою (з оптопарою), то швидше за все, Вам нічого переробляти не доведеться. Якщо блок реле без оптичної розв'язки, як у мене, тоді доведеться переробити роботу з GPIO, оскільки в перших реле включається низьким рівнем, а не високим, а по-друге високий рівень ESP8266 – це 3.3В, для 5-вольтового блоку реле цього не достатньо, тому мені довелося налаштувати вихід як OPENDRAIN, після чого все запрацювало як слід.

Фінальна версія скрипта виглядає так:

WiFi AP Settup wifi.setmode(wifi.STATIONAP) cfg=() cfg.ssid="ESPTEST" cfg.pwd="1234567890" wifi.ap.config(cfg) --Set Pin mode my_pin_nummber = 1 --gpio.mode (my_pin_nummber, gpio.OUTPUT) gpio.mode(my_pin_nummber, gpio.OPENDRAIN) --Create Server sv=net.createServer(net.TCP) функція receiver(sck, data) if string.sub (data, 0, 1) = = "1" then --gpio.write(my_pin_nummber, gpio.HIGH) gpio.write(my_pin_nummber, gpio.LOW) else if string.sub (data, 0, 1) == "0" then --gpio.write (my_pin_nummber, gpio.LOW) gpio.write(my_pin_nummber, gpio.HIGH) end end print(data) end if sv then sv:listen(333, function(conn) conn:on("receive", receiver) conn:send ("Hello!") end) end --Create HTTP Server http=net.createServer(net.TCP) function receive_http(sck, data) print(data) local request = string.match(data,"([^\r ,\n]*)[\r,\n]",1) if request == "GET /on HTTP/1.1" then --gpio.write(my_pin_nummber, gpio.HIGH) gpio.write(my_pin_nummber, gpio. LOW) end if request == "GET /off HTTP/1.1" then --gpio.write(my_pin_nummber, gpio.LOW) gpio.write(my_pin_nummber, gpio.HIGH) end sck:on("sent", function(sck) ) sck:close() collectgarbage() end) local response = "HTTP/1.0 200 OK\r\nServer: NodeMCU on ESP8266\r\nContent-Type: text/html\r\n\r\n".. " NodeMCU on ESP8266".. "

NodeMCU on ESP8266

".. "
".. "On Off".. "

" sck:send(response) end if http then http:listen(80, function(conn) conn:on("receive", receive_http) end) end print("Started.")

Тепер ми можемо вмикати та вимикати “розетку” з мобільного телефону за допомогою програми RoboRemoFree або за допомогою браузера. Зрозуміло, з звичайного комп'ютерачерез браузер також можна керувати.



Все це добре, але що далі? Якщо у нас буде 5, 10, 20 таких пристроїв? Як їх поєднати, щоб не треба було підключатися до кожного пристрою окремо. Існує протокол MQTT, але це буде окрема тема. А поки що ми вивчимо можливості ESP8266 і NodeMCU.

Деякі правила роботи з мовою Lua на NodeMCU

1. Не пишіть довгі скрипти. Розмір пам'яті ESP8266 не безкінечний. Розбивайте програму на функціональні модулі та робіть їх у вигляді окремих скриптів, запускаючи їх за допомогою dofile(). Наприклад, код підключення до Wifi:

WiFi Settup wifi.setmode (wifi.STATION) local cfg = () cfg.ssid = "MyWiFi" cfg.pwd = "MyWiFiPassword" wifi.sta.config (cfg) cfg = nil collectgarbage ()

можна винести в окремий скрипт “ wifi.lua” та виконати його з основного скрипта командою dofile("wifi.lua").

2. Змінні, які використовуються тільки в поточному скрипті, оголошуйте як local. Наприкінці скрипта, коли змінна вже не потрібна, надавайте їй значення nilі явно викликайте збирач сміття collectgarbage()