Paso 8: Firmware: principal
PP} kw {} pps {lc {estilo de fuente: cursiva;} a.c. {color: Green; font-estilo: cursiva;} jc {color: azul, estilo de fuente: cursiva;} fn {color: rojo;} num} var {Cuando directamente programación de microcontroladores comunes como la línea Atmel AVR, puede crear una función principal que contiene un interno de "forever lazo". No es el caso de la ESP8266. Este módulo utiliza ganchos, similares a Arduino, por lo que el compilador espera que unas funciones definidas. Después de eso, usted puede programar un temporizador de tareas repetidas.
Los anzuelos más comunes en uso son:
// Required for SDK v1.1.0 - Can be used to disable RFvoid user_rf_pre_init(void) { } // Loop function - Can/will continuously reschedule itself to runstatic void IFA user_procTask(os_event_t *events) { os_delay_us(10); // system_os_post(user_procTaskPrio, 0, 0 ); } // User Initialization void IFA user_init() { // Initialize the device here }
Othwerwise, eres libre de escribir sus propias funciones y llamarlas como un programa en C normal. El atributo de "Ifá" es realmente una macro que define en include/esp8266.h como:
#define IFA ICACHE_FLASH_ATTR
Si una función es el prefijo con IFA, está escrito para flash que se asigna a la ROM. Sin este atributo, se acabará la función en el segmento de RAM de instrucción, que es más rápido, pero se llena rápidamente. Si es posible, utilice siempre el atributo de Ifá. Este archivo de encabezado también incluye todo la mayoría de las bibliotecas SDK utilizados así como la reasignación de algunas funciones comunes de C (como printf) a la versión requerida por el SDK de Espressif (os_printf). Por último, define una macro de impresión de depuración simple que puede ser utilizada para imprimir selectivamente declaraciones cuando se define un valor determinado, que se encuentra en el archivo *include/user_config.h*. Utilice esta macro extensivamente en la biblioteca, pero tenga cuidado con él ya que fácilmente puede ser roto.
// Define to print debug statements over UART using DEBUG_PRINT()#define DEBUG_PRINT_ 1 // Only prints lines for debugging purposes#ifdef DEBUG_PRINT_ # define DEBUG_PRINT(S) printf S #else# define DEBUG_PRINT(S) #endif
Dentro de la función user_init() , se inicializar la conexión UART, configuración de los pines GPIO y conectar a Wi-Fi. Los valores de SSID y SSID_PW se definen en include/user_config.h. Debe establecer estos valores en el correspondiente SSID y la contraseña de su conexión Wi-Fi casera! El flujo general del código es algo como esto:
- Inicializar el UART
- Inicializar el GPIO
- Inicializar PubNub
- Conectar a red (pausa aquí hasta conexión establecida)
- Conectarse a Pubnub
- Botón (SW2) de seguimiento y control LED1 basado en mensajes recibidos.