Seleção de planos e hardware para uma implementação prática de IoT com MCUs e MongoDB
Avalie esse Tutorial
Você tem uma ideia interessante para um dispositivo que pode considerar produzir e vender? Você gostaria de ter alguma nova funcionalidade implementada para sua casa inteligente? Você quer entender como a IoT funciona com um exemplo real com o qual podemos trabalhar do começo ao fim? Você é aficionado por microcontroladores e quer encontrar algumas alternativas de implementação? Se a resposta for sim para qualquer uma dessas perguntas, bem-vindo a esta série de artigos e vídeos.
Há algum tempo, venho implementando muitas automações em casa usando produtos de hardware e software de terceiros. Isso me traz muita alegria e, na maioria dos casos, melhora o ambiente em que minha família e eu vivemos. No passado isso era mais difícil, mas hoje em dia as ferramentas e sua compatibilidade melhoraram muito. Você pode começar com algo tão trivial, mas útil, como acender as luzes do jardim logo após o pôr do sol e apagar na hora em que você costuma ir para a cama. Mas você pode facilmente Go muito além.
Por exemplo, eu tenho um sensor de porta instalado na porta da minha garagem que aciona um cronômetro quando a porta é aberta e acende uma luz vermelha após seis minutos. Esta simples aplicação de domótica me ajudou a evitar deixar a porta aberta inúmeras vezes.
Toda a diversão, e às vezes até frustração, que experimentei implementando essas funcionalidades, juntamente com as ideias malucas que às vezes tenho para criar e construir coisas, me fizeram dar um passo à frente e aceitar um novo desafio nessa área. Então, pensei um pouco e criei um projeto que combinava diferentes requisitos que o tornavam adequado para ser usado como prova de conceito e algo que eu pudesse compartilhar com você.
Permita-me descrever as principais características deste projeto:
- Deveria ser algo que uma startup pudesse fazer (ou, pelo menos, próximo disso). Portanto, compartilharei a visão e a missão dessa aspirante a startup. Mas o mais importante é que apresentarei o conceito de nosso primeiro produto. Você não precisa comprar a ideia, nem vou gastar tempo tentando demonstrar que há uma necessidade comercial adequada para isso, em outras palavras, este é um projeto BPNI (plano de negócios não incluído).
- A ideia deve envolver algo além de apenas um microcontrolador simples (MCU). Eu gostaria de ter alguns desses, talvez até em salas diferentes, e ter seus dados coletados de alguma forma.
- Os dados serão coletados sem fio. Com vários sensores em locais diferentes, a opção com fio não é muito atraente. Vou optar por comunicações implementadas em frequências de rádio: Bluetooth e WiFi. Posso considerar o uso de ZigBee, Thread ou algo semelhante no futuro, se houver interesse suficiente. Por favor, seja vocal em seus comentários sobre este artigo.
- Usarei um computador para coletar todas as medições do sensor localmente e enviá-las para a nuvem.
- Os dados serão ingeridos no MongoDB Atlas e usaremos alguns de seus recursos de IoT, como coleções de séries temporais e análise em tempo real.
- Finalmente, vou usar algumas linguagens de programação que estão no limite ou até mesmo fora da minha zona de conforto, apenas para provar que elas não deveriam ser a limitação.
Visão: precisamos de ambientes de trabalho que aumentem nossa produtividade. Considere que a tecnologia, e a IoT em particular, podem ser úteis para isso.
Missão: Vamos criar, vender e dar suporte a produtos de IoT que ajudarão nossos usuários a serem mais produtivos e se sentirem mais confortáveis em seus ambientes de trabalho.
O primeiro produto no pipeline ajudará nossos clientes a medir e controlar os níveis de ruído no espaço de trabalho.
Espero que agora você esteja aliviado por este não ser outro tutorial do sensor de temperatura. Yippee-ki-yay!
Vamos usar um diagrama de implementação que refinaremos no futuro. No diagrama, incluí um númeroindeterminado de sensores (na verdade, 5) para medir os níveis de ruído em locais diferentes, portanto, a forma de escuta usada para eles. Na minha implementação inicial, usarei apenas alguns (dois ou três) com o único objetivo de verificar se a estação de coleta pode funcionar com mais de um a qualquer momento. Minha primeira opção para a estação de coleta, representada pelo ícone da caixa de entrada, é usar um Raspberry Pi (RPi) que tenha suporte integrado para Azure e WiFi. Finalmente, na parte superior do diagrama, temos um cluster MongoDB Atlas que usaremos para armazenar e utilizar os dados do sensor.
Como mencionei acima, eu não queria fazer um projeto que fosse apenas sobre a implementação de um sensor com um MCU e a leitura de valores dele. Existem muitos deles e alguns deles são incríveis, então minha contribuição seria inútil. Em vez disso, meu objetivo é trabalhar nos diferentes aspectos relevantes de um projeto do mundo real que usa dispositivos personalizados. Isso inclui codificação de hardware MCU, comunicação de dispositivos, ingestão de dados IoT e trabalho com eles.
Mas, ao mesmo tempo, eu não queria gastar mais tempo neste projeto do que o estritamente necessário. Então, começarei compartilhando com vocês um plano para a implementação das diferentes partes do projeto, incluindo algumas alternativas para a implementação. Vou começar com o que considero ser o mais interessante, mas posso mudar de marcha se a etapa em que estou trabalhando começar a se tornar muito complexa (para mim). Se você acha que a opção que decidi pular ainda faz sentido, sinta-se à vontade para adicionar um comentário para me incentivar a continuar explorando-a. Talvez eu volte depois que o projeto principal for concluído.
Também gostaria de informar que estou planejando usar linguagens de programação diferentes ao longo deste projeto. Eu me considero bastante fluente em alguns, como Rust e Go, mas com outros, como Python ou C++, já faz muito tempo que não tive que enviar qualquer confirmação real em qualquer ramo de produção de qualquer projeto do mundo real. Ainda assim, me desafiei a trabalhar com eles e compartilhar o código com você. Quero atualizar minha experiência prática com eles e aprender com seus comentários a fazer as coisas melhor.
Uma palavra sobre as ferramentas também. Seus amigos e Colegas sabe que eu SOU usuário e Fã do Emacs, mas meu objetivo é que este conteúdo seja útil para o maior número de pessoas. Saiba que você pode ter outros editores preferidos, por isso decidimos usar o que considero o mais popular atualmente, o Visual Studio Code, como fez com os vídeos deRust no passado. Por favor, Esqueça meus erros ao usá-lo.
Finalmente, há algumas coisas que não abordarei neste projeto, tanto por uma questão de brevidade quanto por minha falta de conhecimento delas. Os mais óbvios são a criação de PCBs personalizados com os componentes e a impressão 3D de uma caixa para o dispositivo resultante. Mas o mais importante é que não estarei implementando firmware para todos os devkits que selecionarei e muito menos em idiomas diferentes. Apenas algumas das placas em alguns idiomas. Como nós, pessoas preguiçosas, gostamos de dizer, isso fica como um exercício para o leitor.
Voltando ao objetivo deste projeto, é imitar o que se faria quando se quisesse criar um novo dispositivo do zero. Começarei, então, selecionando alguns devkits de microcontroladores que estão disponíveis no mercado. Esse é o primeiro passo e está incluído neste artigo.
Uma das principais características do hardware que pretendo usar é ter alguma maneira de trabalhar sem fio. Pretendo ter alguns sensores e, se eles exigirem uma conexão com fio à estação coletora, seria uma limitação muito forte. Portanto, meu próximo passo é implementar esta comunicação. Considerei duas alternativas para a comunicação. O primeiro é a partir do momento em que é feito o uso de baixa energia (BLE), e o segundo é o MQTT via Wi-Fi. Darei uma explicação mais detalhada quando chegarmos a eles. Do ponto de vista do consumo de energia, a primeira opção parece ser melhor, e consumir menos energia significa baterias que duram mais e usuários mais felizes.
Mas parece haver menos documentação (completa) sobre como implementá-lo. Por exemplo, não conseguir encontrar nem uma boa documentação para a biblioteca BLE que vem com o MicroPython nem nada sobre como usar o BLE com Azurez e DBus. Além disso, se eu implementar com sucesso os dois lados da comunicação BLE, preciso confirmar que posso fazer com que ela funcione simultaneamente com mais de um sensor.
Meu segundo e terceiro passos serão implementar o papel secundário da comunicação BLE nos devkits do microcontrolador e, em seguida, o papel central no RPi.
Continuarei com a implementação das contrapartes de WiFi. A etapa 4 fará com que os sensores publiquem suas medições via MQTT via WiFi, e a etapa 5 fará com que o Raspberry Pi assine o serviço MQTT e receba os dados.
Eventualmente, na Etapa 6, usarei o driver MongoDB C++ para carregar os dados em um MongoDB Atlas cluster. Uma vez que os dados sejam ingeridos pelo MongoDB Atlas cluster, poderemos aproveitar as vantagens que ele oferece em termos de armazenamento e arquivamento de dados, query e uso de análise e visualização em tempo real.
Então, esta é a lista de etapas do plano:
- Introdução ao projeto (você está aqui)
- Firmware do periférico BLE
- BLE central para Raspberry Pi OS
- Firmware do editor MQTT
- Assinante MQTT para Raspberry Pi OS
- Carregar dados do Raspberry Pi OS para clusters MongoDB Atlas
- Trabalhe com os dados usando o MongoDB
Tenho algumas ideias que posso acrescentar no final desta série, mas, por enquanto, isso corresponde aos meus objetivos e ao que eu queria compartilhar com você. Lembre-se de que também é possível que eu precise incluir etapas intermediárias para refinar algum código ou incluir alguma funcionalidade necessária. Estou aberto a sugestões de tópicos que podem ser adicionados e aprimoramentos neste conteúdo. Envie-os para mim enquanto o projeto ainda está em andamento.
Vou começar esta parte prática definindo os recursos que usarei e, em seguida, criar algumas placas de devkit populares e acessíveis que implementam esses recursos ou, pelo menos, podem ser feitas para fazê-lo. Terminarei com uma lista de painéis devkit. Não será nada parecido com as "top devkit boards" deste ano, mas sim uma lista de placas sugeridas que podem ser usadas em um projeto como este.
Vamos começar com os recursos:
- Eles precisam implementar pelo menos um dos dois padrões de comunicação por radiofrequência: WiFi e/ou Bluetooth.
- Eles precisam ter um microfone ou alguns pinos que me permitam conectar um.
- Ter outro sensor a bordo é valorizado, mas não é necessário. Ler a temperatura é extremamente simples, então começarei usando isso em vez de obter o áudio. Começarei a focar na parte de áudio mais tarde, quando as comunicações estiverem implementadas e funcionando.
- Pretendo ter sensores independentes, então seria bom se eu pudesse conectar uma bateria em vez de usar a fonte de alimentação USB. Novamente, um recurso interessante, mas não obrigatório.
- Por último, mas não menos importante, ter documentação disponível, exemplos e uma comunidade vibrante facilitará nossa vida.
O Rasberry Pi Pico (RP2) é produzido pela mesma empresa que vende os conhecidos computadores de placa única Raspberry Pi, mas é uma placa de microcontrolador com seu próprio processador RP-2040 . O RP-2040 é um processador Arm Cortex-M0dois núcleos. O modelo W inclui um módulo totalmente certificado que fornece 802.11n Wi-Fi e Azure 5.2. Ele não contém um gancho no painel do devkit, mas há exemplos e códigos disponíveis para conectar um microfônico de eletrônica. No entanto, ele tem um sensor de temperatura. Ele também não tem uma tomada para bateria, portanto teremos que usar nossos carregadores USB sobressalentes.
Finalmente, em termos de criação de código para esta placa, podemos usar:
- MicroPython, que é uma implementação do Python3 para microcontroladores. É eficiente e oferece as qualidades da linguagem Python: fácil de aprender, ecossistema estruturado com muitas bibliotecas e até REPL.
- C/C++ que fornecem uma interface de nível inferior para extrair cada fragmento da placa.
- JavaScript como aprendera muito recentemente. O conceito é semelhante ao do ambiente MicroPython, mas menos desenvolvido (por enquanto).
- Existem algumas caixas Rust para esse processador e a placa, mas pode ser necessário um esforço extra para usar BLE ou WiFi usando a caixa embassy.
A BBC micro é uma placa criada para fins de aprendizado. Ela vem com vários sensores integrados, inclusive um microfone e LEDs que podemos usar para obter feedback sobre os níveis de ruído. Ela usa um Nordic nRF52833 que possui um processador ARM Cortex-M4 com uma pilha completa de Bluetooth Low Energy, mas sem WiFi. Ele tem um soquete de bateria e pode ser comprado com um estojo para pilhas AA.
O objetivo tutorial também está presente na busca por opções para escrever código. Estas são as principais opções:
- Microsoft MakeCode, que é uma plataforma gratuita para aprender programação online usando uma interface gráfica para operar com diferentes blocos de código.
- Rust, porque o guia introdutório do Rust incorporado usa o microbit como painel de referência. Portanto, não há placa melhor para aprender a usar o Rust com dispositivos incorporados. O BLE não está no guia, mas também podemos usar a caixanrf-softdeviceda Embaixada para implementá-lo.
Este fórum também é voltado para pessoas que desejam ter o primeiro contato com a eletrônica. Ele vem com vários sensores, incluindo um de temperatura e um microfone, e também possui alguns LEDs RGB muito bons. Seu chip principal é um processador Nordic nRF52840 Cortex M4 com suporte para Bluetooth Low Energy. Como foi o caso da microplaca, não há suporte WiFi nesta placa. Possui um connector JST PH para uma bateria lipo ou uma bateria AAA.
Ele pode ser usado com o Microsoft MakeCode, mas seu ambiente de programação preferido é oCircuitPython. OCircuirPython é uma bifurcação do MicroPython com algumas bibliotecas específicas e um pouco mais refinadas para produtos AdaFrut, como esta placa. Se você quiser usar o Rust, há uma caixa para uma versão mais antiga desta placa, sem suporte a BLE. Mas, novamente, poderíamos usar as caixas da Embaixada para esse propósito.
O Adafruit Feather é uma plataforma que fornece uma interface consistente em diferentes chipsets, para que você possa conectar a eles qualquer uma das asas de penas complementares, ou seja, placas acessórias. Este modelo também é baseado no Nordic nRF52840 Cortex M4 e oferece Bluetooth Low Energy, mas sem WiFi. Ele vem com muitos sensores integrados, incluindo microfone e temperatura. Ele também possui um LED RGB e um connector JST PH para uma bateria que pode ser carregada usando o connector USB.
Embora esta placa também possa ser usada para aprender, eu diria que ela é mais voltada para prototipagem e as opções de programação são:
- CircuitPython como acontece com todas as placas Adafruit.
- C/C++ com o IDE Ardui.
- Rust, usando as caixas mencionadas anteriormente.
Em contraste com todos os processadores baseados em ARM das outras placas, esta placa possui um processador RISC-V single-core e um módulo WROOM que fornece não apenas conectividade WiFi e Bluetooth, mas também Zigbee e Thread (ambos são protocolos de rede projetados especificamente para IoT). Ele não possui sensores integrados, mas possui um LED e duas portas USB-C, uma para comunicações UART e outra para comunicações seriais USB Type-C.
As placas Espressif são tradicionalmente programadas em C/C++, mas durante o último ano, elas promoveram o Rust como um ambiente compatível. Tem até um livro introdutório que explica os conceitos básicos de seus quadros.
Neste artigo, apresentamos o projeto que estarei desenvolvendo. Será uma série de sensores que coletam dados de ruído que serão coletados por uma implementação sob medida de uma estação coletora. Explorarei dois mecanismos para a comunicação entre os sensores e a estação de coleta: BLE e MQTT por WiFi. Quando os dados estiverem na estação de coleta, eu os enviarei para um cluster MongoDB Atlas na nuvem usando o driver C++ e concluiremos o projeto mostrando alguns usos potenciais dos dados na nuvem.
Apresentei uma lista de requisitos para as placas de desenvolvimento e algumas alternativas que correspondem a esses requisitos, e você pode usá-la para este ou projetos semelhantes. Em nosso próximo episódio, tentarei implementar o papel periférico BLE em um ou mais dos fóruns.
Principais comentários nos fóruns
Ainda não há comentários sobre este artigo.