Implementare rapidamente in Amazon Web Services dispositivi IIoT basati su sensori

Di Stephen Evanczuk

Contributo di Editori nordamericani di DigiKey

I dispositivi endpoint per l'Internet delle cose industriale (IIoT) rappresentano l'interfaccia essenziale tra le risorse basate su cloud e i processi industriali. Dal momento però che collega la periferia con il cloud, un dispositivo IIoT deve far fronte a requisiti crescenti di prestazioni, connettività, integrazione dei sensori, sicurezza e affidabilità sia al suo interno che tra di esso e il cloud.

Servizi specializzati come Amazon IoT Core e Amazon FreeRTOS si sono rivelati utili per soddisfare questi requisiti sul lato del cloud. Ma gli sviluppatori IIoT alle prime armi con i servizi cloud e tutte le rispettive interfacce e protocolli possono incontrare ulteriori difficoltà quando si tratta di collegarsi a quei servizi sul lato del dispositivo. Devono infatti tener conto dei requisiti di rilevamento e di elaborazione dell'applicazione edge nonché dei vincoli di costo, potenza, prestazioni e spazio.

Questo articolo illustra brevemente l'uso delle risorse basate sul cloud e come si sono evolute e presenta poi un kit completo per il cloud basato su un microcontroller RX65N di Renesas. Indica come utilizzare questo microcontroller e il progetto di riferimento assieme al pacchetto software associato per implementare rapidamente dispositivi IIoT basati su sensori per l'integrazione con il cloud Amazon Web Services (AWS).

Utilizzo delle risorse del cloud

Sebbene altri fornitori di servizi cloud stiano lentamente recuperando terreno, AWS rimane il fornitore leader di soluzioni di computing, storage e software-as-a-service (SaaS) scalabili senza server basate su cloud. Le aziende utilizzano abitualmente questi servizi in applicazioni su scala aziendale che possono crescere in funzione della domanda e attingono a un'ampia gamma di pacchetti SaaS, il tutto mediato da servizi middleware uniformi a livello di piattaforma per comunicazioni, notifiche, sicurezza, archiviazione dati e quasi qualsiasi esigenza pratica di elaborazione.

Per le imprese che utilizzano applicazioni IoT su larga scala, l'impiego di questi servizi per analizzare i dati IIoT provenienti da veicoli, attrezzature, edifici e stabilimenti produttivi offre vantaggi innegabili per migliorare la conoscenza e il controllo di risorse materiali, processi e pratiche. Dato però il palese divario tra i progetti IoT in tempo reale con risorse limitate presenti nella periferia e i servizi virtuali scalabili che si trovano nel cloud, il processo di connessione di un dispositivo IIoT ad AWS o a qualsiasi altro servizio cloud può presentare qualche difficoltà agli sviluppatori.

Per colmare questo scarto, i principali fornitori di servizi su cloud offrono una serie di funzionalità studiate per ricomporre le ampie differenze tra i dispositivi IoT e i servizi cloud. Nel caso di AWS, queste funzionalità sono contenute in AWS IoT Core, che funge da gateway non solo per l'intera piattaforma AWS, ma anche per i servizi a livello di applicazione specifici per IoT per l'archiviazione dei dati, l'analisi, la visualizzazione e l'apprendimento automatico (Figura 1).

Schema di AWS IoT che rappresenta l'interfaccia di servizi tra i sensori IIoT sul campo e la più ampia piattaforma AWSFigura 1: AWS IoT rappresenta l'interfaccia di servizi tra i sensori IIoT sul campo e la più ampia piattaforma AWS dei servizi utilizzati per analizzare i dati dei sensori per applicazioni industriali come la gestione della flotta qui suggerita. (Immagine per gentile concessione di AWS)

Oltre a queste funzionalità, l'integrazione del sistema operativo in tempo reale (RTOS) open-source FreeRTOS con AWS IoT offre un importante vantaggio nell'affrontare i requisiti del ciclo di vita per l'aggiornamento e la manutenzione del sistema.

Come per qualsiasi altra offerta a livello aziendale, i servizi AWS IoT specificano un'ampia gamma di requisiti di interfaccia e protocolli per l'integrazione dei dispositivi, l'autenticazione e l'interscambio di messaggi. Sebbene sia coerente con i requisiti della più ampia piattaforma AWS, la natura specialistica dell'ambiente IoT fa sì che anche gli sviluppatori AWS esperti possano dover affrontare un impegnativo percorso di apprendimento per riuscire a integrare un dispositivo con AWS IoT Core e con i servizi AWS IoT associati. Inoltre, a prescindere dal loro livello di esperienza, devono affrontare le note sfide derivanti dall'implementazione di un progetto IoT che soddisfi la continua richiesta di prestazioni più elevate, minori consumi energetici e maggiore sicurezza.

Di fronte a questa serie di sfide, il kit RX65N Cloud RTK5RX65N0S01000BE di Renesas offre una soluzione pronta per implementare rapidamente i dispositivi IIoT su AWS.

Piattaforma completa

Il kit RX65N Cloud offre un progetto di riferimento e una piattaforma di sviluppo completi per implementare e valutare i dispositivi IIoT con i servizi cloud di AWS IoT. Oltre a un pacchetto di sviluppo software completo, il kit contiene tre schede hardware, compresa una scheda target con un microcontroller a 32 bit R5F565NEDDFP di Renesas certificato per Amazon FreeRTOS, una scheda Wi-Fi e una scheda Renesas Cloud Option con connessioni USB e i sensori richiesti in genere in un'applicazione IIoT.

Il microcontroller R5F565NEDDFP, basato sul core di processore a 32 bit RXv2 di Renesas, offre 640 kB di RAM, 32 kB di flash dei dati e 2 MB di flash del codice. In questo microcontroller, la memoria flash del codice può essere configurata in modo lineare in cui opera come spazio a indirizzo singolo, o in dual mode in cui opera come due aree di memoria separate. L'opzione dual mode consente aggiornamenti OTA (via etere) più affidabili in quanto carica il nuovo firmware in un banco non occupato e ne convalida l'integrità e l'autenticità prima di riavviare il sistema.

Oltre al supporto della memoria, R5F565NEDDFP e gli altri membri della famiglia RX65N integrano un'ampia gamma di blocchi funzionali, tra cui un'unità a virgola mobile (FPU) IEEE-754 e un'unità di protezione di memoria (MPU). Le interfacce esterne dei microcontroller RX65N comprendono due convertitori analogico/digitale (ADC) multicanale a 12 bit, un convertitore digitale/analogico (DAC) a due canali a 12 bit e interfacce di comunicazione industriale, tra cui Ethernet, Controller Area Network (CAN), e interfacce seriali multiple come I2C, quad SPI e un'interfaccia di comunicazione seriale multicanale (SCI) che supporta I2C e SPI.

Interfaccia hardware per sensori

Oltre a fornire una piattaforma di valutazione, il kit Cloud di Renesas dimostra quanto sia relativamente facile integrare il microcontroller RX65N con i sensori IIoT. In questo caso, la scheda Cloud Option del kit include tre sensori:

  • Il sensore di luce digitale ISL29035 (ISL29035IROZ-T7) di Renesas per misurazione della luce ambiente/a infrarossi
  • Il sensore MEMS BMI160 di Bosch Sensortec per accelerazione a 3 assi e misurazione giroscopica
  • Il sensore MEMS BME680 di Bosch Sensortec per misurazioni di gas, temperatura, umidità e pressione

Dato che tutti e tre questi sensori offrono un'interfaccia seriale I2C, per integrare il microcontroller è sufficiente collegare i dispositivi a un bus I2C condiviso. Lo schema della scheda Cloud Option illustra questa semplice interfaccia hardware (Figura 2).

Schema del progetto di riferimento della scheda Cloud Option di Renesas (fare clic per ingrandire)Figura 2: Incluso nel kit RX65N Cloud di Renesas, lo schema del progetto di riferimento della scheda Cloud Option illustra la semplice interfaccia hardware richiesta per collegare i suoi tre sensori a un bus seriale I2C condiviso. (Immagine per gentile concessione di Renesas)

Utilizzando i connettori compatibili disponibili sulla scheda Cloud Option, gli sviluppatori possono anche estendere le funzionalità hardware del kit con le schede add-on PMOD e Grove.

Sviluppo software

Anche se gli avanzati microcontroller e sensori utilizzati nei dispositivi IIoT semplificano la progettazione hardware, quella software può essere molto più complessa. Oltre ai requisiti software per il sistema IIoT, gli sviluppatori devono soddisfarne altri per interfacciarsi con risorse basate su cloud come AWS IoT Core e i servizi della piattaforma AWS. In questo caso, possono risolverli con una coppia di kit di sviluppo software (SDK) AWS mirati per il dispositivo e i servizi cloud.

A livello di applicazione, gli sviluppatori di software IoT interagiscono con i servizi AWS tramite l'SDK AWS standard. In questo caso, le interazioni con i dispositivi e i loro dati avvengono attraverso gli stessi servizi, mediati da quelli di messaggistica e notifica AWS comuni ai servizi AWS e AWS IoT, come ricordato sotto.

A livello di dispositivo, gli sviluppatori lavorano con un SDK per dispositivo (o "Oggetto") per connettersi ai servizi AWS IoT. Richieste e risposte specifiche tra i dispositivi e i servizi AWS sono mediate da un message broker che gestisce gli scambi utilizzando il protocollo di messaggistica publish-subscribe (pub/sub) dello standard ISO Message Queuing Telemetry Transport (MQTT) (Figura 3).

Schema dell'utilizzo di SDK separati per i dispositivi e per le applicazioniFigura 3: L'implementazione di applicazioni IIoT comporta l'uso di SDK separati per i dispositivi e per le applicazioni. Entrambi si basano tuttavia su un insieme di meccanismi uniformi a livello di piattaforma per la messaggistica, la notifica e altre funzionalità di base. (Immagine per gentile concessione di AWS)

Poiché il dispositivo invia messaggi MQTT con carichi dati utili, un motore di regole richiama servizi aggiuntivi della piattaforma AWS secondo una serie di espressioni scritte dallo sviluppatore in una sintassi basata sul linguaggio di interrogazione strutturata (SQL). Ad esempio, la regola esposta nel Listato 1 può ripubblicare il carico utile generato dall'espressione SQL (SELECT * FROM 'iot/test) su un'altra coda MQTT (my-mqtt-topic) se un modello di inferenza (my-model) richiamato dalla funzione dei servizi di apprendimento automatico di Amazon (machinelearning_predict()) classifica i dati come appartenenti a una qualche etichetta specifica (predictedLabel=1).

Copy
{
  "sql": "SELECT * FROM 'iot/test' where machinelearning_predict('my-model', 'arn:aws:iam::123456789012:role/my-iot-aml-role', *).predictedLabel=1",
  "ruleDisabled": false,
  "awsIotSqlVersion": "2016-03-23",
  "actions": [{
    "republish": {
        "roleArn": "arn:aws:iam::123456789012:role/my-iot-role",
        "topic": "my-mqtt-topic"
    }
  }]
}

Listato 1: Il motore delle regole AWS richiama i servizi AWS e instrada i dati utilizzando regole di selezione di tipo SQL, azioni designate e metadati associati. (Codice per gentile concessione di AWS)

Device Shadow

Anche se il motore delle regole AWS IoT offre una capacità di elaborazione liberamente accoppiata, il servizio Device Shadow per AWS IoT aiuta a svincolare l'applicazione IoT dallo stato del dispositivo IoT. Le copie shadow contengono informazioni sullo stato di un dispositivo IoT fisico. Di conseguenza, se un dispositivo IoT perde la connettività o interrompe in altro modo la connessione con AWS, i servizi basati su cloud possono utilizzare il servizio Device Shadow per continuare a funzionare in base agli ultimi dati ricevuti senza dover costruire i propri meccanismi di cache dei dati del dispositivo. Il servizio edge AWS IoT Greengrass, invece, consente ai dispositivi IoT di continuare a interagire virtualmente con il cloud durante le interruzioni intermittenti dei servizi cloud. Greengrass continua a funzionare nei dispositivi periferici per mantenere le copie shadow e fornire il sottoinsieme di servizi cloud necessari per permettere ai dispositivi IoT di continuare a funzionare.

Anche se le copie shadow mantengono lo stato del dispositivo, il servizio Device Shadow è molto di più di un semplice meccanismo di caching. Offre infatti un'interfaccia comune per permettere alle applicazioni di inviare richieste ai dispositivi IoT. Essendo inserito nel meccanismo pub/sub MQTT, gli aggiornamenti e le richieste di dati si traducono in una notifica automatica di tutti i dispositivi e di tutte le applicazioni che si registrano nelle code MQTT associate a ogni copia shadow.

A livello di implementazione, il servizio Device Shadow utilizza il semplice formato di un documento JSON che contiene i dati e i metadati associati a ogni dispositivo fisico. Tramite l'SDK del dispositivo, il software del dispositivo IoT può trasmettere un nuovo documento JSON che aggiorna lo stato riportato nella copia shadow con i suoi dati più recenti. Un'applicazione IoT basata su host o su un dispositivo mobile può invece aggiornare la copia shadow con i nuovi valori desiderati. Ad esempio, se un dispositivo IIoT ha un LED verde o una luce verde su un display, un'applicazione può aggiornare la copia shadow per richiedere che diventino rossi e ricevere addirittura un report che mostra la differenza tra gli stati desiderati e quelli riportati (Listato 2).

Copy
{
    "state": {
        "desired": {
            "color": "RED",
            "state": "STOP"
        },
        "reported": {
            "color": "GREEN",
            "engine": "ON"
        },
        "delta": {
            "color": "RED",
            "state": "STOP"
        }
    },
    "metadata": {
        "desired": {
            "color": {
                "timestamp": 12345
            },
            "state": {
                "timestamp": 12345
            },
            "reported": {
                "color": {
                    "timestamp": 12345
                },
                "engine": {
                    "timestamp": 12345
                }
            },
            "delta": {
                "color": {
                    "timestamp": 12345
                },
                "state": {
                    "timestamp": 12345
                }
            }
        },
        "version": 17,
        "timestamp": 123456789
    }
}

Listato 2: Una copia shadow AWS è un documento JSON che contiene metadati e dati del dispositivo, fra cui i valori sia per lo stato riportato che per quello desiderato, nonché la differenza tra i due stati. (Codice per gentile concessione di AWS)

Anche se servizi come le copie shadow e i motori delle regole supportano l'integrazione con le applicazioni e la più ampia piattaforma AWS, un elemento centrale del servizio AWS IoT è l'integrazione di Amazon FreeRTOS. Questo RTOS open-source estende il diffuso kernel FreeRTOS open-source con un ampio set di librerie. Oltre a quelle per servizi comuni come il logging, Amazon FreeRTOS ne aggiunge altre per i servizi AWS IoT. Si tratta delle librerie AWS IoT Device Shadow, AWS IoT Greengrass (gdd) e AWS IoT Device Defender per monitorare la sicurezza del dispositivo. Amazon migliora inoltre FreeRTOS con librerie per molti servizi middleware, tra cui secure socket, Transport Layer Security (TLS), Public Key Cryptography Standard (PKCS) #11, un agente OTA, Bluetooth, Wi-Fi e scambio di messaggi MQTT.

Implementazione semplice

Renesas aiuta gli sviluppatori ad acquisire rapidamente esperienza con il suo Kit Cloud e la connettività con i servizi AWS IoT. Dopo aver configurato il set di schede del kit Cloud, gli utenti devono installare l'IDE integrata e2 studio basata su Eclipse di Renesas e il compilatore CC-RX di Renesas. Grazie a e2 studio e al compilatore CC-RX, gli sviluppatori possono rapidamente importare e compilare sia Amazon FreeRTOS che il codice di esempio del kit RX65N Cloud open-source di Renesas.

Renesas fornisce la relativa documentazione con una descrizione passo-passo della configurazione di AWS IoT e le credenziali di autenticazione richieste per effettuare qualsiasi connessione ad AWS. Al termine di questa procedura di configurazione relativamente rapida, occorre eseguire il programma dimostrativo per monitorare i dati dei sensori inviati dal dispositivo come messaggi MQTT e visualizzare i messaggi utilizzando un client di visualizzazione MQTT disponibile tramite la console AWS IoT.

Sviluppo di software personalizzato

Oltre a fornire una dimostrazione immediata dell'integrazione del dispositivo IoT con AWS IoT, il codice di esempio di Renesas serve anche da progetto di riferimento per applicazioni personalizzate. Nonostante questa disponibilità di codice, tuttavia, fra le sfide che gli sviluppatori dovranno affrontare nei loro progetti personalizzati vi è la gestione del gran numero di configurazioni associate ad Amazon FreeRTOS e ai servizi AWS IoT correlati. Ogni servizio richiede la specifica di molti parametri associati, come la lunghezza delle code e le dimensioni dei messaggi.

Sebbene il codice di esempio di Renesas includa configurazioni FreeRTOS prestabilite per le sue dimostrazioni, gli sviluppatori di codice personalizzato dovranno districarsi tra diverse opzioni di configurazione per ogni servizio, libreria e utility. Per semplificare questo processo, Renesas ha sviluppato Smart Configurator. Disponibile sia come plugin e2 studio che come applicazione standalone, Smart Configurator permette agli sviluppatori di esaminare e modificare le impostazioni per ogni gruppo di configurazione tramite un'interfaccia grafica utente (GUI) (Figura 4).

Immagine di Smart Configurator di Renesas (fare clic per ingrandire)Figura 4: Smart Configurator di Renesas offre una GUI semplice per esaminare e modificare le numerose impostazioni di configurazione associate al folto gruppo di librerie e servizi supportati in Amazon FreeRTOS. (Immagine per gentile concessione di Renesas)

Per quanto riguarda il codice, gli sviluppatori possono sfruttare la sorgente completa disponibile nel repository del kit RX65N Cloud di Renesas. Le routine di esempio incluse in questo repository mostrano modelli di progettazione chiave per lavorare con ogni servizio AWS IoT attraverso i meccanismi di messaggistica basati su MQTT.

Per dimostrare il servizio Device Shadow per AWS IoT, ad esempio, un modulo incluso (aws_shadow_lightbulb_on_off.c) e i relativi file di intestazione illustrano come il software in esecuzione sul dispositivo IoT creano documenti JSON, inizializzano le code e inviano al servizio Device Shadow messaggi sull'aggiornamento del dispositivo. Nonostante l'importanza dell'intera architettura software, questo modulo di esempio mostra come utilizzare una struttura di base dei dati e alcune righe di codice per cambiare il colore di una luce (colore verde riportato nel documento JSON mostrato nel Listato 1) impostando l'appropriato attributo del documento JSON della copia shadow su un nuovo colore (colore rosso desiderato nel Listato 1). Dopo aver inizializzato la copia shadow, il codice crea un task che alterna il colore desiderato tra due stati (rosso e verde), emettendo una richiesta di nuovo stato desiderato tramite la funzione prvGenerateDesiredJSON() per generare il nuovo documento JSON con lo stato di colore alternativo (Listato 3).

Copy
#define shadowDemoDESIRED_JSON      \
    "{"                             \
    "\"state\":{"                   \
    "\"desired\":{"                 \
    "\"%s\":\"%s\""                 \
    "}"                             \
    "},"                            \
    "\"clientToken\": \"token-%d\"" \
    "}"
 
 ...
 
static uint32_t prvGenerateDesiredJSON( ShadowQueueData_t * const pxShadowQueueData,
                                        const char * const pcTaskName,
                                        uint8_t ucBulbState )
{
    /* Map cBulbState to strings. */
    static const char * const pColors[ 2 ] = { "green", "red" };
 
    /* Generate JSON. */
    return ( uint32_t ) snprintf( ( char * ) pxShadowQueueData->pcUpdateBuffer, 
                                  shadowDemoBUFFER_LENGTH,
                                  shadowDemoDESIRED_JSON,
                                  pcTaskName,
                                  pColors[ ucBulbState ],
                                  ( int ) xTaskGetTickCount() );
}
 
 ...
 
   /* Keep changing the desired state of light bulb periodically. */
    for( ; ; )
    {
        configPRINTF( ( "%s changing desired state.\r\n", pxShadowTaskParam->cTaskName ) );
 
        /* Toggle the desired state and generate a new JSON document. */
        ucBulbState = !( ucBulbState );
        xShadowQueueData.ulDataLength = prvGenerateDesiredJSON( &xShadowQueueData,
                                                                pxShadowTaskParam->cTaskName,
                                                                ucBulbState );
 
        /* Add the new desired state to the update queue. */
        if( xQueueSendToBack( xUpdateQueue, &xShadowQueueData, shadowDemoSEND_QUEUE_WAIT_TICKS ) == pdTRUE )
        {
            /* If the new desired state was successfully added, wait for notification that the update completed. */
            configASSERT( ulTaskNotifyTake( pdTRUE, shadowDemoNOTIFY_WAIT_MS ) == 1 );
            configPRINTF( ( "%s done changing desired state.\r\n", pxShadowTaskParam->cTaskName ) );
        }
        else
        {
            configPRINTF( ( "Update queue full, deferring desired state change.\r\n" ) );
        }
 
        vTaskDelayUntil( &xLastWakeTime, shadowDemoSEND_UPDATE_MS );
    }

Listato 3: Questo frammento di codice di esempio contenuto nel repository del codice del kit RX65N Cloud di Renesas dimostra lo schema di progettazione base per usare un documento JSON definito in shadowDemoDESIRED_JSON istanziato dalla funzione prvGenerateDesiredJSON() per modificare lo stato desiderato di una copia shadow utilizzando una coda di aggiornamento. (Codice per gentile concessione di Renesas)

Conclusione

Grazie alle sue numerose offerte, un servizio cloud commerciale come AWS rappresenta una piattaforma interessante per gli sviluppatori che creano applicazioni IIoT su larga scala, in particolare per chi deve lavorare con altre applicazioni aziendali. Tuttavia, le sfide insite nella gestione dei problemi di progettazione dei dispositivi IoT e nell'integrazione nel cloud spesso comportano ritardi imprevisti nello sviluppo e nell'implementazione.

Il kit RX65N Cloud di Renesas, basato sul microcontroller Renesas RX65N, offre un dispositivo basato su sensori IIoT e un progetto di riferimento completi. Utilizzato assieme al pacchetto software associato, il kit Cloud di Renesas fornisce una piattaforma flessibile e di rapido sviluppo per implementare dispositivi IIoT basati su sensori da integrare con AWS.

DigiKey logo

Esonero della responsabilità: le opinioni, le convinzioni e i punti di vista espressi dai vari autori e/o dai partecipanti al forum su questo sito Web non riflettono necessariamente le opinioni, le convinzioni e i punti di vista di DigiKey o le sue politiche.

Informazioni su questo autore

Image of Stephen Evanczuk

Stephen Evanczuk

Stephen Evanczuk ha più di 20 anni di esperienza come autore sull'industria elettronica e ha scritto su una vasta gamma di argomenti tra cui hardware, software, sistemi e applicazioni, incluso l'IoT. Ha ricevuto un Ph.D. in neuroscienze sulle reti neuronali e ha lavorato nel settore aerospaziale su sistemi di sicurezza ampiamente distribuiti e sui metodi di accelerazione algoritmica. Attualmente, quando non scrive articoli su tecnologia e ingegneria, lavora su applicazioni di deep learning per i sistemi di riconoscimento e di raccomandazione.

Informazioni su questo editore

Editori nordamericani di DigiKey