Wifi термометр своими руками

Wi-Fi термометр на ESP8266 + DS18B20 всего за 4$

В последнее время всё большую популярность набирают Wi-Fi модули на основе ESP8266. Я тоже решил приобщиться к прекрасному, задумав реализовать термометр, отдающий данные по HTTP. Итак, поехали.

Hardware

Особенно приглянулись:
ESP-01 — удобен для прототипирования (есть разъем под макетку), но выведен всего 1 GPIO;
ESP-03 — много выводов, плюс керамическая антенна;
ESP-07 — то же самое что и ESP-03 + экран и разъем под внешнюю антенну.

DS18B20

Как вариант, можно купить уже с проводом и в герметичном корпусе.

Питание 3.3В
Необходим источник питания как минимум на 200мА.

USB-UART
Для прошивки и отладки. Я использовал преобразователь на основе CP2102

Подключение

Подключаем питание на ESP8266. На ногу CH_PD так же подаем плюс.
Внимание! У кого модули не ESP-01, необходимо подать GPIO15 — GND; GPIO2 -3.3V. У ESP-01 это уже сделано. RX и TX подключаем к USB-UART преобразователю для прошивки и отладки кода:

Подключаем DS18B20 к ESP8266. Если смотреть на маркировку: левая — земля, средняя — сигнал (GPIO12 на ESP-03), если у вас ESP-01, подключайте к GPIO0, правая — питание(3.3V). Между питанием и сигнальной линией желательно подключить резистор 4.7 кОм (у меня работает и с 10 кОм):

thingspeak.com

Регистрируемся на thingspeak.com, создаем канал, копируем оттуда 16-символьный ключ. Он нам пригодится для отправки данных о температуре в облако.

Прошивка NodeMCU

NodeMCU — это прошивка, позволяющая запускать Lua скрипты на ESP8266. Качаем последний NodeMCU Flasher и запускаем его.
Подключаем GPIO0 на землю. Выбираем нужный COM порт и скорость 74880 или 115200 (как я понимаю, у некоторых версий ESP8266 бутлоадер работает на 74880). Нажимаем Flash и передергиваем питание на ESP8266. Если прошивка не запускается, проверяем корректность подключения RX,TX, запустив PuTTY на скорости 74880. В момент подачи питания в консоль должна валится строка вроде «ets Jan 8 2013,rst cause:1, boot mode:(1,0)«. После корректной прошивки отключаем GPIO0 от земли:

Заливка Lua скриптов и запуск

Скачиваем и запускаем LuaLoader. Выбираем COM-порт и скорость 9600, если нет соединения — пробуем передернуть питание у модуля ESP8266. Проверяем соединение, нажав на кнопку ChipID. В консоль должен вывестись идентификатор чипа.

Заливаем нужные файлы (кнопка UploadFile):

1. ds18b20.lua — библиотека для взаимодействия с DS18B20;
2. httpsender.lua — наш скрипт, читающий данные температуры и отправляющий их на thingspeak.com. Не забываем заменить YOURAPIKEY на свой ключ.
gpio=6 — в случае подключения датчика к GPIO12, в случае GPIO0 — gpio=3 (таблица):

Читайте также:  Антипригарный спрей для гриля своими руками

3. init.lua — скрипт инициализирующий WiFi и запускающий httpsender.lua. Не забываем прописать свои SSID и пароль для WiFi:

Планы

Это первый опыт работы с ESP8266. В планах попробовать следующее:

1. Найти альтернативу thingspeak. Графики хочется двигать и масштабировать. Может, кто-то знает аналоги?
2. Датчик влажности (возможно, DHT22). Вроде уже есть в стандартных библиотеках.
3. Датчик CO2 на основе датчика K-30.
4. Управляемый рассвет без дополнительного контроллера, управление с ESP8266. Вдохновила публикация «Искусственный рассвет».

Источник

Создаем беспроводной термометр на Arduino

Узнайте, как использовать RF модуль 433 МГц совместно с ATMega328P-PU. В данной статье мы соберем схему из датчика DHT11 и радиочастотного передатчика. А также соберем приемное устройство с радиоприемником 433 МГц и LCD дисплеем.

Что нам потребуется

  • компьютер с установленной Arduino IDE (я использую версию 1.6.5);
  • библиотека VirtualWire (ссылка ниже);
  • Arduino Mega;
  • ATMega328P;
  • программатор AVR MKII ISP;
  • LCD дисплей;
  • датчик температуры и относительной влажности воздуха DHT11;
  • радиочастотные модули 433 МГц;
  • перемычки;
  • макетная плата;
  • компоненты из перечня элементов, приведенного ниже.

Введение

В данной статье я покажу вам, как собрать устройство, которое измеряет температуру и относительную влажность воздуха и посылает измеренные значения с помощью стандартного радиочастотного модуля 433 МГц. Датчик температуры и влажности, используемый в устройстве, – это DHT11.

Существует множество способов передачи небольшого объема данных с помощью Arduino или контроллеров ATMega. Один из них использует уже готовую библиотеку, подобную RCSwitch, Radiohead или VirtualWire. Кроме того, можно отправить необработанные данные с помощью встроенного в микроконтроллер модуля UART. Но использовать встроенный модуль UART не рекомендуется, так как приемник будет собирать и все помехи, и микроконтроллер будет работать не так, как предполагалось. В данной статье для передачи и приема данных я использую библиотеку VirtualWire. Эта библиотека работает с Arduino IDE 1.6.2 и 1.6.5.

Модуль передатчика 433 МГц, когда не передает данные, всё равно излучает радиочастотные колебания и передает шум. Он также может создавать помехи другим радиочастотным устройствам. Чтобы не допустить этого, я включаю его, когда необходимо передать данные, и выключаю его, когда передача закончена.

Аппаратная часть

Нам необходимы две структурные схемы. Одна для передающего устройства, вторая для приемного.

Передатчик

  • способ прошивки микроконтроллера → ISP;
  • датчик для измерения температуры и влажности → DHT11;
  • микроконтроллер для обработки данных → ATMega32p;
  • способ беспроводной передачи данных → радиочастотный модуль 433 МГц.

Приемник

  • способ приема радиосигнала → радиочастотный модуль 433 МГц;
  • способ обработки принятых данных → Arduino Mega;
  • способ отображения температуры и влажности → 16×2 LCD.

Принципиальные схемы

Передатчик

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

Читайте также:  Как сделать кованый забор своими руками

Приемник

Пожалуйста, обратите внимание, что приемник построен на базе платы Arduino Mega, которая не изображена на схеме. Для подключения платы Arduino Mega соедините с ней радиочастотный модуль и LCD дисплей согласно метка на схеме.

Перечень элементов

Передатчик

Приемник

Программа

Программа передатчика

Сперва рассмотрим программу передающей части:

Для передачи влажности и температуры в одном сообщении я соединяю их вместе. Сначала данные считываются в переменную как целые числа, потом целые числа преобразовываются в массив символов, а затем они соединяются друг с другом. На приемной стороне данные будут разделены на отдельные символы. Делая это, я ограничиваю себя двумя цифрами градусов. Если датчик находится в среде с температурой менее 10°C, я буду получать на дисплее символы мусора. Например, если температура составляет 20°C, а влажность – 45%, то будет передаваться сообщение 2045, и всё хорошо. Если температура равна 9°C, а влажность – 78%, то передастся сообщение 978x, где «x» – случайный символ. Поэтому, если вы будете собирать данный беспроводной термометр, я советую вам изменить программу для передачи правильных данных, когда температура будет меньше 10°C.

Программа приемника

Интересный способ использования библиотеки LiquidCrystal – это создание пользовательских символов. С помощью createChar я создал символ градусов. Таким же способом вы можете создать и свои собственные символы. Чтобы создать пользовательский символ или значок, вам необходимо объявить его, как массив из восьми байт, и «нарисовать», какие пиксели будут включены (1 – включен, 0 – выключен).

В функции setup() вы создаете его с помощью createChar . createChar принимает два аргумента: номер позиции для хранения символа и массив байт, в котором определено, какие пиксели будут отображаться. В нашем случае это lcd.createChar(1, degreesymbol) . Затем символ выводится на LCD с помощью функции lcd.write .

Заключение

В данной статье я использовал датчик температуры и влажности DHT11. Температура и влажность были преобразованы в массив символов, а затем переданы с помощью передатчика 433 МГц. На приемной стороне массив символов был разделен на пары и выведен на LCD. Для получения символа градусов я использовал функцию createChar библиотеки LiquidCrystal.

Загрузки

  • Библиотека VirtualWire версия 1.6 (библиотека для Arduino для организации связи через радиомодули с использованием амплитудной манипуляции).
  • Описание библиотеки VirtualWire.

Фото и видео

Передатчик

Приемник

Видео

Источник

Electric Imp — Делаем WiFi термометр

Многие из вас знакомы с анонсом Electric Imp, который не так давно был на хабре, кроме того уже начинают появляться первые впечатления от его использования. Поскольку это устройство мне показалось перспективным и довольно интересным, я при первом появлении в продаже версии developer edition заказал себе чтобы немного поиграться и оценить возможности.

Собираем

Сам Electric Imp на момент покупки стоил $29.95, но чтобы начать им пользоваться придется в добавок приобрести плату, которую оценили в $19.95 (сейчас цена уменьшилась до $12.95).

После прибытия комплекта вместо привычного “Hello, world!” моргания светодиодами решил сделать что-то более полезное. Немного пораскинув мозгами и просмотрев примеры остановился на датчике температуры. Порылся в закромах и нашел термистор 10КОм и DS18B20. С DS18B20 не сложилось так как в текущем API для Electric Imp отсутствует поддержка OneWire.
Схема подключения термистора очень простая

Схема подключения термистора (источник)

Читайте также:  Бюджетный дизайн интерьера своими руками

Чтобы избавится от проводов, подключил аккумулятор на 750mAh, при этом на самой плате нужно джампером выставить питание от батареи. Получилось очень компактное устройство.


Для визуального отображения температуры взял валявшийся без дела Raspberry Pi и 16х2 LCD индикатор из какого-то китайского набора.

Схема подключения LCD 16×2 индикатора к Raspberry Pi (источник)

Пришлось немного помучаться потому как мне попалась какая-то промежуточная ревизия малины и код с ходу не завелся. Оказалось что на плате Raspberry Pi поменяли назначение нескольких ног, одна из них как раз нужна была для подключения LCD.

Программируем

3.25В).
К сожалению текущие возможности выполнения HTTP запроса сильно ограничены, поэтому пришлось извратиться и паковать данные в JSON, который в свою очередь второй раз пакуется в JSON уже внутри HTTPRequest ноды.

Пожинаем плоды

Графики стабильно строятся, выглядят так:

Raspberry Pi выводит температуру

Для более наглядной демонстрации снял небольшое видео (рекомендую смотреть в 720p и во весь экран):

Энергосбережение

Imp может запускаться в трех режимах

Отключенный powersave mode (по умолчанию)

Включенный powersave mode

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

Глубокий сон

6мкА). Вывести из сна может либо предварительно взведенный таймер, или wake-up пин. Старт и подключение к WiFi сети занимает около 2с.

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

10 мА, что соответствует включенному powersave режиму.

В режиме глубокого сна в качестве датчика температуры Imp трудится уже месяц, и напряжение упало с 4.2 до 3.68, то есть LiPo батареи на 750mAh должно хватить приблизительно на полтора месяца, что не может не радовать.

Планы

Добавить честный измеритель напряжения батареи (что особо актуально для LiPo батарей), прикрутить солнечную батарею и, пока особых планов нет, использовать как местный датчик температуры в одном из энтузиастских погодных проектов. Также возможно добавлю счетчик Гейгера.

Вывод

Устройство вышло очень интересным и перспективным, но на данный момент сильно ограничивает область применения жесткая привязка к собственным серверам Electric Imp и скудность API. Если предположить что эти недостатки будут исправлены, то Imp идеально подходит для применения совместно с различными сенсорами в системах умного дома.

Источник

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