Categoría: ESP8266

  • Sensor de humedad de suelo con control de alimentación (moisture-sensor-for-plants)

    Sensor de humedad de suelo con control de alimentación (moisture-sensor-for-plants)

    moisture-sensor-for-plants

    Este proyecto implementa un sistema básico para medir la humedad del suelo mediante un microcontrolador, optimizando el consumo de energía de la sonda gracias a un pin de alimentación controlado por software. Está diseñado para facilitar la integración en entornos de bajo consumo o alimentados por baterías.

    Ver repositorio en Github

    Objetivo

    Obtener lecturas confiables del nivel de humedad del suelo mientras se evita la corrosión y el consumo innecesario de corriente de la sonda, encendiéndola solo durante el tiempo mínimo necesario para la medición.

    Estructura del proyecto

    El código está organizado en tres partes principales:

    1. Encabezado (moisture.h)

    Define la interfaz de uso:

    • moistureInit(): inicializa los pines para alimentar la sonda y leer la señal analógica.
    • moistureSetWarmup(): permite configurar el tiempo de precalentamiento antes de la medición.
    • moistureRead(): realiza la lectura del valor crudo del ADC.

    2. Implementación (moisture.cpp)

    Contiene la lógica de funcionamiento:

    • Al inicializar, configura el pin de alimentación como salida y lo apaga por defecto.
    • Durante la lectura, habilita la alimentación, espera el tiempo de calentamiento configurado (300 ms por defecto) y luego toma la muestra analógica.
    • Apaga la alimentación inmediatamente después de la lectura para reducir la corrosión y el consumo.

    3. Sketch principal (moisture1.ino)

    Ejemplo de uso que inicializa el sensor con pines definidos, configura el precalentamiento si es necesario y lee los valores de humedad periódicamente, mostrando los resultados por el puerto serial.

    Características destacadas

    • Control programático de la alimentación de la sonda.
    • Configuración flexible del tiempo de precalentamiento.
    • Lectura directa del valor analógico en formato crudo (0–1023).
    • Diseño modular para facilitar la reutilización en otros proyectos.

    Aplicaciones

    El sistema está pensado para proyectos de riego automático, monitoreo de jardines o cultivos, y cualquier implementación que requiera reducir el consumo y prolongar la vida útil de sondas de humedad

  • Proyecto de Reproducción de MP3 con ESP32 y DFPlayer Mini

    Proyecto de Reproducción de MP3 con ESP32 y DFPlayer Mini

    Actualizado: 3/7/2025: Ahora es compatible con familia de uC Espressif ESP8266 y ESP32. Este proyecto detalla cómo utilizar un ESP32 y un módulo DFPlayer Mini para reproducir archivos MP3 de manera automática cada cierto tiempo. Se abordan los aspectos del módulo DFPlayer Mini, las conexiones necesarias y el código de programación, proporcionando una guía completa para la implementación de este sistema de reproducción de audio.

    El DFPlayer Mini es un módulo de reproducción de audio compacto y de bajo costo que puede reproducir archivos MP3 y WAV almacenados en una tarjeta microSD. Es ampliamente utilizado en proyectos de electrónica debido a su facilidad de uso y a su capacidad para manejar archivos de audio de manera autónoma, sin necesidad de una fuente de control compleja. El módulo cuenta con varias funciones, incluyendo el ajuste de volumen, control de reproducción, y la capacidad de seleccionar pistas mediante comandos simples.

    Conexiones del Proyecto

    Para conectar el DFPlayer Mini con el ESP32, es importante seguir las siguientes indicaciones:

    • VCC: Conectar a una fuente de alimentación de 5V. El ESP32 puede proporcionar esta salida.
    • GND: Conectar al pin de tierra (GND) del ESP32.
    • TX del DFPlayer Mini: Conectar al pin GPIO 16 del ESP32.
    • RX del DFPlayer Mini: Conectar al pin GPIO 17 del ESP32.
    • SPK1 y SPK2: Conectar a un altavoz pasivo, si se desea una salida de audio. Alternativamente, se puede usar un conector de auriculares para salida de línea.

    Es fundamental asegurarse de que las conexiones sean correctas para evitar daños en los componentes y garantizar un funcionamiento óptimo del sistema.

    3. Código de Programación

    El siguiente código muestra cómo configurar el ESP32 para comunicarse con el DFPlayer Mini y reproducir un archivo MP3 cada 10 segundos. Se utiliza el puerto Serial1 del ESP32/ESP8266 para la comunicación, aprovechando la capacidad del microcontrolador para manejar múltiples puertos UART de hardware.

    #include <Arduino.h>
    #include <DFPlayerMini_Fast.h>
    
    #if defined(ESP32)
      // En ESP32 podemos usar HardwareSerial en un segundo puerto
      HardwareSerial playerSerial(2);  // UART2: GPIO16=RX2, GPIO17=TX2 por defecto
      const int DF_RX = 16;  // al TX del DFPlayer
      const int DF_TX = 17;  // al RX del DFPlayer
    #elif defined(ESP8266)
      #include <SoftwareSerial.h>
      const int DF_RX = D5;  // ESP8266: conecta a TX del DFPlayer
      const int DF_TX = D6;  // ESP8266: conecta a RX del DFPlayer
      SoftwareSerial playerSerial(DF_RX, DF_TX);
    #else
      #error "Este código sólo es para ESP32 o ESP8266"
    #endif
    
    DFPlayerMini_Fast myDFPlayer;
    const unsigned long intervalReproduccion = 10000;  // 10 s
    unsigned long lastMillis = 0;
    
    void setup() {
      Serial.begin(115200);
      Serial.println();
      Serial.println("=== DFPlayer en ESP32/ESP8266 ===");
    
      // Inicializar puerto al módulo
      #if defined(ESP32)
        playerSerial.begin(9600, SERIAL_8N1, DF_RX, DF_TX);
      #elif defined(ESP8266)
        playerSerial.begin(9600);
      #endif
    
      if (! myDFPlayer.begin(playerSerial)) {
        Serial.println(F("ERROR: No se detectó DFPlayer Mini"));
        while (true) delay(100);
      }
    
      myDFPlayer.volume(20);   // 0–30
      myDFPlayer.play(1);      // empieza en pista 001
      lastMillis = millis();
    }
    
    void loop() {
      unsigned long now = millis();
    
      // Cada 10 s, reproducir siguiente pista
      if (now - lastMillis >= intervalReproduccion) {
        lastMillis = now;
        myDFPlayer.playNext();
      }
    
      // Procesar eventos del DFPlayer (fin de pista, errores…)
      if (myDFPlayer.available()) {
        DFPlayerEventType type = myDFPlayer.readType();
        int state = myDFPlayer.readState();
        Serial.print(F("Evento DFPlayer: "));
        Serial.print(type);
        Serial.print(F("  Estado interno: "));
        Serial.println(state);
      }
    
      // Aquí puedes gestionar botones u otras tareas no bloqueantes
    
      delay(20);
    }
    
    

    En este código, se utilizan las siguientes funciones y configuraciones:

    • mySerial.begin(9600, SERIAL_8N1, 16, 17); Esta línea configura el puerto Serial1 del ESP32 con una velocidad de comunicación de 9600 baudios y establece los pines GPIO 16 y 17 como RX y TX, respectivamente.
    • myDFPlayer.begin(mySerial); Esta función inicializa el DFPlayer Mini y lo prepara para recibir comandos.
    • myDFPlayer.volume(20); Se ajusta el volumen del reproductor a un nivel de 20 (en una escala de 0 a 30).
    • myDFPlayer.play(1); Este comando indica al DFPlayer Mini que reproduzca el archivo de audio numerado como 1 en la tarjeta microSD.
    • delay(10000); Introduce una pausa de 10 segundos antes de repetir el ciclo.

    Este código permite la reproducción continua de un archivo MP3, con una espera de 10 segundos entre reproducciones. Es posible modificar el tiempo de espera o cambiar el archivo a reproducir ajustando los parámetros del código según las necesidades del proyecto.

  • Controlar un ESP32 (o esp8266) con Android utilizando AppInventor2

    Controlar un ESP32 (o esp8266) con Android utilizando AppInventor2

    App Inventor 2 es una plataforma en línea de código abierto que permite crear aplicaciones para dispositivos Android sin necesidad de conocimientos avanzados de programación. F

    App Inventor 2 fue desarrollado por Google y posteriormente transferido al MIT (Instituto Tecnológico de Massachusetts).

    Para este proyecto se creará una aplicación en App Inventor que se conecte a un slider a través de Bluetooth y lo controle desde un dispositivo programado con Arduino IDE

    Aplicación en App Inventor que se conecte a un slider a través de Bluetooth y se controle desde un dispositivo Arduino con un ESP32, puedes seguir estos pasos generales:

    Lado de la Aplicación en App Inventor:

    1. Crear la Interfaz Gráfica:

    2. Comienza un nuevo proyecto

    3. Componentes Bluetooth: Añadir el componente Bluetooth al diseño.

    4. Configurar Bluetooth:

    • Configurar el componente Bluetooth para buscar dispositivos y establecer la conexión.
    1. Programar la Interacción con el Slider:
      • Programar la lógica que enviará los datos del slider a través de Bluetooth al dispositivo Arduino cuando se modifique su valor.
    2. Manejar la Conexión y Desconexión:
      • Implementar lógica para gestionar la conexión y desconexión con el dispositivo Bluetooth.
    3. Diseñar la Interfaz de Usuario:
      • Diseñar la interfaz de usuario para mostrar el estado de la conexión y otra información relevante.

    En la pantalla de diseño, agrega un componente Slider desde la paleta de componentes.

    
    
    Manejo del Slider y envío de datos:
    
    En el bloque "BluetoothClient1.SendText", el valor del slider se convierte a una cadena (Text), ya que el módulo Bluetooth envía datos como texto.
    
    Asegúrate de configurar correctamente el BluetoothClient1.Address con la dirección Bluetooth de tu dispositivo.
    
    Conecta tu dispositivo Android a tu Arduino mediante Bluetooth.
    

    Lado del Dispositivo Arduino (ESP32):

    1. Preparar todo para poder configurar el ESP32 con Arduino IDE.
    2. Programar la Lógica del Arduino Controlar el Slider (recibir datos)
      • Escribe un programa para el ESP32 que escuche los datos enviados por la aplicación a través de Bluetooth.
      • Implementa la lógica que ajustará el valor del slider según los datos recibidos a través de Bluetooth.

    Controlar un slider en App Inventor 2 y enviar los datos al ESP32 a través de Bluetooth

    Asegurarse tener un módulo Bluetooth conectado al microcontrolador.

    // Importar la librería para el módulo Bluetooth
    #include <SoftwareSerial.h>
    
    SoftwareSerial BTSerial(10, 11); // RX, TX
    
    void setup() {
      Serial.begin(9600);
      BTSerial.begin(9600);
    }
    
    void loop() {
      if (BTSerial.available()) {
        int valor = BTSerial.parseInt();
        if (valor >= 0 && valor <= 255) {
          // Aquí puedes utilizar el valor recibido como desees
          analogWrite(9, valor); // Por ejemplo, controlar un LED con el valor del slider
        }
      }
    }
    

    Este código utiliza la librería SoftwareSerial para comunicarse con el módulo Bluetooth en los pines 10 y 11. Luego, lee el valor entero enviado desde la aplicación y lo utiliza para controlar un LED conectado al pin 9 (se puede ajustar esto según tu configuración).

  • Leer ángulos con sensor MPU6050 sin recurrir a librerías (Excepto Wire)

    Leer ángulos con sensor MPU6050 sin recurrir a librerías (Excepto Wire)
    MPU6050

    Medir el ángulo de inclinación usando el giroscopio/acelerómetro MPU6050 y Arduino

    Se puede medir el ángulo de inclinación usando MPU6050 simplemente conectando el sensor giroscópico/acelerómetro de 6 ejes MPU6050. El acelerómetro envía fuerzas de aceleración X, Y y Z. Necesitamos convertir las fuerzas en ángulos 3D X, Y, Z para determinar la orientación 3D del sensor.

    El giroscopio mide la velocidad de rotación o la tasa de cambio de la posición angular a lo largo del tiempo, a lo largo de los ejes X, Y y Z. Utiliza tecnología MEMS y el efecto Coriolis para medir. Las salidas del giroscopio están en grados por segundo, por lo que para obtener la posición angular, sólo necesitamos integrar la velocidad angular.

    El acelerómetro puede medir la aceleración gravitacional a lo largo de los 3 ejes y usando algunas matemáticas de trigonometría podemos calcular el ángulo en el que está posicionado el sensor. Entonces, si fusionamos o combinamos los datos del acelerómetro y el giroscopio del MPU6050, podemos obtener información muy precisa sobre la orientación del sensor. Por lo tanto, MPU6050 con Arduino puede medir el ángulo de inclinación.

    Giroscopio/acelerómetro MPU6050

    El sensor InvenSense MPU-6050 contiene un acelerómetro MEMS y un giroscopio MEMS en un solo chip. Es muy preciso, ya que contiene un hardware de conversión de analógico a digital de 16 bits para cada canal. Por lo tanto, captura los canales x, y y z al mismo tiempo. El sensor utiliza el bus I2C para interactuar con Arduino.

    El MPU-6050 no es caro, especialmente teniendo en cuenta que combina un acelerómetro y un giroscopio.


    Distribución de pines del MPU6050:

    El módulo MPU-6050 tiene 8 pines:
    INT: Interrumpe el pin de salida digital.
    AD0: pin LSB de dirección esclava I2C. Este es el bit 0 en la dirección esclava de 7 bits del dispositivo. Si está conectado a VCC, se lee como uno lógico y la dirección del esclavo cambia.
    XCL: Pin de reloj serie auxiliar. Este pin se utiliza para conectar el pin SCL de otros sensores habilitados para interfaz I2C al MPU-6050.
    XDA: Pin de datos serie auxiliar. Este pin se utiliza para conectar el pin SDA de otros sensores habilitados para interfaz I2C al MPU-6050.
    SCL: pin de reloj serie. Conecte este pin al pin SCL del microcontrolador.
    SDA: pin de datos serie. Conecte este pin al pin SDA del microcontrolador.
    GND: clavija de tierra. Conecte este pin a la conexión a tierra.
    VCC: Pin de fuente de alimentación. Conecte este pin al suministro de +5 V CC.
    Giroscopio de 3 ejes:

    El MPU6050 consta de un giroscopio de 3 ejes con tecnología Micro Electro Mechanical System (MEMS). Se utiliza para detectar la velocidad de rotación a lo largo de los ejes X, Y, Z como se muestra en la siguiente figura.

    Oreintation y Polaridad de rotación - MPU6050
    Oreintation y Polaridad de rotación – MPU6050

    Acelerómetro de 3 ejes:

    El MPU6050 consta de un acelerómetro de 3 ejes con tecnología microelectromecánica (MEM). Solía ​​detectar el ángulo de inclinación o inclinación a lo largo de los ejes X, Y y Z como se muestra en la siguiente figura.

    Ángulo de inclinación
    Ángulo de inclinación

    Diagrama de circuito y conexión

    MPU6050 tiene pines I2C. Por lo tanto, debe estar conectado a los pines I2C de Arduino. Conecte los pines SDA de MPU6050 a A4 de Arduino y SCL a A5. Suministre una entrada de 5 V al MPU6050 y también conecte el GND como se muestra en la siguiente figura.

    Conexión del MPU6050 con el Microcontrolador

    Ejemplos: Wemos D1 Mini y Arduino Uno

    Código fuente/programa


    A continuación se muestra el código para medir el ángulo de inclinación usando MPU6050 y Arduino. Copie el código y cárguelo en la placa Arduino.

    #include<Wire.h>
    
    const int MPU_addr = 0x68;
    int16_t AcX, AcY, AcZ, Tmp, GyX, GyY, GyZ;
    
    int minVal = 265;
    int maxVal = 402;
    
    double x;
    double y;
    double z;
    
    
    void setup() {
      Wire.begin();
      Wire.beginTransmission(MPU_addr);
      Wire.write(0x6B); //Dirección de memoria del Sensor
      Wire.write(0);
      Wire.endTransmission(true);
      Serial.begin(115200);
    
      pinMode(LED_BUILTIN, OUTPUT);
    
    }
    void loop() {
    
      String textoAImprimir; //Imprime el resultado por consola.
      delay (2);
      unsigned long tiempoInicio = millis();
      Wire.beginTransmission(MPU_addr);
      Wire.write(0x3B);
      Wire.endTransmission(false);
      Wire.requestFrom(MPU_addr, 14, true);
      AcX = Wire.read() << 8 | Wire.read();
      AcY = Wire.read() << 8 | Wire.read();
      AcZ = Wire.read() << 8 | Wire.read();
    
      if (AcX == -1 && AcY == -1 && AcZ == -1 ) {
        Serial.println("No conection MPU6050");
        delay (1000);
      }
    
      else {
        int xAng = map(AcX, minVal, maxVal, -90, 90);
        int yAng = map(AcY, minVal, maxVal, -90, 90);
        int zAng = map(AcZ, minVal, maxVal, -90, 90);
    
          x = RAD_TO_DEG * (atan2(-yAng, -zAng) + PI);
        y = RAD_TO_DEG * (atan2(-xAng, -zAng) + PI);
           z = RAD_TO_DEG * (atan2(-yAng, -xAng) + PI);
    
           Serial.print("x="+(String)x);
           Serial.print(", y="+(String)y);
           Serial.println(", z="+(String)z);
    
    
      }
    
    
      //////////Parpadeo//////////////////Parpadeo//////////////////Parpadeo//////// 
      
      static unsigned long timerBlink;
      if (millis() > timerBlink + 500) {
        digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
        timerBlink = millis();
      }
    
    
    }
    
    
    
    
    
    
    
    
    
    
  • Node-RED en Raspberry Pi

    ¿Qué es Node-RED?

    Node-RED es una herramienta de código abierto para la programación visual que permite crear aplicaciones de Internet de las cosas (IoT).

    Node-RED se ejecuta en el navegador web y utiliza una programación visual que le permite conectar bloques de código, conocidos como nodos, para realizar una tarea. Los nodos cuando se conectan entre sí se denominan flujos.

    Características:

    • Es accesible a una gama más amplia de usuarios.
    • Permite ahorrar tiempo, pues no se escribe código (… ¿Tu qué opinas?)
    • Es código abierto y desarrollado por IBM,
    • Raspberry Pi puede ejecutar Node-RED,

    ¿Qué se puede hacer con Node RED?

    Node-RED permite:

    • Acceder a los GPIO;
    • Establecer una conexión MQTT con otros dispositivos (Usando Arduino IDE, ESP8266, ESP32, etc.);
    • Cree una interfaz gráfica de usuario receptiva para sus proyectos;
    • Comunicarse con servicios de terceros (IFTTT.com, Adafruit.io, ThingSpeak, Home Assistant, InfluxDB etc);
    • Recuperar datos de la web (pronóstico del clima, precios de acciones, correos electrónicos, etc.);
    • Crear eventos activados por tiempo;
    • Almacenar y recuperar datos de una base de datos.

    Instalando Node RED en Raspberry Pi

    bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
    

    Link Oficial: Running on Raspberry Pi : Node-RED (nodered.org)

    Preguntará si se quiere instalar Node Red, luego preguntará: “Would you like to install Pi-specific nodes?” Presionar Y, luego Enter.

    Tomará unos minutos instalar Node-RED. Al final, debería recibir un mensaje similar en la ventana de Terminal:

    Configurar Node-RED Settings

    Después de la instalación, se recomienda configurar las opciones y configuraciones iniciales.

    Ejecución del siguiente comando:

    node-red admin init
    
    • Press Enter to create a Node-RED Settings file on /home/pi/.node-red/settings.js
    • Do you want to set up user security? Yes.
    • Enter a username -> Luego presionar Enter  (admin).
    • Enter a password -> Luego presionar Enter (adminadmin).
    • Luego, debe definir los permisos de usuario. Configuraremos el acceso completo, nos aseguraremos de que la opción de acceso completo esté resaltada en azul y presione Enter.
    • Se pueden agregar otros usuarios con diferentes permisos. Solo se creará un usuario por ahora. Se puden agregar otros usuarios más luego.
    • Do you want to enable the Projects feature? No.
    • Enter a name for your flows file. (Presionar Enter para seleccionar el nombre por defecto flows.json).
    • Provide a passphrase to encrypt your credentials file. (huecat) Aprende más sobre qué es una passphrase.
    • Select a theme for the editor. Presionar Enter para seleccionar por default.
    • Press Enter again to select the default text editor.
    • Allow Function nodes to load external modules? Yes.

    La configuración de Node-RED fue exitosa. Todos los ajustes se guardan en settings.js.

    Iniciar Node-RED

    Correr el siguiente comando para iniciar Node-RED:

    node-red-start
    

    Debería verse algo así en la Terminal:

    Auto-Inicio / Autostart Node-RED

    Para ejecutar Node-RED automáticamente cuando se inicia el Pi, debe ingresar el siguiente comando. Esto significa que mientras su Raspberry Pi esté encendida, Node-RED estará funcionando.

    sudo systemctl enable nodered.service
    

    Ahora, reinicie su Pi para que el inicio automático surta efecto. La próxima vez que se reinicie la Raspberry Pi, Node-RED ya se estará ejecutando.

    sudo reboot
    

    If, later on, you want to disable autostart on boot, you can run:

    sudo systemctl disable nodered.service
    

    Para obtener más información sobre el proceso de instalación, consulte la official documentation.

    Access Node-RED

    Node-RED se ejecuta en el puerto 1880. Para acceder a Node-RED, abra un navegador y escriba la dirección IP de Raspberry Pi seguida de: 1880. Por ejemplo:

    192.168.1.102:1880
    

    Para obtener su dirección IP de Raspberry Pi, puede ejecutar el siguiente comando:

    hostname -I
    

    Después de ingresar la dirección IP de Raspberry Pi seguida de: 1880 en el navegador web, obtendrá acceso a la página de inicio de sesión de Node-RED. Inicie sesión con el nombre de usuario y la contraseña que configuró anteriormente.

    Ya se tiene el acceso a Node-RED. Ahora se puede comenzar a construir sus flujos.

    Descripción General Node-RED

    Echemos un vistazo a la interfaz visual de Node-RED.

    Secciones principales de la interfaz Node-RED

    La siguiente imagen muestra las secciones principales de Node-RED etiquetadas.

    Nodes / Nodos

    En la barra lateral izquierda, puede ver una lista con un montón de bloques. Estos bloques se denominan nodos y están separados por su funcionalidad. Si se selecciona un nodo, se puede ver cómo funciona en la pestaña de documentación de los nodos.

    Los nodos tienen puertos de entrada y/o salida para recibir y enviar información a otros nodos. Por ejemplo, un nodo recibe una entrada de un nodo anterior, procesa esa información y envía un mensaje diferente a otro nodo que hará algo con esa información. La información que se pasa entre los nodos se denomina mensaje.

    Flow

    Los nodos son los componentes básicos de un flujo. Conecta los nodos para crear un flujo que realizará una determinada tarea. Un Flujo también es una pestaña en el espacio de trabajo donde coloca y organiza los nodos.

    En el centro, tienes el Flujo y aquí es donde colocas los nodos.

    Barra lateral derecha

    La barra lateral a la derecha tiene varias herramientas.

    • Información: muestra información sobre los flujos;
    • Ayuda: muestra la documentación de los nodos;
    • Debug/Depurar: el icono de error abre una ventana de depuración que muestra los mensajes pasados a los nodos de depuración; es útil para fines de depuración;
    • Config nodes/Nodos de configuración: el icono de engranaje muestra información sobre los nodos de configuración. Los nodos de configuración no aparecen en el espacio de trabajo principal y son nodos especiales que contienen configuraciones reutilizables que pueden compartir varios nodos en un flujo.

    Implementación

    El botón de implementación guarda todos los cambios realizados en el flujo y comienza a ejecutar el flujo.

    Creando un flujo simple

    Para que se acostumbre a la interfaz de Node-RED, creemos un flujo simple. El flujo que crearemos, simplemente imprime un mensaje en la consola de depuración, cuando se activa.

    Arrastre un nodo de inyección y un nodo de depuración a su flujo y conéctelos.

    Ahora, editemos el nodo de inyección. Haga doble clic en el nodo. En la figura a continuación, puede ver las diferentes configuraciones que puede cambiar.

    En el campo msg.payload , seleccione una cadena y escriba Hola. Luego, haz clic en Listo.

    Messages (msg) in Node-RED are javascript objects that can have multiple properties. The payload is the default property most nodes work with. You can think of it as the main content of the message you want to send to the next node. In our case, we’re simply sending a text message.

    We won’t edit the debug node, but you can double-click on it to check its properties.

    ////////////////////////////////////////////////////////// HASTA ACA

    You can select the output of the debug node, which is msg.payload and where we want to send that output. In our case, we want to send it to the debug window.

    To save your application, you need to click the Deploy button in the top right corner.

    Node-RED deploy button

    Your application is saved.

    Testing the flow

    Let’s test our simple flow. Open the debug window and click the inject node to trigger the flow.

    Node-RED Hello World Example

    As you can see, our message is printed in the debug window when you trigger the inject node. This is a very basic example and it doesn’t do anything useful. However, the purpose of this post is to get you familiar with the Node-RED interface. In no time, you’ll start creating your own flows.

    Exporting and Importing Nodes

    In this section, you’ll learn how to save your nodes. This is useful if you need to:

    • Backup your Node-RED flow
    • Move your flow to another Raspberry Pi (or machine)
    • Share your Node-RED project with others

    Open the main menu, and select the Export option.

    Node-RED export nodes

    A new window opens. You can select if you want to save the selected nodes, the current flow, or all flows. You can also download the nodes as a JSON file or copy the JSON to the clipboard.

    Node-RED export nodes window

    To show you how it works, click on Download for the selected nodes. It will download a JSON file called flows.json.

    You can import those nodes later to another Raspberry Pi or another machine with Node-RED installed, by going to the main menu and selecting the Import option.

    On the Import nodes window, you can upload a JSON file or paste raw JSON.

    Import flow Node-RED

    Installing Pallete Nodes

    As we’ve seen previously, Node-RED comes with a bunch of pre-installed nodes on the Pallete (left sidebar). There are many more nodes available that you can install and use for your projects. You can find them in the Node-RED library. If you need some specific task for your project, there’s probably already a node for that.

    For example, if you need to add the feature to send an email to your flow, you can google something like this: “send email node-red node”. One of the first search results is this page with the node-red-node-email. It comes with some nodes to send and receive emails.

    If you want to install those nodes (or any other nodes) so that you can use them on your flow, go to the main menu and select the option Manage palette.

    Node-RED manage palette

    The following window will open. Select the install tab and search for the nodes you want to install, for example, node-red-node-email.

    Install Node-RED Nodes

    Node-RED Dashboard

    Node-RED Dashboard is a module that provides a set of nodes in Node-RED to quickly create a live data dashboard. You can install those nodes using the Menu Manage Palette. Then, search for node-red-dashboard and install it.

    Install Node-RED dashboard palette

    After installing, the dashboard nodes will show up on the palette.

    Node-RED dashboard nodes

    Nodes from the dashboard section provide widgets that show up in your application user interface (UI). The user interface is accessible on the following URL:

    http://Your_RPi_IP_address:1880/ui
    
    

    For example, in my case:

    http://192.168.1.106:1880/ui
    
    welcome node-red dashboard
  • ESP32 y Node-RED + MQTT (Publicar/Subscribir o Susbribir)

    Utilización de Node-RED para controlar las entradas/salidas del ESP8266/ESP32 y mostrar los datos de sensores en su interfaz.

    El software Node-RED se ejecuta en una Raspberry Pi y la comunicación entre el ESP8266 y el software Node-RED se realiza a través del protocolo de comunicación MQTT.

    Se programará el ESP32 usando Arduino IDE

    Requisitos:

    Primeros pasos con NodeRed y Raspberry Pi

    La comunicación entre Arduino IDE y Node-RED a través del protocolo MQTT permite intercambiar datos y comandos entre un dispositivo basado en ESP8266 o ESP32 (programado con Arduino IDE) y un servidor Node-RED que se ejecuta en otra máquina, como una Raspberry Pi.

    1. Preparación del entorno:
      • Asegurarse que Node-RED esté instalado y en funcionamiento en la máquina que actuará como servidor.
      • Configurar un servidor MQTT y verifica que esté en funcionamiento en la misma máquina que Node-RED.
      • Conecta tu ESP8266 o ESP32 a la red Wi-Fi para que pueda acceder al servidor MQTT.
    2. Uso de la librería PubSubClient en Arduino IDE:
      • En Arduino IDE, instalar la librería PubSubClient para facilitar la comunicación MQTT.
      • Configura tu dispositivo ESP8266 o ESP32 para conectarse a la red Wi-Fi y establecer una conexión con el servidor MQTT utilizando la dirección IP y el puerto correspondientes.
    3. Envío* de mensajes MQTT desde Arduino IDE:
      • Una vez establecida la conexión MQTT, utilizar la función client.publish() para enviar mensajes al servidor Node-RED.
      • Define un “topic” específico para cada tipo de mensaje que desees enviar. Esto permitirá que el servidor Node-RED identifique y procese la información adecuadamente.
    4. Opcional: Recepción de mensajes MQTT en Arduino IDE*:
      • Para recibir mensajes del servidor Node-RED, puedes utilizar la función client.subscribe() para suscribirte a ciertos “topics” MQTT desde tu código de Arduino. De esta manera, tu dispositivo puede recibir comandos o información desde el servidor.
    5. Configuración de Node-RED:
      • En Node-RED, configurar el nodo MQTT para que se conecte al servidor MQTT que está en funcionamiento en la Raspberry Pi u otra máquina.
      • Utiliza el nodo MQTT para escuchar los “topics” a los que tu ESP8266/ESP32 está publicando y/o suscrito.
    6. Procesamiento de mensajes en Node-RED:
      • Una vez que Node-RED reciba los mensajes de un dispositivo ESP8266/ESP32, puedes procesarlos utilizando diferentes nodos para la lógica y la visualización. Esto te permitirá realizar acciones o presentar los datos recibidos según tus necesidades.
    7. Prueba y Depuración.
  • Conectar placa SIM900 y Arduino Uno, Nano, ESP8266, ESP32, (…etc)

    Para conectar el módulo SIM900 con un Microcontrolador ATMEGA 328P, se pueden utilizar las librerías SerialAT y TinyGSM.

    Preparación: Conectar el módulo SIM900 al microcontrolador y comprobar que se puedan enviar comandos AT.

    Concepto: Se enviarán mensajes vía comandos AT desde el microcontrolador a programar hacia el SIM900. Mediante estos comandos se podrán solicitar y enviar SMS, llamados telefónicos y conectarse a Internet para obtener un proyecto IoT autónomo en cualquier parte del mundo.

  • Arduino IDE: Compilar código para ESP32/ESP8266

    Arduino IDE es un compilador que hace que insertar lógica en lenguaje C sea muy fácil, sobre todo si la placa que compras es marca Arduino pues viene con el “CORE” pre-instalado.

    Cuando utilizamos placas de otros fabricante o incluso microcontroladores que no se encuentran en estas placas marca Arduino, tenemos muchas veces a disposición Frameworks de diversos fabricantes, como es el caso de los microcontroladores ESPRESSIF: ESP8266 y ESP32

    Luego de tener instalado el driver del FTDI en nuestro ordenador, se procede a decirle al “Arduino IDE” desde qué dirección cargar placas adicionales.

    Archivo > Preferencias

    Puedes compilar este código con Arduino IDE

    ESP8266 Core

    https://arduino.esp8266.com/stable/package_esp8266com_index.json

    ESP32 Core

    https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

    Si quieres tener instalados los firmwares de ambos microcontroladores, puedes separar los link con una “,”

    https://arduino.esp8266.com/stable/package_esp8266com_index.json, https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

    Ver https://github.com/espressif/arduino-esp32/blob/master/docs/arduino-ide/boards_manager.md para más detalles.

    ¿Cómo verificar si el microcontrolador se instaló correctamente?


    Ahora que ha instalado ESP32 en su “Arduino IDE”, si desea saber si desea instalar ESP32/8266 en Arduino IDE correctamente o no. Puede verificarlo usando un ejemplo simple ya disponible en Arduino IDE para la placa de desarrollo ESP32 para Internet de las cosas. Cuando instala la biblioteca ESP32 en Arduino IDE, estos ejemplos también se instalan.

    Se pueden seguir estos pasos:

    1. conectar tu placa con una computadora a través de un cable USB.

    2. Conectar la placa con una computadora, seleccione la placa que está utilizando.

    Hay muchos tipos de placas ESP32/8266 disponibles en el mercado. Suelo preferir la versión de ALIExpress Wemos D32 que incluye AUTOFLASH. Pero puedes usar cualquier tablero que quieras. Para seleccionar la placa, ir a herramientas>Placas, clic en el módulo de Desarrollo. Imagen a continuación:

    Ahora selección del puerto:

    Ahora subir el Sketch (Control+U)

  • ¿Cómo funciona el wifiManager? para ESP32/ESP8266

    La librería WiFiManager simplifica el proceso de configuración y gestión de conexiones WiFi en los módulos ESP32 y ESP8266. Proporciona una forma fácil de configurar y almacenar las credenciales de red WiFi, permitiendo que los dispositivos se conecten a las redes de manera autónoma y se recuperen de forma automática en caso de desconexiones.

    El “WiFiManager” es una biblioteca diseñada para facilitar la configuración y administración del Wi-Fi en dispositivos IoT basados en los microcontroladores ESP32 y ESP8266. Esta biblioteca ofrece una forma conveniente de crear un portal de configuración basado en la web, lo que permite a los usuarios ingresar las credenciales de Wi-Fi sin necesidad de cargar un nuevo código en el dispositivo.

    El proceso de funcionamiento del WiFiManager se puede describir en los siguientes pasos:

    1. Inclusión de la biblioteca: En primer lugar, es necesario incluir la biblioteca WiFiManager en el proyecto. Esto se puede realizar descargando e instalando la biblioteca desde el administrador de bibliotecas de Arduino IDE o mediante el uso de un gestor de paquetes como PlatformIO.
    2. Creación de una instancia del WiFiManager: Se crea una instancia del objeto WiFiManager en el código del proyecto.
    #include <WiFiManager.h>
    
    WiFiManager wifiManager;
    
    

    Inicialización y conexión:

    Antes de utilizar el WiFiManager, es necesario inicializarlo y conectarlo al punto de acceso Wi-Fi existente. Si se encuentran credenciales de Wi-Fi almacenadas previamente, el dispositivo se conectará automáticamente. En caso contrario, se iniciará el portal de configuración.

    void setup() {
      // Inicializar el WiFiManager
      wifiManager.autoConnect("MiDispositivo");
    
      // Resto del código de configuración o funcionalidad
    }
    

    En el ejemplo anterior, “MiDispositivo” es el nombre del punto de acceso que se creará si no se encuentran credenciales de Wi-Fi almacenadas. Este nombre puede modificarse según las preferencias del usuario.

    Portal de configuración:

    Si no se encuentran credenciales de Wi-Fi almacenadas, el WiFiManager iniciará un portal de configuración. Esto implica que el ESP32/ESP8266 actuará como un punto de acceso Wi-Fi al cual es posible conectarse desde un dispositivo móvil o una computadora.

    Al conectarse a este punto de acceso, se abrirá automáticamente una página de configuración basada en la web, donde los usuarios pueden ingresar las credenciales de su red Wi-Fi. Una vez que las credenciales se ingresen y envíen, el ESP32/ESP8266 se conectará a la red Wi-Fi especificada y recordará estas credenciales para futuros usos.

    Almacenamiento de la configuración:

    Después de que el WiFiManager se conecte exitosamente a la red Wi-Fi especificada, almacenará las credenciales en la memoria no volátil del dispositivo (por ejemplo, en el ESP32/ESP8266). Esto permite que las credenciales se utilicen en las próximas ejecuciones, sin necesidad de ingresarlas nuevamente cada vez que se reinicie el dispositivo.

  • Enviar información a ThingSpeak desde ESP32/ESP8266

    Este fantástico módulo que cuesta menos que una hamburguesa en España, no solo tiene bluetooth, dos núcleos y sensores touch… sino que también tiene Wi-Fi!

    Así que aprovecharemos esta funcionalidad para enviar datos a la nube, a un broker Mqtt. Mqtt es un estándar de comunicaciones muy eficientes originalmente de la industria del petróleo, ahora Liberado y disponible para para casas, industrias, y millones de proyectos IoT

    Asegúrate de tener instalado el CORE del ESP32/ESP8266