Índice:
- Etapa 1: componentes, suprimentos, ferramentas necessárias, aplicativos e serviço online
- Etapa 2: Hardware
- Etapa 3: Arquitetura da Solução
- Etapa 4: Software
- Etapa 5: Conclusão
Vídeo: MONITOR DE NUVEM Com AWS & ARDUINO - Menino Elétrico: 6 Passos
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:38
É um projeto simples - acender uma luz quando algo der errado … Cada vez mais entorpecido com notificações com tantos painéis em nossos computadores hoje em dia, como podemos ter certeza de não perder os realmente importantes. A resposta é um indicador de status físico. Ou, mais específico para a tarefa, um Cloud Monitor, que pode ficar na sua mesa - sempre à vista. Como o nome sugere, o monitor ajudará a ficar de olho na saúde de seus serviços em nuvem (… ou qualquer outra coisa realmente, o céu é o limite, desculpe o trocadilho). Até você, como eu, precisa fazer um? Mesmo se não, você pode ter uma ideia para um futuro projeto de IoT.
Bem, se você estiver pronto, vamos começar!
Etapa 1: componentes, suprimentos, ferramentas necessárias, aplicativos e serviço online
COMPONENTES E SUPRIMENTOS
_ Arduino Micro e Genuino Micro (1 unidade) … ou qualquer Arduino menor compatível - no meu caso, um Freetronics LeoStick (https://www.freetronics.com.au/collections/arduino/products/leostick)
_ ThingM BlinkM - LED RGB controlado I2C (1 unidade)
_ Mini nuvem de luz (1 unidade) … ou qualquer outro vaso translúcido de sua escolha
_ Cabo USB-A para B (1 unidade) … ou qualquer cabo USB antigo com plugue tipo A
FERRAMENTAS NECESSÁRIAS
_ Ferro de soldar (genérico)
APLICATIVOS E SERVIÇO ONLINE
_ Amazon Web Services AWS Lambda (https://aws.amazon.com/it/lambda/)
_ Amazon Web Services AWS IoT (https://aws.amazon.com/it/iot/)
Etapa 2: Hardware
A luz noturna já vem com um LED embutido - branco frio no meu caso. Achei que seria bom indicar diferentes status por cores diferentes. Então, eu apenas mantive o invólucro em forma de nuvem. Para o cérebro da operação, escolhi o menor Arduino compatível que tinha disponível: o Freetronics LeoStick tem sido minha plataforma de prototipagem preferida há anos e tenho muitas peças sobressalentes. Ele vem carregado com coisas boas: um alto-falante piezoelétrico, dois LEDs RGB (um está ligado à energia, embora RX e TX) e o melhor de tudo, você pode simplesmente conectá-lo a uma porta USB - nenhum FTDI externo ou cabo necessário. Também é pequeno, mas compatível com a placa de ensaio.
Por que não escolhi um ESP8266? Para ser verdadeiramente sem fio, você também pode cortar o cabo de alimentação - o que torna as coisas um pouco mais complicadas para adicionar uma bateria e o inconveniente de recarregar. Como o monitor em nuvem ficará próximo ao meu computador, é muito mais fácil usar a alimentação USB. Além disso, configurar a conexão Wi-Fi nem sempre é simples. Com base no ATmega32u4, o Arduino Micro e o LeoStick compartilham a estranheza de ter dados I2C no D2 e relógio no D3. Isso se torna relevante ao conectar o LED BlinkM RGB. Ao contrário das placas Atmega328 comuns, onde você pode simplesmente conectar a blindagem BlinkM nos conectores A2.. A5, isso não funcionará aqui (não me incomodei com a biblioteca I2C soft).
Ao dessoldar os cabeçalhos macho VCC e GND no BlinkM, eu poderia estendê-los com fio e manter tudo em um pequeno pacote plugável. O BlinkM tem seu próprio microcontrolador a bordo e permite aplicações avançadas: por ex. reproduza padrões de cores com script sem um Arduino conectado. Quase sinto que um WS2812 (Adafruits NeoPixels são ótimos) teria me servido melhor - infelizmente, não tinha nenhum disponível. Para finalizar a parte do hardware, cortei a extremidade oposta do plugue USB macho tipo A, passei-o por um orifício pré-perfurado perto da base da luz da nuvem e soldei os fios ao LeoStick (vermelho: 5V, branco: Dados-, verde: Dados +, preto: Terra).
Etapa 3: Arquitetura da Solução
O único requisito forte que me impus foi fazer com que o monitor rodasse atrás de um firewall. Embora seja um recurso crucial, isso tornou os web hooks para alterações de eventos impraticáveis. Um mecanismo de pesquisa é caro em termos de tráfego TCP e pode atrasar eventos dependendo da frequência de pesquisa.
A solução é encontrada em WebSockets que fornecem comunicação full-duplex. O serviço Amazon IoT fornece um agente de mensagens que suporta MQTT sobre WebSockets. Acontece que o serviço pode ser chamado sem a necessidade de configurar Coisas, Sombras, Políticas ou Regras.
Há um SDK de dispositivo disponível para o Arduino Yún e alguns esforços são feitos para portar o SDK para outras plataformas como o ESP8266. Mas como o monitor sempre estará conectado por interface serial, decidi desde o início ter um aplicativo NodeJS (executado no computador desktop) para implementar a API do cliente e usar o Arduino apenas para receber e exibir códigos de cores. Dessa forma, as alterações podem ser feitas facilmente em JavaScript, sem ter que se preocupar com uploads de firmware. Para testar um pequeno exemplo de infraestrutura é necessário. Digamos que temos um balanceador de carga habilitado em zonas de disponibilidade que faz verificações de integridade em uma instância de servidor da web e políticas de escalonamento automático com base na carga da CPU. O modelo CloudFormation correspondente pode ser ▶ ️ visualizado no Designer ou ▶ ️ criado diretamente no console. Nota: alguns dos serviços nesta pilha podem incorrer em cobranças.
Estendi o modelo com propriedades para a função Lambda e as permissões necessárias. Posteriormente, exige que o ponto de extremidade da API REST da IoT seja inserido como um parâmetro. Para automatizar isso, escrevi um pequeno script de shell que usa a CLI para solicitar o ARN (> aws iot describe-endpoint) e, em seguida, chama create-stack com o parâmetro in-line. Ou você ainda pode fazer isso manualmente:
// RETRIVE IoT REST API ENDPOINT
aws iot describe-endpoint
// CREATE STACK> aws cloudformation create-stack --stack-name MiniCloudMonitor --template-body file: //cfn-template.json --parameters ParameterKey = IotRestApiEndpoint, ParameterValue = {IoT_REST_API_ENDPOINT} --capabilities CAPABILITY_NAMED_IAM
// DELETE STACK> aws cloudformation delete-stack --stack-name MiniCloudMonitor
O ideal é usar os mesmos limites de alarme que acionam o escalonamento automático, para também chamar a função Lambda e assim atualizar o status do monitor. Atualmente, isso só é possível ao usar SNS como um intermediário. Na época, essa camada extra parecia redundante e decidi usar as regras de ciclo de vida do CloudWatch EC2 para chamar o Lambda diretamente. Ainda assim, quero explorar a opção de SNS → Lambda no futuro.
Etapa 4: Software
Comecei escrevendo o Arduino Sketch. O loop principal () está lendo Chars da conexão serial e construindo uma String até receber um caractere de nova linha. Em seguida, assume-se que um código de cor hexadecimal foi enviado e o comando I2C apropriado é gravado no LED BlinkM. Não se trata tanto de eficiência quanto de conveniência. As fontes completas para este Sketch e outros arquivos podem ser obtidas no GitHub. A seguir estão alguns snippets de código relevantes:
void loop () {
while (Serial.available ()) {
char inChar = (char) Serial.read ();
if (inChar == '\ n') {
número longo = strtol (inputString.c_str (), NULL, 16);
byte r = número >> 16;
byte g = número >> 8 & 0xFF;
byte b = número & 0xFF;
BlinkM_fadeToRGB (blinkm_addr, r, g, b);
inputString = "";
} outro {
inputString + = inChar;
}
}
}
O aplicativo NodeJS deve implementar interfaces para AWS e Arduino. Posteriormente, pode ser realizado em apenas algumas linhas de código ao usar o excelente pacote serialport:
var serialport = require ('serialport'); port = new serialport (PORT_COM_NAME, {
baudRate: SERIAL_BAUD_RATE
});
port.on ('abrir', função () {
});
port.on ('erro', função (errar) {
});
Conectar-se ao AWS IoT também não exige muito esforço. A única armadilha é saber que o uso de MQTT + WebSockets na porta 443 requer autenticação por meio de chaves de acesso. O SDK irá lê-los nas variáveis de ambiente. Pode ser necessário exportar explicitamente AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY.
var awsiot = require ('aws-iot-device-sdk'); var device = awsiot.device ({
clientId: 'MiniCloudMonitor-' + (Math.floor ((Math.random () * 100000) + 1)), região: AWS_REGION, protocolo: 'wss', porta: 443, debug: true
});
device.on ('conectar', função () {
device.subscribe (MQTT_TOPIC);
});
device.on ('mensagem', função (tópico, carga útil) {
if (porta && carga útil && tópico == MQTT_TOPIC) {
var mensagem = JSON.parse (carga útil);
if (message.hasOwnProperty (MQTT_JSON_KEY))
{ Retorna;
}
}
});
A função Lambda aceita um código de cor como parâmetro de entrada - não é bonito, mas muito flexível neste estágio. Para poder publicar no tópico MQTT, ele instancia um objeto IotData, que requer o terminal da API REST IoT. O modelo CloudFormation cuidou disso durante a criação da pilha.
var AWS = require ('aws-sdk'); var mqtt = new AWS. IotData ({
endpoint: process.env. MQTT_ENDPOINT});
exportações.handler = função (evento, contexto, retorno de chamada) {
var params = {
tópico: process.env. MQTT_TOPIC, carga útil: '{ "color \": / "' + event.colour + '\"}', qos: 0
};
mqtt.publish (params, function (err, data) {
retorno de chamada (errar);
});
};
Etapa 5: Conclusão
Eu realmente gostei de trazer um evento virtual "nascido" na nuvem para o mundo físico. E como meu projeto de estimação, foi muito divertido. Para levar isso para o próximo nível, eu consideraria …
- melhorando a robustez e o tratamento de exceções
- explore melhores maneiras de integrar as métricas de nuvem da AWS
- experimente mais indicadores físicos, como medidores, gráficos de barras, …
- tem a opção de mudar para outras plataformas como Azure, Google, Heroku, …
- monitorar eventos específicos de aplicativos para Jenkins, GitHub, …
Espero que tenha gostado de ler este guia e talvez até tenha aprendido algo novo ao longo do caminho. Se você puder pensar em uma maneira diferente / melhor de fazer as coisas, compartilhe nos comentários abaixo. E, claro, se você detectar erros, um aviso será muito apreciado. Obrigado pelo seu tempo.
Recomendado:
Como enviar dados para a nuvem com Arduino Ethernet: 8 etapas
Como enviar dados para a nuvem com Arduino Ethernet: Este instrutível mostra como publicar seus dados para AskSensors IoT Platform usando Arduino Ethernet Shield. O Ethernet Shield permite que seu Arduino se conecte facilmente à nuvem, envie e receba dados com uma conexão à Internet. O que nós
Conectando o Arduino WiFi à nuvem usando ESP8266: 7 etapas
Conectando Arduino WiFi à nuvem usando ESP8266: Neste tutorial, vamos explicar como conectar seu Arduino à nuvem IoT através de WiFi. Vamos configurar uma configuração composta de um Arduino e um módulo WiFi ESP8266 como um IoT Thing e torná-lo pronto para se comunicar com a nuvem AskSensors.L
Nuvem Artificial: 3 Passos
Nuvem Artificial: Olá a todos, Hoje farei uma nuvem artificial com a cor do arco-íris
Medidor de vazão Arduino pronto para nuvem: 5 etapas
Medidor de vazão Arduino pronto para nuvem: para este tutorial, mostrarei como configurar um arduino com o medidor de vazão Adafruit, enviar os dados obtidos para a nuvem e usá-los para qualquer projeto que você possa imaginar
Sistema de atendimento por impressão digital Arduino com armazenamento de dados em nuvem: 8 etapas
Arduino Fingerprint Attendance System W / Cloud Data Storage: Você pode ler este e outros tutoriais incríveis no site oficial da ElectroPeakOverviewNow dia, aprender sobre a operação e implementação de dispositivos IoT é tão essencial devido ao uso crescente de sistemas IoT. Neste tutorial, vamos fazer