Iskra Neo + ESP8266 = Интернет вещей. Часть 6. Как сделать умный датчик температуры KosachenkoSV's blog / 15.01.2017 Предыдущие посты:Iskra Neo + ESP8266 = Интернет вещей. Часть 1Iskra Neo + ESP8266 = Интернет вещей. Часть 2 (Модуль с чипом ESP8266 ESP-01 V090 с поддержкой WiFi)Iskra Neo + ESP8266 = Интернет вещей. Часть 3. Как проверить модуль ESP8266Iskra Neo + ESP8266 = Интернет вещей. Часть 4. Настройка Arduino IDE для ESP8266Iskra Neo + ESP8266 = Интернет вещей. Часть 5. Как загрузить скетч в модуль ESP8266Это заключительный пост (возможно пока?) про возможность создания умного термометра по технологии "Интернет вещей" на основе Iskra Neo и ESP8266. Фирма Амперка включила в итоговый вариант книги главу про настройку ESP8266 с помощью AT-инструкций без программирования. Однако, вариант с программированием ESP8266 с помощью USB2Serial конвертера мне больше понравился. Рад, что Амперка не возражала о публикации данных постов на Галактике.Как сделать умный датчик температурыВ качестве первого умного устройства мы соберем «умный датчик температуры». С помощью термистора, у которого при изменении температуры меняется сопротивление, контроллер Iskra Neo будет получать данные и вычислять температуру в градусах по шкале Цельсия. Данные о температуре будут каждую секунду передаваться по UART на модуль ESP8266, а потом с помощью ESP8266 будут передаваться telnet-клиентам, подключившимся через WiFi. Давайте также введем возможность получения команд от telnet-клиента и их выполнение контроллером Iskra Neo. Пусть это будут трехбуквенные команды:max - показать максимальную температуру за все время измерений,min - показать минимальную температуру,rst - сбросить сохраненные значения минимальной и максимальной температур,hlp - показать краткую подсказку telnet-клиенту.Для схему подключения термистора нам потребуется сам термистор и резистор номиналом 10 кОм.Теперь подробнее разберемся с безопасным подключением модуля ESP8266 к плате Iskra Neo. Родное напряжение модуля ESP8266 — 3,3 вольта. Его пины не толерантны к напряжению 5 вольт, с которым работает контроллер Iskra Neo. Если подать напряжение выше, чем 3,3 вольта на пины питания, коммуникации или ввода-вывода, то модуль ESP8266 выйдет из строя.Поэтому для передачи данных на модуль ESP8266 с 5-вольтовых пинов платы Iskra Neo потребуется использовать делитель напряжения, чтобы перевести напряжение из 5 вольт в допустимый диапазон 3,3 вольта. Мы применим делитель из трех резисторов одинакового номинала в 1 кОм (два резистора номиналом 1 кОм, соединенные последовательно, имеют общее сопротивление 2 кОм) между пином TX (передача данных) контроллера Iskra Neo и пином RX (прием данных) модуля ESP8266, таким образом сделаем соединение безопасным для последнего.А вот для передачи данных от ESP8266 в контроллер Iskra Neo никаких «посредников» не нужно. Дело в том, что от пина TX (передача данных) модуля ESP8266 сигнал напряжением 3,3 вольта как есть будет воспринят платой Iskra Neo на пине RX (прием данных), как логическая единица.Соберите схему умного датчика температуры на макетной плате:В качестве программы telnet-клиента можно использовать на персональных компьютерах и ноутбуках утилиту putty, которая доступна для скачивания по ссылке http://putty.org.ru/download.html, а на планшетах и смартфонах под управлением Android можно использовать, например, приложение Telnet https://goo.gl/aGvpBZ.Загрузите в плату Iskra Neo следующий скетч:После подключения питания к схеме умного датчика температуры в окне Монитор порта, подключенного к Iskra Neo вы увидите сообщение о статусе подключения модуля ESP8266 к сети WiFi, его ip-адрес и 23 порт. По этому адресу и порту подключитесь к умному датчику температуры по протоколу telnet с помощью ПК, ноутбука, планшета или смартфона. Вы увидите приглашение и сообщения о текущей температуре, которые будут появляться каждую секунду. Попробуйте нагреть пальцами термистор, наблюдая за изменениями показаний в telnet-программе. Поскольку мы создали интерактивный датчик, который различает и выполняет некоторые команды, то вы можете в telnet-программе ввести одну из команд и получить ответ. Например, команда max покажет максимальную температуру с момента включения датчика, а команда min - минимальную. Командой rst можно сбросить сохраненные ранее значения max и min температур, а команда hlp выведет краткую подсказку по командам умного датчика температуры.Поздравляем! Вами создана первая умная интернет-вещь!Как это работаетВ процедуре setup() инициализируется два интерфейса UART. Один (Serial) для передачи сообщений на USB компьютера, к которому подключена плата Iskra Neo. Благодаря этому, в окне «Монитор порта» мы увидим сообщения, пересылаемые модулем ESP8266 на Iskra Neo, в том числе сообщения о статусе подключения к сети WiFi и ip-адресе. Второй (Serial1) для передачи данных на модуль ESP8266 через пины TX/RX. В обоих случаях мы устанавливаем скорость 115200 бод.Чтобы перевести показания термистора в градусы по шкале Цельсия и откалибровать их, нам потребуется рассчитать, сколько единиц показаний термистора соответствуют одному градусу Цельсия. Для упрощения будем считать, что зависимость показаний термистора от температуры линейная, тогда для расчетов нам достаточно узнать два разных показания термистора и соответствующие им температуры в градусах по Цельсию. Мы провели свои измерения, но для своего термистора вам потребуется провести свои замеры, чтобы точно его откалибровать.Итак. Температура в нашем помещении, согласно показанию комнатного термометра на момент измерения, составляла 22 градуса Цельсия, при этом с термистора мы получили показания 411. Нормальная температура тела человека 36,6 градусов Цельсия, поэтому мы стали нагревать пальцами термистор, подождали, пока показания перестали меняться, и записали показания термистора - 524.Используя полученные сведения, посчитаем, сколько единиц в показаниях термистора приходится на 1 градус Цельсия:Следовательно, теперь мы сможем посчитать, какие показания термистора будут соответствовать температуре 0 градусов Цельсия. Заметив, что показания термистора увеличиваются при уменьшении температуры, прибавим к показаниям термистора при температуре 22 градусов Цельсия (524) произведение 22 и 8. Именно на столько единиц увеличатся показания термистора, если температура опустится от 22 до 0 градусов Цельсия:Теперь мы знаем, что для перевода единиц показаний термистора в градусы по Цельсию нужно от 700 отнять текущие показания термистора и результат поделить на 8:Именно так мы переводим показания термистора в градусы по шкале Цельсия:Для распознавания трехсимвольных команд от telnet-клиентов в скетче используется функция compare3(), которая возвращает либо «Истину» (команда получена), либо «Ложь» (команда не получена):Для возможности контроля получаемых контроллером Iskra Neo сообщений в окне «Монитор порта», на компьютере программируем передачу на интерфейс USB (Serial) данных, полученных от модуля ESP8266 по интерфейсу UART через пины RX/TX (Serial1). Здесь же определяем, вводил ли telnet-клиент команду, например, «hlp», и если команда была введена, то отрабатываем ее:С модулем ESP8266 вы можете использовать не только telnet-сервер. В примерах скетчей для этого модуля приводится множество интересных вариантов программирования этого модуля, которые вы можете добавить в свои разработки. Модуль ESP8266 может использоваться и без Iskra Neo, т.к. у него есть два цифровых порта, к которым можно подключить цифровые датчики или исполнительные устройства. Однако в связке с Arduio потенциал этого модуля гораздо шире. Желаем вам интересных открытий и проектов в мире "Интернет вещей"!P.S.: В наш лицей мы заказали несколько модулей ESP8266, чтобы дополнить ими наборы "ТеФТеЛька", которые используем на занятиях по микроэлектронике и робототехнике, чтобы знакомить наших лицеистов с технологией "Интернет вещей". В планах расширить занятия кейсами с использованием стороннего (бесплатного) интернет-сервера для IoT, например, ThingSpeak, а в идеале включение в программу проектов по "поднятию" школьниками собственных серверов для IoT, например, на базе Raspberry Pi. ESP8266 IoT Iskra Neo arduino freeduino интернет вещей микроэлектроника