/*
Projeto 05 - Subscriber (Consumidor)
Curso: Bancos de Dados Aplicados à IoT
Faculdade de Tecnologia - UNICAMP
Equipe:
- Claudio Cavalcante de Almeida
- Gilson Henrique Lopes Andrade
- Renata dos Santos Silva Paes
*/
#include <WiFi.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <ESP32_MySQL.h>
// === CONFIG WIFI ===
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
// === CONFIG DB ===
#define HOST_DB "jlzem.io"
#define PORTA_DB 3306
#define USER_DB "u907186638_root"
#define PASS_DB "Testes_2024"
#define NOME_DB "u907186638_SmartObject"
#define TABELA "avaliacao"
#define DISPOSITIVO "hw23"
// === PINOS ===
#define TRIG_PIN 4
#define ECHO_PIN 2
#define LDR_PIN 32
#define NTC_PIN 33
#define MQ2_PIN 34
// === OBJETOS ===
LiquidCrystal_I2C lcd(0x27, 16, 2);
extern WiFiClient client;
ESP32_MySQL_Connection conn((Client *)&client);
ESP32_MySQL_Query query_mem(&conn);
char query[256];
unsigned long ultimaExecucao = 0;
// === FUNCOES ===
void mostrar(String l1, String l2) {
lcd.clear();
lcd.setCursor(0, 0); lcd.print(l1);
lcd.setCursor(0, 1); lcd.print(l2);
delay(1000);
}
long medirDistancia() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
return pulseIn(ECHO_PIN, HIGH) * 0.034 / 2;
}
void setup() {
Serial.begin(115200);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
lcd.init(); lcd.backlight();
mostrar("Fac. Tecnologia", "Unicamp Limeira");
mostrar("Bancos de Dados", "Aplicados a IoT");
mostrar("Avaliacao", "Projeto 05");
mostrar("# Produtor #", "# Publisher #");
mostrar("Renata Dos", "Santos Silva");
mostrar("Claudio C.", "de Almeida");
mostrar("Gilson H.", "L. Andrade");
mostrar("Wi-Fi", "Conectando...");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) delay(200);
mostrar("Wi-Fi", "Conectado!");
mostrar("Conectando...", "MySQL");
if (conn.connect(HOST_DB, PORTA_DB, USER_DB, PASS_DB, NOME_DB)) {
mostrar("MySQL OK", "Conectado!");
} else {
mostrar("ERRO", "Conexao BD");
}
}
void loop() {
if (millis() - ultimaExecucao >= 30000) {
ultimaExecucao = millis();
int ldrRaw = analogRead(LDR_PIN);
int gasRaw = analogRead(MQ2_PIN);
int ntcRaw = analogRead(NTC_PIN);
int distCm = medirDistancia();
int tempC = map(ntcRaw, 0, 4095, 10, 50);
int tempF = tempC * 9 / 5 + 32;
int distPol = distCm * 0.3937;
int ldrCalc = map(ldrRaw, 0, 4095, 0, 100);
int gasCalc = map(gasRaw, 0, 4095, 0, 100);
mostrar("Luminosidade:", String(ldrRaw) + " u");
mostrar("Temperatura:", String(tempC) + " C");
mostrar("Gas:", String(gasRaw) + " u");
mostrar("Distancia:", String(distCm) + " cm");
mostrar("Enviar Dados", "Servidor MySQL");
snprintf(query, sizeof(query),
"INSERT INTO %s (dispositivo, tempc, tempf, distc, distp, lumiu, lumip, gasu, gasp) VALUES (\"%s\", %d, %d, %d, %d, %d, %d, %d, %d);",
TABELA, DISPOSITIVO, tempC, tempF, distCm, distPol, ldrRaw, ldrCalc, gasRaw, gasCalc);
if (query_mem.execute(query)) {
mostrar("Dados", "Gravados OK");
} else {
mostrar("ERRO", "INSERT SQL");
}
}
}