Wifi датчик температуры arduino

Arduino + ESP8266 с нуля на примере Wi-Fi термометра, часть первая

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

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

Питание

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

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

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

Читайте также:  Правильная настройка канала wifi

Я выбрал третий пункт, поскольку мне часто нужно 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В, но под нагрузкой не выдает ничего.

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

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

Читайте также:  Двухканальное wifi реле sonoff

Теперь берем переходник 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 тоже подойдет, а ценители Линукса и так знают, что делать и где смотреть.

Если ничего не происходит — выключите — включите питание, если все равно ничего не происходит — проверьте соответствие 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. Под нее даже какие-то шилды делают.

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

Update: заменил в тексте «программатор» на «переходник USB-UART» или просто «переходник». По моему опыту термин «программатор» используется чаще, но, пожалуй, «переходник USB-UART» будет точнее.

Источник

Оцените статью
Adblock
detector