IoT usando Firebase e NodeMCU
Neste projeto, vou mostrar como fazer um dispositivo IoT IOT usando o Google Firebase e seu próprio aplicativo Android personalizado feito usando o MIT App inventor.
Existem muitos servidores e plataformas online de terceiros disponíveis para mostrar os dados do seu projeto IoT. Mas, de todas essas plataformas como ThingSpeak, Adafruit.io, Blynk e IFTTT, etc., mas hoje eu seleciono Firebase.
Conteudo
Por que escolher o Firebase?
O Firebase fornece uma maneira rápida de manter os dados sensoriais coletados no nível do dispositivo e funciona muito bem com as APIs do Android, que são suportadas pelo AndroidThings. Muitos programadores de dispositivos móveis e de dispositivos que conheci lutam com a programação do lado do servidor. O Firebase pode realmente ajudar a preencher essa lacuna e torná-la mais fácil. Será interessante ver os desenvolvedores usarem seus recursos offline. Se você é novo em IoT ou em qualquer dispositivo que coleta dados e precisa transmiti-los por redes, a regra de ouro a ser assumida é que a conectividade de rede não pode ser assumida. Como resultado, você precisará coletar os dados off-line e, quando a rede estiver disponível, transmiti-los ao seu servidor. O Firebase com seus recursos off-line pode realmente tornar isso simples para muitos desenvolvedores.
O Firebase tem vários recursos, incluindo Realtime Database, Authentication, Cloud Messaging, Storage, Hosting, Test Lab e Analytics, mas vou usar apenas Authentication e Real-time Database.
OK, vamos prosseguir para a construção do projeto.
Vou dividir este projeto em três partes:
- Criar uma conta Firebase
- Fazendo o aplicativo
- Programando Arduino
Criar uma conta Firebase
Em primeiro lugar, você precisará de uma conta do Google para usar o firebase. Abra o console do Firebase clicando aqui. Faça login com sua conta do Google e clique no botão criar. Nomeie o projeto como “FirebaseIOT” e marque a caixa de seleção onde é solicitado que você aceite os termos do Firebase. Depois disso, clique em “Continuar“. Clique novamente no botão Continuar na próxima tela. Na janela seguinte, você deve marcar duas caixas de seleção, depois clicar em “Criar Projeto”.
Agora, no lado esquerdo, clique na guia Develop e em Database. Clique em “Create Database“. Clique em “Avançar” e depois em “Concluído”. Aqui, o Cloud Firestore será carregado automaticamente, o que não usamos neste projeto. Então, clique no Firestore e mude para Realtime Database. Agora temos que fornecer as permissões de leitura e gravação para que nosso hardware e software possam acessar o banco de dados Firebase. Para fazer isso, vá até a guia Regras e altere as permissões para “true” de falso.
Agora concluímos a parte de configuração da conta Firebase. Um pequeno passo a mais para ir. Crie um novo Branch (Bucket) chamado “FirebaseIOT“. Este nome de branch deve ser igual ao nosso código e aplicativo. Portanto, certifique-se de digitá-lo corretamente. Agora adicione três tags para armazenar os dados de temperatura, umidade e LED. os nomes das tags são temperatura, umidade e led. Esses nomes de tag não devem ser falsos.
Componentes e suprimentos
- NodeMCU ESP8266 Breakout Board x 1
- Sensor de temperatura e umidade DHT11 (3 pinos) × 1
- ProtoBoard (genérico) × 1
- LED (genérico) × 1
- Fios de jumpers masculino/feminino
Fazendo o aplicativo
Você não precisa de nenhuma experiência de codificação para fazer o aplicativo Android para este projeto. Faremos o aplicativo arrastando a zero. Como construímos o LEGO. Para isso, usamos o MIT App Inventor, que é um ambiente de programação visual intuitivo que permite a todos – até crianças – construir aplicativos totalmente funcionais para smartphones e tablets. Aqueles que são novos no MIT App Inventor podem ter um primeiro aplicativo simples instalado e funcionando em menos de 30 minutos. E mais, nossa ferramenta baseada em blocos facilita a criação de aplicativos complexos e de alto impacto em muito menos tempo do que os ambientes de programação tradicionais. O projeto MIT App Inventor visa democratizar o desenvolvimento de software ao capacitar todas as pessoas, especialmente os jovens, para passar do consumo de tecnologia à criação de tecnologia.
Então, vamos começar com o inventor do aplicativo MIT.
Em primeiro lugar, faça login com sua conta do Google, aceite os termos e crie um novo projeto. Nomeie o projeto como quiser (realmente não importa).
Adicione a opção Firebase da guia Experimental, que é um componente invisível usado para conectar nosso aplicativo ao banco de dados do firebase. Adicione dois botões e seis rótulos de texto (três em uma linha), use as disposições horizontal e vertical para configurar o layout. Não estou pronto para escrever um ensaio sobre como configurar o layout.
Adicione credenciais do Firebase ao aplicativo:
Para adicionar as credenciais do Firebase, clique no ícone do Firebase DB no qual você adicionou ao seu aplicativo. Você pode ver uma guia de propriedades no lado direito da tela. Aqui, você deve alterar o token do Firebase e o URL do Firebase.
O token do Firebase é a Database Secret Key. Para obter o token, clique em Configurações no canto superior esquerdo e selecione Configurações do projeto. Vá até a guia Contas de serviço e selecione Segredos do banco de dados. Você pode notar que o token ficará oculto. Clique no botão Mostrar e copie o código secreto.
Agora precisamos fornecer o URL do Firebase. A URL é encontrada na página principal onde criamos nossas tags. Clique na opção Banco de dados em Desenvolver e escolha o banco de dados Realtime. Copie o URL e cole na seção URL do Firebase no inventor do aplicativo MIT.
Observe: este token e a URL, temos que usar este código no código do Arduino também.
Depois de adicionar as credenciais do Firebase, clique no botão de blocks no canto superior direito. Aqui, precisamos fornecer as instruções para os componentes visíveis e não visíveis que adicionamos na parte do designer.
Estamos usando a opção “FirebaseDB1.DataChanged” para recuperar os dados sempre que os dados são alterados no banco de dados firebase. FirebaseDB1 chamará a função para buscar os dados do banco de dados. Esses dados buscados são armazenados nas variáveis predefinidas em relação aos seus nomes de tag. Somos “FirebaseDB1.StoreValue” para atualizar o estado do LED. Quando o botão ON for pressionado, os dados serão atualizados com 1, e quando o botão OFF for pressionado, os dados serão atualizados com 0
Então, crie os blocos como mostrado na imagem abaixo para fazer todas essas ações
A configuração agora está concluída. Você pode adicionar um ícone de aplicativo personalizado ao seu aplicativo Android. Assista ao vídeo para ver como fazer isso. Agora você está pronto para construir seu projeto. Construa seu aplicativo e teste-o em seu dispositivo Android.
NodeMCU de programação
Ok, agora estamos prontos para programar nosso Microcontrolador. Certifique-se de ter instalado os arquivos do IDE do Arduino e da placa ESP8266. Você precisa instalar três bibliotecas Arduino para compilar o código para este projeto.
A primeira biblioteca é para usar o Firebase RTDB com nosso NodeMCU, a segunda é para ler os dados do Sensor de Temperatura e Umidade DHT11 no qual iremos carregar seus dados para o banco de dados. O terceiro é a biblioteca de dependências para a biblioteca do sensor DHT11. O código não será compilado sem todas essas bibliotecas. VOCÊ DEVE INSTALÁ-LOS. Para instalar essas bibliotecas, você pode escolher dois métodos.
- Instalação Direta
Prefiro esse método porque é a maneira mais fácil. Abra seu Arduino IDE, clique em Ferramentas> Gerenciar Bibliotecas. Agora, pesquise cada biblioteca e instale-as.
- Instalar adicionando biblioteca Zip
Baixe a biblioteca da página GitHub fornecida acima. Abra o Arduino IDE e vá para Sketch> Incluir Biblioteca> Add.ZIP Library e escolha os arquivos baixados.
Abra o código no Arduino IDE, você deve adicionar suas credenciais Firebase e WiFi no código
#define FIREBASE_HOST "YOUR_FIREBASE_PROJECT.firebaseio.com" //Sem esquemas http:// ou https://
FIREBASE_HOST é o URL do Firebase e FIREBASE_AUTH é o token do Firebase. Já copiamos esses dois. Cole-o no código.
O URL do Firebase não deve conter http:// ou https://
WIFI_SSID é o nome da sua rede WiFi e WIFI_PASSWORD é a senha.
//FirebaseESP8266.h deve ser incluído antes de ESP8266WiFi.h
Essas três linhas chamarão as bibliotecas necessárias para este código. Observe que “FirebaseESP8266.h” deve ser incluído antes de “ESP8266WiFi.h”, caso contrário, o código mostrará alguns erros e não será compilado.
#define DHTPIN 2
Essas linhas de código definirão o número do pino no qual o sensor DHT e o LED estão conectados.
Não vou explicar o código do sensor DHT. se você quiser saber mais, pode ir para a página de documentação oficial aqui.
Agora, deixe-me explicar o código que usamos neste projeto para conexão com o Firebase RTDB.
FirebaseData firebaseData;
Esta linha declarará o objeto Firebase Data no escopo global.
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
A primeira linha inicializará a conexão do Firebase com o Firebase HOST e o token fornecidos. a segunda linha de código é opcional, ela definirá a reconexão do AP.
Read Data
Os dados em um nó específico no Firebase RTDB podem ser lidos por meio dessas funções get.
As funções incluem get
, getInt
, getFlot
, getDouble
, getBool
, getString, getJSON, getArray, getBlob
, getFile
.
if (Firebase.getString(ledData, "/FirebaseIOT/led")){
Aqui, usamos getString para buscar os dados do banco de dados. A “condição if” irá verificar os dados recebidos e acenderá o led se os dados forem iguais a “1” e desligará se os dados forem iguais a “0”.
Store Data
Para armazenar dados em um nó específico no Firebase RTDB, use essas funções de conjunto.
A função incluiu set
, setInt
, setFlot
, setDouble
, setBool
, setString, setJSON
, setArray
, setBlob
e setFile
.
if (Firebase.setFloat(firebaseData, "/FirebaseIOT/temperature", t))
A primeira linha é suficiente para armazenar os valores da tag especificada no banco de dados. As outras linhas são para fins de depuração para que você possa notar qualquer erro na conexão com o Firebase DB. O programa fornecerá atualizações no monitor serial após cada atualização bem-sucedida e atualizações malsucedidas.
Neste projeto, usamos o método setFloat
, uma vez que os dados que obtemos do sensor são dados Float. “/FirebaseIOT/temperature
” Esta linha denota o local em que nó /tag os dados devem ser atualizados.
Se você quiser aprender mais profundamente, pode verificar a documentação oficial.
Isso é tudo para este projeto. Siga-nos para projetos mais interessantes.