Automação de Iluminação com Raspberry Pi [3/3]

AGRADEÇA AO AUTOR COMPARTILHE!

Olá, pessoal.

Vamos dar sequência ao tutorial Automação de Iluminação com Raspberry Pi (Parte 1 e Parte 2).

Esse é o último post [3/3] desse tutorial, abordaremos os itens:

  • Programação de acionamento de GPIO usando Python3
  • Programação de página web em PHP
  • Finalização

Vamos começar!


6. Programação de acionamento de GPIO usando Python3

Primeiro, acesso a RPi via SSH.

Vá até a pasta /var/www/html/

 Eu criei uma pasta chamada GPIO.

 depois eu entrei na pasta gpio e eu criei mais 4 pastas, uma para cada GPIO que eu usei. Para melhor entendimento, uma para cada interruptor.

 Dentro de cada pasta eu criei dois scripts em Python3. Um para acender e outro para apagar.

A seguir o código para acender:

Para salvar e sair apertar a tecla “:” e depois wq. Assim “:wq”.

E o código para desligar:

Fazer isso em todas as pastas que criar!

Teste se está funcionando:


7. Programação de página web em PHP

Entrar com o comando:

 2 vezes. Para navegarmos até a pasta /var/www/html/

Usei na página de controle um plug-in com front-end pronto, o AdminLTE.

Basta fazer o download e descompactar os arquivos na pasta /var/www/html/.

Entrar com o comando vim para editar a página index.php:

Adicionar o código:

 Salve com o comando “:wq”


8. Finalização

Através de um Notebook, PC ou Smartphone acesse o link no navegador. http://seuip/index.php

Não esqueça que vc deve estar na rede Wi-Fi.

Seu Dashboard vai aparecer dessa maneira, responsivo, simples e funcional!!! 

dashboard de controle de iluminação

Espero que tenham gostado e que consigam executar esse projeto!

Caso tenham dúvidas, comente que eu responderei, ok?

Caso queiram que eu detalhe algum passo, basta pedir nos comentários que eu crio o post.

Abraço e até o próximo!

AGRADEÇA AO AUTOR COMPARTILHE!

Hugo Baur

Mais artigos deste autor »

Graduado em Sistemas de Informação pela UFF e mestrando em Inteligência Artificial pela mesma instituição, atua nas áreas de Data Science, BI e Big Data.

Apaixonado pelo setor de inovação tecnológica, é fundador da Startup Low-IT: www.low-it.com.br

Empresa de eficiência energética e inteligência de contratação de energia. Utiliza a análise de dados e IoT para prover economia em energia elétrica, assim como contribuir com a diminuição do impacto ambiental gerado pela geração de energia elétrica.

Entusiasta em IoT, eletrônica, automação, Machine Learning e IA.


16 Comentários

AvatarLino Mateus
1

Boa tarde segui os 3 passos, mas quando eu abro o endereço ao clicar no botão para acender não aciona o rele, a fiação esta correta, tem ideia do que eu fiz de errado ?, instalei o apache o php

Hugo BaurHugo Baur Autor do Post
2

Olá Lino,

Para testar se está correto a instalação elétrica e programação de hardware, use o comando:

sudo python3 /var/www/html/gpio/gpio03/acender.py

Para apagar:

sudo python3 /var/www/html/gpio/gpio03/apagar.py

Certifique que seu jumper esteja instalado no gpio03 e qual relé está configurado para esse gpio.

Para teste, sugiro rodar esses comandos para todos os pgio, pode ser que tenha colocado em algum local errado.

Se precisar, mande mais detalhes para que eu possa te ajudar.

Abraço e bom projeto.

AvatarJoão
3

Boa noite,

Estou com dificuldade para acionar o relé pelo navegador. Não sei se estou fazendo correto, la na código index.php, para acionar a gpio03 eu tenho que cetar o form dessa maneira. Ex:

Acender

Mas dessa forma apresenta erro na pagina: 404 Not Found.

Hugo BaurHugo Baur Autor do Post
4

Bom dia João,

Não entendi sua dúvida, pode detalhar mais?

O código está correto, não precisa alterar nada, apenas o caminho pra acionar o arquivo Python da sua Raspberry se vc criou as pastas e arquivos diferente do que eu fiz.

Esse código recebe a entrada do clique do botão “acender03″

Abre um terminal e executa esse comando : sudo python3 /var/www/html/gpio/gpio03/acender.py

Eu crio uma pasta gpio, depois uma para cada gpio, nesse caso o pgio03, depois eu executo o script em python acender.

Se vc entrar pelo SSH na Raspberry pi e executar o comando sua luz tem que ligar.

if ($_POST[acender03]) {
$a = shell_exec(“sudo python3 /var/www/html/gpio/gpio03/acender.py”);
echo $a;
}

Abraço joão, avise se conseguir resolver.

AvatarJoão
5

Boa noite,

Só alterei a gpio, que está ligada a gpio12 e o caminho da pasta do apache que é a \var\www\www. E realizai o teste executando: /var/www/www/gpio/gpio12/acender.py. O qual não apresentou nenhum erro, mas não acionou o rele.

Hugo BaurHugo Baur Autor do Post
7

Oi João,

Tem certeza que seu caminho pro apache é /var/www/www/gpio/… ?

Faça o teste com:

sudo python3 /var/www/gpio/gpio12/acender.py

Com o script:

import RPi.GPIO as GPIO
import time
import sys
import os
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
GPIO.setup(12, GPIO.OUT)

def ligar():
GPIO.output(12, GPIO.HIGH)

if __name__ == “__main__”:
ligar()

Se realmente for, sudo python3 /var/www/www/gpio/gpio12/acender.py , vc vai precisar alterar os código da página web, porém só na parte do PHP e no botão de acionamento do html. assim:

Acender
_________________________________________________________________________________________

if ($_POST[acender12]) {
$a = shell_exec(“sudo python3 /var/www/www/html/gpio/gpio12/acender.py”);
echo $a;
}

Confirma se deu certo e avisa aqui pra gente saber se foi.

Um baraço.

AvatarJoão
8

Boa noite Hugo.

Tenho certeza absoluta que o caminho é: /var/www/www/gpio/gpio12/acender.py.

meu cód acender.py:

import RPi.GPIO as GPIO
import time
import sys
import os
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
GPIO.setup(12, GPIO.OUT)
rele_quarto = 12

def ligar():
GPIO.output(rele_quarto, GPIO.HIGH)

if __name__ == “__main__”:
ligar()
————————————————————————-
E o caminho do meu PHP: /var/www/www/index.php
Cód PHP:

if ($_POST[acender12]) {
$a = shell_exec(“sudo python3 /var/www/www/gpio/gpio12/acender.py”);
echo $a;
}
————————————————————————–
Estou executando o comando no terminal: sudo python3
var/www/www/gpio/gpio12/acender.py, acessando o meu raspberry via SSH. Mas o relé não é acionado. Não tenho ideia do que pode ser!

AvatarJoão
10

Meu amigo Hugo, mil desculpas. alterei a numeração da GPIO para 32, e acendeu. Mas não está apagando.

Cód apagar.py:

import RPi.GPIO as GPIO
import time
import sys
import os
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
GPIO.setup(32, GPIO.OUT)
rele_quarto = 32

def desligar():
GPIO.output(rele_quarto, GPIO.LOW)

if __name__ == “__main__”:
desligar()

AvatarJoão
11

Hugo,
Consegui realizar o teste para ligar e desligar o relé, só não está pegando com o index.php, pelo navegador!

Hugo BaurHugo Baur Autor do Post
12

João,

Além de alterar o PHP, vc tem que alterar o button, esse código aqui:

Acender

Alterou ele também?

Vc consegue ver a página, aperta e não vai? Ou vc não consegue abrir a página?

AvatarJoão
13

A pagina abre sim, mas ao executar o botão para acender, por exemplo, não faz nada.

Segue o Cód do index.php.

CONTROLE DE LUZ HUGO



CONTROLE DE ILUMINAÇÃO HUGO’S HOUSE

#
CÔMODO
ACENDER
APAGAR

1.
BANHEIRO [GPIO 32]

Acender

Apagar

2.
QUARTO [GPIO 5]

Acender

Apagar

3.
SALA [GPIO 8]

Acender

Apagar

4.
COZINHA [GPIO 10]

Acender

Apagar

«
1
2
3
»

$(function () {
//Initialize Select2 Elements
$(‘.select2′).select2()

//Datemask dd/mm/yyyy
$(‘#datemask’).inputmask(‘dd/mm/yyyy’, { ‘placeholder': ‘dd/mm/yyyy’ })
//Datemask2 mm/dd/yyyy
$(‘#datemask2′).inputmask(‘mm/dd/yyyy’, { ‘placeholder': ‘mm/dd/yyyy’ })
//Money Euro
$(‘[data-mask]’).inputmask()

//Date range picker
$(‘#reservation’).daterangepicker()
//Date range picker with time picker
$(‘#reservationtime’).daterangepicker({ timePicker: true, timePickerIncrement: 30, format: ‘MM/DD/YYYY h:mm A’ })
//Date range as a button
$(‘#daterange-btn’).daterangepicker(
{
ranges : {
‘Today’ : [moment(), moment()],
‘Yesterday’ : [moment().subtract(1, ‘days’), moment().subtract(1, ‘days’)],
‘Last 7 Days’ : [moment().subtract(6, ‘days’), moment()],
‘Last 30 Days': [moment().subtract(29, ‘days’), moment()],
‘This Month’ : [moment().startOf(‘month’), moment().endOf(‘month’)],
‘Last Month’ : [moment().subtract(1, ‘month’).startOf(‘month’), moment().subtract(1, ‘month’).endOf(‘month’)]
},
startDate: moment().subtract(29, ‘days’),
endDate : moment()
},
function (start, end) {
$(‘#daterange-btn span’).html(start.format(‘MMMM D, YYYY’) + ‘ – ‘ + end.format(‘MMMM D, YYYY’))
}
)

//Date picker
$(‘#datepicker’).datepicker({
autoclose: true
})

//iCheck for checkbox and radio inputs
$(‘input[type=”checkbox”].minimal, input[type=”radio”].minimal’).iCheck({
checkboxClass: ‘icheckbox_minimal-blue’,
radioClass : ‘iradio_minimal-blue’
})
//Red color scheme for iCheck
$(‘input[type=”checkbox”].minimal-red, input[type=”radio”].minimal-red’).iCheck({
checkboxClass: ‘icheckbox_minimal-red’,
radioClass : ‘iradio_minimal-red’
})
//Flat red color scheme for iCheck
$(‘input[type=”checkbox”].flat-red, input[type=”radio”].flat-red’).iCheck({
checkboxClass: ‘icheckbox_flat-green’,
radioClass : ‘iradio_flat-green’
})

//Colorpicker
$(‘.my-colorpicker1′).colorpicker()
//color picker with addon
$(‘.my-colorpicker2′).colorpicker()

//Timepicker
$(‘.timepicker’).timepicker({
showInputs: false
})
})

Deixe seu comentário

Seu endereço de e-mail não será publicado. Campos com * são obrigatórios!

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">