Оглавление:

Монитор температуры и влажности: 6 шагов (с изображениями)
Монитор температуры и влажности: 6 шагов (с изображениями)

Видео: Монитор температуры и влажности: 6 шагов (с изображениями)

Видео: Монитор температуры и влажности: 6 шагов (с изображениями)
Видео: E-ink датчик температуры и влажности Xiaomi Digital Temperature and Humidity Monitor 2024, Июль
Anonim
Монитор температуры и влажности
Монитор температуры и влажности
Монитор температуры и влажности
Монитор температуры и влажности

В этом руководстве я покажу вам, как сделать собственный монитор температуры и влажности для вашей гостиной. Устройство также имеет возможности Wi-Fi с целью регистрации данных на удаленном сервере (например, Raspberry Pi) и последующего доступа к ним через простой веб-интерфейс.

Основными частями устройства являются микроконтроллер ESP8266, датчик температуры и влажности DHT11 и жидкокристаллический дисплей 16x4. Проект имеет полностью открытый исходный код, поэтому не стесняйтесь загружать файлы схемы, макета платы и дизайна корпуса и вносить любые изменения, которые вам нравятся.

Шаг 1. Инструменты и детали

Инструменты и запчасти
Инструменты и запчасти
Инструменты и запчасти
Инструменты и запчасти
Инструменты и запчасти
Инструменты и запчасти
Инструменты и запчасти
Инструменты и запчасти

Для сборки монитора вам понадобятся следующие детали:

1 x ESP-12F [2 €] - Насколько я знаю, ESP-12E и ESP-12F в основном идентичны, с той разницей, что у ESP-12F антенна получше.

1 датчик температуры и влажности DHT11 [0,80 €] - DHT22 также будет работать, но необходимо будет внести некоторые изменения в 3D-модель корпуса, DHT22 также немного дороже.

1 x 16x4 символьный ЖК-дисплей 5 В [3,30 €] - Да, вам понадобится ЖК-дисплей на 5 В, поскольку печатная плата спроектирована таким образом, что ЖК-дисплей будет питаться напрямую от 5 В, а не от регулятора напряжения. Это было сделано для того, чтобы снизить нагрузку на регулятор напряжения, но также и потому, что дисплеи на 5 В обычно дешевле. Но не волнуйтесь, даже несмотря на то, что ESP8266 работает при напряжении 3,3 В, он все равно будет работать нормально.

1 x LD1117V33 SMD стабилизатор напряжения, также известный как LD33 (пакет SOT223) [0,80 €]

Керамический конденсатор поверхностного монтажа 100 нФ (упаковка 0603) - 1 шт.

1 х 10 мкФ танталовый конденсатор SMD (упаковка 3528)

1 резистор SMD 10 кОм (упаковка 0805)

1 х 10K триммерный горшок (сквозное отверстие)

1 резистор SMD 47 Ом (упаковка 0805) - предназначен только для ограничения тока, идущего на подсветку ЖК-дисплея. Не стесняйтесь экспериментировать с различными значениями сопротивления и выбирать интенсивность, которую вы предпочитаете.

1 x SMD переключатель мгновенного действия [0,80 €] - я использовал именно его, но вы можете использовать любой переключатель мгновенного действия с той же площадью основания. Я также смог найти те же переключатели на eBay за меньшую цену, купив более одного.

Разъем постоянного тока 1 x 5.5x2.1 мм (для монтажа на панели) [0,50 €] - Тот, который я использовал, имеет диаметр выреза в панели 8 мм и длину 9 мм. Его можно легко найти на eBay, выполнив поиск по запросу «Panel Mount DC Jack» (см. Прилагаемое изображение).

1 40-контактный штекерный разъем 2,54 мм (100 мил) (сквозное отверстие)

1 x 2,54 мм (100 мил) 40-контактный обработанный разъем с внутренней резьбой (сквозное отверстие)

Перемычка 1 x 2,54 мм (100 мил) - такая же, как и на материнских платах компьютеров.

4 болта M3 8 мм

Резьбовые вставки 4 x M3 4x4 мм - их можно легко найти, выполнив поиск по запросу «M3 Press-In Brass Copper Inserts» на eBay (см. Прикрепленное изображение).

4 болта M2 12 мм

4 гайки M2

1 x USB-кабель типа A на 5,5x2,1 мм разъем постоянного тока [1,5 €] - Это позволит заряжать ваше устройство либо от стандартного зарядного устройства для телефона, либо практически от любого компьютера с USB-портом. Устройство потребляет только 300 мА в худшем случае и 250 мА в среднем, поэтому подойдет даже порт USB 2.0.

1 x PCB - Толщина платы не критична, поэтому просто выберите 1,6 мм, что обычно является самым дешевым вариантом для большинства производителей печатных плат.

3 куска многожильного провода (около 60 мм каждый)

3 куска термоусадочной трубки (около 10 мм каждая)

И следующие инструменты:

Паяльник

Преобразователь USB в последовательный - он понадобится вам для программирования ESP8266 на плате.

Отвертка Phillips и / или шестигранный ключ - в зависимости от типа винтов, которые вы будете использовать.

3D-принтер. Если у вас нет доступа к 3D-принтеру, вы всегда можете использовать обычную пластиковую коробку для проектов и делать вырезы самостоятельно с помощью Dremel. Минимальные внутренние размеры такой коробки должны составлять 24 мм в высоту, 94 мм в длину и 66 мм в ширину. Вам также понадобятся стойки M2 8 мм для крепления ЖК-дисплея.

Dremel - требуется только в том случае, если вы не выбираете корпус, напечатанный на 3D-принтере.

Шаг 2: Изготовление печатной платы

Изготовление печатной платы
Изготовление печатной платы
Изготовление печатной платы
Изготовление печатной платы
Изготовление печатной платы
Изготовление печатной платы

Первым делом нужно сделать печатную плату. Вы можете сделать это самостоятельно или просто зайдя на сайт любимого производителя печатных плат и разместив заказ. Если вы не планируете вносить какие-либо изменения в макет платы, вы можете просто взять ZIP-файл, содержащий файлы gerber, прикрепленные на этом этапе, и отправить его непосредственно производителю. Если вы хотите внести изменения, файлы схемы и макета платы KiCAD можно найти здесь.

После того, как вы добрались до плат, самое время припаять компоненты. Это должно быть довольно просто, но следует отметить несколько моментов. Во-первых, пока не приступайте к пайке печатной платы на разъеме ЖК-дисплея, это нужно будет сделать во время окончательной сборки из-за того, как был спроектирован корпус. Если вы делаете свой собственный корпус, не стесняйтесь игнорировать этот совет.

Разъем U3 - это то место, где будет подключен датчик DHT11. В идеале для этой цели вам следует использовать обработанную под углом 90 ° головку с внутренней резьбой. Но если вы, как я, не можете его найти, просто возьмите прямую и сами согните. Если вы сделаете это позже, выводы DHT11 также будут немного короче, поэтому вам придется припаять некоторые удлинители. Расстояние между наконечником штифта и датчиком после подключения должно составлять примерно 5 мм.

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

Шаг 3: Изготовление корпуса

Изготовление корпуса
Изготовление корпуса
Изготовление корпуса
Изготовление корпуса
Изготовление корпуса
Изготовление корпуса
Изготовление корпуса
Изготовление корпуса

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

Обе части могут быть напечатаны с помощью стандартного сопла 0,4 мм при высоте слоя 0,2 мм, в моем случае время печати составляло около 4 часов для обеих частей вместе взятых. Крышка не требует каких-либо опор для основной части корпуса, но требует, в основном, для части под резьбовыми патрубками. После печати будьте очень осторожны с удалением опор, мне удалось сломать одну из стоек для ЖК-дисплея, и мне пришлось приклеить ее обратно с помощью суперклея.

Корпус разработан на FreeCAD, поэтому, если вы хотите внести какие-либо изменения, это должно быть довольно просто. Файлы STL для печати корпуса, а также файлы дизайна FreeCAD можно найти на Thingiverse.

Шаг 4: Сборка монитора

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

Изображение
Изображение

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

Изображение
Изображение

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

Изображение
Изображение

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

Изображение
Изображение

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

Изображение
Изображение

Шаг 5: Настройка сервера

Настройка сервера
Настройка сервера

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

Установка Apache, MySQL (MariaDB) и PHP

Сначала нам нужно настроить LAMP, или, другими словами, установить Apache, MySQL (MariaDB) и PHP на сервере. Для этого вам нужно будет использовать менеджер пакетов вашего дистрибутива, в качестве примера я буду использовать apt, который является менеджером пакетов, используемым практически любым дистрибутивом на основе Debian, включая Raspbian.

sudo apt update

sudo apt установить apache2 mysql-server mysql-client php libapache2-mod-php php-mysql

После этого, если вы поместите IP-адрес своего сервера в адресную строку браузера, вы сможете увидеть страницу Apache по умолчанию.

Настройка базы данных

Теперь нам нужна база данных для записи данных. Сначала подключитесь к MySQL как root, запустив, sudo mysql

И создайте базу данных и пользователя с доступом к ней следующим образом:

СОЗДАТЬ БАЗУ ДАННЫХ `сенсоры`

ИСПОЛЬЗУЙТЕ "датчики"; CREATE TABLE `temperature` (` id` bigint (20) NOT NULL AUTO_INCREMENT, `client_id` smallint (6) NOT NULL,` value` smallint (6) NOT NULL, timestamp `created_at` NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (` id`)) ДВИГАТЕЛЬ = InnoDB; СОЗДАТЬ ТАБЛИЦУ `влажность` (` id` bigint (20) NOT NULL AUTO_INCREMENT, `client_id` smallint (6) NOT NULL,` value` smallint (6) NOT NULL, отметка времени `created_at` NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (` id`)) ДВИГАТЕЛЬ = InnoDB; СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ '[имя пользователя]' @ 'localhost' ИДЕНТИФИЦИРОВАНО '[паролем]'; ПРЕДОСТАВЛЯЙТЕ ВСЕ ПРИВИЛЕГИИ НА 'сенсоры'. * TO 'сенсоры' @ 'localhost'; ВЫХОД

Обязательно замените [имя пользователя] и [пароль] фактическим именем пользователя и паролем пользователя MySQL, который вам нравится. Также запишите их, потому что они понадобятся вам на следующем шаге.

Настройка скриптов логирования и веб-интерфейса

Перейдите в каталог / var / www / html, который является корнем документов виртуального хоста Apache по умолчанию, удалите HTML-файл, содержащий веб-страницу по умолчанию, и загрузите внутри него сценарии ведения журнала и веб-интерфейса.

cd / var / www / html

sudo rm index.html sudo wget https://raw.githubusercontent.com/magkopian/esp-arduino-temp-monitor/master/server/log.php sudo wget https://raw.githubusercontent.com/magkopian/esp- Ардуино-темп-монитор / мастер / сервер / index.php

Теперь отредактируйте сценарий регистрации с помощью nano, sudo nano log.php

Вам нужно будет заменить [имя пользователя] и [пароль] именем пользователя и паролем для пользователя MySQL, созданного вами на предыдущем шаге. Также замените [клиентский ключ] уникальной строкой и запишите ее. Он будет использоваться в качестве пароля, чтобы монитор мог аутентифицироваться на сервере.

Наконец, отредактируйте index.php с помощью nano, sudo nano index.php

и замените [имя пользователя] и [пароль] именем пользователя и паролем для пользователя MySQL, как вы это делали со сценарием регистрации.

Настройка HTTPS (необязательно)

Это может быть необязательно, но если соединение между ESP8266 и сервером осуществляется через Интернет, настоятельно рекомендуется использовать шифрование.

К сожалению, вы не можете просто использовать что-то вроде Let's Encrypt для получения сертификата. Это потому, что, по крайней мере, на момент написания, клиентская библиотека HTTP для ESP8266 по-прежнему требует, чтобы отпечаток сертификата был предоставлен в качестве второго аргумента при вызове http.begin (). Это означает, что если вы используете что-то вроде Let's Encrypt, вам придется каждые 3 месяца перепрограммировать микропрограмму на чип, чтобы обновлять отпечаток сертификата после каждого обновления.

Один из способов обойти это - создать самозаверяющий сертификат, срок действия которого истекает через очень долгое время (например, 10 лет), и сохранить сценарий ведения журнала на собственном виртуальном хосте с собственным поддоменом. Таким образом, у вас может быть веб-интерфейс для доступа к данным на отдельном поддомене, который будет использовать соответствующий сертификат от доверенного центра. Использование самозаверяющего сертификата в этом случае не является проблемой безопасности, так как отпечаток сертификата, который однозначно его идентифицирует, будет жестко закодирован в прошивке, и сертификат будет использоваться только ESP8266.

Прежде чем мы начнем, я предполагаю, что у вас уже есть доменное имя и вы можете создавать на нем поддомены. Итак, чтобы создать сертификат, срок действия которого истекает через 10 лет, выполните следующую команду и ответьте на вопросы.

sudo openssl req -x509 -nodes -days 3650 -newkey rsa: 2048 -keyout /etc/ssl/private/sensors.key -out /etc/ssl/certs/sensors.crt

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

Затем создайте новую конфигурацию виртуального хоста, sudo nano /etc/apache2/sites-available/sensors-ssl.conf

со следующим содержанием, ServerName [субдомен] DocumentRoot / var / www / sizes SSLEngine ON SSLCertificateKeyFile /etc/ssl/private/sensors.key SSLCertificateFile /etc/ssl/certs/sensors.crt Options + FollowSymlinks -Indexes AllowOverride All ErrorLog $ {APDACHE_ Sensor error-ssl.log CustomLog $ {APACHE_LOG_DIR} /sensors-access-ssl.log в сочетании

Опять же, не забудьте заменить [субдомен] тем же субдоменом, который вы использовали с сертификатом. На этом этапе вам нужно будет отключить виртуальный хост Apache по умолчанию, sudo a2dissite 000-default

изменить имя корневого каталога документов, Судо мв / вар / www / html / вар / www / датчики

и, наконец, включите новый виртуальный хост и перезапустите Apache, sudo a2ensite датчики-ssl

sudo systemctl перезапустить apache2

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

openssl x509 -noout -fingerprint -sha1 -inform pem -in /etc/ssl/certs/sensors.crt

Http.begin () ожидает, что разделители между байтами отпечатка пальца будут пробелами, поэтому вам нужно будет заменить двоеточия пробелами, прежде чем использовать его в своем коде.

Теперь, если вы не хотите использовать самозаверяющий сертификат для веб-интерфейса, настройте новый субдомен и создайте новую конфигурацию виртуального хоста, sudo nano /etc/apache2/sites-available/sensors-web-ssl.conf

со следующим содержанием, ServerName [субдомен] DocumentRoot / var / www / sizes #SSLEngine ON #SSLCertificateFile /etc/letsencrypt/live/[subdomain]/cert.pem #SSLCertificateKeyFile /etc/letsencrypt/live/[subdomain] / etc /letsencrypt/live/[subdomain]/chain.pem Options + FollowSymlinks -Indexes AllowOverride All ErrorLog $ {APACHE_LOG_DIR} /sensors-web-error-ssl.log CustomLog $ {APACHE_LOG_DIR} /sensors-web-access-ssl-ssl

Обязательно замените [субдомен] субдоменом, который вы настроили для веб-интерфейса. Затем включите новый виртуальный хост, перезапустите Apache, установите certbot и получите сертификат для нового поддомена от Let's Encrypt, sudo a2ensite датчики-web-ssl

sudo systemctl restart apache2 sudo apt update sudo apt install certbot sudo certbot certonly --apache -d [субдомен]

После получения сертификата снова отредактируйте конфигурацию виртуального хоста, чтобы раскомментировать строки SSLEngine, SSLCertificateFile, SSLCertificateKeyFile и SSLCertificateChainFile, и перезапустите Apache.

И теперь вы можете использовать первый поддомен, который использует самозаверяющий сертификат для отправки данных с ESP8266 на сервер, а второй - для доступа к веб-интерфейсу из вашего браузера. Certbot также позаботится об автоматическом обновлении вашего сертификата Let's Encrypt каждые 3 месяца, используя таймер systemd, который должен быть включен по умолчанию.

Шаг 6: Программирование ESP8266

Программирование ESP8266
Программирование ESP8266

Наконец, осталось только загрузить прошивку на микроконтроллер. Для этого загрузите отсюда исходный код прошивки и откройте его с помощью Arduino IDE. Вам нужно будет заменить [SSID] и [Password] фактическими SSID и паролем вашей сети Wi-Fi. Вам также необходимо заменить [Client ID] и [Client Key] в вызове функции sprintf на те, которые вы использовали в сценарии PHP на сервере. Наконец, вам нужно будет заменить [Host] доменным именем или IP-адресом сервера. Если вы используете HTTPS, вам также потребуется указать отпечаток вашего сертификата в качестве второго аргумента при вызове функции http.begin (). Я объяснил, как получить отпечаток сертификата, в разделе «Настройка HTTPS» на предыдущем шаге.

Затем, если вы еще этого не сделали, вам нужно будет установить основной пакет сообщества ESP8266 с помощью Board Manager IDE Arduino. Как только это будет сделано, выберите NodeMCU 1.0 (модуль ESP-12E) в меню плат. Затем вам необходимо установить библиотеку SimpleDHT с помощью диспетчера библиотек. Наконец, нажмите кнопку «Проверить» в верхнем левом углу окна IDE, чтобы убедиться, что код компилируется без ошибок.

И вот, наконец, пора записать прошивку на микроконтроллер. Для этого переместите перемычку JP1 вправо, чтобы GPIO0 ESP8266 был подключен к земле, что позволит перейти в режим программирования. Затем подключите преобразователь USB к последовательному порту с помощью перемычек к программному заголовку, обозначенному как P1. Контакт 1 заголовка программирования является заземлением, контакт 2 - приемным контактом ESP8266, а контакт 3 - передающим. Вам нужен прием ESP8266 для передачи вашего USB-последовательного преобразователя, передача для приема и, конечно же, земля-земля.

Наконец, подайте питание на устройство напряжением 5 В с помощью кабеля с разъемом USB на постоянный ток и подключите преобразователь USB к последовательному порту к компьютеру. Теперь вы должны увидеть виртуальный последовательный порт, к которому подключен ESP8266, как только вы откроете меню инструментов в своей среде IDE. Теперь просто нажмите кнопку «Загрузить» и готово! Если все прошло, как ожидалось, вы сможете увидеть показания температуры и влажности на ЖК-дисплее устройства. После того, как ESP8266 подключится к вашей сети и начнет обмениваться данными с сервером, текущая дата и время также должны отображаться на дисплее.

Через несколько часов, когда сервер соберет достаточный объем данных, вы сможете увидеть графики температуры и влажности, посетив http (s): // [host] /index.php?client_id= [client id]. Где [host] - это либо IP-адрес вашего сервера, либо субдомен, который вы используете для веб-интерфейса, а [client id] - идентификатор клиента устройства, который, если вы оставите его значение по умолчанию, должен быть 1.

Рекомендуемые: