Está en la página 1de 42

ESP32 – parte 2

Sensor efecto hall


• Su principio de funcionamiento es el efecto Hall, denominado así por
su descubridor Edwin Herbery Hall, en 1849.
• Al hacer circular una corriente eléctrica a lo largo de un
semiconductor en presencia de un campo magnético, los electrones
son desviados por efecto del campo magnético, dando lugar a una
tensión perpendicular a la corriente y al campo magnético.
Ubicación del sensor hall
Usar el sensor de efecto hall
Sensor touch del esp 32
• El ESP32 tiene 10 pines GPIO táctiles capacitivos. Estos GPIO pueden
detectar variaciones en cualquier cosa que tenga una carga eléctrica,
como la piel humana. Así pueden detectar las variaciones inducidas al
tocar los GPIO con el dedo.
• Estos pines se pueden integrar fácilmente en almohadillas capacitivas
y reemplazar botones mecánicos.
GPIO tipo touch en el esp32
touchRead(GPIO)
Protocolos de comunicación UART
• UART (Universal Asynchronous Transmitter Receiver), es el protocolo
más común utilizado para la comunicación serial full-duplex. Se trata
de un único chip LSI (integración a gran escala) diseñado para realizar
una comunicación asíncrona. Este dispositivo envía y recibe datos de
un sistema a otro.
Diagrama de bloques Los componentes principales. Son:
• el transmisor y el receptor.
• El transmisor está formado por el
registro de retención de
transmisión, el registro de
desplazamiento de transmisión y la
lógica de control.
• Del mismo modo, el receptor
consiste en el registro de retención
de recepción, el registro de
desplazamiento de recepción y la
lógica de control.
• En común, tanto el transmisor
como el receptor cuentan con un
generador de velocidad de
transmisión.
Diagrama de bloques II
• El generador de velocidad de transmisión genera la velocidad a la que el
transmisor y el receptor tienen que enviar/recibir los datos. El registro de
retención de transmisión contiene el byte de datos a transmitir. El registro
de desplazamiento de transmisión y el registro de desplazamiento del
receptor desplazan los bits a la izquierda o a la derecha hasta que se
envía/recibe un byte de datos.

• Además de estos, se proporciona una lógica de control de lectura o


escritura para indicar cuándo leer/escribir. El generador de velocidad de
transmisión genera velocidades que van desde 110 bps (bits por segundo)
hasta 230400. En general, los microcontroladores tienen tasas de baudios
más altas, como 115200 y 57600, para una transferencia de datos más
rápida.
¿Cómo funciona la UART?
• En resumen, el transmisor y el receptor utilizan el bit de inicio, el bit
de parada y los parámetros de sincronización para sincronizarse entre
sí. Los datos originales están en forma paralela. Por ejemplo, tenemos
datos de 4 bits, para convertirlos a la forma serie, necesitamos un
convertidor de paralelo a serie. Generalmente se utilizan flip-flops D o
latches para diseñar los convertidores.
Conversor de paralelo a serial
• Paso#1:

• Toma 4 Flip-flops. El número de flip-flops es equivalente al número de bits a transmitir. Del


mismo modo, ponga Multiplexores delante de cada flip-flop, pero excluyendo el primero.
Un multiplexor se coloca para combinar los datos y convertirlos en bits en serie. Tiene dos
entradas, una de datos de bits paralelos y otra del flip-flop anterior.

• Paso#2:

• Ahora, carga los datos a la vez en los flip-flops D. Tirará de los datos paralelos y mueve el
último bit del último flip-flop (cuatro), y luego el tercer bit, el segundo bit, y finalmente el
primer bit. Ahora, para reconvertir los datos paralelos en forma serial se utiliza el
convertidor serial a paralelo.
Formato del protocolo
• La UART comienza la comunicación con un bit de inicio ‘0’. El bit de
inicio inicia la transferencia de datos en serie y el bit de parada
finaliza la transacción de datos.
Trama de transmisión
• El transmisor envía un solo bit a la vez. Después de enviar un bit, se
envía el siguiente. De este modo, todos los bits de datos se envían al
receptor con una velocidad de transmisión predefinida. Habrá un
cierto retraso en la transmisión de cada bit. Por ejemplo, para enviar
un byte de datos a una velocidad de 9600 baudios, cada bit se envía
con un retraso de 108 µs. Los datos se añaden con un bit de paridad.
Por lo tanto, se requieren 10 bits de datos para enviar 7 bits de datos.
Maestro_esclavo

Maestro: Esclavo:
• Enviar ordenes al TX -RX • Recibir ordenes del
esclavo maestro
• Recibir datos del • Leer datos de sensores
esclavo o pines
• Procesar datos e • Enviar datos al maestro
imprimir Rx - Tx
GPIO usables para UART
Inicializando
• Se requiere de la librería : #include <HardwareSerial.h>
• Se crea un objeto llamado desde la libreria HardwareSerial usando el
commando ‘SerialPort( Puerto a usar)’:
• HardwareSerial SerialPort(1) //if using UART1
• HardwareSerial SerialPort(2) //if using UART2
• Dentro del setup : SerialPort.begin (BaudRate, SerialMode, RX_pin,
TX_pin).
• Baud rate: velocidad ej: 9600
• SerialMode: como uso el serial ej: “SERIAL_8N1” osea 8 bits 1 bit de
paridad.
Ejemplo de inicialización
Para enviar mensajes
• Dentro del loop usamos la orden: SerialPort.print.
Para recibir mensajes
1. Se configura el puerto como se vio previamente
2. En el Loop se pregunta si el puerto esta disponible con :
if (SerialPort.available())
3. Sí entra al if se realiza el comando: SerialPort.read();
4. Tener en cuenta que los valores a leer deben ser de tipo char.
Ejemplo Esclavo

Esclavo:
• Recibir ordenes del
maestro
• Leer datos de sensores
o pines
• Enviar datos al maestro
• Ejecutar tareas
Ejemplo de maestro

Maestro:
• Enviar ordenes al
esclavo
• Recibir datos del
esclavo
• Procesar datos e
imprimir
Comunicación I2C
• I2C es un puerto y protocolo de comunicación serial, define la trama
de datos y las conexiones físicas para transferir bits entre 2
dispositivos digitales. El puerto incluye dos cables de comunicación,
SDA y SCL. Además el protocolo permite conectar hasta 127
dispositivos esclavos con esas dos líneas, con hasta velocidades de
100, 400 y 1000 kbits/s. También es conocido como IIC ó TWI – Two
Wire Interface.
Comunicación I2C
• El protocolo I2C es uno de los más utilizados para comunicarse con
sensores digitales, ya que a diferencia del puerto Serial, su
arquitectura permite tener una confirmación de los datos recibidos,
dentro de la misma trama, entre otras ventajas.
• Los mensajes que se envían mediante un puerto I2C, incluye además
del byte de información, una dirección tanto del registro como del
sensor.
• Para la información que se envía siempre existe una confirmación de
recepción por parte del dispositivo.
• Por esta razón es bueno diferenciar a los distintos elementos
involucrados en este tipo de comunicación.
I2C – Esquema de comunicación y
elementos

En el caso de I2C se diferencian dos elementos básicos, un


MAESTRO y un ESCLAVO. La Figura, muestra una conexión
típica de tres dispositivos, el bus consiste de dos líneas
llamadas, Serial DAta – SDA y Serial CLock – SCL. Es decir, Datos
Seriales y Reloj Serial. En particular al bus se le conectan dos
resistencias en arreglo pull-up, de entre 2.2K y 10K.
Velocidad del puerto I2C

• La velocidad del puerto I2C se refiere al tiempo que le toma al puerto


transferir un bit de información. Entonces, este valor se mide en
bits/segundo.
• Típicamente vamos a encontrar la referencia en ciclos/segundo o Herz.
Existen tres velocidades estándar, 100Khz, 400Khz y 1Mhz, es decir,
100kbits/s, 400kbits/s y 1000kbits/s. Por ejemplo, para la trama de la
Figura-2, ese paquete de datos tiene 29 bits, por lo que a una velocidad de
100kbits/s le tomaría al puerto 0.29 ms enviar la información.
• El dato digital ó lógica que leerá cada uno de los dispositivos, corresponde
el voltaje en los flancos de subida de la señal de reloj – SCL.
ESP32 I2C
• El ESP 32 posee dos interfaces I2C que funcionan como maestro o
esclavo.
• Características:
• Standard mode (100 Kbit/s)
• Fast mode (400 Kbit/s)
• hasta 5 MHz, SDA pull-up strength
• 7-bit/10-bit para modos de direccionamiento.
• Lois usuarios pueden programar el direc cionamiento a los dispositivos
conectados.
Conectando dispositivos I2C en el esp32
• Las líneas SDA y SCL están activas en nivel bajo, por lo que se deben
levantar con resistencias pull up . Los valores típicos son 4,7 k Ohm
para dispositivos de 5 V y 2,4 k Ohm para dispositivos de 3,3 V.
• La mayoría de los sensores tipo Smart tienen resitencias de esta clase
integradas
• Conectar un dispositivo I2C a un ESP32 normalmente es tan simple
como conectar GND a GND, SDA a SDA, SCL a SCL y una fuente de
alimentación positiva a un periférico, generalmente 3.3V (pero
depende del módulo que esté usando).
Obtener la dirección del dispositivo
conectado al I2C
• Cada esclavo conectado al bus I2C tiene su propia dirección
hexadecimal.
• La dirección suele encontrarse en el datasheet del dispositivo.
• También se puede encontrar a través de código en el esp 32.
Codigo para hallar la dirección hexa
Dentro del setup
• Crear un nuevo objeto TwoWire ejemplo:
• TwoWire I2Cbus = TwoWire(0);
• Inicivializar la comunicación I2C con:
• I2CbusE.begin(21, 22, 400000);
LCD 16 col 2 filas 16X02 I2C
Descargar la librería :

https://github.com/marcoschwartz/LiquidCrystal_I2C/archive/
master.zip
Para instalar la librería
• Descomprimir el .zip, la carpeta descomprimida debería llamarse asi:
LiquidCrystal_I2C-master
• Renombrar la carpeta a LiquidCrystal_I2C
• Mover la carpeta a la carpeta donde se encuentren instaladas las
librerias del Arduino IDE.
• Cerrar y volverá abrir el IDE de Arduino.
Mostrar texto en el LCD
• Incluir la librería : #include <LiquidCrystal_I2C.h>
• Definir el numero de filas columnas que tiene mi LCD
• int lcdColumns = 16;
• int lcdRows = 2;
• Inicializar la LCD con: LiquidCrystal_I2C lcd(dirección, lcdColumns,
lcdRows);
• Sí no se tiene la dirección consultar el data sheet o correr el código
scanner
Dentro del setup
• // iniciar lcd
• lcd.init();
• //enciende la luz de fondo
• lcd.backlight();
Dentro del loop
• Con la función lcd.setcursor se define la posición inicial en filas y
columnas
• lcd.setCursor(0, 0);
• Con la función lcd.print se pueden imprimir mensajes no exceder el
m# de columnas de la lcd
• lcd.print("Hello, World!");
• lcd.clear(); borra la lcd
ejemplo

También podría gustarte