2.3 Wifi-Conectando ESP8266 – ESP01 Esquemático

Un ESP01 que es el más pequeño de los diferentes módulos ESP8266, requiere añadir algunos componentes para conectarse y programar u operar el módulo.

Esquemático con ESP01

Al módulo se añade: una fuente de alimentaicón a 3.3V, un módulo de conexión USB-TTL para conectar a una computadora y unas botoneras para controlar el modo de operación y reinicio reset).

La alimentación del circuito presentada en el esquema, sigue las indicaciones de la sección: Fuente de alimentación 3.3VDC.

El control de modo de «operación/Programación» y «reset» se implementa con  botoneras.

El modo predeterminado de inicio es «operación» por medio de GPIO0 a estado HIGH (+VCC ) con una resistencia (pullup), al presionar la botonera se cambia el estado a LOW (GND).

Para programar se presiona la botonera «programar» y luego se añade un pulso a «reset», el módulo queda  listo para «subir» instrucciones desde IDE Arduino.

En la versión ESP-01 el LED interno se encuentra conectado al pin de TX usado para la comunicación Serial. Usar mensajes por puerto serial causaría un conflicto en el modo de operación con el parpadeo de led, asunto a tomar encuenta en las instrucciones.

Una forma de implementación funcional, es no usar los mensajes por puerto serial. Otra forma es cambiar el LED a otro pin y configurarlo como salida, ej: GPIO2. El nuevo pin permite conectar Tx y Rx y observar los mensajes del proceso de conexión. Adicionalmente GPIO2 es el led interno de otros modelos de ESP8266.

En caso de usar los componentes junto a un protoboard se muetra tambien el diagrama de conexión como referencia

la programación del módulo se realiza en la siguiente sección.

HM-10 Serial con Arduino a PC/Tablet/móvil

Los módulos HM-10 permiten usar comunicación serial usando instrucciones AT, tanto para configuración como para mensajería de datos.

Para conectase con el módulo desde el computador se puede usar un arduino como intermediario, pudiendo así configurar el dispositivo. Posteriormente, usando un esquema semejante se puede ampliar para enviar/recibir un mensaje a un dispositivo, por ejemplo una tablet o un móvil.

Referencia: https://people.ece.cornell.edu/land/courses/ece4760/PIC32/uart/HM10/DSD%20TECH%20HM-10%20datasheet.pdf


Conexión con Arduino

La comunicación hacia el HM-10 se realiza con un computador y un arduino, aprovechando la conexión serial del módulo y enviando instrucciones AT.

El módulo tiene dos pines para alimentación Vcc y GND y los dos pines de comunicación Tx y Rx.

La conexión con el arduino requiere el acondicionamento de la señal de transmision Tx desde el arduino a 5V hacia el módulo HM-10 a 3.3V mediante un divisor de voltaje. El divisor de voltaje se implementa con las resistencias R1 de 1KΩ y R2 de 2.2KΩ.


Configuración Serial – Arduino

La configuración serial se puede realizar mientras el módulo no se encuentre conectado o «emparejado» a otro dispositivo.

El led del módulo parpadea en esta modalidad, indicando que no está emparejado y contesta instrucciones de configuración.

La terminal o «monitor de arduino» se debe configurar a ala misma velocidad que lo indicado en la sección script de Arduino, y se usa envío de NL y CR (nueva linea y enter)

Ejemplos de instrucciones enviadas desde «monitor de arduino»

AT+VERSION

+VERSION=Firmware V4.2.0,Bluetooth V4.0 LE

AT+NAME

+NAME=BT05

AT+ROLE

+ROLE=0

AT+HELP

********************************************************************
* Command             Description			           *
* ---------------------------------------------------------------- *
* AT                  Check if the command terminal work normally  *
* AT+RESET            Software reboot				   *
* AT+VERSION          Get firmware, bluetooth, HCI and LMP version *
* AT+HELP             List all the commands		           *
* AT+NAME             Get/Set local device name                    *
* AT+PIN              Get/Set pin code for pairing                 *
* AT+PASS             Get/Set pin code for pairing                 *
* AT+BAUD             Get/Set baud rate		                   *
* AT+LADDR            Get local bluetooth address		   *
* AT+ADDR             Get local bluetooth address		   *
* AT+DEFAULT          Restore factory default			   *
* AT+RENEW            Restore factory default			   *
* AT+STATE            Get current state				   *
* AT+PWRM             Get/Set power on mode(low power) 		   *
* AT+POWE             Get/Set RF transmit power 		   *
* AT+SLEEP            Sleep mode 		                   *
* AT+ROLE             Get/Set current role.	                   *
* AT+PARI             Get/Set UART parity bit.                     *
* AT+STOP             Get/Set UART stop bit.                       *
* AT+START            System start working.			   *
* AT+IMME             System wait for command when power on.	   *
* AT+IBEA             Switch iBeacon mode.	                   *
* AT+IBE0             Set iBeacon UUID 0.            	           *
* AT+IBE1             Set iBeacon UUID 1.            	           *
* AT+IBE2             Set iBeacon UUID 2.            	           *
* AT+IBE3             Set iBeacon UUID 3.            	           *
* AT+MARJ             Set iBeacon MARJ .            	           *
* AT+MINO             Set iBeacon MINO .            	           *
* AT+MEA              Set iBeacon MEA .            	           *
* AT+NOTI             Notify connection event .                    *
* AT+UUID             Get/Set system SERVER_UUID .            	   *
* AT+CHAR             Get/Set system CHAR_UUID .            	   *
* -----------------------------------------------------------------*
* Note: (M) = The command support slave mode only. 		   *
* For more information, please visit http://www.cyobd.com          *
* Copyright@2013 www.cyobd.com.   All rights reserved.		   *
********************************************************************

Algunas instrucciones pueden variar en otros módulos con diferente firmware.
Lo presentado es solo un ejemplo de lo que se puede hacer en éste módulo de www.cyobd.com


Instrucciones Arduino

/* Comunicación Serial por Bluetooth
Basada en: https://www.arduino.cc/en/Tutorial/SoftwareSerialExample
*/

#include <SoftwareSerial.h>
int Rx = 10; //conexión al módulo
int Tx = 11;
SoftwareSerial moduloBtLE(Rx,Tx);

void setup(){
  
  int baudiosArduino = 9600;
  // Serial USB
  Serial.begin(baudiosArduino);
  while (!Serial) {
    }// espera conexión
  Serial.println("\n USB <->PC, Listo..!!");
  
  //Puerto Serial Módulo Bluetooth
  int baudiosBtLE = 9600;
  moduloBtLE.begin(baudiosBtLE);
  moduloBtLE.println("Listo Bluetooth a Tablet/móvil");
  delay(1000);
  moduloBtLE.write("AT+VERSION");
  delay(1000);
}

void loop(){
  // recibe mensaje Bluetooth y envia por USB a PC
  if (moduloBtLE.available()){
    Serial.write(moduloBtLE.read());
    }
  // envia mensaje Serial-USB a Bluetooth
  if (Serial.available()){
    moduloBtLE.write(Serial.read());
    }
  }

Conexión a tablet/móvil

Se realizó la prueba en una tablet con arduino, descargando el programa «Serial Bluetooth terminal» desde la tienda Play Store de Google.

Referencia: https://play.google.com/store/apps/details?id=de.kai_morich.serial_bluetooth_terminal&hl=es_EC

El siguiente paso en la tablet es usando la aplicación, realizar una búsqueda de dispositivos, menú/dispositivos/scan , y así encontrar el que tiene el nombre de la sección anterior donde se pide AT+NAME, en este caso: «BT05».

una vex que se han conectado al módulo desde la tablet/móvil se pueden intercambier mensajes con la PC.

y la consola de Arduino

Bluetooth LE – CC2541 SOC /HM-10

CC2541SOC es el componente principal de los módulos HM-10 genéricos que se encuentran en el mercado local. https://e2e.ti.com/support/wireless-connectivity/bluetooth/f/538/t/812294

El fabricante del chip es Texas Instruments con algunas versiones CC2540/2541.

https://www.ti.com/product/CC2541

Hoja de datos de CC2541

https://www.ti.com/lit/ds/symlink/cc2541.pdf?ts=1591538569573&ref_url=https://www.ti.com/product/CC2541


Módulo HM-10

En el mercado se encuentran la vesión como módulo HM-10 presentado como módulo Bluetooth LE en varios formatos genéricos o como módulo para «arduino».

https://e2e.ti.com/support/wireless-connectivity/bluetooth/f/538/t/812294

 

 

 

LoRa 915MHz módulos

Módulos de prueba LORA a 915MHz: módulos de radio, los módulos de desarrollo y módulos gateway

Todos se basan en los chips del fabricante Semptech.

https://www.semtech.com/products/wireless-rf/lora-transceivers

Módulos de radio – Lora Sx1276

Son de largo alcance a 915MHz y con pines compatible con 3-5v.

La comunicación con el módulo y un microcontrolador se realiza mediante protocolo SPI.

En éste modo se facilita la conexión directa con módulos arduino a 5V, al traer convertidor de señal de 3.3 a 5V bidireccional.

Una recomendación es conectarlos y encenderlos siempre con la antena conectada.

La configuración de pines se muestra en la figura.

Módulos de desarrollo con ESP32

También se puede usar los módulos Lora emparejados con ESP32 como microcontrolador. Aportan conexión a WIFI y viene en varias configuraciones, lo más relevante es que traen antenas de 915MHz

https://heltec.org/project/wifi-lora-32/

El módulo de desarrollo facilita realizar pruebas con tan solo unos cuantos elementos, tiene conexión USB para programación o acceso de datos y una pequeña pantalla para visualizar mensajes de estado.

otro modelo dle mismo fabricante es el Wireless-Stick-Lite que es muy semejante al anterior, pero no incorpora la pantalla OLED.

https://heltec.org/project/wireless-stick-lite/

Módulos para Gateway

Los módulos para gateway permiten operar simultaneamente con varios canales, requieren añadir un controlador implementado con un Raspberry Pi. Se pueden usar para conectarse a un gestor de gateways, por ejemplo TTN o uno implementado de forma privada con elementos abiertos como ChirpStack.

https://heltec.org/project/ht-m01/

Conexión USB-TTL para Arduino IDE

Para subir las instrucciones (programar) el ESP8266 desde la computadora usando un puerto USB, es necesario disponer de un módulo USB-TTL. La conexión también es util para obtener los datos desde el «monitor serial» del IDE Arduino.

Para comunicarse con el ESP8266 se requiere conectar los cables de:

  • transmisión TX
  • recepción RX
  • Tierra GND

El módulo USB-TTL de preferencia debe tener entre los pines de  conexión, uno de 3.3v semejante al mostrado en la imagen. El pin 3V3 es usado en caso de necesitar alimentar el módulo ESP8266. Sin embargo, en los dispositivos usados se encontró que la corriente proporcionada no es suficiente para el funcionamiento del dispositivo.

Revisar las opciones de carga de programa en la sección de «IDE Arduino con ESP8266»

 

Fuente de alimentación a 3.3VDC

1. Consideraciones de diseño

La alimentación de energía de los dispositivos con ESP8266 es a 3.3V.

Para la mayor parte de los diseños se realiza desde la alimentación de energía con 110V AC, por lo que es necesario usar un regulador de voltaje para llegar hasta a 3.3V DC que es el voltaje de operación del ESP8266.

2. Componente HLK-PM03

HLK-PM03

Idealmente se puede usar un regulador HLK-PM03, que simplifica la fuente de alimentación.

Sin embargo inicialmente para el desarrollo no se encontró en el mercado local  y se analiza algunas opciones si se encuentra en un caso semejante.

3. Alternativas a componente HLK-PM03

Por fácilidad y  disponibilidad, la fuente de alimentación se realiza dos pasos:

  • Reducción de 110V AC a 5V DC
  • Reducción de 5V DC a 3.3V DC
3.1 Reduccion de 110VAC a 5VDC

El primer paso, 110V AC a 5V DC, se puede implementar con el circuito de un cargador de celular con salida USB.

En los módulos desarrollados, en algunos casos se ha usado solo la placa de circuito del cargador para optimizar espacio en la caja del dispositivo.

3.2  Reducción de 5VDC a 3.3VDC

Para el segundo paso es necesario un regulador de 5VDC a 3.3VDC como por ejemplo el LM1117-3.3V en formato componente o como módulo.

componente

 

módulo

Lo que disponga para el desarrollo del circuito no afecta al funcionamiento, solo el espacio usado en el protoboard o el destinado para la placa de circuito (PCB).

La opción de usar el módulo de 5VDC a 3.3VDC es la que más se ha usado en los diseños.

Sin embargo al principio no se tenía un módulo y se optó para el primer prototopo por curiosidad la alternativa de usar diodos para disminuir el voltaje hasta lo requerido. Los diodos en sentido directo tienen caidas de voltaje de 0.7 V, por lo que se usaron dos diodos en serie en sentido directo, se recomienda verificar el voltaje en operación empezando con 3 diodos.

Otra opciónes para 5V a 3.3V, usar un circuito con diodos zener.

3.3 Fuente para protoboard

Si la implementación la realiza solo en protoboard, puede un modulo regulador semenjante al mostrado, que permite seleccionar si la salida al protoboard es de 5VDC o 3.3VDC cambiando los jumpers.

La alimentación del módulo se puede realizar con una fuente igual ao mayor a 5VDC.

 

 

Fritzing – Partes adicionales

Fritzing es un software libre hasta la versión 0.9.3.b que permite disponer de vistas de esquema (diagrama), protoboard y PCB (placa circuito), por lo que es muy popular para documentar desarrollo de circuitos.

A partir del 1 de diciembre del 2019, requiere una donación para  la descarga. Pero se puede seguir usando la versión anterior.

El programa se puede descargar desde:  http://fritzing.org/home/

De requerir partes adicionales que no se encuentran en la librería predeterminada, se pueden descargar desde otros sitios o se puede crearlas.

Por ejemplo para para IOT OpenFramework se usan las siguientes partes:

1. Regulador de Voltaje AMS1117

http://forum.fritzing.org/t/ams1117-step-down-module/6372

2. Esp8266

https://github.com/ydonnelly/ESP8266_fritzing

descargue y abra los archivos para incorporarlos a Fritzing.

ESP07 IR Emisor

El circuito permite la emisión de una señal infraroja semejante a un control remoto usando el módulo ESP07-ESP8266. El código infrarojo emitido corresponde al obtenido en el ejemplo del receptor infrarojo.

Com emisor se usa un LED IR, complementado con un transistor para aumentar la cantidad de corriente. El el puerto GPIO05 no es suficiente para obtener distancias de transmisión de la señal muy lejanas.

El esquemático muestra lo sencillo de la conexión del emisor infrarojo:

Protoboard

Como referencia de la conexiones en también se adjunta la conexión usando un protoboard.

Instrucciones

Se usan las librerias Arduino IRremoteESP8266 como base para un dispositivo de control remoto con Home Assistant.

El pin del emisor infrarojo se lo toma de la hoja de datos para el ESP8266 donde se indica usar el pin 5 para receptor y el 14 para emisor. Sección 4.4.Interfaces, página 12.

https://www.mikrocontroller.net/attachment/338570/Ai-thinker_ESP-07_WIFI_Module-EN.pdf

4.8. IR Remote Control pag 16

https://www.espressif.com/sites/default/files/documentation/0a-esp8266ex_datasheet_en.pdf

#include <IRremoteESP8266.h>
#include <IRsend.h>
#include <IRrecv.h>

#define LED_pin 2
#define IR_LED 14
IRsend irsend(IR_LED);  // configura emisor
uint32_t enciendeapaga = 0xFF5AA5; // código de control

void setup() {
    Serial.begin(115200);
    pinMode(LED_pin, OUTPUT);
    
    irsend.begin();
}

void loop() {
    Serial.println("Enciende/Apaga control remoto Avanti");
    // Parpadeo LED interno
    digitalWrite(LED_pin, LOW);
    delay(1000); // Esperar un segundo
    digitalWrite(LED_pin, HIGH);
    delay(1000); // Esperar un segundo
  
    irsend.sendNEC(enciendeapaga ,32);
    delay(4000);// tiempo antes de apagar dispositivo
}

Las pruebas de funcionamiento se realizan de dos formas:

1. Usando una cámara digital del móvil celular, para verificar que el LED IR parpadea, se puede ver en la pantalla que el LED enciente.

2. apuntando el led al dispositivo que activa el control remoto y usado en el ejemplo del receptor.

El siguiente paso es integrar el receptor y el emisor para el control mediante el servidor MQTT-Mosquitto.

ESP07 IR detector/demodulador

El ejemplo realiza la detección de señal de un control remoto infrarojo con el módulo ESP07-ESP8266 y muestra el resultado Hexadecimal en el Monitor Serial.

Cada tecla del control remoto genera un código único que es detectado con el sensor.

Para el ejemplo se usa un HX1838, sin embargo también funciona  un TSOP382.., TSOP384, o alguna versión que incluya el circuito de demodulación.

La versión del sensor infrarojo con detección y demodulación simplifica el circuito a un pin digital configurado como entrada en el módulo a usar, además de Vcc y Gnd.

El esquemático muestra lo sencillo de la conexión del sensor infrarojo para su lectura.

Protoboard

Como referencia de la conexiones en también se adjunta la conexión usando un protoboard.

Lectura de datos

Para un control remoto dado, por ejemplo el básico para arduino, se obtienen los diferentes códigos en Hexadecimal de las teclas presionadas usando el monitor serial.

FF5AA5
FF5AA5

Si usa un ESP07 en versión 8285, puede ser necesario configurar los baudios a 74880 baudios, si los símbolos que llegan no son legibles.

Instrucciones

Se usan las librerias Arduino IRremoteESP8266 como base para un dispositivo de control remoto con Home Assistant.

/* IRremoteESP8266: Demo Receptor Infrarojo
 * Debe usar un sensor detector/demodulador conectado al Receptor_Pin.
 *  Based on Mark Szabo's Version 0.2 June, 2017 and
 *  Ken Shirriff's IrsendDemo Version 0.1 July, 2009
 *  https://github.com/markszabo/IRremoteESP8266
 */

#include <IRremoteESP8266.h>
#include <IRrecv.h>
#include <IRutils.h>

// Sensor IR en GPIO05
const uint16_t Receptor_Pin = 5;

IRrecv irrecv(Receptor_Pin);
decode_results lectura;

void setup() {
    Serial.begin(74880);//74880, 115200
    while (!Serial){delay(50);}
    
    // Inicia receptor
    irrecv.enableIRIn();
    
    Serial.println("\n Demo: Receptor de IR en espera de mensaje");
}

void loop() {
    if (irrecv.decode(&lectura)) {
        // print() & println() no maneja enteros largos(uint64_t)
        serialPrintUint64(lectura.value, HEX);
        Serial.println("");
        
        // Prepara próximo valor
        irrecv.resume();
    }
    delay(100);
}

Con los cógidos obtenidos, el siguiente paso consiste en generar los códigos usando un LED IR para activar el dispositivo o equipo que se controlaba con el control remoto. Observe y seleccione un código del ejercicio realizado con el control remoto que haya seleccionado, el dato sirve para el próximo ejemplo como IR_Emisor.

Referencia:
https://learn.sparkfun.com/tutorials/ir-communication/all#hardware-hookup
https://github.com/markszabo/IRremoteESP8266


Decodificando

Una versión para obtener más detalles de los códigos la presenta en el ejemplo version 2 de Mark Sabo en:

https://github.com/markszabo/IRremoteESP8266/blob/master/examples/IRrecvDumpV2/IRrecvDumpV2.ino

Solo se requiere hacer el ajuste en el pin de sensor al GIPO05, con lo que se obtiene para el ejemplo anterior:

Timestamp : 000446.026
Encoding  : NEC
Code      : FF5AA5 (32 bits)
Library   : v2.6.0

Raw Timing[71]:
   +  9024, -  4556,    +   548, -   594,    +   546, -   568,    +   544, -   594, 
   +   548, -   592,    +   548, -   568,    +   546, -   594,    +   548, -   592, 
   +   548, -   566,    +   546, -  1738,    +   548, -  1710,    +   550, -  1710, 
   +   544, -  1740,    +   548, -  1712,    +   546, -  1712,    +   546, -  1740, 
   +   546, -  1712,    +   548, -   592,    +   548, -  1710,    +   548, -   592, 
   +   548, -  1710,    +   548, -  1712,    +   546, -   594,    +   548, -  1712, 
   +   544, -   596,    +   548, -  1712,    +   546, -   596,    +   548, -  1710, 
   +   546, -   594,    +   548, -   594,    +   548, -  1712,    +   548, -   592, 
   +   548, -  1710,    +   548, - 40334,    +  9024, -  2294,    +   550

uint16_t rawData[71] = {9024, 4556,  548, 594,  546, 568,  544, 594,  548, 592,  548, 568,  546, 594,  548, 592,  548, 566,  546, 1738,  548, 1710,  550, 1710,  544, 1740,  548, 1712,  546, 1712,  546, 1740,  546, 1712,  548, 592,  548, 1710,  548, 592,  548, 1710,  548, 1712,  546, 594,  548, 1712,  544, 596,  548, 1712,  546, 596,  548, 1710,  546, 594,  548, 594,  548, 1712,  548, 592,  548, 1710,  548, 40334,  9024, 2294,  550};  // NEC FF5AA5
uint32_t address = 0x0;
uint32_t command = 0x5A;
uint64_t data = 0xFF5AA5;

La información de Code, «32 bits» Es necesaria si requiere reproducir la instrucción on irsend.sendNEC(codigo,32).

En el caso de usar otro control remoto se debe disponer del número de bits.

ESP32 Bluetooth – Serial

Se puede realizar una comunicación Serial por medio de Bluetooth con la libreria básica de ESP32 para arduino.

En un ejercicio básico par controlar los estados de un LED es enviar un mensaje de ‘1’  para encender el Led incorporado del módulo y un mensaje  de ‘0’ para apagar el Led.

Por un lado se usa un módulo ESP32, y por el otro un móvil/tablet con una aplicación básica de terminal serial, para tener resultados semejantes al mostrado.

Las instrucciones usadas son:

// Controlador Binario LED
// ESP32-Serial Bluetooth

#include <BluetoothSerial.h>

BluetoothSerial ESP_BT;

int mensaje;

// LED monitor interno
// ESP01-pin=1, ESP07-pin=2; ESP32-pin=5
const PROGMEM uint8_t LED_pin = 5; 

void setup() {
  Serial.begin(115200);
  ESP_BT.begin("ESP32_LED");
  Serial.println("Listo dispositivo Bluetooth");
  pinMode (LED_pin, OUTPUT);
}

void loop() {
  
  if (ESP_BT.available()){
    // mensaje recibido
    mensaje = ESP_BT.read(); 
    Serial.print("Recibido:"); 
    Serial.println(mensaje);

    if (mensaje == 49){
        digitalWrite(LED_pin, HIGH);
        ESP_BT.println("LED Encendido");
        }
        
    if (mensaje == 48){
        digitalWrite(LED_pin, LOW);
        ESP_BT.println("LED Apagado");
        }
  }
  delay(20);
}

Referencia:

https://github.com/espressif/arduino-esp32/tree/master/libraries/BluetoothSerial

https://create.arduino.cc/projecthub/mayooghgirish/arduino-bluetooth-basic-tutorial-d8b737