# Arduino
# Bibliotecas
Skecht
// Activa la base de datos Supabase como RealTime en:
// Database => Replication => Source => botón "tables" => activa la tabla
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include "DHT.h"
#include "supabaseAPI.hpp"
#define RELE1PIN 0
#define RELE2PIN 22
#define RELE3PIN 21
#define INTERRUPTOR1PIN 2 // Boton
#define INTERRUPTOR2PIN 34
#define INTERRUPTOR3PIN 33
#define DHTPIN 23
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
bool estado_interruptor1_inicial = 0;
bool estado_interruptor1_anterior = 0;
bool estadoInterruptor2 = 0;
bool estadoInterruptor3 = 0;
bool state1;
bool state2;
bool state3;
float temp;
float hum;
const char* ssid = "studio";
const char* password = "88888888";
char objetoJson[128];
int id = 1;
String payload;
void baseDatos () {
String datos = GetById(1); // OBTENEMOS LOS DATOS DE LA BASE DE DATOS
char documentoJson[500];
datos.replace(" ", "");
datos.replace("\n", "");
datos.trim();
datos.remove(0,1);
datos.remove(payload.length()-1, 1);
datos.toCharArray(documentoJson, 500);
Serial.println(datos);
StaticJsonDocument<200> documento;
deserializeJson( documento, documentoJson);
state1 = documento["luz1"];
state2 = documento["luz2"];
state3 = documento["luz3"];
Serial.println(state1);
Serial.println(state2);
Serial.println(state3);
}
void actualizar () {
const size_t CAPACITY = JSON_OBJECT_SIZE(6); // Asignamos un tamaño al objeto Json
StaticJsonDocument<CAPACITY> doc; // Creamos el documento Json
JsonObject obj= doc.to<JsonObject>(); // Introducimos los objetos al doc Json
obj ["id"] = id;
obj ["luz1"] = state1;
obj ["luz2"] = state2;
obj ["luz3"] = state3;
obj ["temperatura"] = temp;
obj ["humedad"] = hum;
serializeJson (doc, objetoJson); // Serializamos el "doc" a variable "char objetoJson"
Serial.println("Objeto json: ");
Serial.println(objetoJson);
UpdateById( 1, objetoJson); // ACTUALIZAMOS LA BASE DE DATOS
}
void setup() {
Serial.begin(115200);
//pinMode(LED_BUILTIN, OUTPUT);
pinMode(RELE1PIN, OUTPUT);
pinMode(RELE2PIN, OUTPUT);
pinMode(RELE3PIN, OUTPUT);
pinMode(INTERRUPTOR1PIN, INPUT_PULLUP);
pinMode(INTERRUPTOR2PIN, INPUT);
pinMode(INTERRUPTOR3PIN, INPUT);
pinMode(DHTPIN, INPUT);
dht.begin();
WiFi.begin(ssid, password);
Serial.print("Conectando...");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.print("Conexión Wifi establecida, mi dirección IP es: ");
Serial.println(WiFi.localIP());
}
void loop() {
if ((WiFi.status()== WL_CONNECTED)) { // Condición si hay conexion WiFi establecida
temp = dht.readTemperature(); // Obtenemos la temperatura
hum = dht.readHumidity(); // Obtenemos la humedad
if (isnan(temp) || isnan(hum)) { // Condición si no es un número el valor
Serial.println(F("¡Error en la lectura del sensor DHT!")); // Enviamos un error
return; // No devuelve nada
}
estado_interruptor1_inicial = digitalRead(INTERRUPTOR1PIN);
if ((estado_interruptor1_inicial == HIGH) && (estado_interruptor1_anterior == LOW) || (estado_interruptor1_inicial ==LOW) && (estado_interruptor1_anterior == HIGH)){
state1 = !state1;
actualizar ();
delay(10);
}
estado_interruptor1_anterior = estado_interruptor1_inicial;
if (state1 == 1) {
digitalWrite(RELE1PIN, HIGH);
Serial.println("ENCENDIDO");
baseDatos ();
} else {
digitalWrite(RELE1PIN, LOW);
Serial.println("APAGADO");
baseDatos ();
}
}
else {
Serial.println("Conexión perdida");
}
}
Necesitaremos instalar la biblioteca ArduinoJson
ArduinoJson (opens new window)
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
# Asignar pines
Asignaremos:
- Los pines de los relés
- Los pines de los interruptores
- Los pines de los sensores que utilicemos
#define RELE1PIN 19
#define RELE2PIN 22
#define RELE3PIN 21
#define INTERRUPTOR1PIN 35
#define INTERRUPTOR2PIN 34
#define INTERRUPTOR3PIN 33
#define DHTPIN 23
#define DHTTYPE DHT11
# Definir variables
Definiremos variables
- Variables de estado ON - OFF
- Variables de los sensores utilizados
- Credenciales para la conexión
- Un objeto json para enviar datos a la base de datos
- Una variable String para obtener los datos de la base de datos
- Un identificador id para el envío de datos
bool state1;
bool state2;
bool state3;
float temp;
float hum;
const char* ssid = "studio";
const char* password = "88888888";
char objetoJson[128];
int id = 1;
String payload;
# Función -> void setup()
- Definir baudios
- Modo del pin entrada/salida
- Llamada a métodos de los sensores
- Conexión a la red WiFi
- IP local de la placa ESP32
Serial.begin(115200);
pinMode(RELE1PIN, OUTPUT);
pinMode(RELE2PIN, OUTPUT);
pinMode(RELE3PIN, OUTPUT);
pinMode(INTERRUPTOR1PIN, INPUT);
pinMode(INTERRUPTOR2PIN, INPUT);
pinMode(INTERRUPTOR3PIN, INPUT);
pinMode(DHTPIN, INPUT);
dht.begin();
WiFi.begin(ssid, password);
Serial.print("Conectando...");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.print("Conexión Wifi establecida, mi dirección IP es: ");
Serial.println(WiFi.localIP());
# Función -> void loop()
if ((WiFi.status()== WL_CONNECTED)) {
temp = dht.readTemperature();
hum = dht.readHumidity();
if (isnan(temp) || isnan(hum)) {
Serial.println(F("¡Error en la lectura del sensor DHT!"));
return;
}
const size_t CAPACITY = JSON_OBJECT_SIZE(6);
StaticJsonDocument<CAPACITY> doc;
JsonObject obj= doc.to<JsonObject>();
obj ["id"] = id;
obj ["luz1"] = state1;
obj ["luz2"] = state2;
obj ["luz3"] = state3;
obj ["temperatura"] = temp;
obj ["humedad"] = hum;
serializeJson (doc, objetoJson);
Serial.println("Objeto json: ");
Serial.println(objetoJson);
UpdateById( 1, objetoJson); // ACTUALIZAMOS LA BASE DE DATOS
String datos = GetById(1);
char documentoJson[500];
datos.replace(" ", "");
datos.replace("\n", "");
datos.trim();
datos.remove(0,1);
datos.remove(payload.length()-1, 1);
datos.toCharArray(documentoJson, 500);
Serial.println(datos);
StaticJsonDocument<200> documento;
deserializeJson( documento, documentoJson);
state1 = documento["luz1"];
state2 = documento["luz2"];
state3 = documento["luz3"];
Serial.println(state1);
Serial.println(state2);
Serial.println(state3);
if (digitalRead(INTERRUPTOR1PIN) == LOW) {
state1 = !state1;
digitalWrite(RELE1PIN, state1);
} else {
state1 = !state1;
digitalWrite(RELE1PIN, state1);
Serial.println("Estado del relé es: ");
Serial.println(state1);
}
if (state1 == true) {
digitalWrite(RELE1PIN, HIGH);
Serial.println("encendido1");
} else {
digitalWrite(RELE1PIN, LOW);
Serial.println("apagado1");
}
if (state2 == true) {
digitalWrite(RELE2PIN, HIGH);
Serial.println("encendido2");
} else {
digitalWrite(RELE2PIN, LOW);
Serial.println("apagado2");
}
if (state3 == true) {
digitalWrite(RELE3PIN, HIGH);
Serial.println("encendido3");
} else {
digitalWrite(RELE3PIN, LOW);
Serial.println("apagado3");
}
}
else {
Serial.println("Conexión perdida");
}