Está en la página 1de 37

Diseño con uC

Clase 18-01-2022: Inicio del módulo ESP32

GPIO: General Input Output

PIC16F1827: ARDUINO UNO: ARDUINO 101:


Procesador Intel Curie (Descont)
32 MHz 16 MHz (20 MHz) 32 MHz
8 bits 8 bits
8 kb Flash 32 kb Flash 196 Kb Flash
384 bytes RAM 2 kb RAM 24 kb
16 GPIO 14 GPIO 14 GPIO
1.8 V 5V 3.3 V/1.8 V
BLE

ESP32 (Como Cto Integrado):


2.4 GHz, Wifi, BL
32 bits
Frecuencia de Operación 240 MHz
4 GB Flash
Posibilidad de memoria externa
34 GPIO (No todos los 34 están disponibles, revisar hoja de datos)
41 periféricos
DMA (Módulo de acceso a memoria): 13 módulos con capacidad de DMA.

Llevar información a través de Hardware es mucho más rápido que por software, y
eso nos permite el DMA.

Recomendado seguir a Andreas Spiess.


El ESP32 es capaz de realizar 196.5 Millones de Operaciones por Segundo.
El ESP32 es más rápido que el RP2040 y la BlackPill.
La resolución efectiva del ESP32 es de 12 bits.
El ESP32 no cuenta con USB; pero su versión más reciente, ESP32-S2 sí cuenta con ello.

La versión más reciente del ESP32, es la ESP32-C3.

—------------------------------------------------------------------------------------------------------------------------

CISC RISC

Compilador poco robusto. Compilador muy grande para compensar.


Hardware muy grande. Hardware muy “pequeño”.
Ej: ESP32-C3, PIC.

Ambas son muy buenas opciones pero va depender de la aplicación.

—------------------------------------------------------------------------------------------------------------------------
El ESP32 cuenta con dos núcleos solamente. En comparación con un celular, un celular
actual (2022) cuenta con ocho núcleos
El procesador es de tamaño de 5x5 mm.

El cristal, la memoria externa toca ponerselas al integrado para que pueda funcionar.
Recomendado comprar los módulos WROOM para iniciar desde ahí en aplicaciones
industriales.

Como no tiene USB nativo, requiere de un conversor USB-TTL.

WROVER -> Orientado para el manejo de cámaras, y más RAM. Pero no se puede
programar porque no tiene USB a TTL. Si se requiere programar, toca comprar el conversor.

Se puede programar sin cable por el módulo wifi.

Pueden haber aplicaciones que duran de 2 a 5 años sólo con la batería, debido al manejo
de energía que tiene. Puede consumir, si se configura bien 5uA para esa aplicación
particular.

Módulo CAN no hay, pero hay uno similar llamado TWAI. Parece que es el mismo pero con
un nombre distinto debido a motivos de patente.

—------------------------------------------------------------------------------------------------------------------------

Alto: 2.1 V hacia arriba (con máximo de 3.3 V).


Bajo: 0.7 V hasta 0 V.
Si se pone un 1 V, no se sabrá si es un alto o un bajo.
Tiene mayor capacidad de suministrar energía, que de absorber. Puede enviar hasta 40mA,
pero de tomar corriente es de 28 mA. Es una restricción por pin.

Soporta cargas estáticas de hasta 500 V.

Tiene dos pulsadores: Uno para programar, otro para resetear el sistema.

Enlace para incluir al gestor de descargas de Arduino:

https://dl.espressif.com/dl/package_esp32_index.json

Datasheet:

esp32_datasheet_en.pdf (espressif.com)

Guia de programación de ESP32:

ESP-IDF Programming Guide - ESP32 - — ESP-IDF Programming Guide latest


documentation (espressif.com)

El ESP32 no tiene reloj interno, es necesario agregar un cristal externo. El ESP32 adquirido
lo tiene. Hay unos que no.

RESET Y CLOCK
Tiene tres niveles de RESET: CPU, núcleo y sistema (encendido, bown out, WDT, deep
sleep…)

La frecuencia de operación por defecto del ESP32 es de 240 MHz, pero es posible
modificarla. Para realizar la modificación es necesario agregar en Arduino la siguiente linea:

#include “soc/rtc.h”

Y en setup:

rtc… ¿?

Pines de entrada/salida de propósito general GPIO

● Aparecen 40 GPIO, GPIO0 A GPIO39


● Tiene 4 pines que son solamente de entrada, por tanto, solamente GPI.
● No todos los GPIO andan disponibles: 8 no lo andan.
● Hay pines que son prohibidos, que aunque se puedan usar, pueden generar que se
eliminen datos de la memoria Flash o que el sistema entre en error.
● Tienen resistencia del Pulldown y Pullup.
● Si se quiere acceder al procesador para mejorar la velocidad de acceso a los pines,
toca cambiar de plataforma o programar a bajo nivel. Los compiladores pueden
generar que la ejecución sea más le||
Descargar los dos ejemplos de Arduino.

Para mirar en que puerto está el ESP32:


En Arduino:

El void setup() sólo se ejecuta una vez. Este espacio es para dictar las configuraciones al
ESP32, como qué puertos se usarán, etc.

Si usamos el puerto USB va a suministrar 5 V debido a la conexión. En caso de no querer


usar conexión USB, se puede usar el puerto de VIN y el pin de GND.

El puerto de VDD 3V3 es un pin de SALIDA el cual permite suministrar 3.3V. El regulador
que tiene incluido convierte los 5V de alimentación a los 3.3 V de salida.

El ESP32 en caso de no tener leds, incluye un led para su uso.

El switch boot permite encender el led, etc.

En los PIC para encender un led, programando en bajo nivel se iba a 50 bytes, acá nos
salió muchísimo más.

De los 4 MB de memoria que se supone que andan disponibles, el Arduino lo mira como un
SSD y lo particiona. 1 MB es para los códigos del usuario, 1 MB para programación OTA, 1
MB o más se comporta para guardar info.

Cuando se use por Bluetooth toca modificar esa partición. En Herramientas (Tools) se
puede ver la partición.
Toca mantener presionado el boot para cuando se vaya a cargar el programa. Cuando
Arduino avise que se va a cargar el programa, se puede soltar.

Wokwi es un simulador para el ESP32. El ESP32 se puede programar tanto por C como
por uPython (Micro Python). Al usar Wokwi no se le puede modificar la frecuencia de
operación.

Clase 25-01-2022

Escoger dos temas para exponer. La exposición será para dentro de dos semanas, creo.

Dar la próxima clase de cuáles temas escogeremos.

(Preguntar acerca si se toman todas las sub-temáticas que estaban ahí, o el enfoque que
uno quiera)

—-----------------------------------------------------------------------------------------------------------------------

Interrupciones en el ESP32:
Se resalta que la función de interrupción no se debe colocar código largo ni bloqueante

Bloqueante: Cuando usted la llama, nada más no se puede hacer en el procesador.


Real Time Operating System (RTOS): El ESP32 trabaja con este tipo de sistema. Si
vamos a la página de ESPRESSIF, en la guía de programación y se busca FREERTOS se
encuentra abundante información para el ESP32 qué es lo que se espera con este sistema
operativo en tiempo real.

La plataforma de Arduino, a pesar de no estar enfocada en multiprocesos, nos permite


trabajar con los dos núcleos que tiene el ESP32.
Para el IoT (Internet de las Cosas) se usa el FREERTOS actualmente, no tanto como Linux,
pero sí considerablemente.

*Revisamos el ejemplo de GPIO*

Toca especificar qué pin va a interrumpir la operación secuencia del ESP32, y con qué
flanco.

El ejemplo muestra cómo 1 o 2 botones permite interrumpir la operación del procesador.

Lo de poner #include <Arduino.h> sólo es necesario si se utiliza Visual Studio. Si se utiliza


Arduino, no es necesario el include.

Cuando se presiona el botón de pullup, pues vamos a leer un bajo, pero antes de ver un
cero sólido habrán rebotes.

Se recalca el uso de funciones cortas o sencillas, pero funcionales. No queremos saturar.

(ESTA FOTO NO RECUERDO QUÉ ES)


Clase 27 - 01 - 2021

Entre las dos primeras semanas de febrero son las exposiciones.

La razón por la cual se dan saltos tan grandes de veces presionado el botón en el código de
interrupciones, es porque el flanco de paso de alto a bajo no se da suavemente, sino que se
dan rebotes. Se puede eliminar por software o por hardware.

Volviendo al RTOS.
tarea1 -> Acción que queremos ejecutar

Si dos tareas tratan de ejecutarse simultáneamente, el sistema operativo seleccionará la de


mayor prioridad, la cual definimos nosotros.

Literatura recomendada: Rui Santos ESP32.


Videos recomendados: Digikey RTOS - ESP32.

En Arduino, la función de delay resulta bloqueante, pero en el ESP32, no resulta


bloqueante. Utiliza el Hardware el ESP32, y, disminuye el consumo de corriente.

Recomendado el delay virtual en vez de delay: vTaskDelay. Es propio del ESP32.

Clase 01/02/2022
Archivo prueba de velocidad para probar velocidad de nucleos de sistema para diversos
controladores (Prueba_Velocidad_DosNucleos)

Trabajar con dos nucleos en simultaneo y usando semaforos(segundo punto)

Al trabajar con SempahoreHandle, el primero que tome el ‘testigo’ es el que hara la accion,
hasta que no se termine de ejecutar el que tome el testigo, no se ejecuta la otra
Touch sensors

Permite reemplazar los pulsadores, evitandose los rebotes.


El Touch1 esta unido al GPIO0, por tanto, al Boot. No sirve para aplicaciones aparte.
Aunque con el WROM si se puede dejar disponible, pero por lo general, no.

Hay multiples fuentes de interrupcion: 71 interrupciones por perifericos. Hay interrupciones


por software y hardware. Una division entre cero genera una interrupcion por overflow.

se debe vincular un Pin de interrupción(variables volátiles) , se debe definir la función en la


memoria RAM del Micro
Dia 3/02/2022
Lo mejor es acceder a la memoria RAM, para que sea más rápido el proceso. Como
siempre, se insiste en no utilizar código bloqueante.
Las cuatro funciones que se deben colocar son las siguientes. Tìpicamente se trabaja de
manera ascendente el timer. Apenas llegue la cuenta que se le va a cargar, genera la
interrupción.

En el paso B se le pone la función que se llamará, el paso C… (No alcancé a captar), el


paso D es para inicializar el temporizador.

En el loop se pone desde dónde se necesita recargar el temporizador.


Si una función de interrupción puede ser interrumpida por otra es importante proteger la
información que está ahí. Revisar ejemplo TMR_DOS_LED_JGB, se trabaja con dos
temporizadores de los cuatro.

Se utiliza portEnter_Critical y portEXIT_Critical para que no haya interrupciones en la


función que está enmarcada entre estas dos.

Si se hace el proceso más rápido, probablemente la armonía que se ve en el puerto serial


de la cuenta se vea alterada debido a que el puerto serial no reacciona tan rápido.

Contador de Pulsos PULSES_CNT

El ESP32 también cuenta con un módulo de conteo aparte del de temporización. Para los
que quieran ir más allá recomienda revisar el manual técnico del ESP32. El contador de
pulsos se encuentra en el capítulo 17. También recomienda revisar el Capítulo 16, por
ejemplo, esto permite controlar de manera robusta un puente H. Poco comentado por la
literatura, pero altamente interesante. En el API Reference está las funciones que permiten
controlar esto: MCPWM para lo del capítulo 16.

Para la próxima clase conseguir, en lo posible, una pantalla LCD I2C o una pantalla
OLED I2C/SPI, modulo receptor infrarrojo, control remoto infrarrojo Arduino (Este
último no sé si sea opcional)
Esto fue una mención algo por encima, al parecer.

PWM (LED_PWM o LED Control)

Cualquier GPIO se puede utilizar como PWM. Hay 16 canales de PWM, 8 de alta velocidad
y 8 de baja velocidad.

El ciclo de trabajo (Duty cycle) es de 16 bits y es posible cambiarlo (fade) a través de la


CPU, independientemente.

La frecuencia del pwm está relacionado con el Duty Cycle D: a mayor frecuencia, menor
resolución.
Tabla de relación entre frecuencia y resolución:

En arduino está limitada la frecuencia y la resolución a 8 bits. En el ESP32 sí es


configurable, por lo que entiendo.

Ejemplo: LEDSoftware_Fade se controla el brillo de los LED utilizando el PWM. Haciendo


el fadeAmount más pequeño, la variación del ciclo de trabajo se hace más pequeña.
WDT - WatchDog Timer
Ejemplo: WatchdogTimer.ino
No se presiona el botón -> No alimenta el WDT
Presiono el botón -> Perrito con ganas de morder
Mantengo el botón -> Perrito muerde y genera el reset.

WAKE UP FROM DEEPSLEEP - Clase 08-02-2022


Debido al consumo que puede presentarse al activar el modulo de Wifi que se nos bloquee
el uC, ya que los cables baratos o un pc ‘viejito’ seguramente no nos podrá disponer la
energía requerida.

En una aplicación de bajo consumo no deben haber LEDS prendidos, o al menos no


permanentemente porque pierde el sentido el deep sleep. A veces se usa el deep sleep
para mantener una tensión sin consumir tanta corriente.

Para disminuir el consumo también se puede bajar la frecuencia de operación.

Si se manda a dormir el ESP32, se manda a dormir el procesador y probablemente los


datos de la RAM se pierdan. Aunque creo que hay una forma de salvarla (Averiguar)

¿Cómo despertar el ESP32 cuando se echa a dormir?


Por timer:
Por EXT:

El Plotter Serial seguramente no reconocerá las 360 KHz.


CONVERSORES ADC EN EL ESP32

El ESP32 tiene sensor de Efecto Hall, por tanto, es posible aprovechar campos magnéticos.
Los DAC no se pueden reubicar, creo.
DMA -> Acceso directo a memoria.

Clase 10 - 02 - 2022
● Normalmente los pines 8 y 7 no se utilizan.
● El CTS y RTS resultan muy obsoletos para las altas velocidades de ahora.

Los comandos que nos permiten configurar el UART:

El nombre se lo damos nosotros. TxD anda por defecto al PIN17, y RxD al 16. Para cambiar
esa configuración desde alto nivel:
En el loop:

Si llegaramos a necesitar más puertos seriales se pueden emular por software. Aunque eso
quitará recursos, pero con el ESP32 no resultará un problema.

Se le puede conectar a un puerto UART esto, por ejemplo:


Tiene por dentro la capacidad de leer una memoria MicroSD. Usamos los puertos RX y TX
para conectar con el microcontrolador. El DFPlayer tiene un amplificador de audio, y una
salida para audífonos estéreo (R, L and GND). Para conectar un parlante: SPK_1. También
tiene la capacidad de conectarse a una USB.

Clase 24-02–2022

Se recomienda el utilizar el protocolo UDP para el desarrollo de la Evaluación 7 en caso de


que deseemos realizar envíos mucho más rápido.

Clase 03-01-2022

El ESP32 permite crear un host, y una página. Es un punto de acceso suave (Access
point) porque no nos podemos conectar a ninguna página: sólo se puede conectar a lo que
tiene el ESP32 guardado. Ejemplo: WiFiAccessPort_JGB.

Espiff permite crear una red de ESP32 con un aplicativo llamado ESPAP (Wifi) o ESPNOW
(Bluetooth).

Duda de Juan Andres: Al final en el ESP32 hay 720 datos registrados. Para calcular
armónicos no necesitamos conocer la frecuencia, solamente que hay dos períodos de la
señal.

Para poder almacenar datos en el ESP32 toca instalar algo adicional como el ESPIFF o el
LTIFFS. Todo se sube a su memoria flash.

Hay aplicativos que se pueden mandar con Telegram al ESP32.


El protocolo udp es el más óptimo porque no mira si hay un bit par o impar, solamente tira el
dato. Muy ‘confiado’. Es el que se usa especialmente para stream.

Descargar el Hercules Setup Utility.

Revisar el ejemplo de esp32udp.ino.

Lo ideal es que no se vean nuestras credenciales, por tanto, se hace un archivo header
aparte donde se define esto.
Ahí se define la red y la clave de la misma.

#define ssid “<Nombre de nuestra red>” //Si tenemos datos


#define password “<clave>”

Hay 2^16 direcciones que se pueden definir para comunicación. Hay direcciones que ya
andan predefinidas.

Conexión segura: 8080 (No lo deberíamos usar)


puerto: 80 (No recuerdo qué es pero tampoco deberíamos usarlo)
El que tiene que ver más con la tarea que tenemos que hacer:

UDP_Comunicacion_JD.ino

En este programa que nos comparte se quería crear con una ip estática, pero eso no se va
a usar. Se generan unas variables para generar unas muestras de una función seno o
números. Se va a obtener un vector de datos en ambos.
Ninguno de los dos de udp nos sirvió, triste.

Los audífonos inalámbricos que se conectan a bluetooth son estéreo, dos canales y son
48kHz cada uno. El bluetooth es una comunicación muy rápida. Con la función micros()
ahí medimos el tiempo.

Bluetooth BLE
Séptima Evaluación: Dudas
1. ¿Cómo hago para muestrear una señal bien? R// Asumir que ya tenemos las
muestras.
2. ¿El dispositivo que debe recibir debe ser otro ESP32?
3. ¿Qué recomienda para calcular el valor eficaz y el valor medio? ¿Sirve el algoritmo
que presenté la vez pasada?
4. ¿En dos períodos deben estar las 720 muestras o en cada período 720 muestras?
5. ¿El lector de código de barras qué dispositivo puede ser? R// El celular
6. ¿Cómo hacer para enviar solamente 360 o 720 muestras y medir el tiempo? R//
Primero miremos con 720 y luego miramos.

¿Podemos asumir que ya tenemos la señal muestreada? Sí. ¿Cómo llegó la información?
No importa, las muestras andan ahí ya.

Octava evaluación:
Vamos a guardar en una base de datos el tipo de elemento identificado con la certeza (80%
diodo, por ejemplo) y la fecha en la que se guardó. Probablemente usemos una tarjeta
MAIX.
Solamente se tomarán en cuenta elementos de inserción, no de montaje superficial.

Una persona debe estar atenta con la información y mandarla a un servidor web, mientras
que otra persona debe tomar las imágenes.

Toca crear una carpeta con resistencias, diodos, condensadores. Más o menos toca usar 50
fotos por cada vaina.

Toca ir buscando cómo identificar y cómo hago para entrenar un sistema.

Inteligencia Artificial: IA

Para imágenes, para cosas más sofisticadas toca cambia de plataforma; la ESP32 en ese
aspecto no resulta ser la más adecuada debido a la memoria.

Todo se construye alrededor de un Perceptrón, que es como una ‘neurona’ que tiene N
entradas. Esas entradas van a pasar a través de unas variables (w - weight)

Recomendado: Pysource - https://www.youtube.com/watch?v=gFcnd7wa6OE para lo de la


clasificación de imágenes.

En ingeniería tratamos de utilizar back propagation para evitar que sean tan aleatorias las
redes.
Entrar a:

https://playground.tensorflow.com

También podría gustarte