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: