- Materiales necesarios:
- Programación del microcontrolador PIC:
- Funciones en la biblioteca ESP8266:
- Programa de muestra:
- Salida de simulación:
- Verificación de salida:
- Añadiendo funciones a la biblioteca ESP8266:
En este artículo, analicemos cómo conectar el módulo WIFI ESP8266 con un microcontrolador PIC. Hasta ahora, es posible que haya estado usando el módulo ESP8266 como un microcontrolador independiente o podría haberlo estado usando con la biblioteca Arduino. Pero, cuando se trata de proyectos de sistemas integrados incondicionales, también debemos saber cómo usarlos con microcontroladores PIC. Esto te ayudará a personalizar tus proyectos en perspectiva de diseño y, al mismo tiempo, también lo hará económico.
Los módulos ESP8266 vienen con un firmware predeterminado cargado, por lo tanto, podemos programar el módulo usando comandos AT. Estos comandos deben enviarse a través de un canal de comunicación en serie. Este canal se establece entre el PIC y el módulo ESP8266 utilizando el módulo USART en el microcontrolador PIC . Todo el trabajo será monitoreado e informado al usuario mediante una pantalla LCD de 16x2. Por lo tanto, este tutorial asume que tiene algunos conocimientos básicos sobre el módulo USART en PIC, la interfaz de LCD con PIC y el uso de comandos AT en ESP8266. Si no lo hace, puede recurrir a los tutoriales vinculados para aprenderlos de antemano.
Materiales necesarios:
Necesitaría el siguiente hardware para completar este tutorial
- PIC16F877A
- Oscilador de cristal de 20MHz
- 7805
- LM317
- ESP8266
- Pantalla LCD 16 * 2
- Programador PicKit3
- Resistencias (1K, 220ohm, 360ohm)
- Condensadores (1uF, 0.1uF, 33pF)
- Cables de puente
- Adaptador de 12V para alimentar el módulo PIC y ESP
Hardware:
El esquema completo del proyecto se muestra a continuación.
El esquema consta de dos circuitos reguladores de voltaje, uno es un regulador de + 5V que se usa para alimentar el microcontrolador PIC y el otro es un regulador de 3.3V que alimenta el módulo ESP8266. El + 5V se regula mediante un 7805 (IC regulador de voltaje lineal). Los 3.3V se regulan usando LM317 (Regulador de voltaje variable). El módulo ESP8266 consume mucha corriente (~ 800mA), por lo tanto, si está diseñando su propia fuente de alimentación, asegúrese de que pueda generar una corriente tan alta. También asegúrese de que los pines de tierra del PIC y el módulo ESP8266 estén conectados entre sí.
Entonces ahora sabemos que el PIC opera con + 5V y el ESP8266 opera a 3.3V voltios. Para establecer una comunicación USART entre estos dos módulos, necesitamos tener un circuito convertidor lógico de 5V - 3.3V como se muestra en la figura anterior. Este circuito no es más que un divisor de potencial que simplemente convierte los + 5V entrantes a 3.3V. Esto evitará que el pin RX tolerable de 3.3V del ESP8266 obtenga + 5V.
He creado los módulos PIC y ESP en dos placas de rendimiento separadas, como se muestra en estos tutoriales. De esta manera puedo usarlos universalmente para proyectos más similares.
- Hardware LED usando PIC
- Empezando con ESP8266
Puede seguir el mismo, o construir su propia placa a su estilo o simplemente conectar el circuito anterior a una placa.
Programación del microcontrolador PIC:
Para programar el microcontrolador PIC para enviar “comandos AT” en serie usando USART al módulo ESP8266, tenemos que usar una biblioteca. Esta biblioteca le ahorrará muchas molestias, como usar los módulos de instrucción ESP8266 para verificar todos y cada uno de los comandos AT y luego encontrar una manera de transmitirlos al módulo ESP. Esta biblioteca es un software gratuito desarrollado originalmente por Camil Staps y posteriormente fue mejorado y modificado por Circuit Digest para que pueda ser utilizado con nuestro microcontrolador PIC16F877A. Puedes descargarlo aquí
La biblioteca aún está en desarrollo, pero puede usar la mayoría de los comandos AT importantes en el firmware ESP8266. Si encuentra que falta alguno de los comandos que necesita, hágamelo saber en la sección de comentarios e intentaré agregarlo por usted. Este tutorial le explicará todos los comandos (hasta ahora) que puede utilizar a través de esta biblioteca. Además, también lo guiará para agregar sus propias funciones a la biblioteca.
Funciones en la biblioteca ESP8266:
- Initialize_ESP8266 (): esta función inicializará el módulo USART del PIC para comunicarse con el módulo ESP8266. Establece la velocidad en baudios en 115200 y prepara el pin Rx y Tx del PIC para la comunicación USART.
- _esp8266_putch (): esta función se utiliza para enviar un solo carácter en serie al módulo ESP8266. Por ejemplo, _esp8266_putch ('a') enviará el carácter en serie al módulo ESP.
- _esp8266_getch (): esta función se usa para obtener un solo carácter del módulo ESP. Por ejemplo, si el ESP está imprimiendo "OK" y usamos char a = _esp8266_getch (). Entonces, el carácter 'o' se almacenará en la variable a.
- ESP8266_send_string (): esta función es la versión de cadena de _esp8266_putch (). Puede enviar una cadena completa al módulo ESP8266. Por ejemplo, ESP8266_send_string (“AT / r / n”) enviará el comando “AT” al módulo ESP8266.
- esp8266_isStarted (): Se usa para verificar si el PIC puede comunicarse con el módulo ESP. Envía el comando "AT" y espera "OK", si lo recibe, devuelve verdadero;
- esp8266_restart (): reinicia el módulo ESP8266 y devuelve verdadero si se reinicia con éxito y devuelve falso si no tiene éxito.
- esp8266_mode (): se utiliza para configurar el modo de trabajo del módulo ESP8266. Como sabemos, puede funcionar en tres modos diferentes.
Modo de estación |
|
Modo SoftAP |
|
Modo de estación y AP |
- esp8266_connect (): te permite conectarte a una señal wifi. Por ejemplo esp8266_connect (“casa”, ”12345678”) , permitirá que su módulo se conecte a la señal wifi llamada casa cuya contraseña es 12345678.
- esp8266_disconnect (): esta función desconecta su módulo de cualquier conexión wifi que estuviera previamente conectada
- esp8266_ip (): Obtiene la dirección IP y la devuelve. Utilice esta función si desea conocer la dirección IP del módulo ESP8266.
- esp8266_start (): esta función se utiliza para iniciar una comunicación TCP o UDP. Por ejemplo esp8266_start ( "TCP", "192.168.101.110", 80) . Iniciará una red TCP en esa IP y puerto 80.
- esp8266_send (): esta función se utiliza para enviar información a la red TCP / UDP. El script HTML se enviará mediante este comando. Entonces este script aparecerá en la dirección IP en la que se estableció la comunicación anteriormente.
- esp8266_config_softAP (): Esta función se utiliza para configurar el softAP. Por ejemplo esp8266_config_softAP ("oficina", "12345678"); creará una señal Wifi llamada oficina y se debe usar la contraseña 12345678 para acceder a ella.
- esp8266_get_stationIP (): Esta función le devolverá la dirección IP / MAC de los clientes que están conectados a su softAP.
Programa de muestra:
Ahora que hemos entendido las funciones de todos y cada uno de los comandos de la biblioteca, veamos un pequeño programa de muestra. En este programa verificaremos si la conexión entre ESP8266 y PIC es exitosa y luego crearemos una red WIFI (SoftAP) con un nombre y contraseña preferidos. Se explicará el programa completo y la simulación del mismo para su comprensión.
Nuevamente, si no ha leído nuestro tutorial de interfaz PIC con LCD y PIC USART, lea el, antes de continuar, porque solo entonces tendrá sentido para usted.
Ya que recién estamos comenzando a conectar el PIC con el ESP8266, he usado una pantalla LCD para asegurarme de que todo funcione correctamente.
hacer {Lcd_Set_Cursor (1,1); Lcd_Print_String ("ESP no encontrado"); } while (! esp8266_isStarted ()); // esperar hasta que el ESP envíe "OK" Lcd_Set_Cursor (1,1); Lcd_Print_String ("ESP está conectado"); __delay_ms (1500); Lcd_Clear ();
Cuando enviamos el "AT" al módulo ESP8266, responde con un "OK". Esto nos asegura que el módulo ESP8266 está conectado correctamente. La función esp8266_isStarted () se usa para lo mismo. Enviamos la señal AT desde el PIC y esperamos hasta que el módulo ESP se active y nos envíe un OK. Si obtenemos un OK mostramos que el "ESP está conectado" en la pantalla LCD.
esp8266_mode (2); Lcd_Set_Cursor (1,1); Lcd_Print_String ("ESP configurado como AP"); __delay_ms (1500); Lcd_Clear ();
Las líneas de código anteriores se utilizan para configurar el módulo ESP para que funcione en el modo "AP suave". La función esp8266_mode (2); envía los comandos AT "AT + CWMODE = 3" al módulo y espera que el módulo responda con "OK"
/ * Configure el nombre y la contraseña del AP * / esp8266_config_softAP ("CircuitDigest", "619007123"); Lcd_Set_Cursor (1,1); Lcd_Print_String ("AP configurado"); __delay_ms (1500); Lcd_Clear (); / * AP configurado * /
Este segmento del código se utiliza para configurar el softAP. Aquí hemos nombrado el SSID como "CircuitDigest" y la contraseña como "619007123". Para indicar que el proceso está completo, esperaremos a que el módulo responda con “OK” y luego imprimiremos el AP configurado en la pantalla LCD.
Eso es todo, ahora hemos interconectado el módulo ESP8266 con el PIC MCU y hemos configurado el softAP con un nombre y contraseña de nuestra elección. Como de costumbre, simulemos este código y veamos cómo funciona.
Salida de simulación:
Estamos utilizando el software Proteus para simular la salida. El archivo de diseño para el mismo se puede encontrar en el anexo.
Como no tenemos un módulo ESP8266 en la biblioteca de Proteus, usamos el terminal serial y respondemos como usuario al módulo PIC. La simulación una vez completada la pantalla se verá a continuación
La salida de nuestro código se muestra en el terminal virtual. El funcionamiento completo de la simulación se explicará en el video a continuación.
Verificación de salida:
Una vez que el programa se verifica usando la simulación, viértalo en su microcontrolador PIC. Realice las conexiones como se muestra en los esquemas anteriores (sección Hardware). Debería poder seguir su progreso a través de la pantalla LCD.
Una vez que la pantalla LCD dice que el AP está configurado, podemos verificarlo usando la configuración de WIFI en el teléfono o la computadora portátil. Mi computadora portátil muestra la siguiente señal según nuestro programa.
Eso es, chicos, hemos interconectado con éxito el módulo ESP8266 con el microcontrolador PIC. Esta es una interfaz muy básica y si desea realizar proyectos complicados con el ESP8266, es posible que deba agregar sus propias bibliotecas o al menos agregar sus propias funciones. Créame, es muy fácil hacerlo, le daré una breve idea de lo mismo.
Añadiendo funciones a la biblioteca ESP8266:
Agregar su propia función le ayudará a enviar cualquier comando "AT" al módulo ESP8266. Para continuar con esto, debe leer la documentación del conjunto de instrucciones del módulo ESP8266. Puede enviar directamente cualquier comando AT que encuentre en el manual del conjunto de instrucciones. Pero recuerde siempre agregar “/ r / n” al final de cada comando AT. Por ejemplo, si desea establecer múltiples conexiones con su módulo ESP. Luego abra la documentación del conjunto de instrucciones y busque nuestro comando AT que hará este trabajo por usted. Aquí el comando "AT + CIPMUX = 1" le permitirá establecer múltiples conexiones con su módulo ESP.
Ahora todo lo que tiene que hacer es enviar este “AP + CIPMUX = 1” a su módulo ESP8266 usando el puerto serial. La forma más dura de hacer esto es simplemente usando el comando
_esp8266_print ("AT + CIPMUX = 1 \ r \ n" ")
Esto funcionará, pero no es la mejor manera de hacerlo. Tiene que volver a leer lo que su ESP8266 responde a su comando. En nuestro caso responderá con “OK”. Por lo tanto, debe leer los datos entrantes del módulo ESP8266 y confirmar que es un "OK". También puede hacer esta función donde el "1" o el "0" se pueden pasar como argumentos.
Siga adelante e intente crear sus propias funciones para la biblioteca. Pero si necesita ayuda, no dude en utilizar la sección de comentarios y yo le ayudaré.