Stap 6: Firmware - ESP8266
De firmware voor deze module kan worden gevonden in de esp8266 directory van de broncode repository. Deze code is geschreven in C, dient te worden verzameld met behulp van de Espressif SDK en XTensa Tools GCC, en kan worden geflitst naar de chip met behulp van esptool en een 3.3V USB naar seriële Converter. Dit is niet Arduino code.
De code gepresenteerd is gebouwd op een ander Instructable ik eerder schreef. Nogmaals, ik moedig u aan even duren om door die gids, te lezen als het laat zien hoe de ontwikkelomgeving instellen, flash de chip, en details de code gebruikt evenals hoe te schrijven van uw eigen PubNub-bibliotheek.
Bij het opstarten, zijn de volgende acties plaatsvinden:
- Initialiseren van de UART en I/O pinnen
- Verbinden met wifinetwerk
- Verbinden met PubNub
- Inschakelen van een terugkerende 1 ms timer
De 1ms timer kan dienen als een hoofdlus, als het wordt herhaald elke 1ms. Het is hier dat we zullen informatie over de schaal opvragen of een reset aanvraagt bij de Atmel ATmega328p. De gehele I2C bits-bang uitvoering is ook hier behandeld door gebruik van verschillende vlaggen van de staat en het instellen van de klok- en datalijnen HI of LO dienovereenkomstig. Nadat beide gegevensbytes die vertegenwoordigen de schaal cijfers hebben gelezen is, zijn de waarden samengevoegd en gebruikt voor het bouwen van een JSON-string worden gepubliceerd in de publishMsg() functie.
// Publish the value using PubNubstatic void publishMsg (void) { // Check values for I2C line error...if (TWI_msg[0] > 99 || TWI_msg[1] > 99) { TWI_fullMsg = 10000; } // Ignore very small valueselse if (TWI_msg[0] == 0 && TWI_msg[1] < 50) { TWI_fullMsg = 0; } // Record full value and round to nearest 10else { int mod = TWI_msg[1] % 10; TWI_msg[1] /= 10; if (mod > 4) ++TWI_msg[1]; TWI_msg[1] *= 10; TWI_fullMsg = (uint16_t)TWI_msg[1] + 100 * (uint16_t)TWI_msg[0]; } // Only publish if this is a new value or it's been a while...if((TWI_fullMsg != TWI_lastMsg) || TIME_TO_PUBLISH) { char buf[40] = { 0, }; sprintf(buf, "{\"columns\":[[\"Coffee\",\"%d\"]]}", TWI_fullMsg); pubnub_publish(channel, buf); TWI_lastMsg = TWI_fullMsg; stat_flag &= ~REQUEST_PUBLISH; } }
Merken, gegevens verschijnt alleen als het nieuw is! Het houdt geen steek voortdurend uit te zenden irrelevant of herhaalde bytes. Een teller er echter voor zorgen dat ten minste één bericht verschijnt om de paar minuten, fungeren als een signaal van de hartslag . U moet uw eigen PubNub toetsen en persoonlijke WiFi referenties invoeren in de broncode. Dit wordt besproken in de krijgen gestarte gids die ik schreef.