Wifi датчики своими руками

Как сделать дешевые WiFi датчики температуры/влажности

О чем этот текст

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

Если все делать самому, то стоимость устройства получается меньше 400 рублей (без учета usb провода и блока питания).

В этом тексте я описываю как аппаратную часть устройства, так и программную.

В итоге у меня получилось работающее решение. Данные собираются и можно посмотреть на график с историей, но все можно сильно улучшить.

История

У меня есть несколько YouTube каналов которые я иногда смотрю. Один из них — это Chillichump. Человек живет недалеко от Лондона и у себя в садике в парнике выращивает острые перцы, а потом из них делает соусы. Канал отличный, автор явно фанатеет от всего этого, рассказывает он интересно, видео хорошего качества.

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

В начале 2019 года он выпустил видео о том как просто собрать датчик температуры и влажности который может отправлять данные на сервер. У него достаточно технологическая теплица: есть датчики, камеры, система автоматического полива. Всем этим он может управлять удаленно.

Вот его видео как собрать датчик температуры/влажности — https://www.youtube.com/watch?v=yqmOp7m4szA («Easy web-enabled Temperature and Humidity monitoring for your greenhouse»).

Судя по видео — все очень просто. Берется несколько деталей, все они спаиваются и получается работающая конструкция которая умеет отправлять данные на сервер по WiFi.

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

Так что я решил повторить то что описано в видео, спаять датчики и собирать с них данные.

Покупка устройств

Автор Chillichump в своем видео использует датчик AM2302 и Arduino совместимое устройство Wemos D1 Mini.

Я заказал на AliExpress штуки которые очень похожи на то что использовал автор:

  • Датчик — https://s.click.aliexpress.com/e/_d8Cfw2F (покупал за $2.44 за штуку)
  • Компьютер на базе ESP8266 со встроенным WiFi — https://s.click.aliexpress.com/e/_dVV7rc5 (покупал за $2.35 за штуку)

Заказал и оплатил на сайте 13 августа, а 2 сентября я забрал посылку с почты (вообще пришло чуть раньше). Буду считать что пришло за 20 дней.

Я не заказывал, но вообще для сборки датчика нужны еще компоненты:

  • Резистор на 10 кОм
  • Провод Micro USB
  • USB блок питания

И еще нужны расходники — монтажные провода, припой. Из инструментов нужен как минимум паяльник и кусачки.

Схема подключения

У датчики AM2302 4 ноги, из которых нужно 3:

У D1 Mini куча разъемов , в это проекте используются 3:

Все подключается очень просто — питание к питанию, земля к земле, данные к GPIO5, но еще дополнительно между pin1 и pin2 датчика нужно подключить резистор на 10 кОм.

Для начала я все это быстро подключил на макетной плате:

Первая версия софта

На устройстве Wemos D1 Mini есть разъем Micro USB. Через него он получает питание.

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

Для написания кода и его заливки на устройство используется бесплатная программа. Arduino IDE.

В Arduino IDE нужно выбрать плату «LOLIN(WEMOS) D1 R2 & mini».

Читайте также:  Вело скутер своими руками

Tools -> Board»/>

А чтобы эта плата там появилась нужно в настройках указать «Additional Boards Manager URLs»:

А еще нужно добавить в Arduino IDE библиотеку для работы с датчиком «DHT sensor library». Вот ссылка на гитхаб https://github.com/adafruit/DHT-sensor-library.

После того как в Arduino IDE добавлена плата и подключена библиотека — можно написать код который будет читать данные с датчика и отображать его. Тут еще нет никакого взаимодействия по WiFi, данные отправляются на компьютер по USB.

Компилируем и загружаем код на устройство, включаем Serial Monitor в Arduino IDE и видим что каждые 1.5 секунды на экране появляется числа с температурой и влажностью.

Сборка устройств

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

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

Я снимал видео как я паял, потом ускорил это видео и выложил на YouTube. Час пайки за одну минуту — https://www.youtube.com/watch?v=w4MWFH6uB1g

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

Отправка данных по WiFi на сервер

Итак, есть спаянные устройства. Есть код который умеет читать данные с датчика и выводить его на компьютере через USB.

Но идея заключается в том чтобы датчик был автономным. Чтобы не нужно было его подключать к компьютеру по USB. Нужно чтобы USB провод от датчика вставляется в USB блок питания, блок питания — в розетку. А датчик подключался к WiFi и отправлял данные на сервер.

Через некоторое время чтения разной документации и примеров с кодом я написал программу в Arduino IDE чтобы этот датчик подключался к WiFi и отправлял данные на сервер с помощью метода POST протокола HTTP.

B теле запроса отправляется json вида

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

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

В коде нужно заменить строки «my_wifi_name», «my_wifi_password», «http://example.com/endpoint», нужно указать реальные данные.

Я проверил работу этого кода в трех ситуациях:

  • Если устройство выключится а потом включится, (например, выключали электричество), то после включения данные опять пойдут.
  • Если сервер стал недоступен, а потом все починилось, то устройство продолжит отправлять данные
  • Если WiFi стал недоступен, а потом вернулся, то устройство само переподключится

Все эти 3 нештатные ситуации устройство отрабатывает нормально. Как только проблема пропадает, то все само начинает дальше работать. Устройство не нужно перегружать или еще что-то с ним делать.

Серверная часть

Итак, есть датчики которые умеют отправлять данные с помощью метода POST протокола HTTP.

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

Для этих целей я написал маленький сервер, и завернул его в docker.

Вот пример отправки данных на сервер с помощью «curl»:

Датчик отправляет только MAC адрес, значение температуры и значение влажности. Сервер принимает эти значения, дописывает к ним текущую дату и время и сохраняет эти данные в файл, а еще записывает все это в sqlite базу данных.

Так же в этом репозитории есть еще и микросервис который визуализирует данные с помощью библиотеки Cubism.js.

Вот небольшое видео как меняются данные если нагревать датчик зажигалкой. Для этого видео я поправил код на датчике чтобы он отправлял данные не каждые 30 секунд, а каждые 2 секунды. https://twitter.com/bessarabov/status/1177932537601183752.

Читайте также:  Ванна с шампанским своими руками

Если включить и положить все датчики рядом то видно что данные с них различаются:

Запуск в работу

Итого. У меня есть железки — датчики. На них залита программа которая читает значения и отправляет их на сервер. И есть сервер который получает данные и сохраняет их.

Осталось только установить эти датчики:

Сервер сохраняет данные в файлы. Я взял Jupyter и написал код чтобы нарисовать графики температуры влажности:

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

В качестве эксперимента я поднял у себя Home Assistant и настроил его чтобы он получал данные с этих сенсоров. Это оказалось очень несложно сделать. Вот пример настроек для файла configuration.yaml:

Резюме

Получилось отлично. Сенсор очень просто сделать. Компоненты дешевые, работает отлично. Код программы доступен. Сенсор можно заинтегрировать куда угодно.

Но мое решение больше похоже на прототип чем на настоящий продукт. Вот несколько вещей что хотелось бы сделать иначе:

  • Устройство — это микросхема из которой торчат провода. Нужно все это облагородить. Запихнуть все это в красивый корпус.
  • Для того чтобы настроить подключение к WiFi нужно подключить устройство по USB к ноутбуку, в код программы вставить название точки доступа и пароль, скомпилировать и залить программу на устройство. Хотелось бы иметь возможность настраивать устройство без необходимости подключать к ноутбуку со специальным софтом. Например, устройство могло бы работать так. Дополнительно на устройстве есть кнопка. Зажимаешь ее на 5 секунд, устройство переходит в режим настройки. Оно становится WiFi точкой доступа к которой можно подключиться. Имя точки доступа — это ее MAC адрес (написан на устройстве). Пароль — серийный номер (тоже написан на устройстве). Подключился к этой точке, заходишь на адрес 192.168.1.1 — там простой веб интерфейс, где выставляешь настройки. Сохраняешь — устройство переходит в рабочий режим, подключается к указанной точке и два раза в минуту отправляет данные. Возможно еще было бы неплохо иметь на устройстве светодиод, разные цвета и разные паттерны моргания означают разные ошибки/состояния.
  • Работа устройства зависит от доступности сервера на которое устройство отправляет данные. Если к этому серверу нельзя подключиться (например, нет интернета), то замеры теряются. Возможно если нет доступа до сервера, то имеет смысл сохранять замеры в специальный буфер, а когда доступ к серверу возобновляется, то отправятся все сохраненные замеры.
  • Протокол взаимодействия с сервером — HTTP и все работает без необходимости указывать логин/пароль или токен. Возможно что стоит использовать специальный протокол MQTT, но если продолжать использовать HTTP, то нужно переходить на https с авторизацией по токену. Так что тут очень актуальна шутка что в слове IoT буква S означает Security.

Источник

Беспроводной датчик протечки воды на nRF52832, DIY проект

Приветствую всех читателей раздела «DIY или Сделай сам» на Habr! Сегодня хочу рассказать об очередном своем проекте, эта статья будет о датчике протечки воды на батарейном питании. Как и в предыдущих проектах, это устройство работает на микроконтроллере nRF52832. Есть три версии этого датчика, во всех трех версиях используются готовые модули с nRF52832, в этой статье речь пойдет о средней версии в котором используется модуль YJ-17103 от HOLYIOT.

Детектор жидкости реализован на микросхеме SN74LVC1G00 | Даташит. Кратко опишу схемное решение и принцип работы. Электрод №1 датчика подключен к земле, электрод №2 датчика подключен к ножкам A и В микросхемы SN74LVC1G00 через резистор 100Oм, так же к этой линии подведено 3.3в через резистор 1М, так же в схему добавлена емкость. Когда контакта с жидкостью нет на ножках микросхемы A и В логическая единица, соответственно на ножке Y подключенной к ножке МК (програмно настроенной на детектирование прерывания через встроенный компоратор) логический ноль. Как только произойдет контакт с жидкостью и на ножках A и B будет низкий уровень, то сигнал на ножке Y микросхемы SN74LVC1G00 так же инвертируется, что вызовет прерывание, которое в свою очередь выведет МК из сна. В дальнейшем микросхема SN74LVC1G00 возможно будет заменена на микросхему SN74LVC1G14 | Даташит, а возможно и не будет :). Детектирование жидкости с ножки МК через встроенный компоратор не планируется.

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

Как и все другием мои проекты, этот тоже является Arduino проектом и как и все проекты за последний год(примерно) этот так же сделан под проект Mysensors. Как и в других своих статьях, немного затрону тему Mysensors и в этой статье.

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

Поддерживаемые аппаратные платформы: Linux / Raspberry Pi / Orange Pi | ATMega 328P | ESP8266 | ESP32 | nRF5x(Cortex M0, M4) | Atmel SAMD, используемое в Arduino Zero (Cortex M0) | Teensy3(MK66FX1M0VMD18) | STM32F1.

Поддерживаемые радиопередатчики: NRF24L01 | RFM69 | RFM95 (LoRa) | nRF5x

Поддерживаемый проводной тип связи: RS485

Поддерживаемые типы связи между гейтом и контроллером: MQTT | Serial USB | WiFi | Ethernet | GSM

Вернемся к датчику протечки. Устройство работает от батареек CR2430, CR2450 или CR2477. Потребление во сне составляет менее 3мкА. Скорость передачи — 250Kbps, 10-15ms. Энергопотребление в момент передачи составляет не более 8мА. Теоретически срок работы на одной батарейке примерно равен сроку саморазряда батарейки. На практике все конечно менее радужно, так как есть процедура регистрации, презентации, периодическая отправка уровня заряда, так что срок работы от одной батарейки скорее ближе к значению — срок саморазряда/2 :). Питание осуществляется напрямую от батарейки, контроль уровня заряда батарейки производится непосредственно с пина VDD. В датчике установлен RGB LED для индикации регистрации датчика в сети, для индикации сервисных режимов и для индикации детектирования протечки. Естественно светодиод может не использоваться вообще или использоваться частично.

Плату устройства была сделана для дальнейшего ее изготовления по методу ЛУТ. Поэтому из нюансов такого варианта это увеличенная ширина трасс, увеличенные расстояния между трассами, увеличенные площадки под межслойные переходы(для более удобного сверления отверстий), отсутствие заливки пустых областей из-за небольшой площади платы. Позже был сделан вариант для заказа на производстве.

Корпус устройства был спроектирован из двух частей. Верхняя крышка с местами для крепления платы и нижняя часть(ванночка) с 2 отверстиями под стальные контактные винты(герметизация возможна силиконовым герметиком под шляпку винтов или не требуется) и двумя трубками под кнопки (сброс и режимы) на плате. Печать выполнялась на SLA 3D принтере ANICUBIC PHOTON. После печати была выполнена обработка наждачной бумагой 320 и 1000 для подгонки стыков крышки и дна корпуса.

nRF52832 программно настроен на работу в режиме пониженного энергопотребления (DC-DC Mode), Вывод МК из сна по сигналу от микросхемы SN74LVC1G00 настроен через внутренний компаратор LPCOMP. Устройство так же имеет тактовую кнопку для реализации сервисных режимов, таких как привязка устройства, обнуление устройства и т.п. Кнопка заведена на ту же ножку МК что и детектор протечки. Обе линии разделены диодами Шоттки. Микросхема SN74LVC1G00 в режиме мониторинга ничего не потребляет. Управление питанием микросхемы осуществляется с ножки МК.

На данный момент почти закончена разработка контроллера протечки воды, с которым данные датчики должны работать.

GitHub проекта
(гербер файлы, софт, модели корпуса, список компонентов)

Место где всегда с радостью помогут всем кто хочется познакомиться с MYSENSORS (установка плат, работа с микроконтроллерами nRF5 в среде Arduino IDE, советы по работе с протоколом mysensors, обсуждение новых авторских проектов — телеграмм чат @mysensors_rus.

Источник

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