ESP8266 NodeMCU Прошивка. Робимо WiFi розетку. Мікроконтролер ESP8266: підключення та налаштування

Цілі та причини

Це друга стаття автора про інтегральної мікросхеми ESP8266, що містить повнофункціональний 32-бітний RISC мікроконтролер та вбудовану Wi-Fi схему 802.11 b/g/n. описувала використання Arduino IDE для програмування ESP8266 та містить важливу інформаціюяка тут повторюватися не буде. Якщо ви не читали її, рекомендуємо зробити це.

В інтернеті немає браку інформації про ESP8266; насправді, може бути з неї дуже багато... неправильною. Розробники мікросхеми, Espressif, мабуть, вирішили не тільки не займатися виробництвом на стороні, але й уникати безпосередньої участі у розробці лінійки модулів ESP, які використовують мікросхему ESP8266. Натомість, вони пропонують інформацію та послуги підтримки через форум для тих, хто готовий із завзятістю та терпінням ходити лабіринтом. Додавання до плутанини – це існування іншого форуму, який, незважаючи на те, що названий esp8266.com, не управляється компанією Espressif. Крім того, існує безліч перепродавців, відеоблогерів і письменників, які також пропонують інформацію від якісної до сплутаної настільки, що вона може бути повністю неправильною.

ESP модулі доступні в різних джерелах, А прошивки, що містяться в чіпах ESP8266 на модулях, майже завжди є застарілими і часто викликають підозри щодо їх походження. Також іноді підозрілі "оновлення" та інструменти, які доступні у тих самих джерелах. Отже, метою цієї статті є документування процедури завантаження останньої доступної прошивки безпосередньо від Espressif та її встановлення з використанням інструменту програмування, що надається Espressif.

Підключення обладнання

Щоб оновити прошивку на ESP8266, необхідно правильно подати на нього живлення і підключити його до комп'ютера. Крім того, необхідно додати засоби скидання мікросхеми та переведення її в режим завантаження. На наведеній нижче схемі та фотографії показано рекомендоване підключення; Зверніть увагу, що кольори проводів на схемі відповідають кольорам на фотографії. Як ви бачите, я оновлюватиму прошивку на модулі ESP-01, але ті ж самі з'єднання будуть працювати і з іншими модулями, якщо використовуються ті самі входи/виходи ESP8266, як показано на схемі. додаткові відомостідивіться у .

Більше надійна схемапрошивки наведено у цій статті.


Програма терміналу PuTTY

Коли підключення обладнання завершено, наступний крок – увімкнути ESP8266 та спробувати зв'язатися з ним. Для цього потрібна проста термінальна програма; ми будемо використовувати PuTTY, безкоштовну програму, доступний тут. Ви можете використовувати іншу термінальну програму, але вам доведеться врахувати різницю між нею і PuTTY.

Відкрийте PuTTY та натисніть перемикач Serial. Введіть номер COM порту (який має бути менше 10) та швидкість передачі (швидше за все, це буде 115200 або 9600).

У маленькому вікні Saved Sessions (Збережені сеанси)введіть ESP8266 та натисніть кнопку Save (Зберегти). Вікно PuTTY має бути схожим на зображення нижче.


Натисніть кнопку Open (Відкрити), після чого має відкритися вікно сеансу терміналу PuTTY.

Увімкніть Caps Lock у себе на комп'ютері та введіть AT, але не натискайте Enter. Ви повинні побачити AT у вікні терміналу PuTTY. Якщо цього не сталося, ви, можливо, вибрали не той порт COM або неправильну швидкість передачі. Закрийте PuTTY і почніть цей підрозділ статті з самого початку. Допустимі швидкості передачі: 9600, 19200, 38400, 74880, 115200, 230400, 460800 та 921600; спробуйте по черзі кожну з них, доки не знайдете ту, з якою все запрацює.

Коли ви побачите AT у вікні терміналу PuTTY, утримуючи клавішу Ctrl , натисніть клавішу M та J . Відпустіть клавішу Ctrl. Ви повинні побачити OK у вікні терміналу PuTTY, як показано нижче.


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

Коли ви побачите перше повідомлення OK, це означає, що ви подолали велику перешкоду. Тепер ви знаєте, що обладнання підключено правильно, модуль ESP працює, і ви правильно вибрали COM порт та швидкість передачі. OK

Тепер знову запустіть PuTTY, виберіть збережений сеанс ESP8266 та натисніть кнопку Load (Завантажити) Open (Відкрити)


У першому рядку вище ви бачите команду AT+GMR, яку ви набрали. Як ви, можливо, знаєте або здогадалися, схема команд, яку ми використовуємо для зв'язку з ESP8266, називається "набір AT команд", тому що всі команди починаються з букв "AT".

На жаль, існує безліч версій наборів команд AT; всі вони містять кілька однакових команд, але є багато AT команд, які не є стандартними для всіх наборів AT команд. Навіть у спільноті ESP8266 існує кілька версій. Другий рядок вказує, що це конкретний пристрій 8266 запрограмовано на прошивку, яка використовує версію 0.25.0.0 AT команд. Десь є документ, який визначає команди, які включені до версії 0.25.0.0, але й без цього документа ви можете використовувати метод спроб та помилок для визначення підтримуваних AT команд. У кращому випадку це буде дуже стомлюючий процес, але, на щастя, є рішення, яке буде пояснено трохи пізніше.

Третій рядок визначає версію програмного забезпечення(SDK), яка використовувалася для даного конкретного ESP8266 як версія 1.1.1. Кожен SDK також включає набір AT команд, який є частиною прошивки, і підходить для управління цією прошивкою. Очевидно, версія 0.25.0.0 команд AT працює з версією 1.1.1 SDK. Але все ж таки потрібен документ, який описує AT версію 0.25.0.0, щоб дізнатися, які команди включені. Існує кращий спосіб, описаний у наступному розділі цієї статті, але перед тим, як перейти до нього, спробуємо ще одну команду AT і подивимося, що станеться.

Увімкніть Caps Lock на комп'ютері та введіть AT+CWLAP . Коли ви побачите AT+CWLAP у вікні терміналу PuTTY, утримуючи клавішу Ctrl , спочатку натисніть клавішу M , а потім J . Відпустіть клавішу Ctrl. Через кілька секунд вікно терміналу має виглядати так, як показано на скріншоті нижче.


AT+CWLAP змушує ESP8266 перерахувати все доступні Wi-Fiточки доступу. У наведеному вище випадку було знайдено дві точки доступу: одна називається "ATT936", а друга - "tracecom 2.4". Зрозуміло, ваші результати будуть відрізнятися і повинні включати вашу власну Wi-Fi мережа, і навіть мережі ваших сусідів.

Закрийте вікно сеансу терміналу PuTTY та натисніть OK, коли PuTTY запитає, чи впевнені ви.

ESP Flash Download Tool

Хоча це рідко згадується в інтернеті, Espressif, розробники мікросхем ESP8266, створили деяку частину програмного забезпечення для оновлення прошивки у своїх чіпах. Це ESP Flash Download Tool, і цей інструмент доступний. Завантажте, розархівуйте та встановіть останню версію на вашому комп'ютері; на момент написання статті це FLASH_DOWNLOAD_TOOLS_v2.4_150924.rar.

Запустіть інструмент, і ви повинні будете побачити два вікна: вікно графічного інтерфейсу(GUI) з полями введення інформації та термінальне вікно, в якому ведеться лог виконаних дій.

Вікно графічного інтерфейсу ESP Flash Download Tool

Варто відзначити кілька речей, але немає приводів для занепокоєння:

  • вікно (GUI) ідентифікується як V2.3, тоді як вікно журналу ідентифікується як V2.4. Очевидно, вікно GUI відзначено неправильно;
  • поля вибору COMпорту та швидкості передачі у вікні GUI можуть вже містити дані;
  • поля введення адрес у вікні GUI можуть містити дані;
  • вікно лога може містити дані.

Отримання останньої прошивки

Espressif має сторінку, на якій розміщується остання версія прошивки. Перейдіть на сторінку bbs.espressif.com , натисніть на запис SDKs у списку Downloads , а потім натисніть " latest release " у розділі Announcements . На момент написання статті на цій сторінці можна було побачити таке:


Остання версія Non-OS SDK (Software Development Kit) - це те, що нам потрібно, і, схоже, що, якщо ви клацніть на "Latest Version: 1.4.0", то отримаєте останню версію. Але це зовсім так; Зверніть увагу, що є доступний патч, вказаний як esp_iot_sdk_v1.4.1_15_10_22. Це не патч; це виправлена ​​версія прошивки версії 1.4.0. Нам потрібний він і bin файли AT_v0.50. Клацніть по черзі на кожному з них та завантажте файли.

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

Можливо, ви помітили, що є розділ для завантаження документів. Всі вони містять якісну інформацію, але іноді істотна її частина втрачається при перекладі з китайської на англійську. На даний момент не забудьте отримати останні версії ESP8266 AT Instruction Set та Espressif IOT SDK User Manual.

Встановлення прошивки

Запустіть ESP flash download tool і переконайтеся, що в жодному чекбоксі у лівому верхньому куткувікна GUI не поставлено галку. Введіть COM порт, який ви використовуєте, та швидкість передачі 115200 у полях введення в нижній частині вікна. Зверніть увагу, що під час введення даних вони записуються у вікні журналу.

Подайте живлення на свою збірку для програмування ESP та підключіть її до комп'ютера. Натисніть та утримуйте кнопку Reset, а потім натисніть і утримуйте кнопку Flash. Відпустіть кнопку Reset, а потім відпустіть кнопку Flash. Натисніть кнопку STARTвікні GUI інструмент прошивки ESP. Програма завантаження флеш-пам'яті повинна перевірити ESP8266 у вашій збірці та створити звіт, схожий на той, що наведено нижче. Натисніть та відпустіть кнопку Reset на вашому макеті, щоб вийти з режиму прошивки ESP8266 та відновити нормальну роботу.


Зауважте, що тепер вікно GUI містить інформацію про ESP8266, включаючи розмір флеш-пам'яті (у прикладі 8 Мбіт), тактову частоту(у прикладі 26 МГц) та дві MAC-адреси для чіпа. Така ж інформація міститься у вікні журналу.

Потім натисніть у вікні GUI по чекбоксу з написом " SpiAutoSet", що змусить інструмент завантаження автоматично вибрати правильні розмірфлеш-пам'яті та тактову частоту.

Тепер нам потрібно вибрати файли для установки ESP8266 і встановити початкову адресу пам'яті для кожного файлу. Щоб оновити ESP чип, необхідно правильно встановити чотири файли. Відкрийте Посібник користувача Espressif IOT SDK і знайдіть розділ про запис образів у флеш-пам'ять. У версії 1.4 посібника він починається зі сторінки 20. Потім знайдіть підрозділ, який описує версію підтримувану Cloud Update (FOTA), і в цьому підрозділі знайдіть таблицю про розмір флеш-пам'яті у ESP8266. У цьому прикладі розмір флеш-пам'яті становить 8 Мбіт, що дорівнює 1024 кілобайт, отже, в таблиці 2 на сторінці 25 посібника міститься інформація, необхідна прикладу. Подивимося на малюнок нижче.


Необхідні чотири файли: esp_init_data_default.bin , blank.bin , boot.bin і user1.bin . Адреса, за якою має бути встановлений кожен із файлів, відображається поряд з ім'ям файлу. Перші три з необхідних файлів знаходяться в каталозі esp_iot_sdk_v1.4.1_15_10_22, раніше завантаженому з bbs.espressif.com, а четвертий розташований в AT_v0.50 bin files. Перейдіть туди, де знаходяться ці завантажені файли, та скопіюйте шляхи до них у поля введення у верхній частині вікна GUI програми Flash Download Tool; введіть правильну адресу для кожного файлу в полі поруч із ім'ям файлу. Виконайте такі кроки для кожного файлу:

  • клацніть усередині поля введення "set firmware path";
  • клацніть по кнопці... праворуч від поля введення;
  • перейдіть до місця зберігання файлу та клацніть по файлу. GUI автоматично введе шлях до файлу у полі введення;
  • введіть правильну адресу (з таблиці) для кожного файлу.

Зверніть увагу, що файли, які потрібно завантажити, можуть бути не такими, як ті, що вказані в таблиці в цьому прикладі, але будуть близькі до них.

Тепер клацніть на чотири прапорці зліва від імені кожного з файлів. Вікно графічного інтерфейсу програми Flash Download Tool має бути схожим на малюнок нижче. Двічі перевірте адреси таблиці.

На своєму макеті прошивки ESP натисніть та утримуйте кнопку Reset, а потім натисніть та утримуйте кнопку Flash. Відпустіть кнопку Reset, а потім відпустіть кнопку Flash. Натисніть кнопку STARTвікні GUI інструмент прошивки ESP. Повинна розпочатися завантаження, і її прогрес має бути показаний у вікні графічного інтерфейсу та вікні журналу Flash Download Tool, як показано нижче.


Як показано вище, успішна операція прошивки флеш-пам'яті призведе до того, що всі файли будуть надіслані ESP8266, а COM порт буде закритий.

Перевірка успішності прошивки

Після завершення прошивки закрийте програму Flash Download Tool. Зніміть живлення з макета програмування ESP, а потім знову підключіть живлення.

Знову запустіть PuTTY, виберіть збережений сеанс ESP8266 та натисніть кнопку Load (Завантажити). Це має помістити раніше вибрані вами налаштування COMпорту та швидкості передачі у відповідні вікна. Натисніть Open (Відкрити)і відкриється нове вікно сеансу терміналу PuTTY.

Увімкніть Caps Lock у себе на комп'ютері та введіть AT, але не натискайте Enter. Ви повинні побачити AT у вікні терміналу PuTTY. Введіть символ +, а потім GMR. Коли ви побачите AT+GMR у вікні терміналу PuTTY, утримуючи клавішу Ctrl , спочатку натисніть клавішу M , а потім J . Відпустіть клавішу Ctrl. У вікні терміналу PuTTY ви повинні побачити інформацію про прошивку ESP8266, аналогічну показаній нижче.


Як ви можете бачити, ESP8266 явно встановлена ​​нова прошивка. Вона була оновлена ​​із SDK версії 1.1.1 на SDK версії 1.4.0. Крім того, також було встановлено відповідну версію 0.50.0.0 набору AT команд.

Закрийте вікно сеансу терміналу PuTTY та натисніть OK, коли PuTTY запитає, чи впевнені ви.

І на останок

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

Після своєї появи плати на базі 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 - досить непроста. Але якщо працювати з цими 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. і встановлюю її. 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 як 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.LOW) -- Блимаємо світлодіодом 10 разів gpio.serout (1, gpio.HIGH, (+990000,990000) 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()