|     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

____________________________

117.- MQTT.

__________________________
0.- Tarjeta D1 R2 ESP32.

- Vamos a utilizar esta tarjeta para trabajar con MQTT.

- Esta tarjeta tiene WIFi, Bluetooth clásico, BLE, ADC, DCA,... y vale unos 5 €.

- Imágenes de esta tarjeta: D1 R2 ESP32

- Comparativa.

1.- MQTT.

  • MQTT (Message Queue Telemetry Transport) es un protocolo muy utilizado en el Internet de las Cosas (IoT).

  • Se utiliza para enviar datos cortos, temperatura, velocidad, mensaje corto, dato,...

  • Los Broker MQTT son servidores que trabajan con este protocolo, enviamos un dato a ese servidor y un cliente lo recibe en casi tiempo real.

  • Ejemplo de Brokers: broker.hivemq.com, mqtt.eclipse.org , test.mosquitto.org, io.adafruit, ThingSpeak, Cayenne, mosquitto…
  • Aquí he puesto un tutorial para instalar el Broker mosquitto en Raspberry Pi.

  • La forma de trabajar con MQTT es parecido a CloudDB o FirebaseDB, un dispositivo envía la información al broker mediante internet, los clientes reciben esa información casi en tiempo real.

  • Un dispositivo envía datos (Publish) al Broker. Otro dispositivo recibe esos datos (Subscribe) del Broker.

  • Wl ESP32 lo conectaremos al Router mediante WiFi.

  • Las variables se llaman topic y son de la forma juan/temperatura, el dato se denomina payload.
  • Los clientes envían periódicamente un paquete (PINGREQ) y esperan la respuesta del Broker (PINGRESP).
  • Este protocolo lo utiliza Facebook,
  • - He publicado este tutorial en la Comunidad de App Inventor:

    https://community.appinventor.mit.edu/t/esp32-mqtt-broker-publish-subscribe-thingspeak/10490

 

- Ejemplos:

-------------------------------------------------------------------------------------------------------------------------------

1.- El ESP32 Publish un topic (juan/temperatura) con un valor (payload) en el Broker.

El móvil está Subscrito a ese topic y recibe los datos en tiempo real.

---------------------------------------------------------------------------------------------------------------------------------

2.- El móvil Publish es estado de un Botón mediante el topic juan/boton.

El ESP32 está Subscrito a ese topic, recibe el estado del Botón y apaga/enciende un LED.

 

___________________________________________________________________________________________
2.- El ESP32 Publish números aleatorios. La App está Subscrita a ese tópico y recibe esos números.

  • Utilizaremos el broker.hivemq.com con el Port (1883).

  • Para empezar bajaremos esta aplicación de la Play de Google y la instalamos en nuestro móvil: Linear MQTT Dasboard

  • Necesitaremos la librería: PubSubClient

  • Programa / Incluir Librería / Gestionar Librerías … PubSubClient

- Crea números aleatorios cada 5 segundos y los envía al Broker.

ESP32_aleatorio.ino

// Juan A. Villalpando.
// http://kio4.com/arduino/117_Wemos_MQTT.htm

//#include <ESP8266WiFi.h> // Para el ESP8266
#include <WiFi.h> // Para el ESP32
WiFiClient WIFI_CLIENT;
#include <PubSubClient.h>
PubSubClient MQTT_CLIENT;

const char* ssid = "Nombre_red_Wifi";
const char* password = "Clave_Wifi";

void setup() {
Serial.begin(115200);
delay(10);
Serial.println();
Serial.print("Connecting with ");
Serial.println(ssid);

WiFi.begin(ssid, password);

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

Serial.println("");
Serial.print("WiFi conected. IP: ");
Serial.println(WiFi.localIP());
}

void loop() {
// Check MQTT Broker connection,
// en caso de que no tenga, reconecta.
if (!MQTT_CLIENT.connected()) {
reconnect();
}

// Publish topic.
// Convierte el entero a char. Debe ser char.
int aleatorio = random(1,90);
String aleatorioString = String(aleatorio);
char alea[6];
aleatorioString.toCharArray(alea, 6);

MQTT_CLIENT.publish("juan/aleatorio", alea);

// Wait 5 s.
delay(5000);
}


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

// Trying connect with broker.
while (!MQTT_CLIENT.connected()) {
Serial.println("Trying to connect with Broker MQTT.");
MQTT_CLIENT.connect("JuanAntonio"); // it isn't necessary..

// Wait to try to reconnect again...
delay(3000);
}

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

- Vamos a la aplicación que hemos instalado en el móvil: In Linear MQTT app

App settings…
Server : broker.hivemq.com
Port: 1883
No es necesario poner nombre ni contraseña.

Value
Name: aleatorio
Sub. topic: juan/aleatorio

Graph
Name: aleatorio
Sub. topic: juan/aleatorio.

 

_________________________________________________________________________________________________________
3.- La App Publish el estado de un Button. El ESP32 está Subscripto a ese topic y recibe su estado. El LED2 se enciende/apaga.

  • Añadimos un Switch a la aplicación, observa la imagen.
  • La aplicación Publish el estado de ese Switch mediant el topic juan/boton.
  • Cuando movamos ese Swicht, El LED2 encenderá/apagará [ El LED2 es un LED_BUILTIN, es decir está en la misma placa, no necesitaremos conectar ninguno externo.]

ESP32_Switch.ino

// Juan A. Villalpando.
// http://kio4.com/arduino/117_Wemos_MQTT.htm

//#include <ESP8266WiFi.h> // Para el ESP8266
#include <WiFi.h> // Para el ESP32
WiFiClient WIFI_CLIENT;
#include <PubSubClient.h>
PubSubClient MQTT_CLIENT;

const char* ssid = "Nombre_red_Wifi";
const char* password = "Clave_Wifi";

// const byte led4 = D4; // LED ESP8266
const byte LED2 = 2; // LED ESP32

void setup() {
  pinMode(LED2, OUTPUT);
  Serial.begin(115200);
  delay(10);
  Serial.println();
  Serial.print("Connecting with ");
  Serial.println(ssid);

  
  WiFi.begin(ssid, password);

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

Serial.println("");
Serial.print("WiFi conected. IP: ");
Serial.println(WiFi.localIP());

// Setting Callback.
  MQTT_CLIENT.setCallback(callback);
}

// What to do when it receives the data. 
void callback(char* recibido, byte* payload, unsigned int length) {
  Serial.print("Message received: ");
  Serial.print(recibido);
  Serial.print("   ");
  for (int i=0;i<length;i++) {
    char receivedChar = (char)payload[i];
    Serial.print(receivedChar);
  if (receivedChar == '1') {digitalWrite(LED2, HIGH);}
  if (receivedChar == '0') {digitalWrite(LED2, LOW);}
  }
  Serial.println();
}
 
void loop() {
  if (!MQTT_CLIENT.connected()) {
    reconnect();
  }
  MQTT_CLIENT.loop(); // Check Subscription.
}

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

// Trying connect with broker.
while (!MQTT_CLIENT.connected()) {
Serial.println("Trying to connect with Broker MQTT.");
MQTT_CLIENT.connect("JuanAntonio"); // it isn't necessary..
MQTT_CLIENT.subscribe("juan/boton"); // HERE SUBSCRIBE.

// Wait to try to reconnect again...
delay(3000);
}

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

__________________________________
4.- Los dos códigos anteriores unidos en uno.

ESP32 Publish: juan/aleatorio
ESP32 Subscrito a: juan/boton

App Publish: juan/boton
App Subscrito a: juan/aleatorio

ESP32_aleatorio.ino

// Juan A. Villalpando.
// http://kio4.com/arduino/117_Wemos_MQTT.htm

//#include <ESP8266WiFi.h> // Para el ESP8266
#include <WiFi.h> // Para el ESP32
WiFiClient WIFI_CLIENT;
#include <PubSubClient.h>
PubSubClient MQTT_CLIENT;

const char* ssid = "Nombre_red_Wifi";
const char* password = "Clave_Wifi";

// const byte led4 = D4; // LED ESP8266
const byte LED2 = 2; // LED ESP32

void setup() {
  pinMode(LED2, OUTPUT);
  Serial.begin(115200);
  delay(10);
  Serial.println();
  Serial.print("Connecting with ");
  Serial.println(ssid);

  
  WiFi.begin(ssid, password);

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

Serial.println("");
Serial.print("WiFi conected. IP: ");
Serial.println(WiFi.localIP());

// Setting Callback.
  MQTT_CLIENT.setCallback(callback);
}

// What to do when it receives the data. 
void callback(char* recibido, byte* payload, unsigned int length) {
  Serial.print("Message received: ");
  Serial.print(recibido);
  Serial.print("   ");
  for (int i=0;i<length;i++) {
    char receivedChar = (char)payload[i];
    Serial.print(receivedChar);
  if (receivedChar == '1') {digitalWrite(LED2, HIGH);}
  if (receivedChar == '0') {digitalWrite(LED2, LOW);}
  }
  Serial.println();
}
 
void loop() {
  if (!MQTT_CLIENT.connected()) {
    reconnect();
  }

// PUBLISH topic.
// Convierte el entero a char. Debe ser char.
int aleatorio = random(1,90);
String aleatorioString = String(aleatorio);
char alea[6];
aleatorioString.toCharArray(alea, 6);

MQTT_CLIENT.publish("juan/aleatorio", alea);

// Wait 2 s.
delay(2000); // DELAY
////////////////////////////////////

// CHECK SUBCRIPTION. 
  MQTT_CLIENT.loop(); // Check Subscription.
}

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

// Trying connect with broker.
while (!MQTT_CLIENT.connected()) {
Serial.println("Trying to connect with Broker MQTT.");
MQTT_CLIENT.connect("JuanAntonio"); // it isn't necessary..
MQTT_CLIENT.subscribe("juan/boton"); // HERE SUBSCRIBE.

// Wait to try to reconnect again...
delay(3000);
}

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

_______________
5.- Slider.

____________________________________________________________
6.- App Inventor Subscrito a juan/aleatorio y Publish juan/boton.

p117B_mqtt_Extension.aia

- El código del ESP32 es el mismo que hemos visto en el ejemplo: 4.- Los dos códigos anteriores unidos en uno.

Broker: broker.hivemq.com
Port: 1883

ESP32 Publish: juan/aleatorio
ESP32 Subscribe: juan/boton

App Inventor Publish: juan/boton
App Inventor Subscribe: juan/aleatorio

- App Inventor.

Vamos a utilizar esta estupenda extensión: https://ullisroboterseite.de/android-AI2-MQTT-en.html

__________________
- Diseño.

__________________
- Bloques.

________________________________
7.- App enciende/apaga los LED12 y LED14 del ESP32. App chequea el estado de los LED12 y LED14.

p117B_mqtt_Extension_Btn_LED.aia

  • App Publish boton12 y boton14, y enciende/apaga los LED12 y LED14.
  • El ESP32 está Subscrito a boton12 y boton14, Publish el estado de los LEDs

Broker: broker.hivemq.com
Port: 1883

App Inventor Publish: juan/boton12
App Inventor Publish: juan/boton14
App Inventor Subscribe: juan/led12_status
App Inventor Subscribe: juan/led14_status
App Inventor Subscribe: juan/led12_led14_status

ESP32 Publish: juan/led12_status
ESP32 Publish: juan/led14_status
ESP32 Publish: juan/led12_led14_status
ESP32 Subscribe: juan/boton12
ESP32 Subscribe: juan/boton14

- App Inventor.

__________________
- Bloques.

___________________________________________________
- ESP32.

ESP32_boton_led.ino

// Juan A. Villalpando.
// http://kio4.com/arduino/117_Wemos_MQTT.htm

//#include <ESP8266WiFi.h> // Para el ESP8266
#include <WiFi.h> // Para el ESP32
WiFiClient WIFI_CLIENT;
#include <PubSubClient.h>
PubSubClient MQTT_CLIENT;

const char* ssid = "Nombre_Red_WiFi";
const char* password = "Clave_Wifi";

#define LED12 12 // LED12 ESP32
#define LED14 14 // LED14 ESP32
String LED12_status = "- ? -";
String LED14_status = "- ? -";
String LED12_LED14_status = "- ? -";

void setup() {
  pinMode(LED12, OUTPUT);
  pinMode(LED14, OUTPUT);
  Serial.begin(115200);
  delay(10);
  Serial.println();
  Serial.print("Connecting with ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

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

Serial.println("");
Serial.print("WiFi conected. IP: ");
Serial.println(WiFi.localIP());

// Setting Callback.
  MQTT_CLIENT.setCallback(callback);
}

// What to do when it receives the data. 
void callback(char* recibido, byte* payload, unsigned int length) {
  Serial.print("Message received: ");
  Serial.print(recibido);
  Serial.print("   ");

  for (int i=0;i<length;i++) {
    char receivedChar = (char)payload[i];
    Serial.println(receivedChar);
  if (receivedChar == '1') {digitalWrite(LED12, HIGH);}
  if (receivedChar == '2') {digitalWrite(LED12, LOW);}
  if (receivedChar == '3') {digitalWrite(LED14, HIGH);}
  if (receivedChar == '4') {digitalWrite(LED14, LOW);}

    if (digitalRead(LED12) == HIGH) {LED12_status = "LED12 ON";} else {LED12_status = "LED12 OFF";}
    if (digitalRead(LED14) == HIGH) {LED14_status = "LED14 ON";} else {LED14_status = "LED14 OFF";}
    LED12_LED14_status = LED12_status + " and " + LED14_status; 
  }
}
 
void loop() {
  if (!MQTT_CLIENT.connected()) {
    reconnect();
  }

  // PUBLISH topic.
// Convierte el entero a char. Debe ser char.
char led12_st[10];
char led14_st[10];
char led12_led14_st[25];
LED12_status.toCharArray(led12_st, 10);
LED14_status.toCharArray(led14_st, 10);
LED12_LED14_status.toCharArray(led12_led14_st, 25);

MQTT_CLIENT.publish("juan/led12_status", led12_st);
  delay(1000);
MQTT_CLIENT.publish("juan/led14_status", led14_st);
  delay(1000);
MQTT_CLIENT.publish("juan/led12_led14_status", led12_led14_st);
  delay(1000);
  
  MQTT_CLIENT.loop(); // Check Subscription.

}

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

// Trying connect with broker.
while (!MQTT_CLIENT.connected()) {
Serial.println("Trying to connect with Broker MQTT.");
MQTT_CLIENT.connect("JuanAntonio"); // it isn't necessary..
MQTT_CLIENT.subscribe("juan/boton12"); // HERE SUBSCRIBE.
MQTT_CLIENT.subscribe("juan/boton14"); // HERE SUBSCRIBE.

// Wait to try to reconnect again...
delay(3000);
}

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

_________________________________
8.- App Inventor Publish un texto.

p117B_mqtt_Extension_Texto.aia

- La App Publish textos: "Set LED12 ON", "Set LED12 OFF", "Set LED14 ON", "Set LED14 OFF".

ESP32_boton_led.ino

// Juan A. Villalpando.
// http://kio4.com/arduino/117_Wemos_MQTT.htm

//#include <ESP8266WiFi.h> // Para el ESP8266
#include <WiFi.h> // Para el ESP32
WiFiClient WIFI_CLIENT;
#include <PubSubClient.h>
PubSubClient MQTT_CLIENT;

const char* ssid = "Nombre_Red_Wifi";
const char* password = "Clave_Wifi";

#define LED12 12 // LED12 ESP32
#define LED14 14 // LED14 ESP32
String message = "";

void setup() {
  pinMode(LED12, OUTPUT);
  pinMode(LED14, OUTPUT);
  Serial.begin(115200);
  delay(10);
  Serial.println();
  Serial.print("Connecting with ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

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

Serial.println("");
Serial.print("WiFi conected. IP: ");
Serial.println(WiFi.localIP());

// Setting Callback.
  MQTT_CLIENT.setCallback(callback);
}

// What to do when it receives the data. 
void callback(char* recibido, byte* payload, unsigned int length) {
  Serial.print("Message received: ");
  Serial.print(recibido);
  Serial.print("   ");
  message = "";
  for (int i=0;i<length;i++) {
    message += (char)payload[i];
  }
   Serial.println(message);
   if (message == "Set LED12 ON") {digitalWrite(LED12, HIGH);}
   if (message == "Set LED12 OFF") {digitalWrite(LED12, LOW);}
   if (message == "Set LED14 ON") {digitalWrite(LED14, HIGH);}
   if (message == "Set LED14 OFF") {digitalWrite(LED14, LOW);}
}
 
void loop() {
  if (!MQTT_CLIENT.connected()) {
    reconnect();
  }

  // PUBLISH topic.
  // Does not Publish.
  
  MQTT_CLIENT.loop(); // Check Subscription.

}

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

// Trying connect with broker.
while (!MQTT_CLIENT.connected()) {
Serial.println("Trying to connect with Broker MQTT.");
MQTT_CLIENT.connect("JuanAntonio"); // it isn't necessary..
MQTT_CLIENT.subscribe("juan/boton12"); // HERE SUBSCRIBE.
MQTT_CLIENT.subscribe("juan/boton14"); // HERE SUBSCRIBE.

// Wait to try to reconnect again...
delay(3000);
}

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

____________________________________________
9.- App Publish y mueve un Servo en ESP32.

p117B_mqtt_Extension_Servo.aia

  • Publish juan/mensaje = "increases"—> incrementa grado +5
  • Publish juan/mensaje = "decreases"—> decrementa grado -5
  • Publish juan/mensaje = 90* —> Mueve el Servo a esa posición.

_______________________________________
- Bloques.

 

ESP32_Servo.ino

// Juan A. Villalpando.
// http://kio4.com/arduino/117_Wemos_MQTT.htm

//#include <ESP8266WiFi.h> // Para el ESP8266
#include <WiFi.h> // Para el ESP32
WiFiClient WIFI_CLIENT;
#include <PubSubClient.h>
PubSubClient MQTT_CLIENT;

const char* ssid = "Nombre_Red_Wifi";
const char* password = "Clave_Wifi";

// Servo.
#include <Servo.h>
Servo myservo;
#define servoPin  27 // El servo en pin 27
int grado = 90;
String message = "";

void setup() {
  Serial.begin(115200);
  delay(10);
  myservo.attach(servoPin);
  Serial.println();
  Serial.print("Connecting with ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

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

Serial.println("");
Serial.print("WiFi conected. IP: ");
Serial.println(WiFi.localIP());

// Setting Callback.
  MQTT_CLIENT.setCallback(callback);
}

// What to do when it receives the data. 
void callback(char* recibido, byte* payload, unsigned int length) {
  Serial.print("Message received: ");
  Serial.print(recibido);
  Serial.print("   ");
  message = "";
  for (int i=0;i<length;i++) {
    message += (char)payload[i];
  }
   Serial.println(message);
   if (message == "increases") {grado = grado + 5; myservo.write(grado);}
   if (message == "decreases") {grado = grado - 5; myservo.write(grado);}
   if (message.indexOf("*") != -1)  { // if message contain *
   message = message.substring(0, message.length() - 1); // Delete last char *
   grado = message.toInt();
   myservo.write(grado);
   }
}
 
void loop() {
  if (!MQTT_CLIENT.connected()) {
    reconnect();
  }

  // PUBLISH topic.
  // Does not Publish.
  
  MQTT_CLIENT.loop(); // Check Subscription.

}

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

// Trying connect with broker.
while (!MQTT_CLIENT.connected()) {
Serial.println("Trying to connect with Broker MQTT.");
MQTT_CLIENT.connect("JuanAntonio"); // it isn't necessary..
MQTT_CLIENT.subscribe("juan/mensaje"); // HERE SUBSCRIBE.

// Wait to try to reconnect again...
delay(3000);
}

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

_______________________
10.- Chat entre móviles.

p117B_mqtt_Extension_Chat.aia

________________
- Bloques.

______________________
- Mensaje desde web.

- También podemos enviar mensajes desde una página web: http://www.hivemq.com/demos/websocket-client/

____________________________________________________________________
11.- ThingSpeak Broker. ESP32 envía números aleatorios a ThingSpeak.

  • Es necesario registrarse en: ThingSpeak .
  • Para usuarios de la versión gratuita, los mensajes se han de enviar con un intervalo de más de 15 segundos.
  • Este ejemplo no utiliza App Inventor.

 

  • New Channel.
    Field1 = aleatorio.

______________________________
- Código para el ESP32.

- Necesitamos instalar la librería ThingSpeak.

ESP32_ThingSpeak.ino

// Juan A. Villalpando.
// http://kio4.com/arduino/117_Wemos_MQTT.htm

// #include <ESP8266WiFi.h> // Para ESP8266
#include <WiFi.h> // Para ESP32
WiFiClient WIFI_CLIENT;
#include <ThingSpeak.h>

const char* ssid = "Nombre_de_tu_Red_Wifi";
const char* password = "Clave_Wifi";  

unsigned long Channel_ID = 746330;
const char * WriteAPIKey = "SVRKZNDDNS9TÑÑÑÑ";
unsigned long tiempo_actual = 0;

void setup() {
  Serial.begin(115200);

  WiFi.mode(WIFI_STA);   
  ThingSpeak.begin(WIFI_CLIENT);

  Serial.println();
  Serial.print("Connecting with ");
  Serial.println(ssid);
 
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
  delay(500);
  Serial.print(".");
  }
  
  Serial.println("");
  Serial.print("WiFi conected. IP: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  if((millis()-tiempo_actual)>= 16000){ // Each 16 seconds upload.
          int alea = random(0,90);
          tiempo_actual = millis();
          // Send alea to field1.
          int x = ThingSpeak.writeField(Channel_ID, 1, alea, WriteAPIKey);
          if(x == 200){ Serial.println("Upload correct: " + String(alea));}
          else{ Serial.println("Upload failed: " + String(alea)); }
  }
}

________________________________________________________________
12.- Desde App Inventor encendemos/apagamos una Lamp en ThingSpeak.

- Recuerda: los datos se han de actualizar con un intervalo de 15 segundos o más.

- Este ejemplo no utiliza el ESP32.

______________________________________
- Bloques.

  • Channel Settings / Field2 --> lamp
  • Add Widgets --> Lamp

 

________________________________________________________________________
13.- App Inventor envía un número a ThingSpeak y obtiene el último valor. WebViewer.

p117_thingspeak_valor.aia

- Recuerda: los datos se han de actualizar con un intervalo de 15 segundos o más.

- Este ejemplo no utiliza el ESP32.

- App Inventor enviará valores al field3.

___________________________________
- Bloques.

______________________________________________________________
14.- App Inventor Publish, envía valores mediante una Extension a ThingSpeak.

  • Vamos a utilizar la extensión.
  • El bloque de Subscribe no funciona con ThingSpeak.

Subscribe: channels/Channel ID/subscribe/fields/field1/ReadAPIKey

Publish: channels/Channel ID/publish/fields/field1/WriteAPIKey

Último valor : https://api.thingspeak.com/channels/746330/fields/field1/last

 

________________________
15.- Otros Dashboards.

https://mydevices.com/cayenne/signup/

https://accounts.adafruit.com/settings/profile

http://www.hivemq.com/demos/websocket-client/

 

________________________
16.- De nuevo HiveMQ.

- Vamos a realizar un código parecido al que vimos en el ejemplo 10.

- Entramos en HiveMQ.

p117B_mqtt_Extension_Hivemq.aia

___________________________________
- Diseño.

___________________________________
- Bloques.

________________________
17.- Deslizador. Slider.

p117B_mqtt_Extension_Hivemq_Slider.aia

- Veamos un par de Deslizadores. Slider.

- Publicamos y nos Suscribimos al mismo Tópico: juan/Slider

- La información será de ida y vuelta, la enviamos al Broker (Publish) y la recibimos del Broker (Subscribe).

- Ponemos dos Deslizadores.

- El Deslizador1 funcionará de forma normal, enviará y Publicará números en el Broker al mover su cursor. A su vez la aplicación está suscrita a juan/Slider, de tal manera que recibirá los números publicados. Será un ida y retorno de la información.

- El Deslizador2 funciona con la extensión SliderTools y con el evento Soltar, de manera que enviará el número cuando quitemos el dedo del Deslizador.

- La extensión SliderTool, de:

https://github.com/WaterMelonOof/SliderTools-AI2-Kodular-Extension/

___________________________________
- Diseño.

___________________________________
- Bloques.

___________________________________
- Broker.

- Creamos una Publicación y una Suscripción a: juan/Slider

________________________
18.- Acelerómetro.

p117B_mqtt_Extension_Hivemq_Acele.aia

- Vamos a enviar (Publish) y recibir (Subscribe) las tres variables del sensor acelerómetro.

___________________________________
- Diseño.

___________________________________
- Bloques.

 

_______________________________

- 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