Configure a automação de Raspberry Pi

Configure a automação de Raspberry Pi
Uma das coisas mais importantes para a automação doméstica é controlar o CA de alta tensão usando um DC de baixa tensão. Para controlar o CA de alta tensão do Raspberry Pi, você precisará de um interruptor de relé de 5V. Você pode controlar o interruptor de relé usando os pinos GPIO do Raspberry Pi. A chave de relé pode controlar os eletrodomésticos CA através do Raspberry Pi.

Este artigo mostrará como usar o Raspberry Pi e o interruptor de relé de 5V para ligar e desativar uma lâmpada do seu dispositivo móvel. O artigo inclui um aplicativo da web que você pode acessar de qualquer dispositivo em sua rede e controlar qualquer eletrodoméstico CA em sua casa sem fio. Então, vamos começar com nosso simples experimento de automação residencial Raspberry Pi.

Coisas que você precisará

Se você quiser usar o Raspberry Pi sem cabeça (via SSH ou VNC), precisará das seguintes coisas:

1) Raspberry Pi 3 ou Raspberry Pi 4.
2) interruptor de relé 5V.
3) fios elétricos.
4) 3 fios de conexão feminino a mulher.
5) CA Lightbulb.
6) Suporte de lâmpada de AC.
7) plugue CA.
8) Ferramenta de Wirecutter e Stripper.
9) Chave de fenda CR-V 3.
10) Micro-USB (Raspberry Pi 3) ou Adaptador de energia USB tipo C (Raspberry Pi 4).
11) 16 GB ou 32 GB de cartão microSD com Raspberry Pi OS.
12) Conectividade de rede no Raspberry Pi.
13) Laptop ou computador para desktop para acesso a desktop remoto VNC ou acesso SSH ao Raspberry Pi.

Se você não deseja acessar o Raspberry Pi remotamente via SSH ou VNC, também precisará do seguinte:

14) Um monitor.
15) Cabo HDMI ou Micro-HDMI.
16) Um teclado.
17) um mouse.

Se você precisar de assistência para piscar a imagem do Raspberry Pi OS no cartão microSD, confira o artigo como instalar e usar o Raspberry Pi Imager.

Se você é um iniciante do Raspberry Pi e precisa de assistência na instalação do Raspberry Pi OS no Raspberry Pi, confira o artigo como instalar o Raspberry Pi OS no Raspberry Pi 4.

Além disso, se você precisar de assistência com a configuração sem cabeça do Raspberry Pi, confira o artigo como instalar e configurar o Raspberry Pi OS no Raspberry Pi 4 sem monitor externo.

Imagens de todas as ferramentas necessárias são fornecidas abaixo.

Powering no Raspberry Pi

Em seguida, conecte o cabo de alimentação ao Raspberry Pi e a energia no Raspberry Pi.

Depois que o Raspberry Pi é ligado, você pode se conectar ao Raspberry Pi via VNC ou SSH. Ou você pode conectar um teclado, um mouse e um monitor ao Raspberry Pi para acessá -lo diretamente.

5V Relay PILOUTS

Um relé é basicamente um interruptor. Mas, diferentemente de um interruptor tradicional, um relé pode ser controlado por uma pequena quantidade de tensão CC.

O relé 5V é muito fácil de usar. Possui dois lados: um lado é usado para controlar o relé por meio de baixa tensão (de Raspberry Pi), e o outro lado é usado para controlar a alta tensão CA (i.e., a lâmpada), dependendo do estado do relé.


De um lado, o relé tem dois LEDs (um vermelho e um verde) e três pinos (In, gnd, e VCC). Esses três pinos são usados ​​para controlar o relé do Raspberry Pi.

Os dois primeiros pinos do outro lado são usados ​​para controlar o eletrodoméstico CA.

Conectando o relé de 5V ao Raspberry Pi

Para conectar o relé de 5V ao Raspberry Pi, você precisará de três fios de conexão feminino a feminina.

Conecte um lado dos fios de conexão ao EM (fio amarelo), Gnd (fio preto) e VCC (fio vermelho) pinos no relé 5V, como mostrado abaixo.


O outro lado dos fios entra nos pinos do cabeçalho GPIO de Raspberry Pi, como mostrado na imagem abaixo.

O fio vermelho deve entrar no Pino 2 (VCC) de Raspberry Pi.
O fio preto deve entrar no Pino 6 (GND) de Raspberry Pi.
O fio amarelo deve entrar no Pino 7 (GPIO 4) de Raspberry Pi.


Depois que o relé de 5V estiver conectado ao Raspberry Pi, ele deve parecer como mostrado na imagem abaixo.

Permitindo o acesso do GPIO ao usuário de login

Para permitir o acesso aos pinos do GPIO, o usuário de login padrão do Raspberry Pi OS pi deve ser adicionado ao gpio grupo.

Você pode adicionar o pi usuário do gpio Grupo com o seguinte comando:

$ sudo userMod -AG gpio $ (whoami)


Para que as mudanças entrem em vigor, reinicie o Raspberry Pi com o seguinte comando:

$ sudo reiniciar

Criando um diretório de projeto

Também é uma boa ideia manter todos os arquivos de projeto organizados.

Para manter os arquivos do projeto organizados, crie o diretório do projeto ~/www e os subdiretos necessários com o seguinte comando:

$ mkdir -pv ~/www/modelos, estático


Depois que o diretório do projeto for criado, navegue até o diretório do projeto da seguinte forma:

$ CD ~/www

Mudando o relé 5V do Raspberry Pi

Agora que você conectou o relé 5V ao Raspberry Pi, você trocará o relé do Raspberry Pi usando a linguagem de programação Python.

Nota: comutação é um termo usado em eletrônicos. Mudar significa controlar (eu.e. ligando/desligado) um determinado dispositivo eletrônico.

Para experimentar a troca do relé usando a linguagem de programação Python, crie o novo teste de script Python.PY no diretório do projeto da seguinte forma:

$ nano teste.py


Digite as seguintes linhas de códigos no teste.Script Py Python.

do GPioZero Import LED
Desde o tempo de importação do sono
enquanto é verdade:
Relé = LED (4)
Print ("Relé: On")
sono (5)
retransmissão.fechar()
Imprimir ("Relé: Off")
sono (5)

Depois de terminar, pressione + X seguido pela Y e Para salvar o teste.py Script Python.


Aqui, a linha 1 importa LIDERADO de gpioZero biblioteca e linha 2 importa o dormir função do tempo biblioteca.


As linhas 6-14 estão dentro de um loop infinito.


A linha 6 inicializa um LED no GPIO 4 de Raspberry Pi, que está conectado ao EM Pin do relé.


A linha 8 liga o relé usando o sobre() método.

A linha 9 imprime uma mensagem no console usando o imprimir() função.

A linha 10 atrasa a execução da próxima linha de código por cinco segundos usando o dormir() função.


A linha 12 desliga o relé usando o fechar() método.

Da mesma maneira, a linha 9 imprime uma mensagem no console usando o imprimir() função e linha 10 atrasa a execução da próxima linha de código por 5 segundos usando o dormir() função.


Em seguida, execute o teste.py Script Python da seguinte maneira:

Teste $ python3.py


O teste.py O script Python deve começar a alternar o relé de 5V. Você deve ouvir um som de clique a cada cinco segundos. Quando o relé alterna o estado (de On para Off ou de Off para On), faz um ruído de cliques. Isso significa que o relé está funcionando corretamente.


Quando o relé está no estado (operação normal - a carga CA é desconectada), apenas o vermelho LED deve iluminar, como você pode ver na imagem abaixo.


Quando o relé está no estado (a carga CA é conectada), tanto o verde LED e o vermelho LED deve iluminar, como você pode ver na imagem abaixo.


Depois que o teste estiver concluído, pressione + C Para encerrar o teste.py roteiro.

Conectando a lâmpada CA ao relé 5V

O relé 5V agora deve estar funcionando corretamente. Agora, você conectará seu eletrodoméstico CA (uma lâmpada, neste caso) ao relé 5V.

Primeiro, corte o fio elétrico preto conectado à lâmpada com um wirecutter.


Depois que o fio elétrico preto conectado à lâmpada foi cortado com um wirecutter, ele deve parecer como mostrado na imagem abaixo.


Em seguida, retire a camada externa para expor cerca de ½ polegada do fio elétrico, como mostrado na imagem abaixo.


Em seguida, dobre os fios expostos, como mostrado na imagem abaixo.


Solte os parafusos marcados do relé com uma chave de fenda CV-3.


Insira os fios expostos que você despojou e dobrou anteriormente nos dois terminais de parafuso e aperte os parafusos com uma chave de fenda CV-3.

Testando a troca de relé após conectar a carga CA

Depois que a carga CA estiver conectada ao relé 5V, conecte o plugue da lâmpada ao soquete da parede.


Execute o teste.py Script Python do diretório do projeto da seguinte forma:

Teste $ python3.py


O teste.py O script Python deve começar a alternar o relé de 5V, que, por sua vez, trocará a lâmpada de alta tensão em intervalos de cinco segundos. A lâmpada AC deve permanecer por cinco segundos, depois ficar de fora por cinco segundos, e assim por diante.

A lâmpada está desligada na imagem abaixo.


A lâmpada está acesa na imagem abaixo.


Como você pode ver, podemos mudar o relé e controlar a lâmpada de alta tensão CA usando a linguagem de programação Python. Então, pressione + C Para encerrar o teste.py roteiro.

Vamos agora passar para a próxima seção.

Escrevendo o aplicativo da Web de automação residencial

Nesta seção, mostrarei como escrever um aplicativo da Web baseado em API usando a linguagem de programação Python. Você pode usar o aplicativo da web para controlar o relé e o (s) dispositivo (s) ou dispositivo (s) elétrico (s) da CA, conectado ao relé de um navegador da web.

OBSERVAÇÃO: Todos os códigos mostrados nesta seção estão disponíveis no meu repositório GitHub Shovon8/Raspberry-Pi-Home-Automation. Se você quiser, você pode clonar meu repositório do GitHub e pular todos os códigos.

Crie o servidor.Py Python Script no diretório do projeto da seguinte forma:

$ Nano Server.py


Digite as seguintes linhas de códigos no servidor.py Script Python.

Do Flask Flask, jsonify, url_for, render_template
do GPioZero Import LED
de Uuid importar uuid4
quartos =
quartos ['sala 1'] = [
'id': uuid4 (),
'Nome': 'Light 1',
'Ícone': 'FA FA-Lightbulb',
'Status': false,
'retraypin': 4,
'retrayInstance': false
,
'id': uuid4 (),
'Nome': 'Fan 1',
'ícone': 'fa fa-fan',
'Status': false,
'retraypin': 6,
'retrayInstance': false
]
quartos ['banheiro 1'] = [
'id': uuid4 (),
'Nome': 'Light 1',
'Ícone': 'FA FA-Lightbulb',
'Status': false,
'Rellaypin': 5,
'retrayInstance': false
]
App = Flask (__ nome__)
aplicativo.config ['send_file_max_age_default'] = 0
@aplicativo.rota('/')
def home ():
retornar render_template ('./índice.html ', quartos = quartos)
DEF Toggle_appliance_status (id):
Para espaço nos quartos:
para aparelho em salas [sala]:
se str (appliance ['id']) == id:
Se o aparelho ['retrayInstance']:
Appliance ['RellayInstance'].fechar()
Appliance ['relayInstance'] = FALSE
outro:
Appliance ['relayInstance'] = LED (Appliance ['Relraypin'])))
Appliance ['RellayInstance'].sobre()
Appliance ['Status'] = não Appliance ['Status']
retornar verdadeiro
retorna falso
@aplicativo.Rota ('/Appliance/Toggle/')
DEF APPLIANCE_TOGGLE (ID):
Retorne Jsonify ('Status': Toggle_appliance_status (id))

Depois de terminar, pressione + X seguido pela Y e Para salvar o servidor.py Script Python.


Aqui, as linhas 1-3 importam todos os componentes necessários de suas respectivas bibliotecas.


A linha 5 cria um vazio quartos dicionário. Neste dicionário, armazenaremos todos os detalhes do aparelho AC que queremos controlar do aplicativo da web.


O quartos Os detalhes são armazenados nas linhas 7-29.


Vamos discutir a estrutura de dados de uma das salas.

Aqui, o nome do quarto será Sala 1. Então, Sala 1 é a chave para o quartos dicionário.


O Sala 1 Key mantém uma matriz como o valor. O número de elementos da matriz é igual ao número de eletrodomésticos CA que você possui naquela sala que você também deseja controlar do aplicativo da web. Nesse caso, temos dois eletrodomésticos CA que queremos controlar: Luz 1 e Fan 1.


Cada definição de aparelho doméstico tem um eu ia. O eu ia é um UUID gerado aleatoriamente. Isso é usado para identificar qual sala queremos controlar usando a API.

Um eletrodoméstico também tem todos os seguintes:

  • nome (luz 1 nesse caso)
  • ícone (Fonte Awesome Icon Class, como usaremos a fonte incrível para os ícones)
  • status (true se sobre e Falso se desligado)
  • retransmissão (o número do pino GPIO usado para controlar o relé conectado ao eletrodoméstico CA)
  • retrayInstance (o inicializado LIDERADO objeto de gpioZero Biblioteca responsável por controlar o respectivo pino GPIO - retransmissão)


A linha 31 inicializa um Flask Python Web Server.

Linha 32 configura o servidor da web do Flask.


Linhas 34-36 Envie o índice.html arquivo do modelos/ Diretório quando você visita o aplicativo da Web de automação residencial.

Usa o frasco Jinja2 linguagem de modelagem para renderizar o índice.html arquivo. Então, eu passei pelo quartos dicionário para o índice.html arquivo. Jinja2 renderizará a página inicial usando o quartos dados.


A função Toggle_appliance_status () Nas linhas 39-52, é usado para ativar o eletrodoméstico se estiver desligado e desligar o eletrodoméstico, se estiver usando o aparelho eu ia.

Ele retorna Verdadeiro Se a operação de alternância for bem -sucedida. Se houver um erro, ele retornará Falso.


As linhas 55-57 são usadas para alternar um aparelho doméstico usando o /Appliance/Toggle/ Endpoint da API do servidor da web. Aqui, eu ia é o ID do eletrodoméstico.


Crie o índice.html arquivo no modelos/ Diretório do seu projeto da seguinte forma:

$ nano modelos/índice.html

Digite as seguintes linhas de códigos no índice.html roteiro.








Automação residencial com Raspberry Pi



Automação residencial de Raspberry Pi


% para espaço em salas %

sala



% para aparelho em salas [sala] %


appliance ['nome']

% endfor %


% endfor %



Depois de terminar, pressione + X seguido pela Y e Para salvar o índice.html arquivo.


Criar uma estilo.CSS arquivo no estático/ Diretório do seu projeto da seguinte forma:

$ nano estático/estilo.CSS


Digite as seguintes linhas de códigos no estilo.CSS arquivo.

@import url ('https: // fontes.googleapis.com/css2?Família = Benchnine: WGHT@300; 400; 700 & Display = Swap ');
*
margem: 0;
preenchimento: 0;
Fonte-família: 'Benchnine', sem serrif;

#content> h1
Antecedentes: gradiente linear (à direita, RGB (112, 24, 163), RGB (86, 127, 240));
Cor: #FFF;
Alinhamento de texto: centro;
preenchimento: .5em 0;

div.sala
margem: .5em;
borda: 2px RGB sólido (112, 24, 163);
Radio de fronteira: 5px;

div.Sala H2
/* Antecedentes: RGB (9, 76, 121); */
Antecedentes: gradiente linear (à direita, RGB (112, 24, 163), RGB (86, 127, 240));
preenchimento: 0 0 0 .5em;
Cor: #FFF;

div.aparelhos
margem: .5em .5em 0 0;
exibição: flex;
FLEX-WRAP: WRAP;

div.utensílio
borda: 2px RGB sólido (112, 24, 163);
Radio de fronteira: 5px;
Largura: 110px;
Altura: 120px;
Alinhamento de texto: centro;
margem: 0 0 .5em .5em;
exibição: flex;
Direcção flexível: coluna;

div.Appliance i.fa
Size da fonte: 4em;
Flex-Grow: 1;
Top-top: 0.3em;
Cor: RGB (204, 50, 50);

div.Appliance [Data-Attive = "Active"] I.fa
Cor: RGB (32, 177, 51);

div.Span de eletrodomésticos
exibição: bloco;
intensidade da fonte: Negrito;
Antecedentes: RGB (112, 24, 163);
Cor: #FFF;

Depois de terminar, pressione + X seguido pela Y e Para salvar o estilo.CSS arquivo.


Criar um aplicativo.JS arquivo no estático/ Diretório do seu projeto da seguinte forma:

$ nano estático/aplicativo.JS


Digite as seguintes linhas de códigos no aplicativo.JS arquivo.

janela.addEventListener ('carga', principal);
função main ()
função toggleAppliancestate (e)
var id = e.Caminho [1].eu ia;
var http = novo xmlHttPrequest ();
http.ONREADESTATECHANGE = function ()
se este.ReadyState === 4 && este.status === 200)
If (JSON.analisar (isso.responseText).status === true)
se (e.Caminho [1].Hasattribute ('Data-Attive'))
e.Caminho [1].Removeattribute ('Data-Attive')
outro
e.Caminho [1].SetAttribute ('Data-Attive', 'Active')




http.aberto ("get", '/appliance/toggle/$ id', true);
http.enviar();

var appliances = documento.getElementsByClassName ('Appliance');
para (i = 0; i < appliances.length; i++)
aparelhos [i].addEventListener ('clique', toggleAppliancestate);

Depois de terminar, pressione + X seguido pela Y e para salvar o aplicativo.JS arquivo.


Aqui, a linha 1 executa o principal() função quando a página da web terminar de carregar.

No índice.html Arquivo, cada eletrodoméstico está fechado em um utensílio aula. As linhas 26-29 são usadas para selecionar cada eletrodoméstico na página da web e anexar o clique evento para o aparelho. Quando alguém clica em um dispositivo doméstico na página da web, o TogGleApliancestate () a função será executada.


Nas linhas 4-23, o TogGleApliancestate () A função é usada para solicitar o /Appliance/Toggle/ terminal do servidor da web para alterar o estado do eletrodoméstico clicado. A solicitação é feita em segundo plano via Ajax. Depois que a resposta é recebida, a página da web é atualizada de acordo.


Navegue até o estático/ Diretório no diretório do seu projeto da seguinte forma:

$ CD estático/


Baixe a font incrível com o seguinte comando:

$ wget https: // use.Fontawesome.com/liberações/v5.15.1/Fontawesome-Free-5.15.1 web.fecho eclair


Depois que a fonte incrível for baixada, você deve encontrar o novo arquivo zip Fontawesome-Free-5.15.1 web.fecho eclair no estático/ diretório.

$ ls -lh


Descompacte o Fontawesome-Free-5.15.1 web.fecho eclair Arquivo com o seguinte comando:

$ Unzip Fontawesome-Free-5.15.1 web.fecho eclair


O Fontawesome-Free-5.15.1 web.fecho eclair o arquivo agora deve ser descompactado.


O novo diretório Fontawesome-Free-5.15.1-web/ deve ser criado no estático/ diretório, como você pode ver na captura de tela abaixo.

$ ls -lh

Renomeie o diretório Fontawesome-Free-5.15.1-web/ para Fontawesome/ com o seguinte comando:

$ MV -V Fontawesome-Free-5.15.1 Web Fontawesome


Agora, você não precisa mais do Fontawesome-Free-5.15.1 web.fecho eclair arquivo. Então, remova o Fontawesome-Free-5.15.1 web.fecho eclair Arquivo com o seguinte comando:

$ rm -V Fontawesome-Free-5.15.1 web.fecho eclair


O estático/ A estrutura do diretório deve procurar como mostrado na captura de tela abaixo.

$ ls -lh


Navegue de volta para o diretório do projeto ~/www do seguinte modo:

$ CD…

Testando o aplicativo da Web de automação residencial

Para testar o aplicativo da Web de automação residencial, execute o seguinte comando no diretório do seu projeto:

$ Flask_app = servidor.Flask py


O aplicativo da web deve estar disponível na porta 5000 do seu Raspberry Pi.


Do navegador da Web Chromium, visite http: // localhost: 5000. O aplicativo da Web de automação residencial deve carregar.

Clique no ícone Lightbulb, indicado na imagem abaixo.


A lâmpada AC agora deve ser ativada. A cor do ícone também deve mudar para o verde, indicando que a lâmpada está ligada.


Então, o aplicativo da Web de automação residencial está funcionando. Imprensa + C Para encerrar o servidor da web.

Criação de serviço Systemd para o aplicativo da Web de automação residencial

Nesta seção, mostrarei como criar um arquivo de serviço Systemd para o aplicativo da Web de automação residencial para que ele inicie automaticamente na inicialização.

Primeiro, crie o Raspi-Home-Automation.serviço Arquivo no diretório do seu projeto da seguinte forma:

$ Nano Raspi-Home-Automation.serviço

Digite as seguintes linhas na automação de Raspi-Home.arquivo de serviço.

[Unidade]
Descrição = Serviço da Web de automação residencial Raspberry Pi
Depois = rede.alvo
[Serviço]
WorkingDirectory =/home/pi/www
Ambiente = Flask_App = servidor.py
Ambiente = Flask_env = Produção
ExecStart =/usr/bin/Flask Run - -host = 0.0.0.0
StandardOutput = herdar
StandardError = herdado
Reinicie = sempre
Usuário = pi
[Instalar]
WantedBy = MultiUser.alvo

Depois de terminar, pressione + X seguido pela Y e para salvar o Raspi-Home-Automation.serviço arquivo.


Copie o Raspi-Home-Automation.serviço arquivo para o /etc/Systemd/System/ Diretório com o seguinte comando:

$ sudo cp -v raspi-home-automation.Serviço/etc/Systemd/System/


Recarregue os daemons Systemd para que as mudanças entrem em vigor da seguinte forma:

$ sudo systemctl daemon -load


Adicione o Raspi-Home-Automation Serviço para a inicialização do sistema do Raspberry Pi OS com o seguinte comando:

$ sudo systemctl Ativar automação de Raspi-Home.serviço


Reinicie o Raspberry Pi com o seguinte comando:

$ sudo reiniciar


Uma vez que o Raspberry Pi botas, o Raspi-Home-Automation O serviço deve estar ativo/em execução, como você pode ver na captura de tela abaixo.

$ sudo Systemctl Status Raspi-Home-Automation.serviço

Acessando o aplicativo da Web de automação residencial de outros dispositivos

Para acessar o aplicativo da Web de automação residencial de outros dispositivos em sua rede doméstica, você precisará saber o endereço IP do seu dispositivo Raspberry Pi.

Você pode encontrar o endereço IP do seu dispositivo Raspberry Pi 4 na interface de gerenciamento da web do seu roteador doméstico. No meu caso, o endereço IP é 192.168.0.103. Isso será diferente para você. Então, certifique -se de substituir meu IP por seu a partir de agora.


Se você tiver acesso ao console Raspberry Pi, poderá executar o seguinte comando para encontrar o endereço IP também.

$ hostname -i


Depois de conhecer o endereço IP do seu dispositivo Raspberry Pi, você pode acessá -lo em qualquer dispositivo da sua rede doméstica.

Como você pode ver na captura de tela abaixo, acessei o aplicativo da Web de automação residencial do meu smartphone Android.


Certifique -se de conectar o plugue da Lightbulb à saída da parede.


A lâmpada deve ser desligada por padrão.


Se você tocar no ícone da lâmpada do aplicativo da Web de automação residencial, a cor do ícone da lâmpada deve mudar para verde, indicando que a lâmpada está ligada.


Como você pode ver na imagem abaixo, a lâmpada está ligada.

Conclusão

Este artigo mostrou como usar um relé de 5V para controlar um dispositivo elétrico CA de alta tensão do Raspberry Pi usando a linguagem de programação Python. O artigo também mostrou como escrever um aplicativo Web de Flask Python baseado em API para controlar o relé do navegador da web. Este artigo deve ajudá -lo a começar com a automação residencial usando Raspberry Pi.