Esercitazione: Usare Eclipse ThreadX per connettere un devkit MXCHIP AZ3166 a hub IoT
In questa esercitazione si usa Eclipse ThreadX per connettere un MXCHIP AZ3166 IoT DevKit (da ora in poi MXCHIP DevKit) ad Azure IoT.
Completare le attività seguenti:
- Installare un set di strumenti di sviluppo incorporati per la programmazione di MXChip DevKit in C
- Creare un'immagine e lampeggiarla nel DevKit MXCHIP
- Usare l'interfaccia della riga di comando di Azure per creare e gestire un hub IoT di Azure a cui si connette in modo sicuro MXCHIP DevKit
- Usare Azure IoT Explorer per registrare un dispositivo con l'hub IoT, visualizzare le proprietà del dispositivo, visualizzare i dati di telemetria del dispositivo e chiamare comandi diretti nel dispositivo
Prerequisiti
Un PC che esegue Windows 10 o Windows 11
Una sottoscrizione di Azure attiva. Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
Git per la clonazione del repository
Interfaccia della riga di comando di Azure. In questa esercitazione sono disponibili due opzioni per l'esecuzione dei comandi dell'interfaccia della riga di comando di Azure:
- Usare Azure Cloud Shell, una shell interattiva che esegue i comandi dell'interfaccia della riga di comando nel browser. Questa opzione è consigliata perché non è necessario installare nulla. Se si usa Cloud Shell per la prima volta, accedere al portale di Azure. Seguire la procedura descritta in Avvio rapido di Cloud Shell per Avviare Cloud Shell e selezionare l'ambiente Bash.
- Facoltativamente, eseguire l'interfaccia della riga di comando di Azure nel computer locale. Se l'interfaccia della riga di comando di Azure è già installata, eseguire
az upgrade
per aggiornare l'interfaccia della riga di comando e le estensioni alla versione corrente. Per installare l'interfaccia della riga di comando di Azure, vedere Installare l'interfaccia della riga di comando di Azure.
Hardware
- MXCHIP AZ3166 IoT DevKit (MXCHIP DevKit)
- Wi-Fi 2,4 GHz
- Usb 2.0 Cavo maschio da maschio a Micro USB
Preparare l'ambiente di sviluppo
Per configurare l'ambiente di sviluppo, clonare prima di tutto un repository GitHub che contiene tutti gli asset necessari per l'esercitazione. Installare quindi un set di strumenti di programmazione.
Clonare il repository
Clonare il repository seguente per scaricare tutto il codice del dispositivo di esempio, gli script di installazione e le versioni offline della documentazione. Se questo repository è stato clonato in precedenza in un'altra esercitazione, non è necessario eseguire di nuovo questa operazione.
Per clonare il repository, eseguire il comando seguente:
git clone --recursive https://github.com/eclipse-threadx/getting-started.git
Installa gli strumenti
Il repository clonato contiene uno script di installazione che installa e configura gli strumenti necessari. Se questi strumenti sono stati installati in un'altra esercitazione sul dispositivo incorporato, non è necessario eseguire di nuovo questa operazione.
Nota
Lo script di installazione installa gli strumenti seguenti:
- CMake: Compilazione
- ARM GCC: Compilazione
- Termite: monitorare l'output della porta seriale per le risorse dei dispositivi connessi
Per installare gli strumenti:
Passare al percorso seguente nel repository ed eseguire lo script di installazione denominato get-toolchain.bat:
getting-started\tools\get-toolchain.bat
Aprire una nuova finestra della console per riconoscere le modifiche di configurazione apportate dallo script di installazione. Usare questa console per completare le attività di programmazione rimanenti nell'esercitazione. È possibile usare CMD di Windows, PowerShell o Git Bash per Windows.
Eseguire il codice seguente per verificare che sia installato CMake versione 3.14 o successiva.
cmake --version
Creare i componenti cloud
Creare un hub IoT
È possibile usare l'interfaccia della riga di comando di Azure per creare un hub IoT che gestisce gli eventi e la messaggistica per il dispositivo.
Per creare un hub IoT:
Avviare l'app dell'interfaccia della riga di comando. Per eseguire i comandi dell'interfaccia della riga di comando nel resto di questa guida introduttiva, copiare la sintassi del comando, incollarla nell'app dell'interfaccia della riga di comando, modificare i valori delle variabili e premere INVIO.
- Se si usa Cloud Shell, fare clic con il pulsante destro del mouse sul collegamento per Cloud Shell e selezionare l'opzione da aprire in una nuova scheda.
- Se si usa l'interfaccia della riga di comando di Azure in locale, avviare l'app console dell'interfaccia della riga di comando e accedere all'interfaccia della riga di comando di Azure.
Eseguire az extension add per installare o aggiornare l'estensione azure-iot alla versione corrente.
az extension add --upgrade --name azure-iot
Eseguire il comando az group create per creare un gruppo di risorse. Il comando seguente crea un gruppo di risorse denominato MyResourceGroup nell'area centralus .
Nota
Facoltativamente, è possibile impostare un oggetto alternativo
location
. Per visualizzare le posizioni disponibili, eseguire az account list-locations.az group create --name MyResourceGroup --location centralus
Eseguire il comando az iot hub create per creare un hub IoT. La creazione di un hub IoT potrebbe richiedere alcuni minuti.
YourIotHubName. Sostituire questo segnaposto nel codice con il nome scelto per l'hub IoT. Un nome dell'hub IoT deve essere univoco a livello globale in Azure. Questo segnaposto viene usato nella parte restante di questa guida introduttiva per rappresentare il nome univoco dell'hub IoT.
Il
--sku F1
parametro crea l'hub IoT nel livello Gratuito. Gli hub di livello gratuito hanno un set di funzionalità limitato e vengono usati per le applicazioni di verifica. Per altre informazioni su hub IoT livelli, funzionalità e prezzi, vedere prezzi hub IoT di Azure.az iot hub create --resource-group MyResourceGroup --name {YourIoTHubName} --sku F1 --partition-count 2
Dopo aver creato l'hub IoT, visualizzare l'output JSON nella console e copiare il
hostName
valore da usare in un passaggio successivo. IlhostName
valore è simile all'esempio seguente:{Your IoT hub name}.azure-devices.net
Configurare IoT Explorer
Nella parte restante di questa guida introduttiva si usa IoT Explorer per registrare un dispositivo nell'hub IoT, visualizzare le proprietà e i dati di telemetria del dispositivo e inviare comandi al dispositivo. In questa sezione viene configurato IoT Explorer per connettersi all'hub IoT creato e per leggere i modelli plug and play dal repository del modello pubblico.
Per aggiungere una connessione all'hub IoT:
Installare Azure IoT Explorer. Questo strumento è un'utilità multipiattaforma per monitorare e gestire le risorse di Azure IoT.
Nell'app dell'interfaccia della riga di comando eseguire il comando az iot hub connection-string show per ottenere il stringa di connessione per l'hub IoT.
az iot hub connection-string show --hub-name {YourIoTHubName}
Copiare il stringa di connessione senza le virgolette circostanti.
In Azure IoT Explorer selezionare Hub IoT nel menu a sinistra.
Selezionare + Aggiungi connessione.
Incollare il stringa di connessione nella casella Stringa di connessione.
Seleziona Salva.
Se la connessione ha esito positivo, IoT Explorer passa alla visualizzazione Dispositivi .
Per aggiungere il repository del modello pubblico:
In IoT Explorer selezionare Home per tornare alla visualizzazione home.
Nel menu a sinistra selezionare Plug and Play IoT Impostazioni.
Verificare che sia presente una voce repository pubblico esistente con un endpoint di
https://devicemodels.azure.com
.Nota
Se non è presente una voce nel repository pubblico, selezionare +Aggiungi, selezionare Repository pubblico dal menu a discesa, specificare il valore dell'endpoint
https://devicemodels.azure.com
e quindi selezionare Salva.La voce completata per il repository pubblico è simile alla schermata seguente:
Registrazione di un dispositivo
In questa sezione viene creata una nuova istanza del dispositivo e registrata con l'hub IoT creato. Usare le informazioni di connessione per il dispositivo appena registrato per connettere in modo sicuro il dispositivo fisico in una sezione successiva.
Per registrare un dispositivo:
Nella home view in IoT Explorer selezionare Hub IoT.
Verrà visualizzata la connessione aggiunta in precedenza. Selezionare Visualizza dispositivi in questo hub sotto le proprietà di connessione.
Selezionare + Nuovo e immettere un ID dispositivo per il dispositivo,
mydevice
ad esempio . Lasciare invariate tutte le altre proprietà.Seleziona Crea.
Usare i pulsanti copia per copiare i campi ID dispositivo e Chiave primaria .
Prima di continuare con la sezione successiva, salvare ognuno dei valori seguenti recuperati dai passaggi precedenti in un percorso sicuro. Questi valori vengono usati nella sezione successiva per configurare il dispositivo.
hostName
deviceId
primaryKey
Preparare il dispositivo
Per connettere MXCHIP DevKit ad Azure, modificare un file di configurazione per le impostazioni Wi-Fi e Azure IoT, ricompilare l'immagine e lampeggiare l'immagine nel dispositivo.
Aggiungere la configurazione
Aprire il file seguente in un editor di testo:
getting-started\MXChip\AZ3166\app\azure_config.h
Impostare come commento la riga seguente nella parte superiore del file, come illustrato:
// #define ENABLE_DPS
Impostare le costanti Wi-Fi sui valori seguenti dell'ambiente locale.
Nome costante Valore WIFI_SSID
{SSID wi-fi} WIFI_PASSWORD
{Password Wi-Fi} WIFI_MODE
{Uno dei valori della modalità Wi-Fi enumerati nel file} Impostare le costanti relative alle informazioni sul dispositivo Azure IoT sui valori salvati dopo aver creato le risorse di Azure.
Nome costante Valore IOT_HUB_HOSTNAME
{Il valore del nome host} IOT_HUB_DEVICE_ID
{Valore ID dispositivo} IOT_DEVICE_SAS_KEY
{Il valore della chiave primaria} Salva e chiudi il file.
Compilare l'immagine
Nella console o in Esplora file eseguire lo script rebuild.bat nel percorso seguente per compilare l'immagine:
getting-started\MXChip\AZ3166\tools\rebuild.bat
Al termine della compilazione, verificare che il file binario sia stato creato nel percorso seguente:
getting-started\MXChip\AZ3166\build\app\mxchip_azure_iot.bin
Eseguire il flashing dell'immagine
In MXCHIP DevKit individuare il pulsante Reimposta e la porta Micro USB. Questi componenti vengono usati nei passaggi seguenti. Entrambi sono evidenziati nell'immagine seguente:
Collegare il cavo Micro USB alla porta Micro USB in MXCHIP DevKit e quindi connetterlo al computer.
In Esplora file trovare il file binario creato nella sezione precedente.
Copiare il file binario mxchip_azure_iot.bin.
In Esplora file trovare il dispositivo MXCHIP DevKit connesso al computer. Il dispositivo viene visualizzato come unità nel sistema con l'etichetta di unità AZ3166.
Incollare il file binario nella cartella radice del devkit MXCHIP. Il flashing viene avviato automaticamente e viene completato in pochi secondi.
Nota
Durante il processo di flashing, un LED verde attiva o disattiva MXCHIP DevKit.
Confermare i dettagli della connessione del dispositivo
È possibile usare l'app Termite per monitorare la comunicazione e verificare che il dispositivo sia configurato correttamente.
Avviare Termite.
Suggerimento
Se non è possibile connettere Termite al devkit, installare il driver ST-LINK e riprovare. Per altri passaggi, vedere Risoluzione dei problemi .
Seleziona Impostazioni.
Nella finestra di dialogo Impostazioni porta seriale controllare le impostazioni seguenti e aggiornare, se necessario:
- Velocità baud: 115.200
- Porta: la porta a cui è connesso il DevKit MXCHIP. Se sono presenti più opzioni di porta nell'elenco a discesa, è possibile trovare la porta corretta da usare. Aprire Windows Gestione dispositivi e visualizzare Porte per identificare la porta da usare.
Seleziona OK.
Premere il pulsante Ripristina sul dispositivo. Il pulsante è etichettato sul dispositivo e si trova vicino al connettore Micro USB.
Nell'app Termite controllare i valori del checkpoint seguenti per verificare che il dispositivo sia inizializzato e connesso ad Azure IoT.
Starting Azure thread Initializing WiFi MAC address: ****************** SUCCESS: WiFi initialized Connecting WiFi Connecting to SSID 'iot' Attempt 1... SUCCESS: WiFi connected Initializing DHCP IP address: 192.168.0.49 Mask: 255.255.255.0 Gateway: 192.168.0.1 SUCCESS: DHCP initialized Initializing DNS client DNS address: 192.168.0.1 SUCCESS: DNS client initialized Initializing SNTP time sync SNTP server 0.pool.ntp.org SNTP time update: Jan 4, 2023 22:57:32.658 UTC SUCCESS: SNTP initialized Initializing Azure IoT Hub client Hub hostname: ***.azure-devices.net Device id: mydevice Model id: dtmi:eclipsethreadx:devkit:gsgmxchip;2 SUCCESS: Connected to IoT Hub Receive properties: {"desired":{"$version":1},"reported":{"deviceInformation":{"__t":"c","manufacturer":"MXCHIP","model":"AZ3166","swVersion":"1.0.0","osName":"Eclipse ThreadX","processorArchitecture":"Arm Cortex M4","processorManufacturer":"STMicroelectronics","totalStorage":1024,"totalMemory":128},"ledState":false,"telemetryInterval":{"ac":200,"av":1,"value":10},"$version":4}} Sending property: $iothub/twin/PATCH/properties/reported/?$rid=3{"deviceInformation":{"__t":"c","manufacturer":"MXCHIP","model":"AZ3166","swVersion":"1.0.0","osName":"Eclipse ThreadX","processorArchitecture":"Arm Cortex M4","processorManufacturer":"STMicroelectronics","totalStorage":1024,"totalMemory":128}} Sending property: $iothub/twin/PATCH/properties/reported/?$rid=5{"ledState":false} Sending property: $iothub/twin/PATCH/properties/reported/?$rid=7{"telemetryInterval":{"ac":200,"av":1,"value":10}} Starting Main loop Telemetry message sent: {"humidity":31.01,"temperature":25.62,"pressure":927.3}. Telemetry message sent: {"magnetometerX":177,"magnetometerY":-36,"magnetometerZ":-346.5}. Telemetry message sent: {"accelerometerX":-22.5,"accelerometerY":0.54,"accelerometerZ":1049.01}. Telemetry message sent: {"gyroscopeX":0,"gyroscopeY":0,"gyroscopeZ":0}.
Tenere aperto Termite per monitorare l'output del dispositivo nei passaggi seguenti.
Visualizzare le proprietà del dispositivo
È possibile usare Azure IoT Explorer per visualizzare e gestire le proprietà dei dispositivi. In questa sezione e nelle sezioni seguenti si usano le funzionalità Plug and Play visualizzate in IoT Explorer per gestire e interagire con MXCHIP DevKit. Queste funzionalità si basano sul modello di dispositivo pubblicato per MXCHIP DevKit nel repository di modelli pubblici. IoT Explorer è stato configurato per cercare in questo repository i modelli di dispositivo in precedenza in questa esercitazione. È possibile eseguire molte azioni senza usare plug and play selezionando l'azione dal menu a sinistra del riquadro del dispositivo in IoT Explorer. Tuttavia, l'uso di plug and play offre spesso un'esperienza avanzata. IoT Explorer può leggere il modello di dispositivo specificato da un dispositivo plug and play e presentare informazioni specifiche del dispositivo.
Per accedere ai componenti Plug and Play IoT per il dispositivo in IoT Explorer:
Nella home view in IoT Explorer selezionare Hub IoT, quindi selezionare Visualizza dispositivi in questo hub.
Selezionare il dispositivo.
Selezionare Plug and Play IoT componenti.
Selezionare Componente predefinito. IoT Explorer visualizza i componenti Plug and Play IoT implementati nel dispositivo.
Nella scheda Interfaccia visualizzare il contenuto JSON nella descrizione del modello di dispositivo. Il codice JSON contiene i dettagli di configurazione per ognuno dei componenti Plug and Play IoT nel modello di dispositivo.
Ogni scheda in IoT Explorer corrisponde a uno dei componenti Plug and Play IoT nel modello di dispositivo.
Tab Type Name Descrizione Interfaccia Interfaccia MXCHIP Getting Started Guide
Modello di esempio per MXCHIP DevKit Proprietà (sola lettura) Proprietà ledState
Stato corrente del LED Proprietà (scrivibile) Proprietà telemetryInterval
Intervallo di invio dei dati di telemetria da parte del dispositivo Comandi Comando setLedState
Accendere o disattivare il LED
Per visualizzare le proprietà del dispositivo tramite Azure IoT Explorer:
Selezionare la scheda Proprietà (scrivibile). Visualizza l'intervallo di invio dei dati di telemetria.
Impostare su
telemetryInterval
5 e quindi selezionare Aggiorna valore desiderato. Il dispositivo usa ora questo intervallo per inviare i dati di telemetria.IoT Explorer risponde con una notifica. È anche possibile osservare l'aggiornamento in Termite.
Impostare di nuovo l'intervallo di telemetria su 10.
Per usare l'interfaccia della riga di comando di Azure per visualizzare le proprietà del dispositivo:
Eseguire il comando az iot hub device-twin show .
az iot hub device-twin show --device-id mydevice --hub-name {YourIoTHubName}
Esaminare le proprietà del dispositivo nell'output della console.
Visualizzare i dati di telemetria
Con Azure IoT Explorer è possibile visualizzare il flusso di dati di telemetria dal dispositivo al cloud. Facoltativamente, è possibile eseguire la stessa attività usando l'interfaccia della riga di comando di Azure.
Per visualizzare i dati di telemetria in Azure IoT Explorer:
Nel riquadro componenti di Plug and Play IoT (componente predefinito) per il dispositivo in IoT Explorer selezionare la scheda Telemetria. Verificare che l'opzione Usa hub eventi predefinito sia impostata su Sì.
Selezionare Inizio.
Visualizzare i dati di telemetria mentre il dispositivo invia messaggi al cloud.
Nota
È anche possibile monitorare i dati di telemetria dal dispositivo usando l'app Termite.
Selezionare la casella di controllo Mostra eventi modellati per visualizzare gli eventi nel formato dati specificato dal modello di dispositivo.
Selezionare Arresta per terminare la ricezione di eventi.
Per usare l'interfaccia della riga di comando di Azure per visualizzare i dati di telemetria dei dispositivi:
Eseguire il comando az iot hub monitor-events . Usare i nomi creati in precedenza in Azure IoT per il dispositivo e l'hub IoT.
az iot hub monitor-events --device-id mydevice --hub-name {YourIoTHubName}
Visualizzare l'output JSON nella console.
{ "event": { "origin": "mydevice", "module": "", "interface": "dtmi:eclipsethreadx:devkit:gsgmxchip;1", "component": "", "payload": "{\"humidity\":41.21,\"temperature\":31.37,\"pressure\":1005.18}" } }
Selezionare CTRL+C per terminare il monitoraggio.
Chiamare un metodo diretto nel dispositivo
È anche possibile usare Azure IoT Explorer per chiamare un metodo diretto implementato nel dispositivo. I metodi diretti hanno un nome e possono facoltativamente avere un payload JSON, una connessione configurabile e un timeout del metodo. In questa sezione viene chiamato un metodo che attiva o disattiva un LED. Facoltativamente, è possibile eseguire la stessa attività usando l'interfaccia della riga di comando di Azure.
Per chiamare un metodo in Azure IoT Explorer:
Nel riquadro componenti di Plug and Play IoT (componente predefinito) per il dispositivo in IoT Explorer selezionare la scheda Comandi.
Per il comando setLedState impostare lo stato su true.
Selezionare Invia comando. Verrà visualizzata una notifica in IoT Explorer e la luce LED utente gialla sul dispositivo dovrebbe essere attivata.
Impostare lo stato su false e quindi selezionare Invia comando. Il LED utente giallo deve essere spento.
Facoltativamente, è possibile visualizzare l'output in Termite per monitorare lo stato dei metodi.
Per usare l'interfaccia della riga di comando di Azure per chiamare un metodo:
Eseguire il comando az iot hub invoke-device-method e specificare il nome e il payload del metodo. Per questo metodo, impostare
method-payload
pertrue
attivare il LED e impostarlo sufalse
disattivarlo.az iot hub invoke-device-method --device-id mydevice --method-name setLedState --method-payload true --hub-name {YourIoTHubName}
La console dell'interfaccia della riga di comando mostra lo stato della chiamata al metodo nel dispositivo, dove
204
indica l'esito positivo.{ "payload": {}, "status": 200 }
Controllare il dispositivo per confermare lo stato del LED.
Visualizzare il terminale Termite per confermare i messaggi di output:
Receive direct method: setLedState Payload: true LED is turned ON Device twin property sent: {"ledState":true}
Risolvere i problemi ed eseguire il debug
Se si verificano problemi durante la compilazione del codice del dispositivo, il flashing del dispositivo o la connessione, vedere Risoluzione dei problemi.
Per il debug dell'applicazione, vedere Debug con Visual Studio Code.
Pulire le risorse
Se le risorse di Azure create in questa guida introduttiva non sono più necessarie, è possibile usare l'interfaccia della riga di comando di Azure per eliminare il gruppo di risorse e tutte le relative risorse.
Importante
L'eliminazione di un gruppo di risorse è irreversibile. Il gruppo di risorse e tutte le risorse in esso contenute vengono eliminati in modo permanente. Assicurarsi di non eliminare accidentalmente il gruppo di risorse sbagliato o le risorse errate.
Per eliminare un gruppo di risorse per nome:
Eseguire il comando az group delete. Questo comando rimuove il gruppo di risorse, il hub IoT e la registrazione del dispositivo creata.
az group delete --name MyResourceGroup
Eseguire il comando az group list per verificare che il gruppo di risorse sia stato eliminato.
az group list
Passaggi successivi
In questa esercitazione è stata creata un'immagine personalizzata che contiene il codice di esempio Eclipse ThreadX e quindi è stata visualizzata l'immagine nel dispositivo MXCHIP DevKit. È stata usata anche l'interfaccia della riga di comando di Azure e/o IoT Explorer per creare risorse di Azure, connettere MXCHIP DevKit in modo sicuro ad Azure, visualizzare i dati di telemetria e inviare messaggi.
Come passaggio successivo, vedere l'articolo seguente per altre informazioni sulle opzioni di sviluppo incorporate.
Eclipse ThreadX fornisce agli OEM componenti per proteggere la comunicazione e creare codice e isolamento dei dati usando meccanismi di protezione hardware MCU/MPU sottostanti. Tuttavia, ogni OEM è in ultima analisi responsabile di garantire che il dispositivo soddisfi i requisiti di sicurezza in continua evoluzione.