Flutter + ESP32 = Verificador de temperatura ambiente!
Nosso projeto visa a concepção de um sistema simples de medição e leitura de temperatura, que seja aplicável de forma prática em todas as residências. O sistema permite ler a temperatura dos cômodos da casa usando um aplicativo de telefone transparente. A principal suposição do nosso sistema é sinalizar um alarme via SFM-27-11 quando a temperatura ultrapassar 30 graus.
O módulo ESP32-DevKit WiFi é responsável por processar os dados do sensor para controle de temperatura e a capacidade de enviá-los para o servidor usando uma conexão de internet WiFi e salvá-los no servidor firebase
Usando o aplicativo no telefone, você pode verificar facilmente a temperatura na sala.
Diagrama de conexão do ESP-32
Módulo de programação – Cliente Firebase ESP-32
A idéia principal é instalar uma biblioteca de suporte ao cliente firebase em nosso módulo ESP-32.
Em seguida, precisamos programar o módulo ESP-32 para poder enviar dados para o servidor firebase.
// Inclui biblioteca WiFi #include <Arduino.h> #if defined(ESP32) || defined(PICO_RP2040) #include <WiFi.h> #elif defined(ESP8266) #include <ESP8266WiFi.h> #endif // Inclui a biblioteca Firebase (esta biblioteca) #include <Firebase_ESP_Client.h> // Definir o objeto Firebase Data FirebaseData fbdo; // Definir os dados FirebaseAuth para dados de autenticação FirebaseAuth auth; // Definir os dados FirebaseConfig para dados de configuração FirebaseConfig config; // Atribui o host do projeto e a chave de API config.host = FIREBASE_HOST; config.api_key = API_KEY; // Atribui as credenciais de login do usuário auth.user.email = USER_EMAIL; auth.user.password = USER_PASSWORD; // Inicializa a biblioteca com o Firebase authen e config. Firebase.begin(&config, &auth); // Opcional, defina a reconexão AP em setup() Firebase.reconnectWiFi(true); // Opcional, defina o número de tentativas de erro Firebase.RTDB.setMaxRetry(&fbdo, 3); // Opcional, defina o número de filas retomáveis por erro Firebase.RTDB.setMaxErrorQueue(&fbdo, 30); // Opcional, use solicitações HTTP GET e POST clássicas. // Esta opção permite que as funções get e delete (requisições HTTP PUT e DELETE) funcionem para // dispositivo conectado atrás do Firewall que permite apenas requisições GET e POST. Firebase.RTDB.enableClassicRequest(&fbdo, true); #if definido(ESP8266) // Opcional, defina o tamanho do BearSSL WiFi para receber e transmitir buffers // Firebase pode não suportar a fragmentação de transferência de dados, você pode precisar reservar o buffer para corresponder // os dados a serem transportados. fbdo.setBSSLBufferSize(1024, 1024); // tamanho mínimo é 512 bytes, tamanho máximo é 16384 bytes #fim se // Opcional, defina o tamanho do buffer de resposta HTTP // Evita falta de memória para carga útil grande, mas os dados podem ser truncados e não podem determinar seu tipo. fbdo.setResponseSize(1024); // tamanho mínimo é 1024 bytes
Na imagem anexa, podemos ver o código conectando a comunicação serial. Em seguida, tentei conectar-me ao roteador e ao cliente firebase. Se tudo correr bem, conseguimos nos comunicar com o banco de dados firebase. Todas as mensagens serão exibidas no console.
O problema que encontramos com a leitura de temperatura analógica. O ESP-32 possui pinos DIGITAIS. Então, usando a função analógica para digital (ADC) e a temperatura de referência.
// Leia LM38_Sensor1 ADC Pin LM35_Raw_Sensor1 = analogRead(LM35_Sensor1); // Calibre o ADC e Pege a Voltagem (Em mV) Voltage = readADC_Cal(LM35_Raw_Sensor1); // TempC = Voltage(mV) / 10 LM35_TempC_Sensor1 = Voltage / 10;
Usamos a função readADC_cal para substituir o valor lido do PIN-out
uin32_t readADC_Cal(int ADC_Raw) { esp_adc_cal_characteristics_t adc_chars; esp_adc_cal_characterize(ADC_UNIT_1, ADC_ATTEN_DB_11, ADC_WIDTH_BIT_12, 1100, &adc_chars); return(esp_adc_cal_raw_to_voltage(ADC_Raw, &adc_chars); }
Que converte o valor apropriado para Temperatura.
Para gerenciar o buzzer, utilizamos a biblioteca EasyBuzzer, após atingir uma temperatura superior a 30 graus, o buzzer liga automaticamente, sinalizando um alarme de que a temperatura está muito alta.
if(LM35_TempC_Sensor1 > 30.0) { EasyBuzzer.beep(frequency, 100); } else { EasyBuzzer.stopBeep(); }
Cada dado que será lido do módulo ESP-32 será salvo no Firebase Realtime DataBase.
o ler dados do servidor Implementamos um aplicativo de flutter simples
Não tenho mais o código fonte, estou tentando refazer, pois deu errado no AndroidStudio, e perdi, estou refazendo em VsCode