Étape 8: Firmware : Main
pp, kw {} {} pps {} lc {style de police : italique;} bc {color : Green ; font-style : italique;} jc {color : Blue ; font-style : italique;} fn {couleur : rouge;} num {} var {}Lorsque directement la programmation des microcontrôleurs communs comme la gamme AVR d’Atmel, vous pouvez créer une fonction principale contenant un interne « forever boucle. » Ce n’est pas le cas avec le ESP8266. Ce module utilise des crochets, semblables à l’Arduino, alors le compilateur s’attendra quelques fonctions définies. Après cela, vous pouvez planifier une minuterie pour gérer les tâches répétitives.
Les crochets couramment utilisés sont :
// 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, vous êtes libre d’écrire vos propres fonctions et appelez-les comme un programme en C normal. L’attribut « IFA » est en fait une macro, que j’ai défini dans include/esp8266.h comme :
#define IFA ICACHE_FLASH_ATTR
Si une fonction est précédée de l’IFA, il est écrit de flash qui est mappé à la ROM. Sans cet attribut, la fonction se retrouveront dans le segment de RAM instruction, qui est plus rapide, mais se remplit rapidement. Si possible, utilisez toujours l’attribut de l’IFA. Ce fichier d’en-tête comprend également tout la plupart des bibliothèques SDK couramment utilisées ainsi que remappage quelques fonctions courantes de C (comme printf) à la version requise par le SDK de Espressif (os_printf). Enfin, elle définit une macro impression de débogage simple qui peut être utilisée pour imprimer les relevés de façon sélective lorsqu’une certaine valeur est définie, ce qui est dans le fichier *include/user_config.h*. J’ai utiliser cette macro largement dans la bibliothèque, mais faites attention avec elle car elle peut facilement être brisée.
// 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
À l’intérieur de la fonction user_init() , nous va initialiser la connexion de l’UART, configurer les broches GPIO et se connecter au WiFi. Les valeurs de SSID et SSID_PW sont définir en include/user_config.h. Vous devez définir ces valeurs à la correspondante de SSID et le mot de passe pour votre connexion WiFi à la maison ! Le débit global du code va quelque chose comme ceci :
- Initialiser l’UART
- Initialiser les GPIO
- Initialiser le PubNub
- Se connecter au réseau (pause ici jusqu'à ce que la connexion établie)
- Se connecter à Pubnub
- Surveillez les bouton (SW2) et contrôlez LED1 issu des messages reçus.