Índice:
- Etapa 1: O Hardware
- Etapa 2: o esboço do Arduino
- Etapa 3: Sinatra sobe ao palco
- Etapa 4: configure sua máquina de desenvolvimento
- Etapa 5: Ruby no Mac ou Linux
- Etapa 6: Ruby no Windows
- Etapa 7: verifique e defina seu Ruby
- Etapa 8: Instale o Sinatra (todas as plataformas)
- Etapa 9: Redis no Mac ou Linux
- Etapa 10: Redis no Windows
- Etapa 11: Criar o aplicativo de serviço da Web
- Etapa 12: implantar na nuvem usando o Heroku
- Etapa 13: juntando tudo
- Etapa 14: potencial
Vídeo: Alerta residencial: Arduino + Cloud Messaging em uma tela grande: 14 etapas (com imagens)
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:39
Na era dos telefones celulares, você esperaria que as pessoas respondessem às suas ligações 24 horas por dia, 7 dias por semana.
Ou não. Quando minha esposa chega em casa, o telefone fica enterrado em sua bolsa de mão ou a bateria acaba. Não temos telefone fixo. Ligar ou SMS para pedir uma carona da estação de trem para casa em uma noite chuvosa ou ligar para perguntar se minhas chaves ainda estão na minha mesa é literalmente ilusório.
Tenho esse problema com frequência suficiente para justificar uma solução. Um pouco de mexer em um Arduino e um Freetronics Dot Matrix Display (DMD) resultou em um gadget muito chato (para minha esposa), mas um dispositivo de comunicação e centro de informações incrível para mim. Eu amo isso, e é apenas a versão 1!
O Home Alert é composto por estas peças:
- Um Freetronics Dot Matrix Display, que é uma matriz de LEDs de 16x32. Eles vêm em cores diferentes, mas eu uso o vermelho para enfatizar que este gadget é para notificações “críticas”.
- Um Arduino Uno com Ethernet Shield.
- Uma fuga do relógio em tempo real, como este ou este.
- Uma campainha piezoelétrica
- Um sensor de temperatura e umidade DHT22.
O Home Alert é controlado por meio de uma página da web hospedada no Heroku, um host de aplicativo baseado em nuvem. A página da web é codificada em Ruby, usando a estrutura do aplicativo da web Sinatra e o armazenamento de chave-valor do Redis.
Dê uma olhada na página inicial (mostrada na primeira imagem anexada nesta etapa), onde o formulário aguarda uma nova mensagem do usuário.
O primeiro campo aceita um código de hardware numérico. É um código que permite que você direcione um sistema de Alerta residencial específico, já que cada um pode receber um código exclusivo. Ou você pode ter vários Alertas iniciais compartilhando o mesmo código, para que a mesma mensagem seja exibida em vários locais.
A mensagem que você deseja exibir vai para o segundo campo. Qualquer texto que você digitar será exibido no DMD.
Se quiser fazer algum barulho, marque Sim! caixa de seleção, e a campainha com certeza chamará a atenção de qualquer pessoa que esteja por perto.
Neste artigo, vou mostrar como construir seu próprio sistema Home Alert, tanto o hardware quanto o software Arduino, bem como o mini aplicativo da web Sinatra.
Vamos começar!
Etapa 1: O Hardware
O DMD é o ponto focal do gadget. Eu poderia ter optado por uma pequena tela LCD, mas a ideia principal desse projeto era produzir algo que pudesse ser visto e ouvido à distância. Para a parte visual, eu precisava de algo grande e brilhante, e este display Freetronics é exatamente o que eu precisava. Cada painel contém uma matriz de LEDs de 16x32, e você pode colar vários deles para criar telas muito maiores. Isso é algo que eu gostaria de fazer em um futuro próximo.
O DMD vem com uma biblioteca Arduino fácil de usar. ele se comunica com o Arduino via SPI de alta velocidade. Consegui obter a biblioteca na página do Freetronics no Github, abri o esboço de demonstração e coloquei-o funcionando minutos depois de abrir a caixa. Fiquei surpreso ao ver uma tela tão brilhante usando apenas a energia do Arduino. Se você deseja cegar temporariamente seus visualizadores, pode conectar uma fonte de alimentação dedicada a este DMD. Se isso não chamar a atenção deles, nada o fará!
Fisicamente, esta tela mede 320 mm (L), 160 mm (A) e 14 mm (P).
O painel traseiro contém os conectores para alimentação externa, 5 V com capacidade de pelo menos 4 Amps, o conector Arduino marcado como HUB1 e o conector para monitores adicionais encadeados no lado oposto. De acordo com a documentação, você pode conectar em cadeia até quatro DMDs.
O DMD é controlado por um Arduino Uno. Freetronics fornece um conector “DMDCON” muito conveniente que se encaixa diretamente no SPI correto e nos pinos de dados.
Além do DMD, usei um Arduino Uno, um Ethernet Shield, um breakout de relógio em tempo real, uma campainha e um DHT22. Para todos esses componentes, criei palestras descrevendo sua operação em meu curso Udemy. (Autopromoção descarada: inscreva-se na minha lista de e-mail em arduinosbs.com e receba um cupom que dá a você acesso com desconto a todas as 55 palestras).
O relógio em tempo real, um breakout baseado no IC do relógio DS18072, é um dispositivo I2C, portanto, é conectado aos pinos analógicos 1 e 2 do Uno, que implementam o barramento I2C.
O buzzer é conectado ao pino digital 3, de onde eu o controlo usando a função tone ().
O sensor DHT22 é conectado ao pino digital 2. Tenha cuidado ao conectar o resistor pull-up de 10KΩ entre a linha de 5 V e a linha de dados.
Etapa 2: o esboço do Arduino
O esboço não é grande em termos de contagem de linhas, mas quase esgota a memória flash disponível do Uno graças a todas as bibliotecas incluídas. Há muito espaço para otimização de memória, mas como estou na fase de prototipagem, esse é um projeto para outro dia. Este código está disponível no Github.
Aqui está o esboço, com comentários incorporados (ver anexo em PDF).
A principal responsabilidade deste esboço é tornar o Arduino um consumidor de um serviço web. O serviço da web é um site simples com dois terminais, um para um usuário humano acessar por meio de um navegador da web e enviar uma string de texto que deseja exibir no DMD, e outro onde o Arduino acessará para recuperar essa sequência de texto.
Faça download e leia o arquivo PDF em anexo, ele contém comentários incorporados que descrevem seu funcionamento.
Etapa 3: Sinatra sobe ao palco
Existem muitas maneiras de criar sites e serviços da web. De linguagens de programação com bibliotecas de suporte da Web a estruturas completas, pode ser confuso e difícil escolher uma para este trabalho.
Usei e brinquei com um bom número de tecnologias de aplicativos da web e descobri que o Sinatra é ideal para construir serviços da web e pequenos sites. Em particular, quando eu construo um serviço da web para oferecer suporte a um gadget Arduino, o Sinatra é uma escolha realmente boa.
O que é Sinatra e por que é uma escolha tão boa? Estou feliz que você perguntou!
Sinatra é uma linguagem para o rápido desenvolvimento de aplicações web. É construído sobre Ruby, uma linguagem de script de propósito geral muito popular e expressiva. Você pode ouvir o Sinatra sendo referido como um “DSL”, uma linguagem de domínio específico. O domínio aqui é a web. As palavras-chave (palavras) e a sintaxe criada para o Sinatra é tal que torna mais fácil e rápido para as pessoas criarem aplicações web.
Em uma época em que os chamados frameworks “opinativos” para desenvolvimento de aplicativos web como Ruby on Rails e Django são super populares, Sinatra captura o extremo oposto do espectro. Enquanto Ruby on Rails e Django exigem que o programador siga uma convenção e maneira de fazer as coisas específicas (o que, por sua vez, implica em uma curva de aprendizado longa e íngreme), Sinatra não faz tais requisitos.
Sinatra é conceitualmente muito mais simples do que os Rails e Djangos do mundo. Você pode começar a usar um aplicativo da web que pode interagir com seu Arduino em minutos.
Vou demonstrar com um exemplo. Esta é a aparência de um aplicativo da web mínimo Sinatra (leia o seguinte por enquanto, não faça isso no seu computador porque provavelmente você ainda não tem os pré-requisitos configurados para isso):
Em um único arquivo, vamos chamá-lo de my_app.rb, adicione este texto:
requer 'sinatra'get' / 'do "Olá, mundo!" fim
Na linha de comando, inicie o aplicativo assim:
ruby my_app.rb
Seu aplicativo será iniciado e você verá este texto no console:
peter @ ubuntu-dev: ~ / arduino / sinatra_demo $ ruby my_app.rbPuma 2.8.1 iniciando… * Tópicos mínimos: 0, tópicos máximos: 16 * Ambiente: desenvolvimento * Ouvindo em tcp: // localhost: 4567 == Sinatra / 1.4.4 subiu ao palco em 4567 para desenvolvimento com backup da Puma
O aplicativo agora está pronto para receber solicitações de clientes. Abra um navegador, aponte-o para https:// localhost: 4567 e é isso que você verá (veja a captura de tela em anexo).
São quatro linhas simples de código em um único arquivo. Em contraste, Rails teria exigido mais de cem arquivos, gerados simplesmente para satisfazer os requisitos do framework. Não me entenda mal, eu amo Rails, mas sério? …
Portanto, o Sinatra é simples e rápido de operar. Vou supor que você não sabe nada sobre Ruby, Sinatra e implantação de aplicativos na nuvem, portanto, na próxima seção, irei levá-lo passo a passo do zero à implantação de seu serviço da Web Arduino na nuvem.
Etapa 4: configure sua máquina de desenvolvimento
Sinatra é baseado na linguagem de programação Ruby. Portanto, você precisa instalar o Ruby antes de instalar o Sinatra.
Você também precisará instalar um servidor de armazenamento de valor-chave chamado Redis. Pense no Redis como um banco de dados que armazena dados em uma chave. Você usa a chave para recuperar os dados e ela é otimizada para velocidade em vez de flexibilidade das estruturas de dados para as quais um banco de dados relacional tradicional é projetado. O Home Alert armazena suas mensagens no Redis.
Etapa 5: Ruby no Mac ou Linux
Se você estiver usando um computador Mac ou Linux, recomendo que você use RVM para instalar e gerenciar sua instalação Ruby (RVM: Ruby Version Manager). As instruções para instalar Ruby com RVM estão nesta página, ou apenas copie e cole este comando em seu shell:
curl -sSL https://get.rvm.io | bash -s stable --ruby
Sente-se, relaxe e espere o download, a compilação e a instalação do RVM e do Ruby serem concluídos.
Etapa 6: Ruby no Windows
Se você estiver no Windows, recomendo seguir este guia no site do instalador Ruby para Windows e usar o aplicativo de configuração.
Etapa 7: verifique e defina seu Ruby
No momento da escrita, a última versão estável do Ruby é 2.1.1.p76. Você pode verificar a versão que foi instalada com RVM digitando isto:
Informação rvm
Muitas informações sobre RVM e Ruby aparecerão. No meu caso, esta é a seção Ruby:
ruby: intérprete: "ruby" versão: "2.1.1p76" data: "2014-02-24" plataforma: "x86_64-linux" patchlevel: "2014-02-24 revisão 45161" full_version: "ruby 2.1.1p76 (2014 -02-24 revisão 45161) [x86_64-linux]"
Eu recomendo que você também use Ruby 2.1.1, então se você vir algo mais antigo do que isso, atualize assim:
rvm install 2.1.1
Isso instalará o Ruby 2.1.1. O site do projeto RVM contém muitas informações sobre RVM e como gerenciar sua instalação Ruby.
Etapa 8: Instale o Sinatra (todas as plataformas)
Em Ruby, o código é compartilhado como pacotes chamados “gems”. O código que compõe o Sinatra pode ser instalado em seu computador como uma joia assim:
gem instalar sinatra
Esta linha irá buscar todo o código e documentação e instalá-los em seu computador.
Etapa 9: Redis no Mac ou Linux
Configurar o Redis no Mac ou Linux é fácil. O processo é explicado no site do Redis. Abra o terminal shell e digite estes comandos:
$ wget https://download.redis.io/releases/redis-2.8.7.tar…$ tar xzf redis-2.8.7.tar.gz $ cd redis-2.8.7 $ make
Execute o Redis digitando:
$ src / redis-server
… e pronto!
Etapa 10: Redis no Windows
O Redis no Windows é recomendado apenas para desenvolvimento e você precisará compilá-lo usando o ambiente de desenvolvimento Visual Studio Express gratuito. Requer um pouco de tempo para colocá-lo em funcionamento, mas funciona bem e vale o esforço. Siga as instruções na página do projeto no Github. Lá, você também encontrará um link para a página do Visual Studio Express.
Etapa 11: Criar o aplicativo de serviço da Web
Vamos construir o aplicativo e executá-lo em sua máquina de desenvolvimento. Ajustaremos o esboço do Arduino para se conectar a esta instância do aplicativo enquanto o testamos. Quando estivermos satisfeitos de que tudo está funcionando bem, vamos implantar na nuvem e atualizar o esboço para usar a instância da nuvem.
Aqui está o código Ruby, tudo em um único arquivo chamado "web.rb" (este código está disponível no Github).
Importante: Baixe e leia o arquivo PDF anexado, ele contém comentários detalhados incorporados (faça isso antes de continuar!).
Agora você pode experimentar o seu sistema de Alerta residencial. Em seu esboço, altere as constantes WEBSITE e WEBPAGE para apontar para sua máquina de desenvolvimento e o número da porta para seu servidor Sinatra de desenvolvimento. No meu caso, tenho uma máquina de desenvolvimento no IP 172.16.115.136 e o servidor de desenvolvimento Sinatra está escutando a porta 5000, então minhas configurações de esboço são:
#define HW_ID "123" #define WEBSITE “172.16.115.136:5000”#define WEBPAGE“/ get_message /"
Este endereço IP está acessível apenas para dispositivos em minha rede doméstica.
A configuração HW_ID representa o “ID do hardware”, ou seja, o ID com o qual o Arduino que controla o DMD se identificará para o aplicativo Sinatra. É um tipo de autenticação muito básico. O aplicativo da web entregará uma mensagem a um Arduino solicitando-a com base no HW_ID fornecido. Você pode ter vários dispositivos com o mesmo HW_ID, caso em que todos os dispositivos exibirão a mesma mensagem. Se você quiser “privacidade”, escolha um ID com muitos caracteres aleatórios que outras pessoas não serão capazes de adivinhar. Também tome cuidado, nenhuma comunicação é criptografada.
Agora vá em frente e inicie seu aplicativo Sinatra, digite isto (supondo que você esteja na pasta do projeto Sinatra):
ruby web.rb
… e você verá algo assim (alguns detalhes podem variar, desde que isso não trave, você está bem):
10:42:18 web.1 | começou com pid 4911910: 42: 18 web.1 | Puma 2.8.1 começando… 10: 42: 18 web.1 | * Tópicos mínimos: 0, tópicos máximos: 1610: 42: 18 web.1 | * Ambiente: desenvolvimento10: 42: 18 web.1 | * Ouvindo no tcp: //0.0.0.0: 5000
Aponte seu navegador da web para o local que o servidor está ouvindo e você verá isso (veja o segundo anexo).
Carregue seu esboço para o Arduino, certifique-se de que ele esteja conectado à sua rede local. Se tudo correr bem, o Arduino pesquisará seu serviço da web uma vez a cada minuto. Dê a ele uma mensagem para mostrar: No campo de código HW, digite o mesmo ID que você definiu para a constante HW_ID no esboço. Digite qualquer coisa no campo “Sua mensagem” e marque “Buzz?” caixa de seleção.
Envie, espere um minuto e veja sua mensagem aparecendo no DMD!
Etapa 12: implantar na nuvem usando o Heroku
Agora que o Home Alert está trabalhando em desenvolvimento, vamos colocá-lo para funcionar na nuvem. Existem inúmeras opções disponíveis para implantação de aplicativos da web. Com base no escopo e na complexidade do Home Alert, decidi que configurar meu próprio servidor virtual privado não vale o esforço. Em vez disso, é melhor ir para um serviço como o Heroku, um host de aplicativo. Para minha escala, o nível gratuito do Heroku é mais do que suficiente. Mesmo para o componente Redis, consegui escolher um plano gratuito de um dos muitos fornecedores Redis que trabalham com o Heroku.
Ainda assim, há um pouco de esforço envolvido, que tem a ver com fazer meu aplicativo ligeiramente modificado para que possa cumprir as especificações do Heroku. Os detalhes estão aqui, mas essencialmente você precisará adicionar esses arquivos ao seu projeto Sinatra (todos os arquivos a seguir podem ser baixados da minha conta no Github):
* config.ru: Informa ao Heroku qual arquivo contém o aplicativo. Aqui está o conteúdo:
require './web'run Sinatra:: Aplicativo
A primeira linha aponta para web.rb e a segunda linha realmente executa seu aplicativo.
* Gemfile: contém os Gems (pacotes de código ruby) que são exigidos pelo aplicativo. O Heroku vai olhar dentro deste arquivo para descobrir que outro código ele precisa instalar para que seu aplicativo funcione. Outra maneira de ver o Gemfile é que ele contém uma lista de dependências para o seu projeto. Se alguma dessas dependências não estiver disponível, seu aplicativo não funcionará. Aqui está o que está dentro do Gemfile para este aplicativo:
fonte "https://rubygems.org" ruby "2.1.1" gem 'sinatra'gem' puma'gem 'redis'
Primeiro, ele define o repositório de origem de todo o código Gem como rubygems.org. Em seguida, ele requer que o Ruby versão 2.1.1 seja usado para executar o aplicativo. Em seguida, ele lista os Gems necessários: Sinatra, Puma (um ótimo servidor de aplicativos da web Ruby) e Redis.
* Procfile: informa ao Heroku como inicializar o servidor. Existe apenas uma linha aqui:
web: rackup -s puma -p $ PORT
Essa linha diz que “web” é o único tipo de serviço necessário (você poderia ter outros, como “trabalhador”, para processamento em background), e que para iniciar o serviço o Heroku deve usar o comando que vem após o “:”.
Você pode simular o que o Heroku fará seguindo esta sequência em sua máquina de desenvolvimento (apenas digite o teste antes da seta; o que segue a seta é apenas uma descrição do comando):
$> gem install bundler -> installs Bundler, que sabe como lidar com o Gemfile. $> bundle install -> Bundler processa Gemfile e instala dependências. $> rackup config.ru -> Rackup é uma ferramenta que pode processar o arquivo config.ru. Normalmente vem com a versão mais recente do Ruby, se não for instalado assim: rack de instalação do gem.
A última etapa resulta na inicialização de seu aplicativo. Você deve ver exatamente a mesma saída de quando o iniciou com ruby web.rb anteriormente. É o mesmo aplicativo em execução, com a diferença de que o segundo método é como o Heroku o inicia.
Estamos quase prontos para implantar este aplicativo em sua conta Heroku. Se você ainda não tem um, vá em frente e crie um agora. Em seguida, siga o guia de início rápido para configurar sua conta e sua máquina de desenvolvimento local e, especialmente, o Heroku Toolbelt.
O Heroku Toolbelt instala o cliente de linha de comando Heroku, Git (o sistema de gerenciamento de código-fonte aberto) e Foreman (uma ferramenta Ruby que ajuda a gerenciar aplicativos baseados em Procfile).
Depois de concluir a instalação do Heroku Toolbelt seguindo as instruções no site do Heroku, siga estas etapas para implantar seu aplicativo (tudo é digitado na linha de comando, dentro do diretório do aplicativo):
$> heroku login -> Faça logon no Heroku através da linha de comando $> git init -> Inicialize um repositório Git para seu aplicativo $> git add. -> (observe o ponto!) Adicione todos os arquivos do diretório atual ao repositório Git $> git commit -m “init" -> Envie esses arquivos para o repositório, com uma nova mensagem $> heroku create -> Crie um novo aplicativo no Heroku. O Heroku dará ao seu aplicativo um nome aleatório, algo como "galáxia em chamas-997". Anote o nome e o URL para que você possa acessá-lo por meio do navegador da web mais tarde. Este URL terá a seguinte aparência: “https://blazing-galaxy-997.herokuapp.com/“. Você também precisará copiar o nome do host (a parte “blazing-galaxy-997.herokuapp.com”) do seu novo aplicativo para a constante WEBSITE do esboço do Arduino. Faça isso agora para não esquecer depois. $> heroku addons: add rediscloud -> Adiciona a camada gratuita do serviço Rediscloud Redis ao seu aplicativo. As definições de configuração são criadas automaticamente e disponibilizadas para seu aplicativo. $> git push heroku master -> Implante seu código no Heroku. Isso irá transferir automaticamente o código, configurar quaisquer dependências no Heroku e iniciar o aplicativo. No final do processo, você verá algo como: “https://blazing-galaxy-997.herokuapp.com implantado no Heroku”, o que significa que seu aplicativo agora está ativo na nuvem pública! Parabéns!
Vá em frente, experimente!
Etapa 13: juntando tudo
Com seu aplicativo da web implantado, carregue o esboço atualizado para o Arduino (lembre-se de que você atualizou a constante WEBSITE para apontar para sua instância de produção do aplicativo da web).
Use seu navegador para acessar seu aplicativo no Heroku. Como na introdução, digite seu ID de hardware na primeira caixa de texto, sua mensagem na segunda e marque a caixa de seleção para ativar a campainha.
Sua mensagem aparecerá no DMD cerca de um minuto depois se tudo correr bem!
Etapa 14: potencial
Há muito mais que você pode fazer com o seu sistema de Alerta residencial …
Ter um back end do Heroku significa que você pode adicionar muita lógica que pode adicionar funcionalidades incríveis. Por exemplo, você pode adicionar a capacidade do aplicativo de gerenciar notificações repetidas, confirmações ou controlar hardware de notificação adicional, como luzes estroboscópicas, etc. Você pode estendê-lo para o território de automação residencial e controlar luzes e portas. Você pode adicionar vários DMDs para exibir mensagens diferentes em cada um ou uma única mensagem em um display maior combinado. Estou apenas arranhando a superfície do que é possível aqui!
Aproveitar!
Recomendado:
LED Smart Cloud Light: 11 etapas (com imagens)
LED Smart Cloud Light: Esta é uma nuvem inteligente de LED que pode ser montada com o mínimo de ferramentas. Com o controlador, você pode fazer todos os tipos de padrões e opções de cores. Uma vez que os LEDs são endereçáveis individualmente (cada LED pode ter uma cor e / ou brilho diferente), o clo
Pixel Cloud Ambient Wall Light: 6 etapas (com imagens)
Pixel Cloud Ambient Wall Light: outra modificação de uma luz Ikea, adicionou LEDs endereçáveis e um controlador para criar algo único. Projetado para ser usado em um quarto de criança para uma luz ambiente suave e como uma luz noturna. Este projeto utiliza 56x APA102 pixels endereçáveis, um NLE
IOT Weather Cloud - Usando OpenWeatherMaps: 11 etapas (com imagens)
IOT Weather Cloud - Usando OpenWeatherMaps: Esta é uma nuvem que fica pendurada no teto de uma sala e reproduz certos padrões com base no resultado retornado da Internet. Ele recupera os dados meteorológicos de OpenWeatherMaps. Pode ser controlado manualmente por meio de uma interface da web ou automático
ESP8266 / ESP12 Witty Cloud - Arduino Powered SmartThings RGB Controller: 4 etapas
ESP8266 / ESP12 Witty Cloud - Arduino Powered SmartThings RGB Controller: RGB's RGB's Everywhere! Quem não gosta de ter uma iluminação colorida de aparência bacana em sua casa hoje em dia? Este pequeno projeto mostra o ESP8266 misturado com o controle SmartThings e acaba se tornando um verdadeiro controlador RGB legal para LED str
ESP8266 / ESP12 Witty Cloud - Arduino Powered SmartThings Sensor de iluminação: 4 etapas
ESP8266 / ESP12 Witty Cloud - Arduino Powered SmartThings Sensor de iluminação: ter sua iluminação inteligente reagindo a alguns dos horários padrão, como pôr do sol e nascer do sol, ou um horário específico … nem sempre corresponde ao que seus olhos estão vendo enquanto você está dentro sua casa. Talvez seja hora de adicionar um sensor que pode disparar todos aqueles