Интернет вещей (IoT)своими руками — термометр на ESP8266+Blynk
Это страшное слово IoT, звучащее из каждого утюга. Познакомимся с ним сами — сделаем простейшее устройство интернета вещей — а именно термометр с индикацией на смартфоне.
Поскольку информации по данному вопросу в Интернете маловато, выкладываю инструкцию по подключению термометра на DS18B20 и использованию его через Blynk.
- Любая плата с ESP8266 на борту (я использовал Wemos D1 R2 – не люблю соплей и танцов с бубном при прошивке и использовании)
- Термометр DS18B20
- Смартфон с андроидом или iphone
На макете это выглядит примерно так (здесь он подключен к GPIO5 – в скетче это прописано) :
Датчик может быть в любом исполнении – не обязательно влагозащищенный (просто такой оказался под рукой).
Будем считать, что у Вас уже установлена Arduino IDE с поддержкой плат на ESP8266, и что светодиодиком на плате как вершиной программирования Вы уже помигали. Если нет – идем на этот замечательный сайт:
Теперь начнем работать с Blynk. Blynk – простая система управления устройствами со смартфона. Более подробно – на том же сайте https://esp8266.ru/esp8266-blynk/
Слишком много букв? Неважно, сделаем поменьше
1. Загрузите последнюю библиотеку blynk с http://www.blynk.cc/getting-started/, разархивируйте и скопируйте ее в каталог библиотеки arduino (обычно: C: \ Program Files (x86) \ Arduino \ libraries).
2. Загрузите приложение blynk для Android или iphone (бесплатно в магазине Apple / Google Play) и сделайте свое первое приложение. Перейдите к настройкам и выберите esp8266.
3. в разделе «Настройки» в приложении вы найдете «auth token», придет по электронной почте при создании проекта.
5. Создаем новый проект (назовите его, как хотите).
6. На вашу электронную почту должен прийти токен для этого проекта.
8. Загрузите этот скетч (сначала вставьте туда свой токен, ssid и password):
#define BLYNK_PRINT Serial
#define ONE_WIRE_BUS 5 //DS18b20 на GPIO5, можно переназначить на другой пин
char auth[] = «ххххххххххххх»; //тут токен авторизации для вашего проекта, придет по почте
Blynk.begin(auth, «ssid», «password»); //ваши ssid и password
timer.setInterval(1000L, sendTemps); // интервал опроса сервера (1000L = 1 секунда)
sensors.requestTemperatures(); // Polls the sensors
float tempBabyRoom = sensors.getTempCByIndex(0); // Получение температуры в градусах Цельсия, для Фаренгейта заменить getTempCByIndex(0) на getTempFByIndex(0)
Blynk.virtualWrite(4, tempBabyRoom); //4-й виртуальный порт, значение которого идет в Blynk
Рекомендуется сначала нажать «Проверить», чтобы проверить наличие библиотек (и не задавать потом вопросы типа «Апочемууменянеработаетипишетошибку?»). В случае ошибок посмотреть лог и докачать библиотеки.
Теперь настраиваем сам индикатор на смартфоне
9. Добавьте «Gauge» на панель проекта в Blynk.
10. Кликните на нем, появится панель настроек.
11. В настройках кликните на «PIN», выберите «Virtual» и «V4»
14. Запустите проект (в правом верхнем углу экрана нарисована конопочка как «Play».
Можно добавить в скетч кнопки управления, диммеры и что угодно – это на Ваш вкус. Ну это уже сами сделаете 🙂 .
Дисклеймер: Все, что вы делаете – на свой страх и риск. Я не связан ни с Blynk, ни с Wemos – так что это рекламой не является. Все оборудование приобретено за свои деньги у различных продавцов.
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мкФ.
Я выбрал третий пункт, поскольку мне часто нужно 3.3В, я жадный и я люблю встраивать регуляторы прямо в блоки питания.
С AMS1117 все просто: если положить его текстом вверх, то напряжение на ногах растет слева направо: 0(Gnd), 3.3В (Vout), 5В (Vin).
Между нулем и выходом нужен танталовый конденсатор на 22мкФ (так по инструкции, что будет если поставить электролитический — я не проверял). У танталового SMD-конденсатора плюс там, где полоска. Немного чудовищной пайки совершенно не предназначенных для такого варварства SMD-компонентов и:
Обязательно проверяйте выходное напряжение. Если оно значительно меньше 3.3В (например, 1.17В) — дайте регулятору остыть после пайки и проверьте контакты. Если поставите конденсатор больше, чем на 22мкФ, то мультиметр может показать более высокое напряжение.
Почему именно AMS1117? Он широко используется. Его вы можете найти почти везде, даже в Arduino Uno, как правило, стоит AMS1117-5.0.
Если вы знаете что-то схожих габаритов и цены, еще более простое в использовании — напишите, пожалуйста.
Важный момент. Не знаю уж почему, но AMS1117 крайне капризно относится к качеству соединений. Контакты должны быть надежны. Лучше — пропаяны. Иначе он на тестах выдает 3.3В, но под нагрузкой не выдает ничего.
Я выбрал модель 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 тоже подойдет, а ценители Линукса и так знают, что делать и где смотреть.
Если ничего не происходит — выключите — включите питание, если все равно ничего не происходит — проверьте соответствие 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» будет точнее.