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.
_______________________________
|