Índice:

Monitor de temperatura e umidade: 6 etapas (com fotos)
Monitor de temperatura e umidade: 6 etapas (com fotos)

Vídeo: Monitor de temperatura e umidade: 6 etapas (com fotos)

Vídeo: Monitor de temperatura e umidade: 6 etapas (com fotos)
Vídeo: Monitor de temperatura e umidade com ESP8266 e interface gráfica em python 2024, Julho
Anonim
Monitor de temperatura e umidade
Monitor de temperatura e umidade
Monitor de temperatura e umidade
Monitor de temperatura e umidade

Neste instrutível, vou mostrar a você como fazer seu próprio monitor de temperatura e umidade para sua sala. O dispositivo também possui recursos de WiFi, com a finalidade de registrar os dados em um servidor remoto (por exemplo, um Raspberry Pi) e acessá-lo posteriormente por meio de uma interface web simples.

As partes principais do dispositivo são um microcontrolador ESP8266, um sensor de temperatura e umidade DHT11 e um LCD de 16x4 caracteres. O projeto é totalmente de código aberto, portanto, fique à vontade para baixar o esquema, o layout da placa e os arquivos de design do gabinete e fazer as alterações que desejar.

Etapa 1: Ferramentas e peças

Ferramentas e peças
Ferramentas e peças
Ferramentas e peças
Ferramentas e peças
Ferramentas e peças
Ferramentas e peças
Ferramentas e peças
Ferramentas e peças

Para construir o monitor, você precisará das seguintes peças:

1 x ESP-12F [2 €] - Tanto quanto sei ESP-12E e ESP-12F são basicamente idênticos, com a diferença de que ESP-12F tem uma antena melhor.

1 x Sensor de Temperatura e Umidade DHT11 [0,80 €] - O DHT22 também vai funcionar, mas algumas mudanças precisarão ser feitas no modelo 3D do gabinete, o DHT22 também é um pouco mais caro.

1 x 16x4 Character LCD 5V [3,30 €] - Sim, você vai precisar de um 5V porque o PCB foi projetado para que o LCD seja alimentado diretamente de 5V ao invés do regulador de tensão. Isso foi feito para reduzir a carga no regulador de tensão, mas também porque telas de 5 V tendem a ser mais baratas. Mas não se preocupe, embora o ESP8266 opere a 3,3 V ele ainda funcionará bem.

1 regulador de tensão SMD LD1117V33, também conhecido como LD33 (pacote SOT223) [0,80 €]

1 x 100nF Capacitor SMD de cerâmica (pacote 0603)

1 x 10uF Tântalo SMD Capacitor (pacote 3528)

1 x 10K SMD Resistor (pacote 0805)

1 x 10K Trimmer Pot (através do orifício)

1 x Resistor SMD de 47Ω (pacote 0805) - Isso é apenas para limitar a corrente que vai para a luz de fundo do LCD. Sinta-se à vontade para experimentar diferentes valores de resistência e escolher a intensidade de sua preferência.

1 x interruptor momentâneo SMD [0,80 €] - O particular que usei é este, mas você pode usar qualquer interruptor momentâneo que quiser com a mesma pegada. Também consegui encontrar os mesmos switches no eBay por menos, obtendo mais de um.

1 x 5.5x2.1mm DC Jack (montagem em painel) [0,50 €] - O que usei tem um diâmetro de recorte de painel de 8 mm e um comprimento de 9 mm. Ele pode ser facilmente encontrado no eBay procurando por "Panel Mount DC Jack" (veja a imagem anexa).

1 x 2,54 mm (100mil) Cabeçalho de pino macho de 40 pinos (através do orifício)

1 x 2,54 mm (100mil) Cabeçalho de pino fêmea usinado de 40 pinos (através do orifício)

Jumper 1 x 2,54mm (100mil) - É igual aos usados nas placas-mãe dos computadores.

4 parafusos M3 de 8 mm

4 x M3 4x4mm insertos roscados - Eles podem ser facilmente encontrados pesquisando por "M3 Press-In Brass Copper Inserts" no eBay (veja a imagem anexa).

4 parafusos M2 12 mm

4 x porcas M2

1 cabo USB Tipo A para 5,5x2,1 mm DC Plug Cable [1,5 €] - Isso permitirá que seu dispositivo seja alimentado por um carregador de telefone padrão ou praticamente qualquer computador com uma porta USB. O dispositivo consome apenas 300mA no pior caso e 250mA em média, então até uma porta USB 2.0 serve.

1 x PCB - A espessura da placa não é crítica, então escolha 1,6 mm, que geralmente é a opção mais barata com a maioria dos fabricantes de PCB.

3 x pedaços de fio trançado (cerca de 60 mm cada)

3 x pedaços de tubo termorretrátil (cerca de 10 mm cada)

E as seguintes ferramentas:

Ferro de solda

Conversor USB para serial - Você precisará disso para programar o ESP8266 na placa.

Chave de fenda Phillips e / ou chave hexagonal - dependendo do tipo de parafuso que você usará.

Impressora 3D - Se você não tiver acesso a uma impressora 3D, você sempre pode usar uma caixa de projeto de plástico genérico e fazer os recortes você mesmo com uma Dremel. As dimensões internas mínimas para tal caixa deverão ser de 24 mm de altura, 94 mm de comprimento e 66 mm de largura. Você também precisará usar isolantes M2 de 8 mm para montar o LCD.

Dremel - necessário apenas se você não escolher o gabinete impresso em 3D.

Etapa 2: Fazendo o PCB

Fazendo o PCB
Fazendo o PCB
Fazendo o PCB
Fazendo o PCB
Fazendo o PCB
Fazendo o PCB

O primeiro passo é fazer o PCB. Você pode fazer isso gravando você mesmo ou apenas acessando o site do seu fabricante de PCB favorito e fazer um pedido. Se você não planeja fazer alterações no layout da placa, pode simplesmente pegar o arquivo ZIP contendo os arquivos gerber anexados nesta etapa e enviá-lo diretamente para o fabricante. No caso de você desejar fazer alterações, o esquema KiCAD e os arquivos de layout do cartão podem ser encontrados aqui.

Depois de colocar as mãos nas placas, é hora de soldar os componentes. Isso deve ser bastante simples, mas há algumas coisas que devem ser observadas. Primeiro, não prossiga com a soldagem da placa de circuito impresso no painel LCD ainda, isso precisará ser feito durante a montagem final devido à forma como o gabinete foi projetado. Se você estiver fazendo seu próprio cercado, sinta-se à vontade para ignorar esse conselho.

O conector U3 é onde o sensor DHT11 será conectado. Idealmente, você deve usar um cabeçote de pino fêmea usinado em ângulo de 90 ° para essa finalidade. Mas se você gosta de mim, não consegue encontrar um, apenas pegue um reto e dobre-o você mesmo. Se você fizer isso depois, os cabos do DHT11 também ficarão um pouco curtos, então você terá que soldar algumas extensões. A distância entre o cabeçalho do pino e o sensor, uma vez conectado, deve ser de aproximadamente 5 mm.

O motivo pelo qual você deseja usar um cabeçote de pino usinado é porque os orifícios são menores em comparação com os cabeçotes de pino fêmea regulares. Assim, os condutores do sensor podem ficar firmes criando uma conexão sólida. Mas você também pode tentar soldar o DHT11 em um pedaço de conector de pino macho e conectá-lo dessa forma a um conector de pino fêmea em ângulo regular, que deve funcionar da mesma forma.

Etapa 3: fazer o gabinete

Fazendo o Recinto
Fazendo o Recinto
Fazendo o Recinto
Fazendo o Recinto
Fazendo o Recinto
Fazendo o Recinto
Fazendo o Recinto
Fazendo o Recinto

Agora que o PCB está soldado, é hora de fazer o gabinete. Existem duas partes diferentes que precisam ser impressas, o corpo principal do gabinete e a tampa. A tampa também possui orifícios de montagem para fixá-la na parede.

Ambas as partes podem ser impressas com um bico padrão de 0,4 mm com uma altura de camada de 0,2 mm, no meu caso o tempo de impressão foi de cerca de 4 horas para ambas as partes combinadas. A tampa não requer nenhum suporte para a parte principal do invólucro, no entanto, requer, principalmente para a parte sob os soquetes de parafuso. Depois de imprimir com muito cuidado ao retirar os suportes, consegui quebrar um dos contrapesos do LCD enquanto fazia isso e tive que voltar a colar com supercola.

O gabinete é projetado no FreeCAD, portanto, se você quiser fazer qualquer alteração, deve ser bastante simples. Os arquivos STL para imprimir o gabinete, bem como os arquivos de design do FreeCAD, podem ser encontrados no Thingiverse.

Etapa 4: montagem do monitor

Com o invólucro impresso, é hora de colocar tudo junto. Primeiro, coloque o LCD dentro da caixa e deslize-o para a esquerda, para que haja um espaço entre ele e o orifício para o sensor.

Imagem
Imagem

Em seguida, coloque o PCB em cima dele, com o sensor já conectado ao conector do pino.

Imagem
Imagem

Depois disso, empurre o sensor para o orifício, deslize o LCD de volta para a posição e insira o PCB no conector do pino. Agora fixe o LCD no lugar usando porcas e parafusos M2 e solde o PCB no conector do pino.

Imagem
Imagem

Em seguida, coloque o conector de alimentação no lugar, conecte alguns fios a ele e solde suas outras extremidades no PCB. O uso de alguns tubos termoencolhíveis aqui também seria uma boa ideia.

Imagem
Imagem

A última etapa é instalar as inserções roscadas de metal para que a tampa possa ser aparafusada com parafusos M3. Para isso, você precisará usar o ferro de solda para aquecê-los, para que possam ser inseridos nos orifícios. Você pode dar uma olhada neste manual se precisar de mais informações sobre como adicionar fios de metal às suas impressões 3D.

Imagem
Imagem

Etapa 5: Configurando o servidor

Configurando o servidor
Configurando o servidor

Antes de fazer o upload do firmware para o ESP8266, há mais uma coisa que precisa ser feita, que é configurar um servidor para registrar os dados recebidos pelo dispositivo. Para esse propósito, você pode usar praticamente qualquer máquina Linux que desejar, desde um Raspberry Pi em sua rede privada até uma gotícula DigitalOcean. Eu escolhi o último, mas o processo é praticamente o mesmo, não importa o que você escolha.

Instalando Apache, MySQL (MariaDB) e PHP

Primeiro precisamos configurar o LAMP, ou em outras palavras, instalar o Apache, MySQL (MariaDB) e PHP no servidor. Para isso, você precisará usar o gerenciador de pacotes de sua distro; para fins de exemplo, usarei o apt, que é o gerenciador de pacotes usado por praticamente qualquer distro baseada em Debian, incluindo Raspbian.

atualização do apt sudo

sudo apt install apache2 mysql-server mysql-client php libapache2-mod-php php-mysql

Depois de fazer isso, se você colocar o endereço IP do seu servidor na barra de endereços do seu navegador, você poderá ver a página padrão do Apache.

Configurando o banco de dados

Agora precisamos de um banco de dados para registrar os dados. Primeiro, conecte-se ao MySQL como root executando, sudo mysql

E crie o banco de dados e um usuário com acesso a ele da seguinte maneira, CRIAR "sensores" da base de dados

USE `sensores`; 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`)) ENGINE = InnoDB; CRIAR TABELA `umidade` (` id` bigint (20) NOT NULL AUTO_INCREMENT, `client_id` smallint (6) NOT NULL,` valor` smallint (6) NOT NULL, timestamp `created_at` NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (` id`)) ENGINE = InnoDB; CRIAR USUÁRIO '[nome de usuário]' @ 'localhost' IDENTIFICADO POR '[senha]'; CONCEDE TODOS OS PRIVILÉGIOS EM 'sensores'. * TO 'sensores' @ 'localhost'; SAÍDA

Certifique-se de substituir [nome de usuário] e [senha] pelo nome de usuário e senha reais do usuário MySQL de sua preferência. Além disso, anote-os, pois você precisará deles na próxima etapa.

Configurando os scripts de registro e interface da web

Mude para o diretório / var / www / html que é a raiz do documento do host virtual padrão do Apache, exclua o arquivo HTML que contém a página da web padrão e baixe os scripts de log e de interface da web dentro dela.

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- arduino-temp-monitor / master / server / index.php

Agora edite o script de registro usando nano, sudo nano log.php

Você precisará substituir o [nome de usuário] e a [senha] pelo nome de usuário e a senha do usuário MySQL que você criou na etapa anterior. Além disso, substitua a [chave do cliente] por uma string exclusiva e anote-a. Isso será usado como uma senha para que o monitor possa se autenticar no servidor.

Finalmente, edite o index.php com nano, sudo nano index.php

e substitua o [nome de usuário] e a [senha] pelo nome de usuário e senha do usuário MySQL, como fez com o script de registro.

Configurando HTTPS (opcional)

Isso pode ser opcional, mas se a conexão entre o ESP8266 e o servidor for pela Internet, é altamente recomendável usar alguma criptografia.

Infelizmente, você não pode simplesmente seguir em frente e usar algo como Let’s Encrypt para obter um certificado. Isso ocorre porque, pelo menos no momento da escrita, a biblioteca cliente HTTP para o ESP8266 ainda exige que a impressão digital do certificado seja fornecida como um segundo argumento ao chamar http.begin (). Isso significa que se você usar algo como Let’s Encrypt, terá que atualizar o firmware para o chip a cada 3 meses para atualizar a impressão digital do certificado após cada renovação.

Uma maneira de contornar isso seria gerar um certificado autoassinado que expira depois de muito tempo (por exemplo, 10 anos) e manter o script de registro em seu próprio host virtual com seu próprio subdomínio. Dessa forma, você pode ter a interface web para acessar os dados em um subdomínio separado, que usará um certificado adequado de uma autoridade confiável. O uso de um certificado autoassinado neste caso não é um problema de segurança, pois a impressão digital do certificado que o identifica exclusivamente será codificada no firmware e o certificado será usado apenas pelo ESP8266.

Antes de começarmos, assumirei que você já possui um nome de domínio e é capaz de criar subdomínios nele. Portanto, para gerar um certificado que expira após 10 anos, execute o seguinte comando e responda às perguntas.

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

Como este é um certificado autoassinado, o que você responder na maioria das perguntas não importa muito, exceto para a pergunta que pede o nome comum. É aqui que você precisará fornecer o subdomínio completo que será usado para este host virtual. O subdomínio que você fornecerá aqui precisará ser o mesmo que o ServerName que definirá posteriormente na configuração do host virtual.

Em seguida, crie uma nova configuração de host virtual, sudo nano /etc/apache2/sites-available/sensors-ssl.conf

com os seguintes conteúdos, Nome do servidor [subdomínio] DocumentRoot / var / www / sensores SSLEngine ON SSLCertificateKeyFile /etc/ssl/private/sensors.key SSLCertificateFile /etc/ssl/certs/sensors.crt Opções + FollowSymlinks -Indexes AllowOverride Todos ErrorLogD $ {APACHE_LOG_D error-ssl.log CustomLog $ {APACHE_LOG_DIR} /sensors-access-ssl.log combinado

Novamente, certifique-se de substituir o [subdomínio] pelo mesmo subdomínio que você usou com o certificado. Neste ponto, você precisará desativar o host virtual padrão do Apache, sudo a2dissite 000-default

mude o nome do diretório raiz do documento, sudo mv / var / www / html / var / www / sensores

e finalmente habilite o novo host virtual e reinicie o Apache, sensores-ssl sudo a2ensite

sudo systemctl restart apache2

A última coisa que precisa ser feita é obter a impressão digital do certificado, porque você precisará usá-la no código do firmware.

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

O http.begin () espera que os delimitadores entre os bytes da impressão digital sejam espaços, então você precisará substituir os dois pontos por espaços antes de usá-los em seu código.

Agora, se você não quiser usar um certificado autoassinado para a interface da web, configure um novo subdomínio e crie uma nova configuração de host virtual, sudo nano /etc/apache2/sites-available/sensors-web-ssl.conf

com os seguintes conteúdos, Nome do servidor [subdomínio] DocumentRoot / var / www / sensores #SSLEngine ON #SSLCertificateFile /etc/letsencrypt/live/[subdomain]/cert.pem #SSLCertificateKeyFile /etc/letsencrypt/live/[subdomain]/privkey.pem #SSLCertificateChainFile / etc /letsencrypt/live/[subdomain]/chain.pem Opções + FollowSymlinks -Indexes AllowOverride All ErrorLog $ {APACHE_LOG_DIR} /sensors-web-error-ssl.log CustomLog $ {APACHE_LOG_DIR} /sensors-web-access-ssl.log

Certifique-se de substituir o [subdomínio] pelo subdomínio que você configurou para a interface da web. Em seguida, habilite o novo host virtual, reinicie o Apache, instale o certbot e obtenha um certificado para o novo subdomínio de Let's Encrypt, sudo a2ensite sensores-web-ssl

sudo systemctl reiniciar apache2 sudo apt atualizar sudo apt install certbot sudo certbot certonly --apache -d [subdomínio]

Depois de obter o certificado, edite a configuração do host virtual novamente para remover o comentário das linhas SSLEngine, SSLCertificateFile, SSLCertificateKeyFile e SSLCertificateChainFile e reiniciar o Apache.

E agora você pode usar o primeiro subdomínio que usa o certificado autoassinado para enviar os dados do ESP8266 para o servidor, enquanto usa o segundo para acessar a interface da web do seu navegador. O Certbot também se encarregará de renovar automaticamente seu certificado Let's Encrypt a cada 3 meses, usando um cronômetro do systemd que deve estar habilitado por padrão.

Etapa 6: Programação do ESP8266

Programando o ESP8266
Programando o ESP8266

Finalmente, a única coisa que falta fazer é carregar o firmware no microcontrolador. Para fazer isso, baixe o código-fonte do firmware aqui e abra-o usando o IDE do Arduino. Terá de substituir [SSID] e [Palavra-passe] pelo SSID e palavra-passe reais da sua rede sem fios. Você também precisará substituir [ID do cliente] e [Chave do cliente] na chamada de função sprintf pelas que você usou no script PHP no servidor. Finalmente, você terá que substituir o [Host] pelo nome do domínio ou endereço IP do servidor. Se estiver usando HTTPS, você também precisará fornecer a impressão digital do seu certificado como um segundo argumento na chamada de função do http.begin (). Expliquei como obter a impressão digital do certificado na seção "Configurando HTTPS" na etapa anterior.

Em seguida, caso ainda não tenha feito isso, você precisará instalar o pacote do núcleo da Comunidade ESP8266 usando o Board Manager do Arduino IDE. Feito isso, selecione o NodeMCU 1.0 (Módulo ESP-12E) no menu de placas. Em seguida, você precisará instalar a biblioteca SimpleDHT usando o Library Manager. Por fim, clique no botão Verificar no canto superior esquerdo da janela do IDE para garantir que o código seja compilado sem erros.

E agora, finalmente é hora de gravar o firmware no microcontrolador. Para isso, mova o jumper JP1 para a direita, de forma que o GPIO0 do ESP8266 seja conectado ao aterramento que habilitará o modo de programação. Em seguida, conecte seu conversor USB para serial usando fios de jumper no cabeçalho de programação que é rotulado como P1. O pino 1 do cabeçalho de programação é aterrado, o pino 2 é o pino de recepção do ESP8266 e o pino 3, a transmissão. Você precisa do recebimento do ESP8266 para ir para a transmissão de seu conversor USB para serial, a transmissão para o recebimento e, claro, o aterramento.

Por fim, ligue o dispositivo com 5 V usando o cabo de entrada USB para DC e conecte o conversor USB para serial ao computador. Agora você deve conseguir ver a porta serial virtual onde o ESP8266 está conectado, assim que abrir o menu de ferramentas em seu IDE. Agora, basta clicar no botão Upload e pronto! Se tudo correr conforme o esperado, você poderá ver as leituras de temperatura e umidade no LCD do dispositivo. Depois que o ESP8266 se conecta à rede e começa a se comunicar com o servidor, a data e a hora atuais também devem aparecer no visor.

Depois de algumas horas, quando o servidor tiver coletado uma boa quantidade de dados, você poderá ver os gráficos de temperatura e umidade visitando http (s): // [host] /index.php?client_id= [id do cliente]. Onde [host] é o endereço IP do seu servidor ou o subdomínio que você está usando para a interface da web, e [id do cliente] a id do cliente do dispositivo que, se você deixar com o valor padrão, deverá ser 1.

Recomendado: