Práctica 6

Thingspeak.

Regresar a Laboratorio

Descripción

Esta práctica se centra en familiarizarse con la plataforma ThingSpeak utilizando el módulo NodeMCU ESP32 para enviar y gestionar datos provenientes de sensores analógicos, digitales e inteligentes. Se usa el módulo ESP32 para recolectar datos de diversos sensores y enviar esta información a ThingSpeak, una plataforma de IoT que permite visualizar, analizar y almacenar datos en la nube. El objetivo es entender cómo configurar y utilizar ThingSpeak para monitorear en tiempo real los datos sensoriales, optimizando así la recolección y análisis de datos en aplicaciones de Internet de las Cosas (IoT).

Instrucciones PDF
...

Código Parte 1


Botón

Se detecta el status del botón y se envía el dato por WiFi.

//BOTON
#include <WiFi.h>
#include <HTTPClient.h>
  
int boton = 32;
int led = 33;

int status_boton = 0;

String url= "https://api.thingspeak.com/update?";
String api_key= "39UEZ7VEBGLBSOED";
String sensor= "field1";
  
void setup(){
  pinMode(led, OUTPUT);
  pinMode(boton, INPUT);

  delay(1000);
  Serial.begin(115200);

  WiFi.begin("Wokwi-GUEST", "");

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

void loop(){
  status_boton = digitalRead(boton);
  
  if (status_boton == 1){
    digitalWrite(led, HIGH);
  }
  else{
    digitalWrite(led, LOW);
  }
  if((WiFi.status() == WL_CONNECTED)) {
    HTTPClient http;
    String message=url+"api_key="+api_key+"&"+sensor+"="+String(status_boton);
    http.begin(message);

    int httpCode = http.GET();
    Serial.println(message);
    Serial.print("Get code");
    Serial.println(httpCode);
    http.end();
  }
  delay (3000);
}

Código Parte 2


Potenciómetro

Se detecta la resistencia que tiene el portenciómetro y se envía el dato por WiFi.

//POT
#include <WiFi.h>
#include <HTTPClient.h>
  
int pot = 32;
int led = 33;

int pot_value = 0;

String url= "https://api.thingspeak.com/update?";
String api_key= "E2UOALU78KFRHDJH";
String sensor= "field1";

void setup(){
  pinMode(led, OUTPUT);

  delay(1000);
  Serial.begin(115200);

  WiFi.begin("Wokwi-GUEST", "");

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

void loop(){
  pot_value = analogRead(pot);
  Serial.println(pot_value);
  
  if (pot_value <= 2048){
    digitalWrite(led, HIGH);
  }
  else{
    digitalWrite(led, LOW);
  }
  if((WiFi.status() == WL_CONNECTED)) {
    HTTPClient http;
    String message=url+"api_key="+api_key+"&"+sensor+"="+String(pot_value);
    http.begin(message);

    int httpCode = http.GET();
    Serial.println(message);
    Serial.print("Get code");
    Serial.println(httpCode);
    http.end();
  }
  delay (3000);
}

Código Parte 3


Acelerómetro

Capturta la aceleración en eje X y en eje Y y lo envía por WiFi.

//Acelerómetro
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>
#include <WiFi.h>
#include <HTTPClient.h>

int led = 33;
int led2 = 25;

int accx_value = 0;
int accy_value = 0;

String url= "https://api.thingspeak.com/update?";
String api_key= "31ZM340LT4L0VV1H";
String sensor_accx= "field1";
String sensor_accy= "field2";

Adafruit_MPU6050 mpu;

void setup(void) {
  WiFi.begin("Wokwi-GUEST", "");

  while((WiFi.status() != WL_CONNECTED)) {
      delay(500);
      Serial.print(".");
    }
  Serial.println("Wifi conected");
  Serial.begin(115200);
  while (!Serial)
    delay(10); // will pause Zero, Leonardo, etc until serial console opens

  Serial.println("Adafruit MPU6050 test!");

  // Try to initialize!
  if (!mpu.begin()) {
    Serial.println("Failed to find MPU6050 chip");
    while (1) {
      delay(10);
    }
  }

  Serial.println("MPU6050 Found!");

  mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
  Serial.print("Accelerometer range set to: ");
  switch (mpu.getAccelerometerRange()) {
  case MPU6050_RANGE_2_G:
    Serial.println("+-2G");
    break;
  case MPU6050_RANGE_4_G:
    Serial.println("+-4G");
    break;
  case MPU6050_RANGE_8_G:
    Serial.println("+-8G");
    break;
  case MPU6050_RANGE_16_G:
    Serial.println("+-16G");
    break;
  }
  mpu.setGyroRange(MPU6050_RANGE_500_DEG);
  Serial.print("Gyro range set to: ");
  switch (mpu.getGyroRange()) {
  case MPU6050_RANGE_250_DEG:
    Serial.println("+- 250 deg/s");
    break;
  case MPU6050_RANGE_500_DEG:
    Serial.println("+- 500 deg/s");
    break;
  case MPU6050_RANGE_1000_DEG:
    Serial.println("+- 1000 deg/s");
    break;
  case MPU6050_RANGE_2000_DEG:
    Serial.println("+- 2000 deg/s");
    break;
  }

  mpu.setFilterBandwidth(MPU6050_BAND_5_HZ);
  Serial.print("Filter bandwidth set to: ");
  switch (mpu.getFilterBandwidth()) {
  case MPU6050_BAND_260_HZ:
    Serial.println("260 Hz");
    break;
  case MPU6050_BAND_184_HZ:
    Serial.println("184 Hz");
    break;
  case MPU6050_BAND_94_HZ:
    Serial.println("94 Hz");
    break;
  case MPU6050_BAND_44_HZ:
    Serial.println("44 Hz");
    break;
  case MPU6050_BAND_21_HZ:
    Serial.println("21 Hz");
    break;
  case MPU6050_BAND_10_HZ:
    Serial.println("10 Hz");
    break;
  case MPU6050_BAND_5_HZ:
    Serial.println("5 Hz");
    break;
  }

  Serial.println("");
  delay(100);
}

void loop() {
  /* Get new sensor events with the readings */
  

  sensors_event_t a, g, temp;
  mpu.getEvent(&a, &g, &temp);
  accx_value=a.acceleration.x;
  accy_value=a.acceleration.y;

  /* Print out the values */
  Serial.print("Acceleration X: ");
  Serial.print(a.acceleration.x);
  Serial.print(", Y: ");
  Serial.print(a.acceleration.y);
  Serial.print(", Z: ");
  Serial.print(a.acceleration.z);
  Serial.println(" m/s^2");

  Serial.print("Rotation X: ");
  Serial.print(g.gyro.x);
  Serial.print(", Y: ");
  Serial.print(g.gyro.y);
  Serial.print(", Z: ");
  Serial.print(g.gyro.z);
  Serial.println(" rad/s");

  Serial.print("Temperature: ");
  Serial.print(temp.temperature);
  Serial.println(" degC");

  Serial.println("");
  delay(500);

    if((WiFi.status() == WL_CONNECTED)) {
    HTTPClient http;
    String message = url + "api_key=" + api_key + "&field1=" + String(accx_value) + "&field2=" + String(accy_value);    http.begin(message);

    int httpCode = http.GET();
    Serial.println(message);
    Serial.print("Get code");
    Serial.println(httpCode);
    http.end();
  }
  delay (3000);
}

Código Parte 4


Fotoresistencia

Captura el dato de resistencia en la fotoresistecia y lo envia por WiFi.

//Fotoresistencia
#include <WiFi.h>
#include <HTTPClient.h>

int res = 32;
int led = 33;

int res_value = 0;

String url= "https://api.thingspeak.com/update?";
String api_key= "E2UOALU78KFRHDJH";
String sensor= "field2";

void setup(){
  pinMode(led, OUTPUT);
  
  delay(1000);
  Serial.begin(115200);

  WiFi.begin("Wokwi-GUEST", "");

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

void loop(){
  res_value = analogRead(res);
  Serial.println(res_value);
  
  if (res_value >= 2000){
    digitalWrite(led, HIGH);
  }
  else{
    digitalWrite(led, LOW);
  }

  if((WiFi.status() == WL_CONNECTED)) {
    HTTPClient http;
    String message=url+"api_key="+api_key+"&"+sensor+"="+String(res_value);
    http.begin(message);

    int httpCode = http.GET();
    Serial.println(message);
    Serial.print("Get code");
    Serial.println(httpCode);
    http.end();
  }
  delay (3000);
}

Código Parte 5


PIR

Se detecta si hay movimiento mediante un sensor PIR y se envia el dato por WiFi.

//PIR
#include <WiFi.h>
#include <HTTPClient.h>

int pir = 32;
int led = 33;

int status_pir = 0;

String url= "https://api.thingspeak.com/update?";
String api_key= "39UEZ7VEBGLBSOED";
String sensor= "field2";

void setup(){
  pinMode(led, OUTPUT);
  pinMode(pir, INPUT);

  delay(1000);
  Serial.begin(115200);

  WiFi.begin("Wokwi-GUEST", "");

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

void loop(){
  status_pir = digitalRead(pir);
  
  if (status_pir == 1){
    digitalWrite(led, HIGH);
  }
  else{
    digitalWrite(led, LOW);
  }
  if((WiFi.status() == WL_CONNECTED)) {
    HTTPClient http;
    String message=url+"api_key="+api_key+"&"+sensor+"="+String(status_pir);
    http.begin(message);

    int httpCode = http.GET();
    Serial.println(message);
    Serial.print("Get code");
    Serial.println(httpCode);
    http.end();
  }
  delay (3000);
}

Código Parte 6


Ultrasónico

Se obtiene el dato de la distancia mediante un sendor de movimiento ultrasónico y el dato se envia por WiFi.

//ULTRASONICO
#include <NewPing.h>
#include <WiFi.h>
#include <HTTPClient.h>

#define PIN_TRIG 26
#define PIN_ECHO 27

int ledV  = 32;
int ledA = 33;
int ledR = 25;

String url= "https://api.thingspeak.com/update?";
String api_key= "31ZM340LT4L0VV1H";
String sensor= "field3";


void setup(){
  pinMode(ledV, OUTPUT);
  pinMode(ledA, OUTPUT);
  pinMode(ledR, OUTPUT);

  pinMode(PIN_TRIG, OUTPUT);
  pinMode(PIN_ECHO, INPUT);

  delay(1000);
  Serial.begin(115200);

  WiFi.begin("Wokwi-GUEST", "");

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

void loop(){
  delay(1000);
  digitalWrite(PIN_TRIG, HIGH);
  delayMicroseconds(10);
  digitalWrite(PIN_TRIG, LOW);

  long duration = pulseIn(PIN_ECHO, HIGH);
  int distance = duration / 58;
  Serial.print("Distance in: ");
  Serial.println(distance);
  
  if (distance > 200) {
    digitalWrite(ledV, HIGH);
    digitalWrite(ledA, LOW);
    digitalWrite(ledR, LOW);
  } else if (distance <= 200 && distance > 2) {
    digitalWrite(ledV, LOW);
    digitalWrite(ledA, HIGH);
    digitalWrite(ledR, LOW);
  } else if (distance <= 2) {
    digitalWrite(ledV, LOW);
    digitalWrite(ledA, LOW);
    digitalWrite(ledR, HIGH);
  } else {
    digitalWrite(ledV, LOW);
    digitalWrite(ledA, LOW);
    digitalWrite(ledR, LOW);
  }
  if((WiFi.status() == WL_CONNECTED)) {
    HTTPClient http;
    String message=url+"api_key="+api_key+"&"+sensor+"="+String(distance);
    http.begin(message);

    int httpCode = http.GET();
    Serial.println(message);
    Serial.print("Get code");
    Serial.println(httpCode);
    http.end();
  }
  delay (3000);
}