Часть 1. Подготовка ESP8266

Зачем эта статья? На хабре уже есть ряд статей про использование ESP в разных конфигурациях, но почему-то без подробностей о том, как именно все подключается, прошивается и программируется. Типа «я взял ESP, две пальчиковые батарейки, DHT22, закинул в коробку, потряс часик и термометр готов!». В итоге, получается странно: те, кто уже работают с ESP не видят в сделанном ничего необычного, а те, кто хочет научиться — не понимают с чего начать. Поэтому, я решил написать подробную статью о том, как подключается и прошивается ESP, как его связать с Arduino и внешним миром и какие проблемы мне попадались на этом пути. Ссылки на Aliexpress привожу лишь для представления порядка цен и внешнего вида компонентов.

Итак, у меня было два микроконтроллера, семь разных сенсоров, пять источников питания, температурный датчик DHT22 и целое множество проводков всех сортов и расцветок, а так же бессчетное количество сопротивлений, конденсаторов и диодов. Не то, чтобы все это было необходимо для термометра, но если уж начал заниматься микроэлектроникой, то становится трудно остановиться.



Питание

Для работы ESP8266 нужно напряжение 3.3В и ток не ниже 300мА. К сожалению, Arduino Uno не в состоянии обеспечить такой ток, как не в состоянии обеспечить его и переходники USB-UART (программаторы) типа FT232RL — их предел около 50мА. А значит придется организовать отдельное питание. И лучше бы, чтобы Arduino тоже работал от 3.3В, чтобы избежать проблем типа «я подал пятивольтовый сигнал на вывод RX модуля ESP, почему пахнет паленой пластмассой?».

Есть три решения.

1. Купить готовый блок питания на 3.3В.

2. Купить готовый модуль с регулятором напряжения, понижающий 5В до 3.3В. Пожалуй, это самый удобный вариант.

3. Собрать модуль самому из регулятора AMS1117 и одного танталового конденсатора на 22мкФ.

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

С AMS1117 все просто: если положить его текстом вверх, то напряжение на ногах растет слева направо: 0(Gnd), 3.3В (Vout), 5В (Vin).
Между нулем и выходом нужен танталовый конденсатор на 22мкФ (так по инструкции, что будет если поставить электролитический — я не проверял). У танталового SMD-конденсатора плюс там, где полоска. Немного чудовищной пайки совершенно не предназначенных для такого варварства SMD-компонентов и:

image



Обязательно проверяйте выходное напряжение. Если оно значительно меньше 3.3В (например, 1.17В) — дайте регулятору остыть после пайки и проверьте контакты. Если поставите конденсатор больше, чем на 22мкФ, то мультиметр может показать более высокое напряжение.

Почему именно AMS1117? Он широко используется. Его вы можете найти почти везде, даже в Arduino Uno, как правило, стоит AMS1117-5.0.
Если вы знаете что-то схожих габаритов и цены, еще более простое в использовании — напишите, пожалуйста.

Важный момент. Не знаю уж почему, но AMS1117 крайне капризно относится к качеству соединений. Контакты должны быть надежны. Лучше — пропаяны. Иначе он на тестах выдает 3.3В, но под нагрузкой не выдает ничего.

Подключение ESP8266

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

Чтобы чип запустился нужно соединить VCC и CH_P через резистор 10кОм. Если такого нет, то сгодится любой из диапазона 1-20кОм. Кроме того, конкретно модель 07 еще требует, чтобы GPIO15 (самый ближний к GND) был «на земле» (этого на картинке не видно, потому что соединение с другой стороны).



Теперь берем переходник USB-UART, переключаем его на 3.3В и подключаем RX к TX, TX к RX и GND к «земле» (у меня без этого передача нестабильна). Если вы не можете переключить на 3.3В, то можно использовать простейший резисторный делитель напряжения: соедините ESP RX с TX переходника через сопротивление в 1кОм, а ESP RX с «землей» через 2кОм. Существует масса более сложных и более надежных способов связать 3.3В и 5В, но в данном случае и так сойдет.



И соединяемся на скорости 9600 по нужному COM-порту (можно посмотреть в диспетчере устройств).


Я использую SecureCRT, Putty тоже подойдет, а ценители Линукса и так знают, что делать и где смотреть.


(AT+RST перезагружает чип)

Если ничего не происходит — выключите — включите питание, если все равно ничего не происходит — проверьте соответствие TX/RX, попробуйте переставить их местами или припаять к чипу.

Иногда чип в ходе издевательств экспериментов зависает и тогда его надо обесточить, в том числе отключив и переходник (например, вытащив его из USB), поскольку чипу хватает даже поступающих крох питания, чтобы упорно тупить и не работать.

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

Иногда при этом меняется номер COM-порта. Под Linux это можно решить с помощью udev.

Если вместо текста приходит мусор, то проверьте настройки скорости. Некоторые старые чипы работают на 115200.

На старте чип нагревается, но если он реально горячий и продолжает греться — отключайте и проверяйте все соединения. Чтобы на корпус не попадало +3.3В, чтобы 5В к нему вообще никуда не приходили, чтобы «земля» переходника была соединена с «землей» чипа. Модели с металлическим экраном очень трудно сжечь (но нет ничего невозможного), а на модели без экранов жалуются, мол даже небольшая ошибка может стать последней в жизни чипа. Но это я не проверял.

Прошивка

Мой выбор — NodeMCU. У нее проблемы с памятью и поддержкой железа, но это многократно окупается простотой кода и легкостью отладки.

Так же потребуются NodeMCU flasher и LuaLoader (последнее — опционально, есть и другие клиенты для работы с этой прошивкой).


Выключаем чип. Подсоединяем GPIO0 к земле и включаем чип:



Если ничего не происходит и поля AP MAC/STA MAC пустые — проверьте еще раз, чтобы GPIO0 был на «земле».
Если прошивка началась, но зависла — посмотрите в закладке Log, у меня почему-то конкретно этот чип отказался прошиваться на FT232RL, но зато без проблем прошился на PL2303HX на скорости 576000. PL2303HX в указанном варианте не имеет переключения на 3.3В, чтобы им воспользоваться нужно открыть пластиковый корпус и перепаять провод с 5V на 3.3V, есть варианты с пятью выходами: 3.3, 5, TX, RX, Gnd.


Обратите внимание: STA MAC поменялся. Подозреваю, что flasher его неправильно показывал, но требуется проверка.

Для экономии сил и нервов можно взять готовый или полуготовый вариант.

Есть одноразовые адаптеры с удобной разводкой.
Есть готовые к прошивке.
Есть варианты с простенькие кит-комплекты и посложнее — ESP8266-EVB
Есть с готовым USB-адаптером — NodeMCU Development Board. Под нее даже какие-то шилды делают.

Если же вы, как и я, не слишком любите готовые решения, то рекомендую всего брать с запасом, потому что опыт, как говорят, прямо пропорционален количеству сожженных компонентов.

Ценные ссылки из комментариев:
NodeMCU custom builds
Programming ESP8266-EVB with Arduino IDE
Объяснение про танталовый конденсатор.

Update: заменил в тексте «программатор» на «переходник USB-UART» или просто «переходник». По моему опыту термин «программатор» используется чаще, но, пожалуй, «переходник USB-UART» будет точнее.
Стоит ли что-то изменить?
81%
(124)
Больше текста и картинок
27%
(41)
Видео процесса
23%
(35)
Больше ссылок
13%
(20)
Лаконичнее бы

Проголосовало 154 человека. Воздержалось 79 человек.

Нужны ли ссылки на компоненты в магазинах?
67%
(145)
Да, это наглядно
4%
(9)
Стоит заменить их ссылками на скриншоты
22%
(49)
Не нужны, но не мешают
7%
(15)
Не нужны

Проголосовало 218 человек. Воздержалось 49 человек.

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

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


  1. random1st
    17.06.2015 08:52
    +5

    1) Рекомендую самостоятельно компилировать nodemcu firmware. Плюшки: можно выбрать только те модули, которые нужны, сэкономив хоть и крохи, но нужной оперативки, и еще — в последней версии прошивки параметр LUAL_BUFFERSIZE завышен, что приводит к нехватке памяти при работе функций модуля string (я уменьшил его в 2 раза);
    2) Модули брать лучше в формфакторе ESP-12-E (наибольшее количество выводов и что-то там еще оптимизировано в радиотракте);
    3) Смысл связывать его с arduino только в одном — используя его в качестве watchdog, в общем и целом nano с 2КБ RAM и рядом не валялась. Я вообще использую ESP8266 как универсальный коммуникационный модуль, который через http работает с api сайта. Единственное, что мне не внушает доверия — модуль использует какие-то зашитые адреса dns -серверов, скорее всего, китайские, поэтому будьте осторожны.
    4) Для разработки рекомендую хотя бы один devkit приобрести — проще будет отладить устройство.


    1. past
      17.06.2015 09:59
      +2

      Для компиляции прошивки добрые люди запилили frightanic.com/nodemcu-custom-build.


    1. Hellsy22 Автор
      17.06.2015 18:49
      +1

      Я присматривался к 12-E, насторожило, что у него PCB-антенна и нет гнезда под внешнюю антенну. Как у него вообще с качеством связи?

      Arduino выступает в роли исполнительного модуля. На него цепляется самое разное железо. Например, если нужно считать показания с трех датчиков (температура-влажность, давление, уровень CO2) и вывести результаты на двухстрочный LCD-экран, то как сделать это одним ESP?

      Насчет DNS.

      tcpdump ничего такого не показал
      18:36:55.097770 IP 192.168.10.36.4096 > 192.168.10.1.53: 0+ A? esp. (21)
      18:36:55.097770 IP 192.168.10.36.4096 > 192.168.10.1.53: 0+ A? esp. (21)
      18:36:55.097855 IP 192.168.10.1.53 > 192.168.10.36.4096: 0* 1/0/0 A 192.168.10.1 (37)
      18:36:55.097862 IP 192.168.10.1.53 > 192.168.10.36.4096: 0* 1/0/0 A 192.168.10.1 (37)

      18:41:56.111751 IP 192.168.10.36.4096 > 192.168.10.1.53: 1+ A? api.pushingbox.com. (36)
      18:41:56.111751 IP 192.168.10.36.4096 > 192.168.10.1.53: 1+ A? api.pushingbox.com. (36)
      18:41:56.111845 IP 192.168.10.1.53 > 192.168.10.36.4096: 1 1/0/0 A 213.186.33.19 (52)
      18:41:56.111853 IP 192.168.10.1.53 > 192.168.10.36.4096: 1 1/0/0 A 213.186.33.19 (52)

      Оба запроса пришли на мой DNS-сервер (192.168.10.1) и он же ответил на них.
      Интересно, почему отправляется сразу по два запроса?


      1. jMas
        17.06.2015 19:09

        www.youtube.com/watch?v=JGb5xMTIoNc ESP-01, а если взять например 07, пинов хватит всем. :) Но в теме заявлен Wi-Fi термометр, мне например показалось, что будет измеряться только лишь температура, поэтому и недопонимание.
        Я тоже столкнулся с отсутствием аналогового входа, а датчик как раз таки аналоговый. Буду брать Arduino Pro Mini для этих целей.


      1. ignat99
        17.06.2015 19:49

        Может эта про экран ссылка вам поможет и эта про датчик газа. ESP8266 под Arduino IDE очень хорошо и быстро с теми же самыми сектчами. Отличия только в номерах GPIO.


        1. Hellsy22 Автор
          17.06.2015 22:52

          По отдельности их подключить можно, а как насчет всех вместе одновременно? Ну, знаете, такая вот погодная станция, с DHT22, датчиком давления, газовым датчиком MG811. Результаты — на дисплей и на сервер для хранения. И пара тройка кнопок на корпусе. А в перспективе желательно еще туда же поставить DS3231 на случай долгой работы без интернета и карту флеш-памяти, чтобы сохранять результаты. Arduino позволяет легко масштабировать проекты не упираясь в необходимость экономить каждый байт памяти и каждый пин. И меня удивляет, почему вы, как поборник дорогих и громоздких комплексных решений не видите очевидных плюсов такой интеграции.


          1. ignat99
            18.06.2015 12:22

            Я всегда говорю используйте ESP8266 и Arduino IDE если нужно совсем за $5. Остальное вы заплатите вашим временем в данном случае. Если вы кому то продадите сделаете такую систему и без инсталятора то нужно ещё будет потратить время на установку и настройку. За гарантию качества, вы так же своим временем и бензином (для выезда на объект) будете должны.

            Вот поэтому лучше заплатить $35 за комплексное решение, чем $5 + $100 (бензин и 4 часа работы).


            1. Hellsy22 Автор
              19.06.2015 04:19

              Так в том-то и вопрос — почему бы не заплатить $40 за комплексное решение со связкой ESP+Arduino, у которого возможностей на порядок больше, если вы уж все равно платите $35?


              1. ignat99
                19.06.2015 17:39

                У Arduino есть АЦП приличный у ESP АЦП урезанный. ESP покупают только вместе с готовой прошивкой, а Arduino от Olimex я не продаю, этим занимаются другие магазины.

                Когда мне нужно на два порядка больше возможностей я плачу примерно столько же сколько вы за Arduino и использую A20-OLinuXino-LIME за 26.40 EUR (У меня скидки). И это лучше чем Arduino. Так же RT5350F-OLinuXino-EVB за 19.20 EUR. И скоро эта модель будет с корпусом на DIN рейку за 35 Евро, включая IO на 2 реле.


                1. Hellsy22 Автор
                  20.06.2015 02:04

                  Я использую китайские клоны Ардуино (Nano Pro Mini) — странно было бы не использовать их, если используется китайский же ESP, они стоят по 1.7$ за штуку (а 168 и вовсе по 1.4$). Я все равно вас решительно не понимаю. Есть возмоджность радикально увеличить возможности ESP, практически не увеличив цену платы и ее габариты. Так почему бы и нет? Это же удобное решение, да еще и с потенциальной масштабируемостью (можно добавить 2, 3, да хоть 5 Ардуино).


                  1. ignat99
                    20.06.2015 17:53

                    Ну не тянет меня на это и тем более это. PIC и AVR я начал использовать в 2003 году. Мне не интересны устаревшие, на мой взгляд, технологии. Моя специализация VLSI CAD. Поэтому могу и сам спроектировать и запустить нечто похожее :-)


      1. random1st
        17.06.2015 22:13

        Варианты есть, пусть и не в Вашей конфигурации. Гляньте хотя бы это. Весьма впечатляет. Что касается DNS, каюсь, поленился проверить. Непонятный вам запрос имеет отношение к igmp протоколу и в данном контексте никакой смысловой нагрузки не несет.


  1. corin
    17.06.2015 09:08
    +1

    Очень даже есть смысл связывать его с ардуиной, у меня esp8266 стоит на меге в качестве TCP<->UART гейта для удаленного управления мегой с телефона/компа. Тоже под nodemcu, кстати. А мега управляет уже значительно более сложным устройством.


    1. jMas
      17.06.2015 11:38

      Как вы связали Arduino+ESP? Как бегают данные.


      1. corin
        17.06.2015 18:04

        Покажу скрипт на lua, простой и надежный:

        wifi.setmode(wifi.STATION)
        wifi.sta.config("ssid","key")
        wifi.sta.autoconnect(1)   -- восстанавливаем соединение со станцией при потере связи
        
        uart.setup(0,9600,8,0,1,0) -- коннектимся к ардуине
        sv=net.createServer(net.TCP, 60) -- создаем сервер
        global_c = nil
        sv:listen(8266, function(c)      -- и слушаем на порту 8266 :)
             if global_c~=nil then       -- много клиентов мне не надо - я управляю либо с телефона, либо с компа
                  global_c:close()
             end
             global_c=c
             c:on("receive",function(sck,pl)    uart.write(0,pl) end)     -- что пришло по TCP валим в UART
        end)
        
        uart.on("data",4, function(data)    -- Что ответила ардуина - шлем по TCP
             if global_c~=nil then
                  global_c:send(data)
             end
        end,0 )
        
        

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


        1. jMas
          17.06.2015 18:36

          Отлично, спасибо! Я тоже подумываю связать ATiny85+ESP, думал о I2C, 1-Wire, и догадывался, что Serial как самое быстрое решение — однозначно хорошо.


      1. Hellsy22 Автор
        17.06.2015 18:56

        Об этом подробно будет вторая часть статьи. Но если кратко, то можно как просто связать TX-RX и тогда все работает отлично даже на скорости в 115200, так и через SoftwareSerial, но тогда придется снизить скорость до 9600.

        Само общение идет как-то так:

        uart.write(0,"ARD:gettemp\n"); -- так отправляется запрос
        
        uart.on("data", "\n",
            function(data)
                -- тут разбираются ответы
                _,_,humidity,temp = data:find("OK: ([%d.]+),([%d.]+)");
            end, 0);
        


        "\n" означает, что функция будет вызвана как только встретится символ "\n", можно вместо этого указать, например, минимальное количество.


        1. random1st
          17.06.2015 22:26

          Я бы рекомендовал использовать для обмена данными json, поскольку функции разбора уже есть в модуле cjson nodemcu api.


          1. Hellsy22 Автор
            17.06.2015 22:55

            А как у него с обработкой ошибок? Если придут некорректные данные — он вернет nil или отправит MCU в перезагрузку?


        1. jMas
          17.06.2015 23:27

          Как насчет подписи данных, например хеш, который генерируется у отправителя и пересчитывается у получателя? Есть что ни будь стандартное для проверки целостности данных?


          1. jMas
            18.06.2015 00:16

            Сам отвечу на свой вопрос: нашел пример и библиотеку для отправки-приема данных по Serial с проверкой целостности.


  1. Winnie_The_Pooh
    17.06.2015 09:44
    +5

    Статья полезная. Однако если она позиционируется для начинающих — то лучше не использовать жаргон или вообще малопонятные выражения. Не поймет Вас начинающий.

    например:

    выбрал модель 07, поскольку у нее отличный металлический щит

    Экран это, а не щит!

    Если ничего не происходит — мигните питанием

    выключите — включите питание.

    Иногда фокусы с программатором вешают USB-порт. Лекарство очевидно — вытащить и вставить в другой.

    Это перегрузка порта и отключение его по питанию. Разумно перезагрузить комп.

    подключаем RX к TX, TX к RX и GND к «земле» (у меня без этого передача нестабильна).

    Надежное соединение общих выводов — азы электроники!


    1. Hellsy22 Автор
      17.06.2015 21:05

      Внес изменения. Насчет общих выводов — скажите, а +3.3В тоже стоит объединять?


      1. Winnie_The_Pooh
        18.06.2015 14:04

        если Вы спрашиваете «надо ли объединить выводы +3.3 двух источников» — то очевидно нет. Это будет коротким замыканием для источника с большим внутренним сопротивлением. Да и второму будет нехорошо.

        Если вопрос про общие выводы — то конечно да.


        1. Hellsy22 Автор
          19.06.2015 04:19

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


  1. progn
    17.06.2015 10:22
    +5

    для начинающих можно было бы пояснять зачем вообще нужен ESP8266


    1. random1st
      17.06.2015 11:26

      есть сайт довольно большого сообщества, на котором многое уже разобрано и расписано


      1. progn
        17.06.2015 11:36
        +1

        ну да, я его тоже нагуглил. Но базового введения (что это такое и зачем) я там сходу не нашел.

        понятнее стало после статей habrahabr.ru/company/coolrf/blog/235881 habrahabr.ru/company/coolrf/blog/238443 habrahabr.ru/post/252481


  1. ntfs1984
    17.06.2015 11:32
    +1

    Есть пара замечаний по статье:

    Для работы ESP8266 нужно напряжение 3.3В и ток не ниже 300мА. К сожалению, Arduino Uno не в состоянии обеспечить такой ток, как не в состоянии обеспечить его и программаторы типа FT232RL — их предел около 50мА.
    У вас очень странные Arduino и переходник USB-UART (не называйте его пожалуйста программатором, я нервничаю). Моя Nano вполне себе питает ESP8266 (ток не замерял, ибо нет надобности), как и переходник на CP2102.
    И соединяемся на скорости 9600 по нужному COM-порту (можно посмотреть в диспетчере устройств).
    А это уже как повезет. Лучше перечислить список возможных скоростей. Мои вот из коробки завелись на 115200.
    Иногда чип в ходе издевательств экспериментов зависает и тогда его надо обесточить, в том числе отключив и программатор (например, вытащив его из USB), поскольку чипу хватает даже поступающих крох питания, чтобы упорно тупить и не работать.
    А вот этого быть не должно. Я бы на вашем месте не слишком доверял зависающему чипу.
    Иногда фокусы с программатором вешают USB-порт. Лекарство очевидно — вытащить и вставить в другой.
    Это кстати тоже ненормально.

    А вообще, статья сойдет в качестве первой части ТОЛЬКО если завтра же будет вторая часть с картинками и видео.
    Как подключать\перепрошивать ESP-шку, мы уже знаем.

    А вот ваш способ подключения Ардуины и ESP — очень интересен.
    У меня в стадии работающего прототипа умный контроллер комнаты на Ардуине Атмеге с сенсорными кнопками и пультом, который сам по себе независим, но подчиняется командам с центрального сервера, а так же отдает ему свои параметры. Т.е. работает в дуплексе с сервером.

    Интересен ваш вариант реализации, пишите, ждем!


  1. jMas
    17.06.2015 11:32

    К сожалению, Arduino Uno не в состоянии обеспечить такой ток

    Я использую ESP-01, питание от Ардуины просто идеально вписывается, хватает. Если подключать через какой ни будь USB-TTL (UART), то вот там питания как раз не хватает.

    На форуме esp8266.ru советуют отказаться от использования NodeMCU в сторону github.com/esp8266/Arduino Arduino IDE (C++). Лично я, после того как перешел от NodeMCU к C++, заметил, что выросла стабильность работы и я перестал морочить голову с хипом.

    И мне не ясно использование Ардуино, потому что для отправки данных будет достаточно ESP+датчик.


  1. ignat99
    17.06.2015 12:05

    Вот ещё несколько подробных инструкций по изготовлению прошивки ESP8266-EVB.


  1. random1st
    17.06.2015 12:14

    У меня ESP-01 работал от PL2303 и от FT232RL, но отказывался работать от Arduino Nano. Использование Arduino c ESP8266 на мой взгляд, тривиально — TX-RX Arduino цепляем к ESP и работаем через Serial, все равно с какой прошивкой, Nodemcu или AT. Бонусом получаем возможность закоротив RST Arduino на землю, получить USB-UART переходник прямо на ESP.


    1. ntfs1984
      17.06.2015 14:23

      Не соглашусь с вами.

      TX-RX Ардуины вы сможете прицепить только в конечном варианте, а в варианте дебага, они будут подключены к компьютеру, с которого вы будете заливать прошивку и читать диагностические сообщения.

      Кроме этого, вам придется научиться парсить сообщения, приходящие с последовательного порта, а это не такая уж и тривиальная задача, поверьте. Особенно если они плавающего размера.

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

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

      Да, скетч с решением описанных проблем, занимает уже целых 10 килобайт. А мы ведь еще даже не начали использовать ESP и собственно функционала еще нет =)

      ESP8266 в прошивке AT периодически теряет точку доступа. И не умеет к ней переподключаться, единственный способ это сделать — RESET. Поэтому варианта тут два — ставить NodeMCU или вводить доп.хардверный костыль на Ардуине.

      Если вы поставите NodeMCU, то придется вводить логику работы с сервером: парсить данные с сервера, выбирать что отправлять на Arduino, а что нет. Кроме этого, серверу нужно всегда отдавать connection: close, иначе он подвиснет на долгое время.

      В общем не все так тривиально, по крайней мере развернутого работающего примера в интернете я не нашел: можно передавать оттуда. Или туда. С неработающей той или иной частью. Хотелось найти нечто такое: «К Ардуине подключены датчик движения и серва. Ардуина передает данные с датчика движения на центральный сервер через ESP. Центральный сервер решает, двигать или нет, и передает через минутку ответ обратно Ардуине через ESP». Не нашел. Пришлось писать свою реализацию.


      1. random1st
        17.06.2015 14:41

        TX-RX Ардуины вы сможете прицепить только в конечном варианте, а в варианте дебага, они будут подключены к компьютеру, с которого вы будете заливать прошивку и читать диагностические сообщения.

        Собственно говоря, не понял, в чем тут проблема. Именно такую схему и использовал. Ничего не мешает подцепить еще один UART адаптер параллельно и ловить обмен между ESP и Arduino. Там же и дебаг.
        А кроме всего прочего, придется отвечать на сообщения в последовательный порт. А этого вы сделать не сможете, пока порт прослушивается, иначе прослушивание прервется. Придется городить костыли.

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

        В моем варианте обмен инициируется Arduino и нет необходимости слушать порт постоянно. Я обмен гоняю банальным json -вот и старт со стопом, и данные. В AT-варианте вообще не использую.
        К Ардуине подключены датчик движения и серва. Ардуина передает данные с датчика движения на центральный сервер через ESP. Центральный сервер решает, двигать или нет, и передает через минутку ответ обратно Ардуине через ESP

        На мой взгляд, Вы все чересчур усложняете. У меня скрипт обмена данными с сервером, включая аутентификацию по токенам, занял 2 кб lua кода. Но ESP ничего не решает, просто передает данные и парсит ответ. arduino в этом варианте вообще не интересуется, кто данные отдает.


        1. ntfs1984
          17.06.2015 14:48

          Только доведу до стадии «не стыдно показать» свой прототип — напишу статью и буду благодарен почитать ваши советы по оптимизации :)


      1. jMas
        17.06.2015 14:57

        ESP8266 в прошивке AT периодически теряет точку доступа. И не умеет к ней переподключаться, единственный способ это сделать — RESET. Поэтому варианта тут два — ставить NodeMCU или вводить доп.хардверный костыль на Ардуине.

        Можно поинтересоваться, у вас только 2 варианта — использовать NodeMCU или хардварный ресет на ардруине. Не пробывали использовать Arduino IDE и C++? (и проблемы с нехваткой хипа решает)

        void loop() {
          // при потере подключения - пытаемся переподключиться
          while (WiFi.status() != WL_CONNECTED) {
              connectWiFi();
          }
          if (WiFi.status() == WL_CONNECTED && ! mqttClient.connected()) {
            if (mqttClient.connect(mqttId)) {
              Serial.println("MQTT connected.");
            } else {
              Serial.println("MQTT connect fail.");
            }
            delay(500);
          }
          if (mqttClient.connected() && lastTime+10000 < millis()) {
            mqttClient.publish("chart/chart1", "rand1=" + String(random(200,300)) + "&rand2=" + String(random(100, 200)));
            Serial.println("MQTT published.");
            lastTime = millis();
          }
        }
        

        И если вы твердо уверены, что NodeMCU лучше, хотелось бы узнать почему?


        1. random1st
          17.06.2015 15:15

          ESP8266 в любом варианте достаточно кривой, а закрытое sdk со множеством проблем не делают его лучше. Вариант с lua позволяет быстрее написать и отладить устройство, плюс есть неплохая документация по api. В то же время я считаю, что наилучший вариант работы с esp разработка собственной узко заточенной под конкретную задачу прошивки на базе esp sdk. Для себя рассматриваю промежуточный вариант — выделение критических участков кода на lua и перенос их в прошивку.
          P.S. Не пишите, пожалуйста, «пробЫвали». Правильно — " пробовали".


        1. ntfs1984
          17.06.2015 15:30

          Добавлю к комментарию random1st: есть очень хорошая возможность заливать прошивки на лету, без переключения в особые режимы.


        1. ntfs1984
          17.06.2015 15:39

          Вот у вас только 16 строк написаны, чтобы переподключаться. Хотя прошивка должна просто не терять сеть.
          Добавим к этому код «сетевой карты к Ардуине», ну чтобы Ардуина общалась с сервером — это сколько еще строк?

          На Lua весь функционал вписывается в 20 строк, и это весьма удобно.

          Так или иначе, вы предложили альтернативную «не AT» прошивку.


          1. jMas
            17.06.2015 17:24

            Что ж, я сам за стабильность. Личный опыт с NodeMCU показал, что работает это все менее стабильно, чем на C++.

            На Lua весь функционал вписывается в 20 строк, и это весьма удобно.

            Это весьма удобно, но и сказывается на размере прошивки, а так же потребляемой памяти. Ведь это дополнительная абстракция над кодом на Си.

            Я не спорю, код на Lua писать удобно, но и течет такой код по памяти лучше.
            И между удобством и просто чтобы стабильней работало — я выбрал стабильную работу.

            Добавим к этому код «сетевой карты к Ардуине», ну чтобы Ардуина общалась с сервером — это сколько еще строк?


            Приведу полный скетч
            #include <ESP8266WiFi.h>
            #include <WiFiServer.h>
            #include <MQTT.h>
            #include <PubSubClient.h>
            
            #define WIFI_SSID "test_ap" 
            #define WIFI_PWD "12345678"
            
            IPAddress mqttIp(192, 168, 0, 220);
            PubSubClient mqttClient(mqttIp);
            String mqttId = "token";
            long int lastTime = 0;
            
            void setup() {
              Serial.begin(115200);
              Serial.println("Started.");
              
              WiFi.mode(WIFI_STA);
              WiFi.begin(WIFI_SSID, WIFI_PWD);
            }
            
            void loop() {
              while (WiFi.status() != WL_CONNECTED) {
                  connectWiFi();
              }
              if (WiFi.status() == WL_CONNECTED && ! mqttClient.connected()) {
                if (mqttClient.connect(mqttId)) {
                  Serial.println("MQTT connected.");
                } else {
                  Serial.println("MQTT connect fail.");
                }
                delay(500);
              }
              if (mqttClient.connected() && lastTime+10000 < millis()) {
                mqttClient.publish("chart/chart1", "rand1=" + String(random(200,300)) + "&rand2=" + String(random(100, 200)));
                Serial.println("MQTT published.");
                lastTime = millis();
              }
            }
            
            void connectWiFi(void) {
                Serial.print("Connect to Wi-Fi");
                int retries = 0;
                while (WiFi.status() != WL_CONNECTED) {
                    retries++;
                    Serial.print(".");
                    delay(500);
                }
                Serial.println("");
                Serial.println("Wi-Fi connected.");
                Serial.print("IP: ");
                Serial.println(WiFi.localIP());
            }
            


            1. ntfs1984
              17.06.2015 17:43

              Прошу прощения, в С++ не специалист.
              Т.е. если я введу в браузере\curl «192.168.0.220/?command=info», то на последовательный порт Ардуины придет «command=info»?

              Ну и если Ардуина в последовательный порт выведет «test», то удаленный сервер получит эту команду в параметрах $_GET?

              Мне важно это понять, поскольку в моем проекте на Lua все таки есть утечки памяти…


              1. jMas
                17.06.2015 17:57

                Пример простого вебсервера hello-world на С++ для Arduino IDE github.com/sandeepmistry/esp8266-Arduino/blob/master/esp8266com/esp8266/libraries/ESP8266WebServer/examples/HelloServer/HelloServer.ino

                Померяйте хип в loop ESP.getFreeHeap(). В handleNotFound() иллюстрируется работа с GET данными.


              1. jMas
                17.06.2015 18:43

                И еще есть такая штука, как github.com/marcoschwartz/aREST (возможно не слышали), работаем с пинами ESP по REST, может как то решает вашу задачу. Но если честно, не совсем понял ваш вопрос.
                Если вы дерните ESP за URL, то вам нужно сгенерировать какие то данные в Serial порт к которому подключена Ардуина. Если так, то это сделать не составит труда. И задача не сильно сложная, поэтому свободного хипа, я уверен, хватит. Здесь github.com/jmas/ESP8266Device/blob/master/ESP8266Device.h я делал библиотеку для начальной настройки ESP (установка названия AP и пароля через веб-интерфейс). И работает все весьма неплохо. Я думаю, ваша задача должно быть проще.


                1. ntfs1984
                  17.06.2015 19:06

                  Есть система на Atmega328. Она управляет в основном светом (двумя источниками), в автономном режиме. Выключает свет по сенсорной кнопке, по пульту д\у, по датчику движения и так далее.
                  Есть сервер. Произвольный. На нем веб-интефейс, и 3.5 демона.
                  Они:
                  Изменяют настройки на системе, например действия для каждой из четырех кнопок пульта, максимум яркости света, режим работы сенсорной кнопки, таймауты разные + могут работать в реалтайме, т.е. упрощенно — выключать свет по команде из интернета, менять его яркость, и все такое;
                  Принимают параметры системы, такие как текущие настройки, текущее значение датчика движения, текущую яркость света, и так далее, выводя все это в режиме реального времени на dashboard.

                  Система при этом портабельная, т.е. платка с Atmega вытаскивается из блока (или просто туда не вставляется), подключается через последовательный порт к компьютеру для режима дебаггинга и просто перепрошивки, не теряя функционал, т.е. в терминале последовательного порта компьютера, можно видеть что пришло с сервера, что ответила Atmega и т.д.

                  ESP при этом служит просто сетевой картой для Atmega, посему работает не совсем в режиме веб-сервера.

                  Меня смутил странный глюк, я его описал Здесь: при парсинге чего-то с последовательного порта, ESP перестает отвечать на некоторые команды. Она работает, передает и принимает данные. Но записать туда больше ничего нельзя, приходится заново перепрошивать.


                  1. Hellsy22 Автор
                    17.06.2015 19:12

                    Почему глюк? Вы же сами захватили коммуникацию по uart и не вернули ее на место.

                    Чтобы не доводить дело до перепрошивки, можно делать это не сразу, а по команде с сервера. Или через выполнение другого файла с задержкой в секунду (успеете стереть). В моем случае ESP при включении качает с сервера файл с lua и запускает его, что позволяет, к примеру, одним копированием перевести его в telnet-сервер, чтобы посмотреть что там и как.


                  1. jMas
                    17.06.2015 19:12

                    Буду ковырять сегодня связь по Serial, может потом чем то полезным помогу в виде кода на C++, пока нем могу ничего конкретного сказать по поводу такого «глюка» в NodeMCU.


            1. random1st
              17.06.2015 22:55

              Собственно говоря, и прошивку nodemcu можно выборочно собрать. А сколько времени и кода у Вас займет обновление той же прошивки через WiFi? На Lua можно реализовать весьма быстро, подняв веб-сервер. lua нестабильно работает из-за нехватки памяти, но и с этим можно бороться.


              1. jMas
                18.06.2015 01:26

                Да, если ты берешь Arduino IDE и C++ ты делаешь «статическую» прошивку, «баги» которой в конечном устройстве править будет почти не возможно по Wi-Fi. NodeMCU в этом плане действительно «вещь»: возможность обновлять скрипты по сети это круто.
                Бороться с нехваткой памяти мне было сложно, возможность посмотреть общее число свободного места в хипе это хорошо, но если у меня будет «течь» переменная в определенном месте (принимая данные извне) это заставит устройство регулярно перегружаться. А отследить узкое место, в целом, сложновато. Не говорю, что это не реально, но таких «граблей» можно расставить очень много (благо lua нас в этом поощряет), а вменяемых средств дебага не нашел.


  1. ALev
    17.06.2015 15:35
    -1

    Я против ссылок на компоненты в магазинах. Это уже будет рекламой магазина. К тому же в статье (как это обычно почему-то и бывает) плату называют Arduino Uno R3, в то время как плата совсем другого производителя, подозреваю, что китай. Вот как выглядят оригинальные платы: www.arduino.cc/en/Main/ArduinoBoardUno. Т.е. мы получаем мало того, что рекламу, так ещё и предоставляющую недостоверную информацию (что, вообще говоря, карается). Учитывая, что в поисковике эти компоненты ищутся на раз (первые ссылки), опросник вообще выглядит подозрительно.

    В крайнем случае — давать ссылки на [b]несколько[/b] магазинов, и уж во всяком случае давать достоверную информацию.


    1. ntfs1984
      17.06.2015 15:40
      +3

      Достаточно будет спрятать под спойлер с заголовком «Брал здесь» =)
      Мы не любим навязчивую рекламу, но вовсе не против знать места, где цены дешевле, а продаван не кидает.


      1. cvs
        17.06.2015 16:03

        <ошибся веткой>


    1. cvs
      17.06.2015 16:03
      +3

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


    1. Hellsy22 Автор
      17.06.2015 20:27

      Все верно, это китайская UNO R3 MEGA328P, стоимостью около 3$. Насчет поиска — тут все не так просто. Например, по запросу «блок питания 3.3В» первой ссылкой идет Чип и Дип, с блоком питания за полторы тысячи рублей. А на Ali поиск затруднен тем, что релеватность невысока и по тому же запросу про «power supply 3.3» вылезает все подряд, включая источники тока с плавающим напряжением в 3-12В.


      1. ALev
        17.06.2015 20:36

        Ну так зато по запросу «AMS1117-3.3 купить» вылезает что надо. Это как с брендами в художественных фильмах: вроде бы случайно ноут оказался у съёмочной группы фирмы Гнусмас, но по факту получается рекламой. Поэтому пользуются всяческими ухищрениями. Если вы действительно преследуете исключительно образовательные цели, то можно хотя бы выбирать наименьшее из зол: например давать список магазинов, а не только один. Решайте сами, конечно, я исключительно свою субъективно-эгоистическую точку зрения высказал; не хочется мне видеть на Хабре неприкрытую рекламу.


        1. Hellsy22 Автор
          17.06.2015 20:59
          +1

          Ссылки не содержат промо-кода, так что мне нет никакой прямой выгоды от их размещения. Закупаюсь я в основном, на Ali, поскольку в российских магазинах часто какая-то негуманная наценка, причем на тот же самый товар. В тексте есть по одной ссылке на Tindie, и Olimex.

          Если вы знаете какие-то хорошие магазины, которые можете порекомендовать — напишите, пожалуйста, список. Я посмотрю и добавлю апдейтом.


          1. ALev
            17.06.2015 21:13

            Наценка в наших магазинах как правило, ИМХО, нормальная. Я работал в одном из них раньше, знаю кухню из нутри. Оригинальный товар стоит изначально дорого + наценка 40%-70% в DIY электронике в России — нормальное дело, т.к. больших оборотов пока ни у кого нет (отрасль ещё не развита).

            Т.к. работал раньше в одном из магазинов, ссылки давать воздержусь :) Скажу только, что если надо дешёво, то действительно лучше в китае заказывать. Если надо с гарантией или быстро, или не хочется разбираться с заказом из-за бугра, то придётся мириться с «негуманными» российскими ценами. Работа — есть работа, даже если это работа ритейлера. По опыту большинство всё же выбирает второй вариант.


            1. AlNinyo
              17.06.2015 22:35
              +1

              В силу необходимости пришлось немного заняться закупкой ардуино-железок. В «наших» магазинах цена НА ВСЁ получается раз в 2-5 больше, чем на аналогичное по смыслу на Али или Ебэй. И когда речь идёт о «купить набор за 15к у нас или такой же, но рассыпухой в Китае за 3-4к», угадайте, что выберет вменяемый человек, тратящий свои деньги? Да, есть некоторые проблемы с качеством и скоростью доставки, но разница в цене перекрывает это. Вот мне сейчас надо будет для досугового центра (который мы пытаемся организовать) закупить железок на 20 наборов (в каждом наборе 40+ наименований деталек). На Али мне это обойдётся примерно в 90-130к, у «наших» раз в 5 дороже.


              1. Hellsy22 Автор
                17.06.2015 22:57

                Если не секрет, то что у вас вошло в набор?


                1. AlNinyo
                  17.06.2015 23:02

                  Да какой там секрет. Вот тут эксельный файлик со списком, ссылками и ценами. Буду рад, если предложите что-то добавить/заменить. Особенно интересует вариант камеры, которую можно в набор такой включить. Я как-то не совсем понимаю, какую можно взять.


                  1. Hellsy22 Автор
                    17.06.2015 23:17

                    С ультрасоником намучаетесь, особенно если их несколько в помещении — куча ложных срабатываний. По сравнению с ним Шарповский ИК-сенсор — чудо.

                    TFT-экран может стать реальной проблемой, мне удалось заставить работать свой только путем дописывания библиотеки. Замечу, что отображение медленное — перерисовка всего экрана занимает секунды.

                    Я бы предложил добавить еще простенькие радиомодули (не блютус), RFID/NFC и несколько мощных (1-3 ватта) RGB-светодиодов, чтобы роботы подавляли!

                    А по наводке ignat99 я еще заказал гироскопические сенсоры. Буду учить Ардуину отзываться на условный стук.


                    1. AlNinyo
                      17.06.2015 23:21

                      В наборе и ультрасоники, и ИК-сенсоры, вроде бы. Просто нам, для обучения, надо и то, и другое. Чтобы можно было смотреть, сравнивать, изучать.

                      С TFT-экраном ещё не работал, но хочется попробовать. Да и там не надо будет игру рисовать, во всяком случае, в ближайшее время.

                      Про RFID/NFC надо подумать (ещё бы ссылочки на подходящее, т.к. я ещё пока совсем новичок в этом). RGB-светодиоды есть в наборе, но не сильно мощные. Всё же это планируется питать от Ардуинки чаще всего.


                      1. Hellsy22 Автор
                        21.06.2015 08:08

                        Кстати, еще вспомнил. Забавны управляемые RGB-светодиодные пиксели, ленты и массивы. Например, на основе WS2811(12, 12B). Суть в том, что можно назначать им разные цвета. Я вот играюсь сейчас с FC-102. Отдельные пиксели стоят где-то по 6.5-7 рублей за штуку (при крупном заказе), готовые сборки дороже, вплоть до 10-12р за пиксель в зависимости от формы (массив, лента и т.д.)

                        Насчет радиомодулей RF, они тоже есть на Али, туториалов по ним много, но, в целом, они так же просты в использовании, как и ИК.


                        1. AlNinyo
                          21.06.2015 12:14

                          Спасибо большое! Буду думать, что из этого с ребятами можно сотворить.


                    1. Winnie_The_Pooh
                      18.06.2015 14:06

                      мемс датчики сами умеют реагировать на условный стук и выставлять прерывания :)


                      1. ignat99
                        18.06.2015 14:33

                        Вот базовый скетч для MPU6050 (надо фильтр для условного стука только добавить).


              1. ALev
                18.06.2015 14:04

                Так ваши слова не противоречат моим. Какой смысл в России торговать запчастями с Али? Мало того, что наценка на каждом компоненте в абсолютном значении будет мизерной (а партии, как я уже говорил, в России пока невелики), так ещё и замучаешься с возвратами, мнение о магазине будет плохим («торгуют всяким барахлом»). Гораздо проще работать для другой категории людей. Возвратов минимум (т.к. качество более-менее стабильное), мнение о магазе можно держать хорошее, хороший суппорт организовал — люди вообще довольны как слоны по большей части. И всем хорошо.

                А кто хочет купить по цене как на Али (с вытекающими), тот может купить на Али. Кто запрещает? Я когда работал в этой области вообще честно так и говорил: «мы продаём не по минимальным ценам, у нас другие плюсы. Если вам нужно по минимальной цене, покупайте на Али.» И люди по большей части на это нормально реагировали. Если люди работают не на широкую публику, но честно, то я бы не стал их ругать.


                1. AlNinyo
                  18.06.2015 15:58

                  Я согласен переплатить за качество при покупке какого-нибудь сложного устройства вроде фотоаппарата, ноутбука и т.п… И, когда я закупал подобную технику для организации, в которой работал, именно так я и делал — переплачивал немного за гарантию и хороший сервис. Но переплачивать в 5 раз за какой-нибудь фоторезистор мне кажется странным. Тем более, что всё равно большинство этих фоторезисторов изначально будет привезено из Китая и у нас его только засунут в красивый корпус.


                  1. ALev
                    18.06.2015 16:01

                    А получить инфракрасный сенсор не на 3-15 см, а на 50-80 вам понравится? А китайцы даже нам — постоянным корпоративным клиентам, вставляющим им периодически за их ошибки —, умудряли присылать не то, что мы им заказываем. Причем в одной партии могут быть и одни и другие и вообще непонятно что. С фоторезистором, конечно, труднее напутать, но ведь вы выбираете удобные вам примеры. А я про Arduino-совместимые платы вообще молчу, одних плясок с драйверами сколько было…


                    1. AlNinyo
                      18.06.2015 16:07

                      Я чуть выше давал ссылочку на планируемый набор для обучения детей работе с Ардуино. Если вы (или ещё кто знающий) сможете подсказать, где такое или подобное можно купить более качественно, но за разумные деньги, то я буду вам сильно признателен. Мне бы тоже было лучше работать не с Китаем, но и переплачивать слишком сильно возможности нет, т.к. у спонсоров сразу возникает вопрос: «Если набор Ардуино стоит почти как Лего, то нафига такой набор надо? Ведь с Лего народу больше хочет заниматься.» И, хотя есть понимание, что это всё же разные вещи и для разного уровня, но денежный вопрос тут вылезает во всю ширь.


                      1. ALev
                        18.06.2015 16:15
                        -1

                        Вы не частное лицо, как я понял? Вы занимаетесь коммерческой деятельностью? Если да, то заказыйте из Китая. Ищите надёжных поставщиков, занимайтесь их воспитанием, проверяйте за ними товар и делайте всю ту невидимую, но гадкую и муторную работу, которой занимаются все отечественные магазины. Или кооперируйтесь с этими магазинами. Иного выхода нет. Бесплатно никто не работает, не только вы. Кстати, большинство таких магазинов имеют партнёрские соглашения с кружками робототехники, т.е. занимаются тем, чем занимаетесь вы как я понял. Т.ч. они ещё и ваши конкуренты.


                        1. AlNinyo
                          18.06.2015 17:09

                          Я — учитель физики небольшой школы в областном центре. У меня нет возможности и необходимости воспитывать поставщиков. Мне надо, всего лишь, купить нормальное оборудование для центра, в котором мы будем детей учить работе с Лего, Ардуино и прочими 3D-принтерами. Нашёлся добрый человек, у которого есть некоторое количество денег на это всё и желание помочь в организации…

                          С магазинами я пока не очень скооперировался. Точнее, есть предложение от «Амперки» на хорошую скидку, но даже с этой скидкой цена набора получается в 3-4 раза больше, чем купить на Али.


                          1. ALev
                            18.06.2015 17:21

                            Теперь понял вас.

                            С этим ничего не поделаешь. Амперка вообще ориентируется на качество в первую очередь (даже среди других магазинов). Например, у них вообще нет в ассортименте китайских Arduino-совместимых плат. В моей родной школе тоже плохо с финансированием и там несколько энтузиастов занимаются тем, чем они не должны по должности заниматься, лишь бы купить дешевле. При недостатке финансирования другого выхода нет.


                          1. ignat99
                            18.06.2015 18:15

                            Вот Arduino совместимая плата ~ 10 евро. А вот набор для подключения ~ каждый элемент с кабелем и драйвером ~ 3-10 евро. Думаю что для школы очень хорошо.


                            1. AlNinyo
                              18.06.2015 18:20

                              То ли я чего-то недопонял, то ли это не совсем то, что я ищу. Но в любом случае спасибо, поизучаю ссылки повнимательнее.


                              1. ignat99
                                18.06.2015 18:29

                                Вот части для робота. Всё практически по себестоимости.


                            1. jMas
                              18.06.2015 19:19

                              Почему бы не брать Arduino Pro Mini (оригинал) они у нас в магазине за углом по 3$. Идентична с Arduino Nano (Uno без гнезда для БП). Правда нехватка USB-TTL может иметь значение. USB-TTL можно докупить за 1.5$, но если не хочется морочить голову, можно брать Arduino Pro Micro в районе 7$ (опять таки локально). На алиэкспресс Arduino Pro Micro по 3$ (а Uno по 5.6$). Это я к тому, если есть желание сэкономить. Для обучения, я не думаю, что будут серьезные отличия от Uno, если вообще будут (разве что нет гнезда для БП) и как бонус — кабель miniUSB, который стоит копейки.


                              1. ignat99
                                18.06.2015 20:07

                                Кабель USB-TTL для прошивки, блок питания. На плате за 10 евро есть кнопка, реле, LED, разьём UEXT для сенсоров, разьём для ESP8266-DEV, 10 GPIO (все) от ESP и остальные пины для второго UEXT. Сжечь не чего не получиться. Если только очень постараться.


                    1. Hellsy22 Автор
                      19.06.2015 04:44
                      +2

                      Гхм, я давно заказываю на Ebay, Ali и MiniInTheBox. Бывали и ошибки продавцов. Для этого существуют диспуты, позволяющие как серьезно срезать стоимость заказа, так и вовсе отказаться от оплаты (с возвратом товара). Есть и откровенное мошенничество, которое, впрочем, очевидно: когда продают power bank на 100,000м*Ач за 1000 рублей, флешку на 128 гигов за 300 рублей, стоваттный лазер, питающийся от пальчиковой батарейки или чудо-вебкамеру с невероятным разрешением. Как правило, таким страдают низкорейтинговые продавцы, впрочем их тоже можно потроллить с помощью диспутов.

                      Бывает, что продавцы наборов тормозят с отправкой (на самом деле они просто скупают набор, перепаковывают и отправляют). Бывает, что товар приходит в плохом состоянии — мне пришла плата с 8 реле с погнутыми пинами. Тем не менее, торгующие компонентами крупные продавцы редко когда косячат специально и, как правило, идут навстречу при решении проблем, не только не возражая против разумных рефандов, но еще и добавляя купоны.

                      Самый серьезный минус — время ожидания. Не очень-то радостно ждать полтора месяца какую-нибудь мелочь.

                      Ну и о печальном опыте покупки. Купил я в одном российском магазине келлеровский токопроводящий маркер с доставкой. Он месяц шел, а когда пришел, то оказалось, что пересохший. Я его и тряс, как положено по инструкции, и всячески крутил — увы, пользоваться им не получилось. Мои вопросы и претензии магазин просто проигнорировал. И вот это огорчило даже больше, чем негуманные наценки и затянутая доставка. Даже не столько жаль денег, сколь неприятно такое отношение и ощущение беззащитности перед косяками продавца. Все же, защита покупок — великая вещь.


  1. kireevco
    18.06.2015 02:29
    +1

    Спасибо, делал похожее. Данные передавал по serial в форме псевдо-json. Работало достаточно стабильно.
    Далее решил попробовать запилить все на чистом lua, получилось вот что. Работало стабильно. Далее решил запилить конфигурацию «нового» устройства (финт со сменой режимов и загрузкой конфиг файла с ФС) — начались тупняки с памятью. Далее стал комплировать lua, все равно мало памяти.
    Расстроился, понял что система не стабильна. Количество багов растет. SDK до сих пор 0.9.5, последний релиз 2015-03-31 :(

    Не пробовали смотреть в сторону ESP8266-only решения, типа sming? Приходите, коммьюнити живое.


    1. random1st
      18.06.2015 07:23
      +1

      Весьма интересно, спасибо за наводку. Что касается Вашего кода на lua. Он хорош для десктопа, к сожалению, на esp8266 сборщику мусора надо помогать. Багов вагон и маленькая тележка, многое очевидное не работает, но есть варианты. Во-первых, имеет смысл обнулять не используемые переменные. Вот, напрмер, каким образом я компилирую lua при старте МК (честно подсмотрел в одном из репозиториев):

      local compile = function(f)
         if file.open(f) then
            file.close()
            if debug then print('compiling:', f) end
            node.compile(f)
            file.remove(f)
         end
      end
      
      local sources = {
      'server_exchange.lua',
      'http_urldecode.lua',
      'http_urlencode.lua',
      'http_page.lua',
      'http_page1.lua',
      'http_page2.lua',
      'http_setup.lua',
      'id.lua'
      }
      for i, f in ipairs(sources) do 
          i=nil
          compile(f) 
      end
      
      compile = nil
      sources = nil
      collectgarbage()
      

      Сборщик мусора вполне себе четко отрабатывает.
      Дальше, точно также вставал на грабли с конфигом. Однако esp конфиг wifi не нужен, он замечательно помнит свои наcтройки. Напротив, приходится выключать autoconnect, чтобы имитировать разрыв связи. И еще такой момент — код приходится писать узкозаточенный, поэтому чем меньше Вы используете фишек такого высокоуровневого языка как lua, тем лучше. Тут на модули разбивают код для экономии памяти, а не для удобства архитектуры. В целом у Nodemcu будущее есть, однако не на esp8266, а на чипе с памятью побольше. Слух о том, что подобный будет выпущен, уже давно муссируются в Интернете.


      1. kireevco
        18.06.2015 07:41

        Спасибо, да, я до этого дошел уже потом, но оно стало выглядеть, мягко говоря «не очень».
        Я компилировал файлы во время загрузки. Загружаем lua файл, компилируем, удаляем lua файл.

        def file_compile(self, path):
                log.info('Compile '+path)
                cmd = 'node.compile("%s")' % path
                self._port.write(cmd + '\r\n')
                r = self.dump()
                log.info(r)
                return r
        


        Мне конечно, нравится идея запуска динамических скриптов на SoC, и lua-наилучший кандидат из-за его минимализма. Но вот что-то мне кажется nodemcu так и останется на esp8266 и устройствах от espressif.


  1. ksv811212
    18.06.2015 09:29

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

    homes-smart.ru/index.php/oborudovanie/bez-provodov-wi-fi/62-besprovodnoj-datchik-na-baze-esp8266-dlya-servisa-narodmon-ru

    Пока не дошёл до программирования самого чипа использую эту прошивку, я думаю 80% стандартных поделок она уже может покрыть.

    Разработчик достаточно оперативно на хотелки отзывается.


  1. beresovskiy
    18.06.2015 09:51

    Если кому-либо интересен выбор конденсатора — на SE подробно объяснили: electronics.stackexchange.com/questions/18384/why-does-the-lm1117-data-sheet-specifically-specify-tantalum-capacitors (tl;dr танталовый конденсатор — необязателен, есть варианты получше).