Att skapa IoT enheter med ESP8266 och PubNub (8 / 12 steg)
Steg 8: Firmware: Main
PP {} kw {} pps {} lc {font-style: kursiv;} f.Kr. {färg: Green; stil: kursiv;} jc {färg: blå; stil: kursiv;} fn {färg: röd;} num {} var {}När direkt programmering gemensamma mikrokontroller som Atmel AVR linje, kan du skapa en huvudfunktion som innehåller en intern "forever loopa." Detta är inte fallet med ESP8266. Denna modul använder krokar, liknar Arduino, så kompilatorn kommer att förvänta sig några definierade funktioner. Efter det, kan du schemalägga en timer för att hantera upprepade uppgifter.
De vanligaste krokarna i användning är:
Krävs för SDK v1.1.0 - kan användas för att inaktivera RFvoid user_rf_pre_init(void)
{
}
Loop funktion - kan / kommer att kontinuerligt flytta sig till runstatic makulera IFA user_procTask(os_event_t *events)
{
os_delay_us(10);
system_os_post (user_procTaskPrio, 0, 0);
}
Initiering av användaren
void IFA user_init()
{
Initiera enheten här
}
Othwerwise, du är fri att skriva egna funktioner och kallar dem som en normal C-program. Attributet "IFA" är faktiskt ett makro jag definieras i include/esp8266.h som:
#define IFA ICACHE_FLASH_ATTR
Om en funktion är inledd med IFA, skrivs det till flash som är mappad till ROM. Utan detta attribut, kommer att funktionen hamna i instruktion RAM-segmentet, som är snabbare, men kommer att fylla upp snabbt. Om möjligt, alltid använda attributet IFA. Denna header-fil innehåller också mest alla SDK biblioteken vanligen används samt remapping några vanliga C funktioner (som printf) till den version som krävs av Espressif SDK (os_printf). Slutligen definierar den ett enkelt debug utskrift makro som kan användas till selektivt avtrycken uttalanden när ett visst värde definieras, som det är i filen *include/user_config.h*. Jag använder detta makro omfattande i biblioteket, men var försiktig med det eftersom det kan lätt brytas.
Definiera för att skriva ut debug uttalanden över UART med DEBUG_PRINT () #define DEBUG_PRINT_ 1
Skrivs bara raderna för felsökning #ifdef DEBUG_PRINT_
# definiera DEBUG_PRINT (S) printf S
#else # define DEBUG_PRINT (S)
#endif
I funktionen user_init() , kommer att vi initiera UART anslutningen setup GPIO stiften och ansluta till WiFi. SSID och SSID_PW värden är definiera i include/user_config.h. Till motsvarande SSID och lösenord måste du ange dessa värden för din hem WiFi-anslutning! Den totala kod flödet går ungefär så här:
- Initiera UART
- Initiera GPIO
- Initiera PubNub
- Ansluta till nätverk (paus här tills anslutningen upprättats)
- Ansluta till Pubnub
- Övervaka knappen (SW2) och kontrollera LED1 baserat på mottagna meddelanden.