Índice:

Sensor de temperatura da rede doméstica: 7 etapas
Sensor de temperatura da rede doméstica: 7 etapas

Vídeo: Sensor de temperatura da rede doméstica: 7 etapas

Vídeo: Sensor de temperatura da rede doméstica: 7 etapas
Vídeo: Testando sensor de temperatura ou degelo. 2024, Novembro
Anonim
Sensor de temperatura de rede doméstica
Sensor de temperatura de rede doméstica

O que você precisa saber para fazer este projeto:

Você precisa saber sobre: - Algumas habilidades eletrônicas (soldagem)

- Linux

- IDE Arduino

(você precisará atualizar placas adicionais no IDE: https://arduino.esp8266.com/stable/package_esp8266 …)

- atualizar / programar uma placa ESP por meio do Arduino IDE.

(existem alguns bons tutoriais disponíveis na web)

Isso pode ser feito usando um Arduino Uno ou um FTDI (adaptador USB para serial).

Usei meu Uno porque não tinha nenhuma porta serial no meu PC nem tinha um FTDI

Etapa 1: vá às compras

Vai fazer compras
Vai fazer compras

O que você precisa para fazer isso acontecer?

Para o sensor digital de temperatura e umidade:

- Uma placa de ensaio ou uma alternativa como protótipo pcb, solda, ferro de solda …

- Algum fio

- dois jumpers

- um resistor de 10k Ohm

- um ESP12F (outros modelos também podem funcionar …)

- um DHT22 (um pouco mais caro do que o DHT11, mas mais preciso)

- 3 baterias recarregáveis AA e um suporte de bateria

- uma pequena caixa de plástico para colocar seu projeto

- Em uma fase posterior, pretendo adicionar um HT7333 com dois capacitores de 10uF entre a bateria e o ESP

para estabilizar a tensão de entrada (VCC) para os 3,3 V recomendados, mas também para proteger o ESP de sobretensão.

Para a parte da rede:

- Sua rede WiFi doméstica

Para a parte do servidor:

- Qualquer sistema baseado em Linux (sempre ligado!)

Usei um Raspberry Pi (que também uso como servidor para minhas câmeras IP externas).

- compilador gcc para compilar o código do seu servidor

- pacote rrdtool para armazenar os dados e gerar gráficos

- apache (ou outro servidor web)

Seu PC ou laptop favorito com IDE Arduino.

Etapa 2: configuração e plano de fundo

Configuração e plano de fundo
Configuração e plano de fundo

Nesta versão de um WiFi conectado - para não dizer IOT - sensor de temperatura e umidade usei um ESP12F, um DHT22 e um porta-pilhas 3 AA com pilhas recarregáveis.

A cada 20 minutos, o ESP faz uma medição do DHT22 e a envia para um servidor (um Raspberry Pi) por UDP na minha rede WiFi doméstica. Depois que as medições foram enviadas, o PES adormece profundamente. Isso significa que apenas o relógio de tempo real do módulo permanece energizado, resultando em uma economia de energia incrível. Por cerca de 5 segundos, o módulo requer cerca de 100mA, então durante os 20 minutos em sono profundo apenas 150uA.

Não queria usar nenhum serviço baseado na Internet porque tenho o meu Raspberry Pi que está sempre ligado de qualquer maneira e desta forma tive o prazer de escrever a parte do servidor também.

No servidor (um Raspberry Pi executando Raspbian), escrevi um ouvinte UDP simples (servidor) que armazena os valores em um RRD simples. (Banco de dados Round Robin usando RRDtool de Tobias Oetiker.)

A vantagem do RRDtool é que você cria seu banco de dados uma vez e o tamanho permanece o mesmo. Além disso, você não precisa ter um servidor de banco de dados (como mySQLd) em execução em segundo plano. RRDtool fornece as ferramentas para criar o banco de dados e gerar os gráficos.

Meu servidor cria os gráficos periodicamente e exibe tudo em uma página http muito simples. Posso consultar minhas leituras com um navegador simples, conectando-me ao servidor da web Apache2 no Raspberry Pi!

Finalmente, eu não tinha um FTDI (USB para Serial) então usei meu Arduino UNO. Você precisa conectar os TX's e RX's e o GND do ESP e do UNO. (Eu sei, seu instinto pode lhe dizer para cruzar RXs e TXs … tentei também, não funciona.)

Não fiz uma conversão de nível (UNO: Alto = 5V, mas ESP é basicamente um dispositivo de 3,3V … Existem alguns FTDIs legais no mercado onde você pode até selecionar seu nível Alto para 5 ou 3,3V.

Meu circuito é alimentado por 3 baterias recarregáveis AA - então, na verdade, 3 X 1,2V. Em uma fase posterior, pretendo colocar um HT7333 entre a bateria e o circuito por segurança; baterias recém-carregadas podem ter mais de 1,2 V e o ESP deve ser alimentado com mín. 3V e máx. 3,6 V Além disso, se eu decidir - em um momento de fraqueza - colocar pilhas alcalinas (3 X 1,5 V = 4,5 V) meu ESP não vai fritar!

Também pensei em usar um painel solar de 10 x 10 cm, mas não valeu a pena. Fazendo 3 medições por hora (basicamente 3x 5 segundos @ 100mA máx. E o resto do tempo @ 100uA), espero alimentar meu circuito por 1 ano com as mesmas baterias recarregáveis.

Etapa 3: O Arduino - Parte ESP12

O Arduino - parte ESP12
O Arduino - parte ESP12
O Arduino - parte ESP12
O Arduino - parte ESP12

Fiz este projeto em diferentes etapas.

Existem vários links que ajudam a importar o ESP12 (também conhecido como ESP8266) para o IDE do Arduino. (Tive de usar a versão 2.3.0 em vez da mais recente por causa de um bug que pode ter sido resolvido entretanto …)

Comecei conectando o ESP, através do meu Arduino UNO (usado apenas como uma ponte entre o meu PC via USB para o serial) à interface serial do ESP. Existem instructables separados que explicam isso.

No meu projeto concluído, deixei os fios para conectar ao Serial no caso de precisar solucionar o problema. RX

Em seguida, você precisa conectar seu ESP12 da seguinte maneira:

Pinos ESP …

GND UNO GND

RX UNO RX

TX UNO TX

EN VCC

GPIO15 GND

Inicialmente, tentei alimentar meu ESP com 3,3 V no UNO, mas rapidamente mudei para alimentar meu ESP com uma fonte de alimentação de bancada, mas você pode usar sua bateria também.

GPIO0 Liguei este aqui com um jumper no GND para habilitar o piscar (= programação) do ESP.

Primeiro teste: deixe o jumper aberto e inicie um monitor serial no IDE do Arduino (a 115200 baud!).

Desligue e ligue o ESP, você deve ver alguns caracteres inúteis e, em seguida, uma mensagem como:

Ai-Thinker Technology Co. Ltd. pronta

Nesse modo, o ESP atua um pouco como um modem antigo. Você precisa usar comandos AT.

Experimente os seguintes comandos:

AT + RST

e os dois comandos a seguir

AT + CWMODE = 3

OK

AT + CWLAP

Isso deve fornecer uma lista de todas as redes WiFi na área.

Se estiver funcionando, você está pronto para a próxima etapa.

Etapa 4: Testar o ESP como um cliente Network Time Protocol (NTP)

Testando o ESP como um cliente Network Time Protocol (NTP)
Testando o ESP como um cliente Network Time Protocol (NTP)
Testando o ESP como um cliente Network Time Protocol (NTP)
Testando o ESP como um cliente Network Time Protocol (NTP)

No IDE do Arduino, em Arquivo, exemplos, ESP8266WiFi, carregue o NTPClient.

Pequenos ajustes são necessários para que funcione; você precisa inserir seu SSID e senha de sua rede sem fio.

Agora coloque o jumper, curto-circuitando GPIO0 a GND.

Desligue e ligue o ESP e carregue o esboço para o ESP.

Após a compilação, o upload para o ESP deve começar. O LED azul no ESP piscará rapidamente enquanto o código está sendo baixado.

Percebi que tive que brincar um pouco reiniciando o IDE, reiniciando o ESP antes que o upload funcionasse.

Antes de começar a compilar / carregar o esboço, certifique-se de fechar o console serial (= monitor serial) porque isso o impedirá de fazer o upload.

Assim que o upload for bem-sucedido, você pode reabrir o monitor serial para ver o ESP obtendo efetivamente o tempo da Internet.

Ótimo, você programou seu ESP, conectou-se ao WiFi e aproveitou o tempo da Internet.

Na próxima etapa, testaremos o DHT22.

Etapa 5: Testando o Sensor DHT22

Testando o Sensor DHT22
Testando o Sensor DHT22

Agora, alguma fiação extra é necessária.

Pinos DHT … Conecte o pino 1 (à esquerda) do sensor ao VCC (3,3 V)

Conecte o pino 2 ESP GPIO5 (DHTPIN no esboço)

Conecte o pino 4 (à direita) do sensor ao TERRA

Conecte um resistor de 10K do pino 2 (dados) ao pino 1 (alimentação) do sensor.

Semelhante ao teste NTP, encontre o esboço do DHTtester e ajuste-o da seguinte maneira:

# define DHTPIN 5 // selecionamos GPIO5 para conectar ao sensor # define DHTTYPE DHT22 // já que estamos usando um DHT22, mas este código / biblioteca também é adequado para DHT11

Novamente, feche o monitor serial, desligue e ligue o ESP e compile e atualize o ESP.

Se tudo correr bem, você deverá ver as medições no monitor serial.

Você pode brincar um pouco com o sensor. Se você respirar nele, verá que a umidade aumenta.

Se você tiver uma lâmpada de mesa (não LED), pode iluminar o sensor para aquecê-lo um pouco.

Excelente! Duas grandes partes do sensor agora estão funcionando.

Na próxima etapa, comentarei sobre o código final.

Etapa 6: Juntando tudo …

Juntar as peças…
Juntar as peças…

Mais uma vez, alguma fiação extra … isso é para tornar o DeepSleep possível.

Lembre-se, DeepSleep é uma função incrível para dispositivos IoT.

No entanto, se o seu sensor estiver conectado ao DeepSleep, pode ser difícil reprogramar o ESP, então vamos fazer outra conexão de jumper entre

GPIO16-RST.

Sim, DEVE ser GPIO16, porque esse é o GPIO que está programado para despertar o dispositivo quando o relógio em tempo real dispara após o DeepSleep!

Enquanto você está testando, você pode decidir fazer um DeepSleep de 15 segundos.

Quando eu estava depurando, movia o jumper para GPIO0 para poder atualizar meu programa.

Após a conclusão do download, eu moveria o jumper para GPIO16 para que o DeepSleep funcionasse.

O código do ESP é denominado TnHclient.c

Você deve alterar seu SSID, senha e o endereço IP do seu servidor.

Existem linhas extras de código que você pode usar para solucionar problemas ou testar sua configuração.

Etapa 7: O lado do servidor das coisas

O lado servidor das coisas
O lado servidor das coisas
O lado servidor das coisas
O lado servidor das coisas

É um equívoco comum que o UDP não é confiável e o TCP é …

Isso é tão bobo quanto dizer que um martelo é mais útil do que uma chave de fenda. Eles são simplesmente diferentes ferramentas muito úteis e ambos têm seus usos.

A propósito, sem UDP a Internet não funcionaria … DNS é baseado em UDP.

Então, escolhi o UDP porque é muito leve, fácil e rápido.

Tendo a pensar que meu WiFi é muito confiável, o cliente enviará no máximo 3 pacotes UDP se a confirmação "OK!" não é recebido.

O código C para o TnHserver está no arquivo TnHServer.c.

Existem vários comentários no código explicando isso.

Precisaremos de algumas ferramentas extras no servidor: rrdtool, apache e talvez tcpdump.

Para instalar o rrdtool no Raspbian, você pode simplesmente instalar o pacote como este: apt-get install rrdtool

Se você precisa depurar o tráfego de rede, tcpdump vem a calhar apt-get install tcpdump

Eu precisava de um servidor web para poder usar um navegador para consultar os gráficos: apt-get install apache2

Usei esta ferramenta: https://rrdwizard.appspot.com/index.php para obter o comando para criar o banco de dados Round Robin. Você só precisa executar isso uma vez (se acertar na primeira vez).

rrdtool create TnHdatabase.rrd --start now-10s

- passo '1200'

'DS: Temperatura: MEDIDOR: 1200: -20,5: 45,5'

'DS: Umidade: MEDIDOR: 1200: 0: 100,0'

'RRA: AVERAGE: 0,5: 1: 720'

'RRA: AVERAGE: 0,5: 3: 960'

'RRA: AVERAGE: 0,5: 18: 1600'

Finalmente, uso uma entrada crontab para reiniciar meu TnHserver todos os dias à meia-noite. Eu executo o TnHserver como um usuário normal (ou seja, NÃO root) como medida de segurança.

0 0 * * * / usr / bin / pkill TnHserver; / home / user / bin / TnHserver> / dev / null 2> & 1

Você pode verificar se o TnHserver está em execução fazendo

$ ps -elf | grep TnHserver

e você pode verificar se ele está ouvindo pacotes na porta 7777 fazendo

$ netstat -anu

Conexões de Internet ativas (servidores e estabelecidas)

Endereço local Proto Recv-Q Send-Q Estado de endereço estrangeiro

udp 0 0 0.0.0.0:7777 0.0.0.0:*

Finalmente, CreateTnH_Graphs.sh.txt é um script de exemplo para gerar os gráficos. (Eu gero os scripts como root, talvez você não queira fazer isso.)

Usando uma página da Web muito simples, você pode ver os gráficos de qualquer navegador em sua rede doméstica.

Recomendado: