Subido por chuchoolivares51

MANUAL DE PRACTICAS ESP32 Platformio

Anuncio
MANUAL DE PROGRAMACIÓN Y
PRÁCTICAS PARA LA ESP32
ELABORADO POR EL MTRO. ISRAEL FIGUEROA MARÍN
MANUAL DE PROGRAMACIÓN
C++ CON PLACA ESP32 IOT
Código: LP-FO-02-19
Revisión: 1
ING. ISRAEL FIGUEROA MARIN
Página:
¿Qué es el Microcontrolador ESP32?
El ESP32 es un dispositivo mucho más potente. No solo porque sea más rápido
sino porque está diseñado pensando en que sea un microcontrolador para el IoT.
En este caso, utiliza un procesador Xtensa Dual-Core LX6 de 32 bits a 160 ó 240
MHz. El usar dos núcleos permite dedicar uno de ellos a la comunicación IP y WiFi
y el otro al resto de procesos. Se resuelve así una de las dificultades más
importantes que imponía la arquitectura del ESP8266.
Tiene una memoria RAM de 520 kB, accesible por ambos procesadores y puede
utilizar memoria RAM externa adicional de hasta 8 MB.
La memoria flash, igual que en el ESP8266, ha de ser externa y soporta hasta 16
MB. En cambio, el ESP32 sí tiene una ROM interna de 448 kB, utilizada para el
bootloader y las funciones internas.
Una característica muy importante que se ha añadido al ESP32 respecto a su
hermano menor es una interfaz Bluetooth 4.2. Esto amplía el abanico de
posibilidades de comunicación del ESP32.
El ESP32 resuelve esto incorporando un acelerador de encriptación por hardware.
El ESP32 permite la encriptación del código en el flash para que no sea posible la
leer el código binario desde la memoria.
Por último, además de los dos procesadores principales tiene un coprocesador de
muy bajo consumo asociado al RTC. Éste permite realizar ciertas tareas como el
control de los pines de entrada salida mientras el chip está en modo de sueño
profundo.
Comparación del ESP32 VS Arduino
MANUAL DE PROGRAMACIÓN C++ CON PLACA ESP32 IOT
ING. ISRAEL FIGUEROA MARIN
Código: LP-FO-02-19
Revisión: 1
Página:
Modelos ESP32
PLACA
TTGO ESP32
CARACTERÍSTICAS
•
DIAGRAMA
Una batería de 3000mAH 18650 podría
hacer que ESP32 corra 17 horas o más.
•
Sistema de carga 18650 integrado.
•
Indique el LED en el interior (Verde
significa lleno y Rojo significa cargando)
La carga y el funcionamiento pueden ser
al mismo tiempo.
•
1 interruptor podría controlar el poder.
•
Se podría programar 1 LED adicional
(Conectado con GPIO16 [D0])
•
Corriente de carga de0.5 A
•
Salida
de
1
A
Protección
contra
sobrecarga.
•
Protección Contra sobrecarga Ruptura
completa de pines ESP32.
MANUAL DE PROGRAMACIÓN C++ CON PLACA ESP32 IOT
ING. ISRAEL FIGUEROA MARIN
T-Display ESP32 CP2104
•
USB
•
Protocolo de red
Type-C
IPv4, IPv6, SSL,
TCP / UDP / HTTP / FTP / MQTT
•
Mecanismo de seguridad
WPA
/
WPA2 / WPA2-Enterprise / WPS
•
Protocolo
Compatible
con
Bluetooth V4.2BR / EDR y estándar BLE
•
Rango de frecuencia
2.4GH2
2.5GHz (2400M-2483.5M)
•
Monitor IPS ST7789V 1.14 pulgadas
~
Código: LP-FO-02-19
Revisión: 1
Página:
MANUAL DE PROGRAMACIÓN C++ CON PLACA ESP32 IOT
ING. ISRAEL FIGUEROA MARIN
ESP32 Development Board
•
Alta relación precio-rendimiento
•
Pequeño volumen, fácil de integrar en
otros productos
•
Función fuerte con protocolo LWIP
compatible, Freertos
•
Compatible con tres modos: AP, STA y
AP + STA
Código: LP-FO-02-19
Revisión: 1
Página:
MANUAL DE PROGRAMACIÓN C++ CON PLACA ESP32 IOT
ING. ISRAEL FIGUEROA MARIN
ESP-WROOM-32
•
ROM de 448 KB para iniciar el programa
y llamar a las funciones del núcleo.
•
Ram 520 KB en el chip SRAM para
almacenamiento
de
datos
e
instrucciones.
•
Ssram de 8 KB en RTC, o memoria lenta
RTC, se puede acceder a través del
Coprocesador en modo de suspensión
profunda.
•
Ram SRAM de 8 KB en RTC, memoria
rápida RTC, que se puede utilizar para el
almacenamiento de datos y el acceso por
la CPU del host cuando RTC comienza
en modo de suspensión profunda.
•
• EFuse de 1 kbit, donde 256 bits son
específicos del sistema (dirección MAC y
juego de chips); los 768 bits restantes se
reservan para aplicaciones de usuario,
incluyendo cifrado Flash y chip ID.
Código: LP-FO-02-19
Revisión: 1
Página:
MANUAL DE PROGRAMACIÓN C++ CON PLACA ESP32 IOT
ING. ISRAEL FIGUEROA MARIN
TTGO T-Call V1.3 ESP32
•
Chipset Microprocesador LX6 de 32 bits
Xtensa® de doble núcleo ESPRESSIFESP32 de 240MHz
•
Interfaz modular
UART,
SPI,
SDIO, I2C, LED PWM, TV PWM, I2S,
IRGPIO, sensor táctil de condensador,
ADC, preamplificador DACLNA
•
tarjeta SIM
Solo admite tarjeta Nano
SIM
•
USB
•
Frecuencia de radio
Tipo C
con -97dBm de
sensibilidad Receptor NZIF
Clase-1,
Clase-2 y Clase-3 emisor AFH
•
Desarrollo de software Soporte
de
desarrollo de servidor en la nube / SDK
para desarrollo de firmware de usuario
•
Configuración de usuario
Conjunto
de instrucciones AT +, servidor en la
nube, android / iOSapp
Código: LP-FO-02-19
Revisión: 1
Página:
MANUAL DE PROGRAMACIÓN C++ CON PLACA ESP32 IOT
ING. ISRAEL FIGUEROA MARIN
ESP32-CAM
•
ESP integra WiFi, bluetooth tradicional y
BLE Beacon, con 2 CPU LX6 de 32 bits
de alto rendimiento, arquitectura de
tubería de 7 etapas, rango de ajuste de
frecuencia principal de 80MHz a 240MHz,
sensor en chip, sensor Hall, sensor de
temperatura, etc.
•
Totalmente
compatible
con
los
estándares WiFi 802.11b / g / n / e / i y
bluetooth 4.2, se puede usar como modo
maestro para construir un controlador de
red independiente, o como esclavo de
otras
MCU
host
para
agregar
capacidades de red
•
ESP32-CAM puede ser ampliamente
utilizado en varias aplicaciones de IoT. Es
adecuado para dispositivos inteligentes
domésticos,
industrial,
control
inalámbrico
monitoreo
inalámbrico,
identificación inalámbrica QR, señales
del
sistema
de
posicionamiento
inalámbrico y otras aplicaciones IoT. Es
una solución ideal para aplicaciones IoT.
Código: LP-FO-02-19
Revisión: 1
Página:
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
ING. ISRAEL FIGUEROA MARIN
Código: LP-FO-02-19
Revisión: 1
Página:
¿Qué es PlatformIO?
PlatformIO
es
una
herramienta
profesional
multiplataforma, arquitectura cruzada, marco múltiple para
ingenieros de sistemas integrados y para desarrolladores
de software que escriben aplicaciones para productos
integrados. (PlatformIO, 2014)
PlatformIO aplica la última tecnología de software escalable y flexible al mercado
integrado, un área tradicionalmente atendida por complejas herramientas de
software que los ingenieros de hardware experimentados han aprendido con el
tiempo (a menudo dolorosamente). En cambio, con PlatformIO, los usuarios pueden
ser aficionados o profesionales. Pueden importar el boceto clásico Arduino "Blink" o
desarrollar un sofisticado programa C integrado de bajo nivel para un producto
comercial. El código de ejemplo para cualquier marco compatible se puede compilar
y cargar en una plataforma de destino en minutos.
PlatformIO para VSCode
Visual Studio Code es un editor de código fuente
ligero pero potente que se ejecuta en su escritorio y
está disponible para Windows, macOS y Linux. Viene
con soporte incorporado para JavaScript, TypeScript
y Node.js y tiene un rico ecosistema de extensiones para otros lenguajes (como C
++, C #, Python, PHP, Go) y tiempos de ejecución (como .NET y Unity).
Instalar PlatformIO para VSCode
1.
Instalar Python 3.9.5 del siguiente link https://www.python.org/
al instalar deben de seleccionar la casilla Asegúrate de marcar las
casillas "Add Python 3.6 to PATH" o "Add Python to your environment
variables" y hacer click en "Install Now"
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
ING. ISRAEL FIGUEROA MARIN
Código: LP-FO-02-19
Revisión: 1
Página:
Ilustración 1 Instalación de Python
2.
Instalar Visual Studio Code del siguiente link
https://code.visualstudio.com/ solo deben seleccionar si
es para 32 bits o para 64 bits, al instalar se deben de
asegurar de seleccionar la casilla “Agregar a PATH
(disponible después de reiniciar), así como Agregar las dos casillas la acción
“abrir con Code”
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
ING. ISRAEL FIGUEROA MARIN
Código: LP-FO-02-19
Revisión: 1
Página:
3. Una vez que este instalado los Softwares, deben de reiniciar su computadora
y abrir el Software de Visual Studio Code, de su lado izquierdo inferior
aparece EXTENSIONES donde deberán de buscar la EXTENSIÓN
PlatformIO IDE y le dan install
Extensión del Visual
4. Una vez instalado la extensión deberán de reiniciar la computadora
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
ING. ISRAEL FIGUEROA MARIN
Código: LP-FO-02-19
Revisión: 1
Página:
Programación en Platformio IDE
Una vez instalado la Extensión Platformio IDE se visualizará de la siguiente forma:
Cuando este instalado correctamente irse al apartado de Explorador o (Ctr +
Mayús + E) de Visual Studio Code tal y como se muestra en la siguiente imagen.
Marcar todas las opciones y elegir directorio de instalación, generalmente
C:\Program Files (x86) \Arduino\:
Permitir instalar los drivers (si lo solicita):
Y este es el aspecto del IDE:
Dar un click en donde dice Abrir Carpeta y crear la carpeta del proyecto a desarrollar
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
ING. ISRAEL FIGUEROA MARIN
Código: LP-FO-02-19
Revisión: 1
Página:
Despues ir al apartado de Platformio IDE y crear un nuevo proyecto
Se deberá poner el nombre del proyecto a realizar en Name: y en Board:
seleccionar la placa de su agrado Framework: Lenguaje de programación a utilizar
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
ING. ISRAEL FIGUEROA MARIN
Código: LP-FO-02-19
Revisión: 1
Página:
Estructura de código Platformio IDE
Estructura Principal
Estructura de Configuración
Estructura del bucle principal
Comentar
Los comentarios son líneas en el programa que se utilizan para informarse. El único
propósito de los comentarios es ayudarlo a comprender (o recordar) o informar a
otros sobre cómo funciona su programa.
Un comentario de una sola línea comienza con
//
(dos barras diagonales
adyacentes). Este comentario termina automáticamente al final de una línea. El
compilador ignorará todo lo que siga hasta el final de una línea.
Código de ejemplo
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
ING. ISRAEL FIGUEROA MARIN
Código: LP-FO-02-19
Revisión: 1
Página:
Sintaxis Adicional
1. #define
Las constantes definidas en ESP32 no ocupan espacio de memoria del programa
en el chip. El compilador reemplazará las referencias a estas constantes con el valor
definido en el momento de la compilación.
Sintaxis
#define
constantName value
Código de ejemplo
2. #include
#include se utiliza para incluir bibliotecas externas en su boceto. Esto le da al
programador acceso a un gran grupo de bibliotecas.
Código de ejemplo
Este ejemplo incluye una biblioteca que se usa para colocar datos en el espacio del
programa flash en lugar de en la memoria RAM. Esto ahorra espacio en la memoria
RAM para las necesidades de memoria dinámica y hace que las tablas de búsqueda
grandes sean más prácticas.
3. Punto y coma
;
Es para finalizar una línea de programación, de lo contrario resultará en un error de
compilación.
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
ING. ISRAEL FIGUEROA MARIN
Código: LP-FO-02-19
Revisión: 1
Página:
4. Llaves
{}
Una llave de apertura {siempre debe ir seguida de una llave de cierre}. Esta
es una condición que a menudo se conoce como los frenos en equilibrio.
Código de ejemplo
Operadores aritméticos
Son operadores que nos van a permitir realizar operaciones básicas como sumar,
restar, dividir, multiplicar…….
Asignación de compuestas
Es una combinación entre una operación aritmética con una variable asignada. Es
muy común en bucles.
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
ING. ISRAEL FIGUEROA MARIN
Código: LP-FO-02-19
Revisión: 1
Página:
Operadores de comparación
Se usan con frecuencia en estructuras condicionales para comprobar si una
condición se cumple o no. En estos condicionales realizan la comparación entre las
variables y las constantes del programa.
Operadores Booleanos
Son los operadores lógicos que se usan para comparar 2 o mas expresiones y que
no devuelven un valor, si no que dan un estado de “verdadero” (si se cumple la
expresión) o “falso” (si no se cumple). Existen 3 operadores lógicos, AND “&&”, OR
“||” y NOT “!”.
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
ING. ISRAEL FIGUEROA MARIN
Código: LP-FO-02-19
Revisión: 1
Página:
FUNCIONES DE PROGRAMACIÓN EN PLATFORMIO IDE
FUNCIONES DE ENTRADA/SALIDA DIGITAL
FUNCIÓN
pinMode()
digitalWrite()
digitalRead()
analogReference()
analogRead()
DESCRIPCIÓN
Esta función configura el pin especificado para actuar como entrada o
salida digital (ver la descripción de los pins digitales de la ESP32,
Activa (HIGH) o desactiva (LOW) un pin digital.
Si el pin ha sido configurado como OUTPUT (salida) con la función
pinMode(), su voltaje será activado a 5V (o 3.3V en las tarjetas que
funcionen a 3.3V) si se activa (HIGH) o a 0V (tierra) si se desactiva
(LOW).
Si el pin ha sido configurado como INPUT (entrada), digitalWrite()
activará (si la usamos el parámetro HIGH) o desactivará (con LOW) la
resistencia “pullup” del pin de entrada especificado.
Lee el valor (HIGH o LOW) del pin digital especificado.
Esta función configura el voltaje de referencia usado como entrada
analógica (es decir, el valor que queremos definir como voltaje máximo
de entrada). Las siguientes opciones son válidas:
-DEFAULT: el valor de referencia por defecto es 5 voltios.
-INTERNAL: un valor de referencia interno fijado en 1.1
-INTERNAL1V1: un valor de referencia interno fijado en 1.1V
-INTERNAL2V56: un valor de referencia interno fijado en 2.56V.
-EXTERNAL: el voltaje aplicado al pin AREF pin (de 0 a 5V solamente)
es usado como referencia máxima.
Esta función lee el valor presente en el pin analógico especificado.
La frecuencia máxima de lectura es de 10,000 veces por segundo (cada
lectura dura unos 100 microsegundos).
SINTAXIS
pinMode(pin, modo)
digitalWrite(pin, valor)
valor: HIGH o LOW
digitalRead(pin)
analogReference(tipo)
tipo: El tipo de referencia usado
(DEFAULT, INTERNAL,
INTERNAL1V1, INTERNAL2V56, or
EXTERNAL).
analogRead(pin)
Devuelve:
int (de 0 a 1023)
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
ING. ISRAEL FIGUEROA MARIN
FUNCIÓN
analogWrite()
Código: LP-FO-02-19
Revisión: 1
Página:
DESCRIPCIÓN
Esta función escribe en el pin indicado un valor analógico (mediante un
pulso o tren de ondas cuya duración determina el valor analógico
transmitido, también llamado PWM –“Pulse Width Modulation”). Este
valor puede ser utilizado para iluminar un LED con una intensidad
variable o hacer rotar el eje de un motor eléctrico a velocidades variables.
Cuando usamos esta función el pin generará una onda cuadrada
constante de la duración especificada hasta la siguiente utilización de la
función sobre el mismo pin (o una utilización de digitalRead() o
digitalWrite() sobre el mismo pin). La frecuencia de la la señal PWM en
la mayor parte de los pins es aproximadamente 490 Hz. En el Uno y otras
placas similares, los pins 5 y 6 tienen una frecuencia de
aproximadamente 980 Hz.
SINTAXIS
analogWrite(pin, valor)
pin: el número de pin en el que
queremos escribir.
valor: la duración del pulso: entre 0
(OFF continuo) y 255 (ON continuo)
pulseIn(pin, value)
pulseIn(pin, value, timeout)
pulseIn()
Lee un pulso (HIGH o LOW) de un pin determinado. Por ejemplo, si el
valor especificado como parámetro es HIGH, pulseIn() espera a que el
pin esté en HIGH, en ese momento comienza la cuenta (timing) hasta
que la tensión en el pin esté en LOW momento en que cesa la cuenta.
pulseIn() devuelve la duración del pulso en microsegundos. Asimismo,
pulseIn() devuelve control con un cero como return si el pulso no
comienza dentro de un periodo especificado (time out)
pin: El número del pin del que se
quiere leer la duración del pulso. Tipo:
int
value: El tipo de pulso que se quiere
leer (HIGH o LOW). Tipo: int
timeout (opcional): el número de
microsegundos que se quiere esperar
para que comience el pulso; por
defecto es un segundo. Tipo:
unsigned long
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
ING. ISRAEL FIGUEROA MARIN
FUNCIÓN
Código: LP-FO-02-19
Revisión: 1
Página:
DESCRIPCIÓN
SINTAXIS
FUNCIONES DE TIEMPO
millis()
Esta función devuelve el número de milisegundos transcurridos desde
que el Arduino comenzó a ejecutar el programa en curso. Este número
será puesto a cero de nuevo cada 50 días (aproximadamente).
Esta función devuelve el número de microsegundos transcurridos desde
que la ESP32 comenzó a ejecutar el programa en curso. Este número
será puesto a cero de nuevo cada 70 minutos (aproximadamente).
micros()
delay()
Introduce una pausa en el programa de una duración especificada (en
milisegundos) como parámetro. (1 segundo = 1000 milisegundos)
Esta función detiene la ejecución del programa durante el tiempo (en
microsegundos) indicado por el parámetro.
delayMicroseconds(
De momento el valor máximo para el parámetro tiempo es de 16383
)
microsegundos (aunque esto puede cambiar en futuras versiones de la
delayMicroseconds(us)
us: el número de microsegundos que
dura la pausa. Tipo: unsigned int
ESP32). Para pausas de más de unos cuantos miles de microsegundos
se debe usar delay() en vez de esta función.
FUNCIONES MATEMÁTICAS
Calcula el mínimo de dos números.
x: el primer número (de cualquier tipo)
Descripción: Calcula el máximo de dos números.
y: el segundo número (de cualquier
tipo)
x: el primer número (de cualquier tipo)
min(x, y)
max(x, y)
Número de microsegundos
transcurridos desde que la ESP32
comenzó a ejecutar el programa en
curso. Este número será puesto a
cero de nuevo cada 70 minutos
(aproximadamente). Tipo: unsigned
long.
delay(ms)
ms: la duración de la pausa en
número de milisegundos. Tipo:
unsigned long
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
ING. ISRAEL FIGUEROA MARIN
FUNCIÓN
Código: LP-FO-02-19
Revisión: 1
Página:
DESCRIPCIÓN
Calcula el valor absoluto de un número.
SINTAXIS
y: el segundo número (de cualquier
tipo)
x: si x es mayor o igual que 0.
abs(x)
-x: si x es menor que 0.
Trasforma un número de una escala a otra. Es decir, un valor (“value”)
igual a “fromLow” se transformaría en “toLow” y un valor igual a
“fromHigh” se transformaría en “toHigh”. Los valores dentro del rango
fromLow-fromHigh se transformarían proporcionalmente en valores
dentro del rango toLow-toHigh.
Esta función no limita a los valores a estar dentro del rango (si es esto lo
que quieres conseguir, debes de usar la función constrain()). En efecto,
a veces es útil trabajar con valores fuera de rango.
map(value,
fromLow, fromHigh,
toLow, toHigh)
El límite inferior de cualquiera de los dos rangos puede ser menor o
mayor que el límite superior. De hecho esto puede ser muy útil cuando
queremos usar la función map() para invertir un rango. Por ejemplo, para
transformar un valor de un rango creciente a otro decreciente, como, por
ejemplo:
y = map(x, 1, 50, 50, 1);
La función map() puede manejar también rangos que empiezan o
terminan en la zona negativa, como por ejemplo:
y = map(x, 1, 50, 50, -100);
La función map() trabaja con números enteros y por lo tanto no genera
números fraccionarios. Los restos fraccionarios son truncados (no
redondeados).
value: el valor a transformar de
escala.
fromLow: el límite inferior del rango
origen
fromHigh: el límite superior del rango
origen
toLow: el límite inferior del rango
destino
toHigh: el límite superior del rango
destino
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
ING. ISRAEL FIGUEROA MARIN
FUNCIÓN
Serial
Serial.begin(speed):
Serial.print(val,
[format]):
Serial.println(val,
[format]):
Serial.flush():
DESCRIPCIÓN
Código: LP-FO-02-19
Revisión: 1
Página:
SINTAXIS
COMUNICACIÓN
La ESP32 se comunica por serie vía USB La
comunicación serial se puede utilizar para hacer un debugging (saber lo que está pasando en
nuestro programa) o para comunicarnos con otros programas.
Abre el canal serie para que pueda empezar la comunicación por él. Por
Serial.begin(speed):
tanto, su ejecución es
imprescindible antes de realizar cualquier transmisión por dicho canal.
speed: Para comunicarse con el
Por eso normalmente se
ordenador, utilice una de estas
suele escribir dentro de la sección “void setup()”
velocidades:
300, 1200, 2400, 4800, 9600, 14400,
19200, 28800, 38400, 57600 o
115200.
Envía a través del canal serie un dato (especificado como parámetro)
Serial.print(val, [format]):
desde el microcontrolador
val: el valor a imprimir - de cualquier
hacia el exterior.
tipo
format: especifica la base (formato) a
usar; los valores permitidos son:
BYTE, BIN (binarios o base 2)
OCT (octales o base 8)
DEC (decimales o base 10)
HEX (hexadecimales o base 16).
La consecuencia es que al final de la ejecución de
Serial.println() se efectúa un salto de línea. Tiene los mismos parámetros
y los mismos valores
de retorno que Serial.print().
Eso significa que nuestro
DEC // Imprime la información en
sketch pasará a la siguiente instrucción y seguirá ejecutándose sin
formato decimal.
esperar a que empiece a
'\t' Un tabulador de 8 espacios de
realizarse el envío de los datos. Si este comportamiento no es el
texto.
deseado, se puede añadir justo
'\n' Cambio de línea, ASCII 10.
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
ING. ISRAEL FIGUEROA MARIN
FUNCIÓN
Serial.read()
Serial.available().
Código: LP-FO-02-19
Revisión: 1
Página:
DESCRIPCIÓN
después de Serial.print() la instrucción Serial.flush() –que no tiene
ningún parámetro ni devuelve
ningún valor de retorno–, instrucción que espera hasta que la
transmisión de los datos sea
completa para continuar la ejecución del sketch.
Lee o captura un byte (un carácter) desde el puerto serie.
Devuelve el número de caracteres disponibles para leer desde el puerto
serie.
SINTAXIS
'\r' Retorno de carro ASCII 13.
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
MTRO. ISRAEL FIGUEROA MARIN
Código: LP-FO-02-19
Revisión: 1
Página:
DEFINIENDO TIPOS DE DATOS
El ambiente Platformio IDE es realmente c++, con bibliotecas de soporte, y demás características en la sintaxis del
código, al igual que la declaración de las variables del programa.
TIPO
TAMAÑO
RANGO
DESCRIPCIÓN
boolean
1 bit
0a1
Entero de 1 bit
byte
unsigned char
char
8 bit
8 bit
8 bit
0 a 255
0 a 255
-128 a 127
int
8 bit
-32,768 a 32,767
long
16 bit
Float
4 byte
Double
8 byte
String
1 byte +
void
-2,147'483,648 a
2,147'483,647
-3.4028235e+37 a
3.4028235e+38
Array de caracteres
Entero
Entro sin signo
Entero con signo
Entero de 8 bit con
signo
Entero de 16 bit con
signo
Decimal con signo de
4 bytes
ascii
Reservado para la
declaración de funciones
sin valor de retorno.
EJEMPLO
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
MTRO. ISRAEL FIGUEROA MARIN
Código: LP-FO-02-19
Revisión: 1
Página:
variables y constantes
Las variables en lenguaje de programación C, c++, que utiliza Platformio IDE, tienen
una propiedad denominada alcance.
•
Dentro de una función o un bloque, que se llama variables locales.
•
Fuera de todas las funciones, que se llama variables globales.
Las variables locales
Son las variables declaradas dentro de una función o bloque son variables locales.
Pueden ser utilizados solamente por los estados que están dentro de esa función o
bloque de código. Estas variables no funcionan fuera de su propia función.
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
MTRO. ISRAEL FIGUEROA MARIN
Código: LP-FO-02-19
Revisión: 1
Página:
Variables globales
Las variables globales se definen
fuera de todas las funciones, por lo
general en la parte superior del
programa, mantienen su valor
durante todo el programa.
Una variable global se puede utilizar
por cualquier función. Es decir, una
variable global está disponible para
su uso durante todo el programa
después de su declaración.
Funciones I / O
Los pines de la placa ESP32 se pueden configurar como entradas o salidas. Vamos
a explicar el funcionamiento de los pasadores en esos modos. Es importante tener
en cuenta que la mayoría de los pines se puede configurar y utilizar, exactamente
de la misma manera que los pines digitales.
Estructuras de Control
Las estructuras de control de un lenguaje de programación le permiten tomar
acciones basadas en ciertas condiciones.
Estructura IF.
Es una estructura condicional, cuya sintaxis vemos a continuación
Sintaxis
Si la condición se cumple, es decir es cierta o verdadera, se ejecutan las
instrucciones contenidas entre las llaves { } . En caso contrario no se ejecutan y se
salta a la instrucción siguiente.
Parámetros
Condición: una expresión booleana (es decir, puede ser true o false).
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
MTRO. ISRAEL FIGUEROA MARIN
Código: LP-FO-02-19
Revisión: 1
Página:
Código de ejemplo 1
Código de ejemplo 2
Estructura if – else
Esta estructura es, una variante o mejor dicho, una ampliación de la anterior.
Su sintaxis es
En este caso, de forma similar al anterior, si la condición se cumple, es decir es
cierta o verdadera, se ejecutan las instrucciones contenidas entre las llaves { } .
Pero, en caso contrario, es decir, si la condición no es cierta ósea es falsa, se
ejecutan las instrucciones contenidas entre las llaves del else.
Código de Ejemplo 1
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
MTRO. ISRAEL FIGUEROA MARIN
Código: LP-FO-02-19
Revisión: 1
Página:
Estructura switch – case
La sintaxis de la instrucción o estructura de control condicional switch es:
En este caso estamos ante una estructura de control condicional que nos permite la
comprobación de múltiples condiciones.
Realmente sería el equivalente de varios if-else anidados.
Esta instrucción nos permite evaluar la variable condición y dependiendo de su valor
ejecutar el bloque de instrucciones correspondientes.
Código de Ejemplo 1
Si la variable que debemos evaluar no tiene un valor evaluado por ningún case
entonces se ejecutará el bloque de instrucciones de default.
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
MTRO. ISRAEL FIGUEROA MARIN
Código: LP-FO-02-19
Revisión: 1
Página:
Nota: Es importante destacar y tener en cuenta, como hemos podido observar, que
cada bloque de instrucciones de case debe terminar con la instrucción break; Esto
es así para indicar que una vez ejecutado el conjunto de instrucciones
correspondientes al bloque case el flujo del programa debe terminar y salir de la
estructura condicional switch-case y continuar con la siguiente instrucción. En caso
contrario podemos generar un comportamiento no esperado en nuestro programa.
Estructuras de Bucles
Estructura for
a sintaxis de un bucle for es la siguiente
En esta definición encontramos varias partes que vamos a explicar brevemente
Inicialización, se utiliza para inicializar variables que vamos a utilizar dentro del
bucle. Durante la ejecución del bucle, solo se ejecuta una única vez al principio.
Condición, nos permite definir cuándo debe terminar el bucle. El bucle se ejecutará
hasta que la condición sea 0 o false.
Instrucción, suele utilizarse para incrementar o disminuir variables que intervienen
normalmente en la condición.
En un bucle for no siempre estarán presentes las tres partes enumeradas:
inicialización, condición e instrucción.
Código de Ejemplo 1
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
MTRO. ISRAEL FIGUEROA MARIN
Código: LP-FO-02-19
Revisión: 1
Página:
Estructura while
Es otra estructura de bucle cuya sintaxis es:
En este caso, nos hallamos ante un tipo de bucle cuyo bloque de instrucciones se
ejecuta mientras se cumpla la condición.
Se saldrá del bucle cuando la condición no se cumpla, es decir que ésta sea falsa,
o cuando se ejecute una instrucción break.
Las diferencias con el bucle for son
•
En el caso del while no conocemos el número máximo de ejecuciones que
pueden realizarse
•
En el caso del while no es necesario que estemos ante un bucle finito, pues
puede darse el caso de ejecutarse infinitamente mientras no se apague o
se pulse el reset de la placa ESP32.
Código de Ejemplo 1
Nota: Tanto en el caso del bucle for como en el while podemos interrumpir la
ejecución de una iteración y continuar la siguiente mediante la instrucción continue.
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
MTRO. ISRAEL FIGUEROA MARIN
Código: LP-FO-02-19
Revisión: 1
Página:
Código de Ejemplo 2 con el funcionamiento continue
Estructura do-while
La sintaxis de esta estructura de bucle es
Estamos de una estructura muy similar a la anterior while, con una única diferencia
En el while la condición se verifica al iniciar el bucle. Por lo tanto, se debe cumplir
ésta para entrar en el bucle.
Por el contrario, en el do-while la condición se verifica al finalizar el bucle. Es decir,
la primera vez se ejecutará siempre el bloque de instrucciones que están dentro del
mismo, tanto si la condición es cierta como si no lo es.
Aunque el matiz es pequeño, resultan útiles ambas estructuras, dependiendo de la
casuística concreta del algoritmo.
Para recordar y simplificando mucho la diferencia principal entre el while y el dowhile, consiste en que con el do-while nos aseguramos que las instrucciones del
bloque interior del mismo se ejecutan siempre al menos una vez.
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
MTRO. ISRAEL FIGUEROA MARIN
Código: LP-FO-02-19
Revisión: 1
Página:
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
MTRO. ISRAEL FIGUEROA MARIN
Código: LP-FO-02-19
Revisión: 1
Página:
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
MTRO. ISRAEL FIGUEROA MARIN
Código: LP-FO-02-19
Revisión: 1
Página:
PRÁCTICAS CON LA ESP32
Práctica No 1 “Encendido y Apagado de un Led”
OBJETIVO: El alumno realiza la práctica Encender y Apagar un Led con la
placa ESP32
•
1 Resistencia de 220 ohm a ½ watt
•
1 LED
MATERIALES
•
1 ESP32
•
1 PROTOBOARD
•
1 CABLE UTP
CIRCUITO
PROGRAMACIÓN PLATFORMIO IDE
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
MTRO. ISRAEL FIGUEROA MARIN
Código: LP-FO-02-19
Revisión: 1
Página:
Práctica No 2 “SECUENCIA DE TRES LEDS”
OBJETIVO: El alumno realiza la secuencia de leds con la placa ESP32
•
4 Resistencia de 220 K a ½ watt
•
4 LED
MATERIALES
•
1 ESP32
•
1 PROTOBOARD
•
1 CABLE UTP
CIRCUITO
PROGRAMACIÓN PLATFORMIO IDE
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
MTRO. ISRAEL FIGUEROA MARIN
Código: LP-FO-02-19
Revisión: 1
Página:
Práctica No 3 “Encender y Apagar Led con el Puerto Serial”
OBJETIVO: El alumno realiza la practica encendido y apagado de un led por el
puerto serial con la placa ESP32
•
1 Resistencia de 220 a ½ watt
•
1 LED
•
1 ESP32
•
1 PROTOBOARD
•
1 CABLE UTP
PROGRAMACIÓN PLATFORMIO IDE
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
MTRO. ISRAEL FIGUEROA MARIN
Código: LP-FO-02-19
Revisión: 1
Página:
Práctica No 4 “PWM”
OBJETIVO: El alumno realiza la practica PWM con la placa ESP32
•
1 Resistencia de 220 a ½ watt
•
1 LED
MATERIALES
•
1 ESP32
•
1 PROTOBOARD
•
1 CABLE UTP
CIRCUITO
PROGRAMACIÓN PLATFORMIO IDE
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
MTRO. ISRAEL FIGUEROA MARIN
Código: LP-FO-02-19
Revisión: 1
Página:
Práctica No 5 “RGB”
OBJETIVO: El alumno realiza la practica PWM con la placa ESP32
•
1 Resistencia de 220 a ½ watt
•
1 LED
MATERIALES
•
1 ESP32
•
1 PROTOBOARD
•
1 CABLE UTP
CIRCUITO
ROGRAMACIÓN PLATFORMIO IDE
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
MTRO. ISRAEL FIGUEROA MARIN
Código: LP-FO-02-19
Revisión: 1
Página:
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
MTRO. ISRAEL FIGUEROA MARIN
Código: LP-FO-02-19
Revisión: 1
Página:
Práctica No 6 “SENSOR ULTRASÓNICO ESP32”
OBJETIVO: El alumno realiza la práctica del sensor ultrasónico, donde verificara
la medición por medio de la placa ESP32
•
1 Resistencia de 220 a ½ watt
•
1 LED
MATERIALES
•
1 ESP32
•
1 PROTOBOARD
•
1 CABLE UTP
SENSOR ULTRASONICO
¿QUE ES EL SENSOR ULTRASÓNICO?
El sensor HC-SR04 es un módulo que incorpora un par
de transductores de ultrasonido que se utilizan de
manera conjunta para determinar la distancia del sensor
con un objeto colocado enfrente de este. Un transductor
emite una “ráfaga” de ultrasonido y el otro capta el
rebote de dicha onda. El tiempo que tarda la onda
sonora en ir y regresar a un objeto puede utilizarse para
conocer la distancia que existe entre el origen del sonido
y el objeto.
¿Cómo se comunica con Esp32 el sensor Ultrasónico?
La interfaz del sensor HC-SR04 y arduino se logra mediante 2 pines digitales: el
pin de disparo (trigger) y eco (echo). La función de cada uno de estos pines es la
siguiente:
•
•
El pin trigger recibe un pulso de habilitación de parte del microcontrolador,
mediante el cual se le indica al módulo que comience a realizar la medición
de distancia.
En el pin echo el sensor devuelve al microcontrolador un puso cuyo ancho
es proporcional al tiempo que tarda el sonido en viajar del transductor al
obstáculo y luego de vuelta al módulo.
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
MTRO. ISRAEL FIGUEROA MARIN
Código: LP-FO-02-19
Revisión: 1
Página:
¿Cómo se conecta un sensor Ultrasónico con Esp32?
La conexión del sensor con Esp32 es muy sencilla. Podemos realizarla utilizando
un protoboard, o directamente con alambres. Para lograr que el sensor funcione,
son necesarias 4 señales:
• Alimentación de 5 volts.
• Tierra o común del circuito.
• Señal de disparo (trig).
• Señal de eco (echo).
PROGRAMACIÓN PLATFORMIO IDE
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
MTRO. ISRAEL FIGUEROA MARIN
Código: LP-FO-02-19
Revisión: 1
Página:
Práctica No 7 “Sensor Infrarrojo”
OBJETIVO: El alumno realiza la práctica de un contador con el sensor infrarrojo
con la placa ESP32
•
1 Resistencia de 220 a ½ watt
•
1 LED
MATERIALES
•
1 ESP32
•
1 PROTOBOARD
•
1 CABLE UTP
CIRCUITO
FUNCIONAMIENTO
Los sensores infrarrojos se componen de un transmisor que emite infrarrojos IR
y un receptor que detecta la energía reflejada por un objeto. De esta manera
detecta la presencia de un objeto mediante la reflexión que produce la luz.
Cuentan con el comparador LM393, que nos va a proporcionar una lectura como
un valor digital cuando se sobrepasa un rango. El rango lo podemos regular con
un potenciómetro ubicado en la placa.
APLICACIONES
Algunas de las aplicaciones que puede darse al sensor son:
•
•
•
•
•
Detector de obstáculos
Contador en una banda de cadena de producción
Detección de presencia
Detectar el estado de una puerta (abierta o cerrada)
Y como en nuestro caso en un buzón inteligente
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
MTRO. ISRAEL FIGUEROA MARIN
PROGRAMACIÓN PLATFORMIO IDE
Código: LP-FO-02-19
Revisión: 1
Página:
MANUAL DE PROGRAMACIÓN C++ CON PLACA
ESP32 IOT
MTRO. ISRAEL FIGUEROA MARIN
Código: LP-FO-02-19
Revisión: 1
Página:
Práctica No 8 “WiFi Blynk ”
OBJETIVO: El alumno realiza la práctica con la placa ESP32, donde se contará
al de un contador con el sensor infrarrojo con la placa ESP32
•
1 Resistencia de 220 a ½ watt
•
1 LED
MATERIALES
•
1 ESP32
•
1 PROTOBOARD
•
1 CABLE UTP
CIRCUITO
Incluyendo la biblioteca de Wi-Fi
Lo primero que debe hacer para utilizar las funcionalidades Wi-Fi ESP32 es incluir
la WiFi.h biblioteca en su código, de la siguiente manera:
Modos Wi-Fi ESP32
La placa ESP32 puede actuar como estación Wi-Fi, punto de acceso o ambos.
Para configurar el modo Wi-Fi, useModo WiFi () y establezca el modo deseado
como argumento:
Descargar