Zoals bekend heeft Microchip Technology in 2016 Atmel overgenomen en biedt het nu de PIC®-microcontrollers (MCU’s) en de Atmel line-up inclusief de AVR® MCU-serie aan. Microchip blijft de AVR-serie aanbieden en uitbreiden met nieuwe mogelijkheden en functies voor zijn klanten. Dat betekent dat de producten en evaluation boards nu profiteren van alles wat Microchip te bieden heeft. Daarom willen we u graag kennis laten maken met de Microchip AVR-IoT en PIC IoT WA Development Boards voor WiFi-verbinding met Amazon Web Services (AWS) IoT Core.

Instappen in de wereld van cloudopslag en -computing voor uw gegevens kan lastig zijn. Werken met een beperkt stroomverbruik en tegelijkertijd een veilige gegevensoverdracht naar een clouddienst als AWS tot stand brengen, kan een uitdaging zijn voor ontwikkelaars. Microchip biedt twee development boards die u toegang geven tot de AWS IoT Core en een manier bieden om veilige communicatie via WiFi tot stand te brengen, terwijl de hoeveelheid energie die wordt verbruikt laag blijft en uw ontwikkeltijd wordt verkort. Voordat we in de details van de hardware en software duiken, gaan we eerst kijken wat er wordt geleverd en wat we kunnen verwachten.

Wat zit er in?

We hebben twee dozen waar op te lezen staat wat er in moet zitten (figuur 1).

Figuur 1. Beide dozen naast elkaar.

Omdat de meeste ontwikkelaars wel een micro-USB-kabel bij de hand hebben, wordt die niet meegeleverd – om ruimte te besparen en het milieu niet onnodig te belasten. Zoals al opgemerkt, hebben we twee boards: het PIC IoT WA Development Board (Microchip artikelnummer: EV54Y39A), dat als hoofdprocessor een PIC24FJ128GA705 heeft, en het AVR IoT WA Development Board (Microchip artikelnummer: EV15R70A), met een ATmega4808 uit de AVR-familie. Dat betekent in principe dat u kunt kiezen voor de rode of de blauwe pil als het gaat om de gewenste MCU.

Zoals u kunt zien in figuur 2, lijken de boards op elkaar.

Figuur 2. De twee IoT WA Development Boards uitgepakt.

Het voorste gedeelte (figuur 3) bevat een micro-USB-poort om het systeem aan te sluiten op de debugger of op een voeding.

Figuur 3: Debugger- en voedingssectie.

Naast de USB-aansluiting ziet u de debugger en bovenaan een oplaadcircuit voor een lithiumaccu. Met de juiste accu kunnen we de print dus gebruiken als een standalone draadloos apparaat.

Hardware van de evaluatiekaarten

Het voedingsgedeelte is voorzien van een MCP73871 Li-Ion/LiPo laad-IC en een MIC33050 buck-converter met geïntegreerde spoel. Deze IC’s vormen samen een mooie combinatie, omdat ze de mogelijkheid bieden om een 4,2V-lithiumcel op te laden (let op dat u een cel van het juiste type gebruikt) en ook om via een DC/DC-converter tot 600 mA stroom te leveren.

Het laad-IC werkt als een ideale diode, zodat er geen stroom van de accu naar de USB-poort kan lopen. Maar dat is alleen nog maar de voeding. Er zit meer op de print dat we nader moeten bekijken. Iets verder naar links zien we twee IC’s en een lichtsensor. De ene is een MCP9808 temperatuursensor en de andere is een ATECC608A cryptografische coprocessor. Die laatste wordt hier gebruikt voor het beveiligen van de communicatie met de AWS IoT Core services. Maar de ATECC608A is niet alleen te gebruiken voor de AWS IoT Core: hij kan ook worden gebruikt om de communicatie met andere clouddiensten te beveiligen.

In het midden zit de gekozen microcontroller. De PIC24FJ128GA705 biedt in deze variant 128 kB ECC-flash en 16 kB RAM. Deze chip draait op 32 MHz, haalt 16 MIPS en biedt een mooie verzameling van periferie, terwijl hij ook een low power-modus heeft om het energieverbruik te minimaliseren. De ATmega4808, één van de nieuwere leden van de AVR-familie, biedt 48 kB flash en 6 kB RAM. De aanwezige periferie doet meer denken aan een XMEGA-chip dan aan een klassieke AVR-chip. De ATmega kan worden geklokt tot 20 MHz en biedt 20 MIPS met een verbeterde set periferie en opties om stroom te sparen.

Tot slot (figuur 4) zien we links de ATWIN1510 WiFi-module, die de netwerkcommunicatie verzorgt.

Figuur 4. De ATWINC1510.

Deze netwerkcontroller ondersteunt IEEE 802.11 b/g/n-netwerktoegang in de 2,4GHz-band en wordt aangestuurd via SPI. De ATWINC1510 is meer dan alleen een WiFi-netwerkkaart; u kunt hem beschouwen als een netwerkcoprocessor die uw MCU de zware taak van versleuteling en TCP/IP-pakketafhandeling uit handen neemt.

Aan beide zijden van het board (figuur 5) zitten mikroBus Click board-connectoren, waarmee extra sensoren en mikroBus-compatibele apparaten kunnen worden aangesloten, zoals 3D-bewegingsdetectoren.

Figuur 5. AVR IoT WA Development Board met de mikroBus-connector.

Aan de onderkant van de kaart zijn de namen en pinnummers van de verschillende aansluitingen duidelijk aangegeven, zoals te zien is in figuur 6.

Figuur 6. De onderzijde van het IoT WA Development Board met opdruk.

Voor degenen die geïnteresseerd zijn in meer details voor de boards (zoals de schema’s) zorgt Microchip voor een fraaie startgids voor beide boards: daarin vindt u niet alleen wat erop zit, maar ook schema's en een snelstartgids voor het opzetten van de verbinding met AWS.

Voorgeïnstalleerde software

Beide boards zullen worden geleverd met voorgeïnstalleerde voorbeeldtoepassingen, waarmee het meteen out-of-the-box mogelijk is om te testen met de AWS IoT Core met behulp van een Microchip-account. In dit verband een waarschuwing, die ook te lezen is in de snelstartgids: de gegevens die naar dit account worden gestuurd zijn beschikbaar voor iedereen die het adres kent, wat betekent dat de gegevens eigenlijk openbaar zijn.

Het integreren van dit apparaat in uw bestaande netwerken is eenvoudig. Sluit het gekozen board aan op uw computer en er verschijnt een nieuw apparaat voor massaopslag met de naam CURIOSITY. In de hoofddirectory staat een bestand CLICK-ME.HTM, dat u kunt openen in een webbrowser en dat u door de configuratiestappen leidt. Eerst moeten we de firmware upgraden naar de nieuwste versie, anders krijgen we problemen met het configureren van het WiFi-netwerk. Zoals u kunt zien in figuur 7, wordt u eerst begeleid om de laatste firmware voor uw board te downloaden.

Figuur 7. De configuratiepagina CLICK-ME.htm voor de boards.

Deze update laadt de meest recente firmware voor de MCU. Omdat de veiligheids-chip niet wordt bijgewerkt, kan die verouderde firmware of certificaatinformatie bevatten. Als u problemen hebt bij het verbinden met AWS IoT Core, kijk dan in het tekstvak “Iets dat nog niet in de handleiding staat”, want daar staat hoe u alle componenten op het board kunt updaten naar de laatste versie. Sleep het gedownloade .hex-bestand naar de drive om de update uit te voeren. Nadat u het bestand naar de CURIOSITY-drive hebt gesleept, wordt de nieuwe firmware geflasht en start de MCU opnieuw op.

Met behulp van het bestand CLICK-ME.HTM in de root-directory van de CURIOSITY-drive kunt u uw WiFi-gegevens invoeren. Er wordt dan een bestand WIFI.CFG gegenereerd. Sleep het bestand WIFI.CFG naar de CURIOSITY-drive om de WiFi-gegevens op te slaan in de MCU en een WiFi-verbinding met uw netwerk tot stand te brengen. Als de verbinding met uw netwerk is gemaakt, zal het apparaat proberen verbinding te maken met de AWS-service en beginnen met het publiceren van gegevens. Met geopende CLICK-ME.HTM ziet dit er uit als in figuur 8.

Figuur 8. De eerste gegevens die binnenkomen nadat er verbinding is gemaakt met WiFi.

En dan?

Klik op het kleine knopje onder de sensorwaarden voor de volgende stappen. De eerste stap is het opzetten van MPLABX (figuur 9).

Figuur 9. Setup van de AVR GNU-toolchain.

Na de fusie van Microchip en Atmel zijn aan de MPLABX-ontwikkelomgeving, die oorspronkelijk bedoeld was om software voor PIC’s te ontwikkelen, ondersteuning voor AVR- en SAM-chips toegevoegd. U krijgt niet de ‘look and feel’ van Atmel Studio (dat op Visual Studio gebaseerd is), maar een groot voordeel is dat u niet langer gebonden bent aan Windows. Ook gebruikers van MacOS en Linux kunnen AVR-projecten gaan ontwikkelen op hun AMD64-computers. Wie alleen beschikt over een 32bit-CPU of een 32bit-besturingssysteem, valt met de nieuwste versie van MPLABX buiten de boot. MPLABX is gebaseerd op Netbeans, een ontwikkelomgeving die is begonnen als een IDE voor Java en na verloop van tijd is uitgebreid naar andere talen en later door Microchip is aangepast om uiteindelijk MPLABX te worden. Op het moment van schrijven is versie 5.45 actueel. Die gebruiken we dus voor deze review en we draaien hem op een Windows-machine. We moeten de compiler en de ondersteuningsbestanden voor de verschillende architecturen installeren. De gemakkelijkste manier om dat te doen is tijdens de installatie. Als er voldoende ruimte is op de schijf, kiest u gewoon alle ondersteunde architecturen om de support-bestanden te krijgen. Aan het eind van de installatie wordt meegedeeld, dat we de compiler van de Microchip-site moeten halen. Wie de AVR-GCC-compiler wil gebruiken (die meestal wordt meegeleverd bij Atmel Studio 7), moet die handmatig downloaden van de Microchip-site, het .zip-bestand uitpakken en de compiler met de hand toevoegen aan MPLABX. Hoe dat in zijn werk gaat, is te zien in figuur 9. Kies het pad waar u de compilerbestanden hebt uitgepakt. Selecteer de map ‘bin’; anders wordt de AVR8-toolchain niet herkend. De voorbeeldprojecten worden standaard gecompileerd met de XC-compiler, dus deze stap is niet noodzakelijk, maar het kan wel prettig zijn als u gewend bent aan AVR-GCC.

AVR-IoT WA Development Board

We moeten ook de nieuwste AVR-IoT WA Application downloaden. Na het downloaden van de code kunnen we die openen met MPLABX. Het project ziet er dan uit zoals in figuur 10.

Figuur 10. MPLABX project- en documentatieoverzicht.

U zult merken dat u met het aangesloten board ook alle resources en links naar de documentatie gepresenteerd krijgt. De code is nodig om de volgende stappen in het tutorial uit te voeren. U kunt ook leren hoe u de code kunt aanpassen aan uw eigen behoeften en hoe u de ontwikkelde ideeën en configuratie kunt gebruiken om sneller zelf te ontwikkelen. Het geopende en uitgeklapte project is te zien in figuur 11.

Figuur 11. Uitgeklapt en gebouwd project voor het op AVR gebaseerde board.

De laatste stap van het tutorial voor het AVR-IoT WA Board zit op het moment dat we dit schrijven een beetje verborgen in de structuur van de code. Het kost even wat moeite om de corresponderende delen van de code te vinden. Om wat makkelijker op gang te komen, ziet u in Figuur 12 de benodigde codewijzigingen om de groene LED te laten werken als actuator.

Figuur 12. Tutorial stap 3 – waar de code moet worden aangepast.

Nadat de wijzigingen in de broncode zijn opgenomen, kunt u ze uploaden naar het AVR-IoT WA Board en kan de LED-status worden geregeld met de mooie schuifregelaar zoals weergegeven in figuur 13.

Figuur 13. Actuatorknop om de LED op de print te schakelen.

Afgezien van dit kleine probleempje in de laatste stap van het tutorial, werkt het board perfect. Als u het tutorial hebt voltooid, bieden de Microchip IoT Developer Guides for AWS meer informatie en tutorials voor het gebruik van deze boards met de Amazon Web Services.

PIC-IoT WA Development Board

Net als bij de AVR moet eerst de PIC-IoT WA Application worden gedownload. U kunt de code openen in MPLABX. Hij heeft dezelfde structuur als die voor de AVR. Ook het tutorial werkt hetzelfde als bij de AVR, maar de PIC heeft veel meer flash, enige geavanceerde periferie en ook meer RAM (zie figuur 14).

Figuur 14. Gebruik van resources op een PIC-gebaseerd board.

Merk ook op dat de PIC, in vergelijking met de AVR, meer hardware-breakpoints en data-watchpoints ondersteunt voor het debuggen van uw software. De PIC heeft wel wat meer kloktikken per instructie nodig dan de AVR. Als u de meegeleverde code wat nader wilt onderzoeken, zult u zich waarschijnlijk verbazen over main.c, omdat de code wel heel kort is, zoals blijkt uit de volgende listing.

 

#include "mcc_generated_files/application_manager.h"

 

int main(void)

{

    application_init();

    

    while (1)

    {

        runScheduler(); 

    }

    return 0;

}

 

De initialisatie van alle componenten vindt binnen application_init() plaats. Deze functie zit in application_manager.c waar de meeste high-level functies te vinden zijn. De code gebruikt de functie runScheduler() om alle taken die gedaan moeten worden aan te sturen en te coördineren. In runScheduler() zit een functie met de naam timeout_callNextCallback(), die zorgt voor het daadwerkelijk aanroepen van de taken die moeten worden uitgevoerd. Deze is te zien in de volgende listing.

 

inline void timeout_callNextCallback(void)

{

    if (executeQueueHead == NULL)

        return;

    bool tempIE = (IEC0bits.T1IE == 1?1:0);

    IEC0bits.T1IE = 0;

    timerStruct_t *callBackTimer = executeQueueHead;

    // Done, remove from list

    executeQueueHead = executeQueueHead->next;

    // Mark the timer as not in use

    callBackTimer->next = NULL;

    if(tempIE)

    {

        IEC0bits.T1IE = 1;

    }

    uint32_t reschedule = callBackTimer->callbackPtr(callBackTimer->payload);

    // Do we have to reschedule it? If yes then add delta to absolute for reschedule

    if(reschedule)

    {

        timeout_create(callBackTimer, reschedule);

    }

}

 

De code controleert of er iets klaar is om te worden uitgevoerd, en zo niet, dan eindigt de functie onmiddellijk. Daarna schakelt de code eerst tijdelijk een timer-interrupt uit, we komen daar nog op terug. Dan neemt hij het element dat klaar is om uit te voeren en roept de functie aan. De aanroep uint32_t reschedule = callBackTimer->callbackPtr(callBackTimer->payload); voert de functie uit en de functie geeft zelf aan wanneer hij opnieuw moet worden aangeroepen. Als deze tijd groter is dan nul, wordt hij opgenomen in een lijst van taken die staan te wachten op uitvoering. De genoemde timer-interrupt is het andere onderdeel dat het systeem taken laat uitvoeren. De functie timeout_isr wordt met een gedefinieerd interval aangeroepen vanuit de timer-interrupt.

 

void timeout_isr(void)

    {

        timerStruct_t *next = listHead->next;

        absoluteTimeofLastTimeout = listHead->absoluteTime;

        lastTimerLoad = 0;

 

    if (listHead != &dummy) {

    enqueueCallback(listHead);

}

 

    listHead = next;

 

    startTimerAtHead();

}

 

De code controleert simpel gezegd een lijst met taken. In die lijst kunnen taken staan die moeten worden uitgevoerd of dummy-taken die niets doen. Als een taak moet worden uitgevoerd, wordt die in een lijst van taken geplaatst die op uitvoering wachten. De volgende taak uit de lijst met taken die moeten worden uitgevoerd, wordt gekozen en de timer past zijn interval daarop aan. De lijst met taken wordt afgehandeld door de functie timeout_callNextCallback waar we al naar hebben gekeken. De ISR zorgt dus voor het voorbereiden en plannen van taken die als volgende moeten worden uitgevoerd onder besturing van een timer. In combinatie met timeout_callNextCallback vormt dit een cyclus waarin taken worden beheerd en tijdig worden uitgevoerd. Als er geen taken meer hoeven te worden uitgevoerd, kan de MCU in de slaap-modus worden gebracht en wachten op de volgende keer dat hij door de timer of een andere gebeurtenis wordt gewekt. Dit mooie concept is niet alleen geschikt voor deze toepassing, maar het kan ook voor andere projecten interessant zijn om taken uit te voeren bij een lager stroomverbruik.

Een stap verder

Hier vindt u een handleiding om het voorbeeldproject voor het AVR-IoT WA board van de grond af aan op te bouwen met MPLABX. Hierdoor raakt u meer vertrouwd met de ontwikkelomgeving en het genereren van code. Let op: dit werkt en het wordt ondersteund, maar sommige onderdelen en plugins zullen verbeteringen ondergaan om de gebruikerservaring en stabiliteit verder te optimaliseren. Figuur 15, figuur 16 en figuur 17 illustreren een paar stappen van uw pad door de wizards.

Figuur 15. Start van een MPLABX-project.
Figuur 16. Selecteer uw target.
Figuur 17. Microchip Code Configurator.

Nadat de stappen uit de gebruikershandleiding zijn uitgevoerd, heeft u een project dat ook met AVR-GCC kan worden gecompileerd als u code wilt toevoegen die voor die specifieke compiler is geschreven.

In figuur 17 ziet u ook de componenten die bij het AWS IoT Core Sample-project zijn inbegrepen, zoals de CryptoAuthLibrary, WINC15XX en Message Queue Telemetry Transport (MQTT). Dat brengt ons bij het veiligheidsaspect van beide evaluation boards. De AWS IoT Core gebruikt MQTT voor data-uitwisseling. Als er geen extra metingen worden verricht, worden de gegevens als platte tekst uitgewisseld, zodat de gegevens onderweg van of naar uw apparaat door iemand anders kunnen worden aangepast – en dat is natuurlijk niet de bedoeling. Daarom kan MQTT gebruik maken van Transport Layer Security (TLS) om de communicatie te versleutelen. Op beide boards wordt de ATECC608A gebruikt als cryptografische coprocessor die het werk van de MCU weghaalt en werkt als veilig element voor uw apparaten. WINC1510 TLS biedt gecodeerde communicatie om te voorkomen dat de gegevens die worden doorgegeven tussen het evaluatiebord en de externe site worden gewijzigd. De AWS IoT Core gebruikt MQTT, dus we hoeven ons niet te beperken tot de AWS IoT Core: we kunnen werken met elke MQTT-broker die onze verbindingen accepteert en gegevens verwerkt.

Gemakkelijke instap

Met de gegeven prijs en de software-ondersteuning die beide boards bieden, is er niets om u zorgen over te maken. In combinatie met de uitgebreide documentatie en debugging-faciliteiten bieden de boards een eenvoudige instap naar connected devices met een laag stroomverbruik. De meegeleverde lithium-acculader biedt flexibiliteit die verder gaat dan alleen de werkbank, en de mikroBus-connector geeft u direct toegang tot een heleboel extra hardware voor uw projecten. U kunt met deze boards bij de door u gewenste MCU-architectuur blijven of u kunt gebruik maken van de kans om te wennen aan een andere architectuur en te ervaren wat die u kan bieden. In combinatie met de ingebouwde debugger op beide boards en de cross-platform-oplossing voor de drie grote besturingssystemen, is dit een meer dan complete oplossing.

Iets dat nog niet in de handleiding staat

Het kan zijn dat u een board ontvangt dat voorzien is van oudere firmware en dat de gegevens op de ATECC608A verouderd zijn. Dat heeft dan tot gevolg, dat het board weliswaar prima verbinding maakt met uw WiFi-netwerk, maar niet in staat is om verbinding te maken met de AWS IoT Core. Dan kunt u de tutorials en andere stappen niet uitvoeren. Om het board te voorzien van de nieuwste firmware, ook voor de ATECC608A en de debugger, kunt u deze IoT Provisioning Tool gebruiken. Dat draait onder alle drie grote besturingssystemen als een commandoregel-tool. Pak het gedownloade bestand uit, gebruik een commandoregel (onder Windows is dat cmd.exe). Voor Windows is het commando iotprovision-bin.exe -c aws -m sandbox. Nadat dit is gedaan is uw board bijgewerkt en staan alle benodigde certificaten op hun plaats. Als u de voorkeur geeft aan de Google-services, kijk dan eens naar de video tutorial van Microchip over hoe u van cloud-aanbieder kunt wisselen.