И снова привет geektimes. Этот материал является продолжением моей предыдущей статьи — ESP8266 и Arduino, подключение, распиновка, и, должен сказать, что они взаимосвязаны. Я не буду затрагивать темы, которые уже раскрыты.

А сегодня, я поведаю, как же программировать ESP8266 при помощи Arduino IDE, так же прошивать другие прошивки, например NodeMcu… Вообщем, этот материал не ограничивается только одной темой Ардуино.

image

Тема ESP8266 — довольно таки непростая. Но, если работать с этими Wi-Fi модулями в среде разработки Arduino IDE — порог вхождения опускается до приемлемого для обычного ардуинщика уровня. Да и не только ардуинщика, а любого человека, у которого есть желание сварганить что-то по теме IoT(интернет вещей), причём не затрачивая много времени читая документацию для микросхемы и изучение API для этих модулей.



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

Ну что же, мы уже умеем подключать ESP8266 и переводить его в режим программирования, теперь давайте перейдём к чему-то более полезному.

Скажу сразу — один раз запрограммировав модуль в среде разработки ардуино, мы сносим родную прошивку, и у нас пропадёт возможность работать с модулем при помощи AT-команд. Лично мне, от этого, не холодно/не жарко, но если кому-то это будет нужно — ближе к концу статьи я покажу, как обратно прошить в модуль родную прошивку, ну или какой-то загручик типа NodeMcu.

Для начала, на офф.сайте качаем последнюю версию Arduino IDE, на данный момент это 1.6.7. Более старые версии типа 1.0.5. не подойдут, потому что банально не имеют нужного функционала, а танцы с бубном нас не интересуют, не так ли?

Запускаем среду разработки и тут же идём в Файл/Настройки:

image

Вставляем ссылку в поле «Дополнительные ссылки для Менеджера плат:» и жмём «OK».

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


Данную ссылку я взял на странице проекта Arduino core for ESP8266 WiFi chip.

Потом идём Инструменты/Плата:/Менеджер плат...:

image

Перед нами появится окно менеджера плат, листаем его до самого низа, и если всё сделано правильно мы увидим что-то подобно этому:

image

Кликаем курсором по надписи "esp8266 by ESP8266 Community" после этого, у нас появилась кнопка «Установка», выбираете нужную версию, я беру последнюю, на сегодняшний день это 2.1.0. и устанавливаю её. Среда разработки закачает нужные ей файлы(около 150 мегабайт) и напротив надписи "esp8266 by ESP8266 Community" появится «INSTALLED» то есть установлено:

image

Листаем список плат вниз и видим, что в списке у нас появилось много разных ESP, берём «Generic ESP8266 Module»:

image

Идём в «Инструменты» и выбираем нужный COM порт(у меня это COM32) Arduino или USB UART конвертора, потом ставим Upload Speed:«115200»:

image

Далее открываем консоль в Arduino IDE, подаём питание на модуль, если всё было сделано правильно, то мы увидим что-то в этом роде:

image

Выставляем скорость 74880 и «NL & CR» и опять же отключаем и подаём питание и он ответит кое какой отладочной информацией:

image

Заметьте, 74880 — не основная скорость ESP8266, просто он всего лишь на ней отправляет отладочную информацию. Если модуль ничего не отправляет в консоль, тогда возможно что-то подключили не так как надо.

По умолчанию скорость должна быть 115200, но в отдельных случаях может быть и 9600 и другие… Так что попробуйте подобрать.

image

После подбора нужной скорости отправляем модулю «AT» и он должен ответить что всё «ОК». Команда «AT+GMR» выводит информацию о прошивке.

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

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

Давайте зашьём мигалку штатным светодиодом:

// By MrПоделкинЦ youtube.com/RazniePodelki
// special to geektimes.ru/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(пины отмечены розовым цветом).

image

Мигание светодиодом это конечно хорошо, но надо бы какой-то веб-сервер заделать или начать управлять светодиодом хотя бы при помощи кнопок в браузере, не так ли? Но об этом я расскажу уже как-нибудь в другой раз.

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

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

В папке «nodemcu-flasher-master» есть 2 папки Win64 и Win32 и в зависимости от того какая разрядность у вашей ОС выбираем нужную. Дальше в папке Release запускаем «ESP8266Flasher.exe» и видим интерфейс программы:

image

Выбираем нужный COM порт и идём во вкладку «Config», убираем хрестик около «INTERNAL://NODEMCU» и ставим его на один пункт ниже, как на скрине:

image

(Если захотите прошить загрузчик NodeMCU — убираете хрестик там где его не было, и ставите — где он был, то есть около «INTERNAL://NODEMCU»).

Потом жмём по шестеренке и выбираем где лежит наша прошивка, прошивка как правило в формате *.bin(в прикреплённом архиве это «v0.9.5.2 AT Firmware.bin» которая лежит в основной папке), и так же выбираем «0x00000» как и выше.

image

Дальше идём во вкладку «Advanced» и меняем там скорость на 115200, именно эта скорость будет основная и модуль будет отзываться по ней на AT-команды в случае соответствующей прошивки.

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

image

Всё, модуль начал прошиваться, после перепрошивки не забываем перезагрузить модуль и вуаля, он прошит нужной нам прошивкой.

image

Проверяем AT-командой «AT+GMR» сделали ли мы всё верно:

image

Как видите всё нормально прошилось.

Ссылки:
Архив с NodeMCU Flasher, прошивкой и кодом для Arduino IDE;
ESP8266 и Arduino, подключение, распиновка;
Свежая версия Arduino IDE всегда лежит тут;
NodeMCU Flasher;
Русскоязычное сообщество по ESP8266;
Много разных прошивок к ESP8266;
Все мои публикации на geektimes.

By Сергей ПоделкинЦ ака MrПоделкинЦ.

P.S.
Уже на подходе плата на базе esp32:

image
http://www.pighixxx.com/test/2015/12/esp32-pinout/

Которая значительно круче чем esp8266, так что нас скоро ждёт бум, как мне кажется, темы IoT(интернет вещей).

Комментарии (32)


  1. remzalp
    29.02.2016 09:37
    +2

    А что по напряжениям? EPS8266 использует основное 3.3 вольта. Лежит пока, опасаюсь пихать в usb-com её, чтобы не пожечь ненароком.

    Как связывать к примеру с ардуиной и вообще внешними устройствами, поскольку куча датчиков рассчитаны на 5-вольтовую ардуину? Насколько 5 вольт ардуины опасно и простой вариант связи?


    1. zloiia
      29.02.2016 09:50
      +1

      GPIO ноги ESP8266 толерантны к 5V, а датчики, работающие на 5V, обычно хорошо справляются с 3.3 V логикой ( Страница 17 даташита.) По крайней мере я работал с ESP8266, используя Arduino Uno как USB-COM переходник.


      1. Alex_Gramm
        29.02.2016 14:15

        Хоть порты и толерантны к 5v уровням, по даташиту он требует 3.0~3.6V. При привышении может сбоить, так что используйте аккуратно.


    1. HWman
      29.02.2016 09:53

      Используйте для Ваших целей конвертор уровней. Если делать лень, или же нету времени — можно всегда купить готовый модуль, как это сделал я:

      image


      1. remzalp
        29.02.2016 10:43

        Да, стыд мне и позор. Упустил Вашу предыдущую статью, где уже были все необходимые ответы


        1. HWman
          29.02.2016 14:08

          Рад стараться.


    1. alexpp
      29.02.2016 10:21

      LM1117 вам в помощь. Питания от Ардуины может не хватить по току, поэтому нужен внешний источник. Я бы не стал надеяться на полную совместимость уровней логики: проще сразу собрать все так, как надо.
      Тем более просадки по питанию вызывают внезаные перезагрузки и вообще непредсказуемую работу модуля.


      1. HWman
        29.02.2016 14:10

        В моей предыдущей статье я рекомендовал вот такую схему:

        image
        Или в случае подключения через обычный USB UART переходник:

        image


    1. lonelymyp
      29.02.2016 14:11

      всё работает без проблем с адаптером на pl2303, на нём есть +3.3 выход от которого и надо запитываться.

      вобще модуль спокойно работает даже от 4.2 вольт, тоесть от литиевого аккумулятора напрямую.


      1. HWman
        29.02.2016 14:12

        У PL2303 очень маленький ток по 3.3 В, проверенно. Модуль работает непонятно. Настоятельно Вам рекомендую почитать мою предыдущую статью.


        1. lonelymyp
          29.02.2016 14:29

          а зачем кому-то может понадобиться заставлять ESP работать от PL2303?
          разумно предположить что работать он будет в том устройстве где ему и предназначено, в связке с ардуиной например или где-то ещё, с своим питанием.

          PL2303 нужна только для прошивки, а для прошивки её хватает без проблем.


  1. Baton72
    29.02.2016 14:12
    +1

    Вот только неделю назад освоил половину из статьи. Теперь можно освоить и вторую половину!

    На самом деле, меня больше всего расстраивает тот факт, что большинство статей описывает как использовать ESP8266 в качестве автономного устройства, и очень мало статей, которые бы пролили свет на вопрос «Как рулить ардуиной и снимать с неё данные через ESP».

    Я, будучи совсем не настоящим сварщиком, 4 дня промаялся, пытаясь связать два этих устройства, в итоге у меня только лишь получилось помигать светодиодом, а хочется читать датчики и рулить светодиодами плавненько.


    1. HWman
      29.02.2016 14:15
      +1

      В скором будущем я постараюсь раскрыть немного эту тему.


    1. 029ah
      29.02.2016 14:50

      Я в своём проекте, о котором постараюсь вскоре написать, соединил rx и tx модуля ESP с парой пинов Ардуины, к которым привязал SoftwareSerial-порт. Ардуина гонит текстовые команды в ESP, которая в свою очередь их обрабатывает, и отдаёт результаты по WiFi. Удобно в разработке — оба модуля отлаживать можно независимо. Ну а распарсить на любом контроллере текстовые команды — не сильно сложная задача для сварщика любого уровня :)


      1. Baton72
        29.02.2016 15:46

        Вот как раз на парсинге я и встал!
        В использованном мной коде используется команда find, у которой есть минус — даже если условие последующего if не выполняется — будет выполнено всё, скопом. По итогу, если я кидаю запрос температуры, то сначала следует попытка рулить светодиодом (естественно, с нулевым результатом, т.к. передаваемые параметры нулевые) и только потом мне вываливается результат опроса датчика.

        Буду ждать Вашу статью, авось снизойдёт на меня озарение.


        1. HWman
          29.02.2016 20:16

          Я эти собирался около двух месяцев написать, потому не скажу когда придёт вдохновение.


    1. sticsx
      29.02.2016 22:58

      По поводу

      «Как рулить ардуиной и снимать с неё данные через ESP».
      . Занимался этим вопросом на выходных.

      1. Как первый вариант выбрал I2C (Wire библиотеку из набора примеров File > Examples > Wire). Соединение SDA, SCL напрямую, без/с pull-up. Пока, к сожалению, смог отправлять данные только в одну сторону. Передача из ESP на Arduino работает отлично, но когда ESP-мастер запрашивает от Arduino n байт — ответ приходит в нечитаемом виде. Пример: Arduino шлёт (х, х), где х в цикле 1-255, а ESP получает (17, 0) в 60% случаев. Налицо проблема со скоростью или протоколом. Wire.setClock(100000L) не помогло. Осциллограф ещё не подключал. Если у кого-то это работало — дайте знать, хоть буду знать, что проблема только у меня.

      2. Использование UART оставил на потом по двум причинам.
        2.1: UART0 на ESP использую для отладки и прошивки. Если использовать эту линию для работы с Arduino — эта возможность пропадёт. UART1, как я понял, работает только на передачу, что не даст получать ответы от Arduino.
        2.2: Не пробовал ещё двухсторонние схемы преобразования уровней.

      устройства: NodeMCU v0.9, ESP-201


  1. Mike212
    29.02.2016 14:12
    +1

    Может кому поможет. У меня версии Arduino IDE 1.6.6 и 1.6.7 не видели платы ESP, только при откате на 1.6.5 всё заработало.


    1. HWman
      29.02.2016 14:13

      Будем знать.


    1. sav13
      01.03.2016 16:25
      +1

      Это в старой версии ESP8266 core
      в последних версиях 2.0.0 и выше все вроде поправили


  1. zlo2k
    29.02.2016 14:12

    Кстати, может кто не знает но на али можно взять NodeMcu модули по 3.87$… для разработки очень удобно.

    вот тут например

    ПиныАрдуиновские пины соответствуют номеру GPIO


    1. HWman
      29.02.2016 14:13

      Я про это писал в своей предыдущей статье.


    1. zlo2k
      29.02.2016 14:56

      Прошу прощения, тэги не прошли.


      1. HWman
        29.02.2016 21:39

        А при чём тут теги?


        1. zlo2k
          29.02.2016 22:39

          Кстати в вашей пред идущей статье ни слова про NodeMcu devkit Именно его я имел в виду а не прошивку. Его гораздо удобнее использовать вместо голого esp. Никаких замыканий gpio0 на землю и прочих радостей. Все само заливается и перегружается после заливки.


          1. HWman
            29.02.2016 23:14

            Я так и написал ;)


  1. gramilla
    29.02.2016 16:52

    Так же для желающих попробовать ESP и помигать светодиодом уже есть интересные комбинации включающие в себя датчик освещенности, светодиод и питание от пальчиковых батареек, все это собрано на Esp-12, порты так же разведены и вникнув в процесс можно уже добавлять другие устройства.


  1. foga
    29.02.2016 21:39

    для самых ленивых есть конструктор прошивок wifi-iot.ru ребята добились неплохих результатов по подключению различных устройств за пару минут


    1. ElectricFromUfa
      01.03.2016 06:31

      Да, только они эту прошивку (т.н. Pro-версию) продают за денежки


      1. foga
        01.03.2016 08:40

        Время-деньги пока на те же грабли будешь наступать столько времени уйдет, я уж лучше нервы и время сэкономлю тем более ниже постом сказали вышла плата круче чем эта


  1. OneFive
    29.02.2016 21:39

    Подключил esp-01 через arduio с питанием от 18650, после прошивки nodeMCU или smart.js и перезагрузки все работает, но на следующую перезагрузку nodemcu не может найти ini.lua, а smart.js sys.js, листинг директории в smart.js выводит undefined, получается что прошивка не удаляется, удаляются только файлы, почему так?


  1. HWman
    01.03.2016 00:22

    P.S.:
    Уже на подходе плата на базе esp32:

    image
    http://www.pighixxx.com/test/2015/12/esp32-pinout/

    Которая значительно круче чем esp8266, так что нас скоро ждёт бум, как мне кажется, темы IoT(интернет вещей).