Skip to main content

Ejemplo 5 - ESP32 como cliente

info

En este ejemplo el ESP32 toma funciona como cliente enviando datos a la plataforma dweet.io.

Descripción

Enviar el valor leido en un potenciometro conectado al ESP32 a la la plataforma https://dweet.io/

Es importante tener en cuenta la siguiente información sobre obtenida de la documentación:

warning

ADC2 pins cannot be used when Wi-Fi is used. So, if you’re using Wi-Fi and you’re having trouble getting the value from an ADC2 GPIO, you may consider using an ADC1 GPIO instead, that should solve your problem.

Segun lo anterior, usar el puerto GPIO15 que es el asociado al ADC2 es un problema (agradecimiento @DanielJaramillo94 encontro la solución). Teniendo en cuenta lo anterior, la recomendación es usar otro puerto que no sea ADC2, como el 34, por ejemplo, solucionamos el error.

Hardware

Componentes

Los componentes necesarios para implementar este ejemplo son:

#ElementoCantidad
1ESP321
2Potenciometro (Grove - Rotary Angle Sensor [link])1

Esquematico

El esquematico de este sistema se muestra a continuación:

ejemplo3_sch

Conexiones

El diagrama de conexión se muestra a continuación:

ejemplo3_bb

Archivo Fritzing

El archivo Fritzing sensor_analogo.fzz del ejemplo se puede descargar del siguiente [link]

Software

Software - Parte 1

Este programa realiza las siguientes tareas:

  • Lee el valor analogo del potenciometro.
  • Envia el valor leido al PC mediante el puerto serial.
const int analogInPin = 3;  //  GPIO3
int sensorValue = 0; // Value read from the pot

void setup() {
// Start Serial
Serial.begin(115200);
}

void loop() {
// Read the analog in value
sensorValue = analogRead(analogInPin);

// Display data
Serial.print("Sensor: ");
Serial.println(sensorValue);

// Wait a few seconds between measurements.
delay(2000);
}

Software 2 - Parte 2

Este programa es una mejora del anterior que realiza las siguientes tareas:

  • Se conecta a una red local Wifi.
  • Muestra un log para conocer el estado de la conexión y algunos parametros asociados a la red.
  • Lee el valor analogo del potenciometro.
  • Envia el valor leido a la plataforma https://dweet.io/ y al monitor serial mediante el puerto serial.
#include <WiFi.h>
#include <WiFiClient.h>

// WiFi parameters
const char* ssid = "ssid";
const char* password = "password";

const int analogInPin = 3; // GPIO3
int sensorValue = 0; // Value read from the pot

String thing_name = "node001";

// Host
const char* host = "dweet.io";

void setup() {
// Start Serial
Serial.begin(115200);
delay(10);

// We start by connecting to a WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}

Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}

void loop() {
Serial.print("Connecting to ");
Serial.println(host);

// Use WiFiClient class to create TCP connections
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println("connection failed");
return;
}

// Read the analog in value
sensorValue = analogRead(analogInPin);


// We now create a URI for the request
String url = "/dweet/for/" + thing_name + "?value=" + String(sensorValue);

// Send request
Serial.print("Requesting URL: ");
Serial.println(url);
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");

unsigned long timeout = millis();
while (client.available() == 0) {
if (millis() - timeout > 1000) {
Serial.println(">>> Client Timeout !");
client.stop();
return;
}
}

// Read all the lines from the answer
while(client.available()){
String line = client.readStringUntil('\r');
Serial.print(line);
}

// Close connecting
Serial.println();
Serial.println("closing connection");

}
important

Note del codigo que el nombre de la cosa en este caso es: node001

Puesta en marcha

Test

Vaya a https://dweet.io/ y explore el API, para ello siga el link https://dweet.io/play/

api_dweet

Registre la cosa dando click en el boton POST tal y como se muestra a continuación:

dweet1_reg

En los campos que se despliegan coloque el nombre que le pondra a la cosa, en este ejemplo se uso node001 tal y como se mostro en la siguiente figura:

dweet1

Verifique que la cosa esta registrada en https://dweet.io/follow colocando el nombre de la cosa (node001 en este caso):

dweet2

Para ver los datos que envia la cosa vaya en el navegador a https://dweet.io/follow/thing_name, donde thing_name es el nombre de la cosa (node001 en este caso):

dweet3

Usando el API, coloque manualmente un valor cualquiera usando el par {KEY: VALUE}, en este caso KEY es "value" y VALUE es 0. De este modo los parametros seran {"value": 0} tal y como se muestra a continuación:

dweet4

Luego observe nuevamente la direccion de la cosa, en nuestro caso: https://dweet.io/follow/node001.

Proceda a descargar en la ESP32 el código; este despues de ponerse a funcionar arroja la siguiente salida en el monitor serial:

serial_esp32

Notese que el ESP32 esta haciendo peticiones para colocar los datos en dweet.io, esto se puede corroborar cargango la pagina de la cosa https://dweet.io/follow/node001. La siguiente figura muestra la grafica en el tiempo de los valores enviados:

dweet5

Actividad

Explore la creación de una dashboard que se asocie a la información que usted esta enviando en este ejemplo precionando el boton Create a Custom DashBoard.

dweet8

Enlaces