|     Inicio    |   |         |  |   FOROS      |  |      |      
   Elastix - VoIP B4A (Basic4Android) App inventor 2 PHP - MySQL
  Estación meteorológica B4J (Basic4Java) ADB Shell - Android Arduino
  Raspberry Pi Visual Basic Script (VBS) FireBase (BD autoactualizable) NodeMCU como Arduino
  AutoIt (Programación) Visual Basic Cosas de Windows Webs interesantes
Translate:
Búsqueda en este sitio:


.

Tutorial del Internet de las Cosas y Bluetooth con el ESP32
Juan Antonio Villalpando

Volver al índice del tutorial

____________________________

117C2.- Publica. Subscribe. Pulsadores, LED, pantalla LCD, sensor de temperatura humedad.

- En el ESP32 tenemos dos pulsadores, dos LED, una pantalla LCD y un sensor DHT-11 de temperatura-humedad.

- Publicar desde el ESP. Subscribir en Linear MQTT Dashboard.

1.- Al pulsar los pulsadores del ESP32 se Publicará cada 3 segundos sus estados, por ejemplo (ROJO PULSADO,azul NO).

2.- El sensor DHT-11 Publicará temperatura y presion cada 3 segundos y se mostrará gráficamente. [No es necesario este sensor para probar este ejemplo]

- Publicar desde Linear MQTT Dashboard. Subscribir en el ESP32.

3.- La app Linear MQTT Dashboard Publica el estado de dos Switch. Al cambiarlos, se encenderán dos LED en el ESP32 y se mostrará en pantalla LCD.

IMPORTANTE: Cambia iot.eclipse.org por mqtt.eclipse.org

__________________________________________________________________
1.- Conexiones.

__________________________________________________________________
2.- Programa para el ESP32.

IMPORTANTE: Cambia iot.eclipse.org por mqtt.eclipse.org

ESP32_mqtt_led_lcd.ino

// Modificado por Juan A. Villalpando.
// kio4.com

//#include <ESP8266WiFi.h> // Para ESP8266
#include <WiFi.h> // Para ESp162
WiFiClient WIFI_CLIENT;
#include <PubSubClient.h>
PubSubClient MQTT_CLIENT;
////////////// Screen LCD I2C ///////////////
#include <LiquidCrystal_I2C.h>
int columnas = 16;
int filas = 2;
LiquidCrystal_I2C lcd(0x27, columnas, filas);  
// LiquidCrystal_I2C lcd(0x3F, columnas, filas); 
////////////////////////////////////////////////
#include "DHT.h" 
#define DHTPIN 14 
#define DHTTYPE DHT11 
DHT dht(DHTPIN, DHTTYPE);
//////////////////////////////////////////////

#define pulsa16 16   // Pulsador AZUL
#define pulsa17 17   // Pulsador ROJO
int valor16;
int valor17;
String p16;
String p17;
String publicar = "0,0";
char publicacion[30];
char publicacion2[30];
#define LED12  12    // LED en terminal 12
#define LED13  13    // LED en terminal 13
unsigned long tiempo_actual=0; // Para crear un retardo.
    String primera;
    String segunda;

// Nombre y contraseña de tu red WiFi.
const char* ssid     = "Nombre_de_tu_red_WiFi";
const char* password = "Clave_WiFi";

void setup() {
Serial.begin(115200);
pinMode(LED12, OUTPUT);
pinMode(LED13, OUTPUT);
delay(10);
  lcd.init();      // Screen LCD                    
  lcd.backlight(); // Screen LCD
  dht.begin(); // Sensor humedad-temperatura.
Serial.println();
Serial.print("Conectando con ");
Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}

Serial.println("");
Serial.println("WiFi conectado.");
Serial.println("IP: ");
Serial.println(WiFi.localIP());

// Configuración de la respuesta.
  MQTT_CLIENT.setCallback(callback);
}

void loop() {
// Continuamente comprueba si tiene conexión con MQTT.
// en caso de que no tenga, reconecta.
if (!MQTT_CLIENT.connected()) {
reconnect();
}
MQTT_CLIENT.loop(); // Chequea lo Subscrito.

// El Delay lo realizamos así:
if((millis()-tiempo_actual)>=3000){
      tiempo_actual=millis();
      // Publica el mensaje. Publish.
        consulta();
        MQTT_CLIENT.publish("juan/consulta", publicacion);
        MQTT_CLIENT.publish("juan/temperatura", publicacion2);
    }
}

///////////////////////
// Aquí configuramos lo que debe hacer cuando recibe un valor.  
void callback(char* recibido, byte* payload, unsigned int length) {
  Serial.print("Mensaje recibido: ");
  Serial.print(recibido);
  Serial.print("   ");
  for (int i=0;i<length;i++) {
    char receivedChar = (char)payload[i];
    Serial.print(receivedChar);
  if (receivedChar == 'a'){digitalWrite(LED12, HIGH); primera = "Encendido";}
  if (receivedChar == 'b'){digitalWrite(LED12, LOW); primera = "Apagado";}
  if (receivedChar == 'c'){digitalWrite(LED13, HIGH); segunda = "Encendido";}
  if (receivedChar == 'd'){digitalWrite(LED13, LOW); segunda = "Apagado";}
    lcd.clear(); // Borra pantalla
    lcd.setCursor(0,0); // Inicio del cursor
    lcd.print("LED1 = "); lcd.print(primera);
    lcd.setCursor(0,1); // Siguiente renglón.
    lcd.print("LED2 = "); lcd.print(segunda);
  }
  Serial.println();
}

/////////////////////////////////////////////

// Reconecta con MQTT broker
void reconnect() {
MQTT_CLIENT.setServer("iot.eclipse.org", 1883);
// MQTT_CLIENT.setServer("broker.hivemq.com", 1883);
// MQTT_CLIENT.setServer("mosquitto.org", 1883);
MQTT_CLIENT.setClient(WIFI_CLIENT);

// Intentando conectar con el broker.
while (!MQTT_CLIENT.connected()) {
Serial.println("Intentando conectar.");
MQTT_CLIENT.connect("JuanAntonio");
MQTT_CLIENT.subscribe("juan/led1");
MQTT_CLIENT.subscribe("juan/led2");

// Espera antes de volver a intentarlo.
delay(3000);
}

Serial.println("Conectado a MQTT.");
}

// Consulta el estado de los pulsadores.
void consulta(){
 valor16 = digitalRead(pulsa16);
   if (valor16 == HIGH) {p16 = "AZUL PULSADO";} else {p16 = "azul NO";}
 valor17 = digitalRead(pulsa17);
   if (valor17 == HIGH) {p17 = "ROJO PULSADO";} else {p17 = "rojo NO";}
  
 publicar = p16 + "," + p17;
 Serial.println(publicar);
 /////////////////////
 // Lee humedad y temperatura
int humedad = dht.readHumidity();
int temperatura = dht.readTemperature();
humedad = random(70,90); // Aleatorios para hacer pruebas.
temperatura = random(28,32);

//////////////////// Publicaciones /////////
 String publicarString = publicar;
 publicarString.toCharArray(publicacion, 30);
 delay(10);
 publicarString = temperatura;
 publicarString.toCharArray(publicacion2, 30);
}  
		  

__________________________________________________________________
3.- Comentarios.

- Aunque está configurado el sensor DHT-11, he puesto que las variables temperatura y presión evolucionen mediante un número aleatorio, de esta manera no es necesario tener el DHT-11 para realizar este ejemplo.

- En vez de poner delay(3000); he puesto:

if((millis()-tiempo_actual)>=3000){
tiempo_actual=millis();
// Publica el mensaje. Publish.
consulta();
MQTT_CLIENT.publish("juan/consulta", publicacion);
MQTT_CLIENT.publish("juan/temperatura", publicacion2); }

ya que si ponemos delay(3000); el programa queda congelado 3 segundos y no detecta ninguna otra acción, en cambio al poner el código anterior, el loop puede consultar continuamente el estado de los pulsadores y temperatura.

__________________________________________________________________
4.- Configuración de la aplicación Linear MQTT Dashboard.

- Para configurar la app, debemos pulsar en los iconos indicados en la siguiente imagen:

IMPORTANTE: Cambia iot.eclipse.org por mqtt.eclipse.org

__________________________________________________________________
5.- Así quedará la aplicación.

_______________________________

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información