Självstudie: Ansluta en IoT Plug and Play-enhet för flera komponenter som körs i Linux eller Windows till IoT Hub
Artikel
Den här självstudien visar hur du skapar ett exempelprogram för IoT Plug and Play-enheter med komponenter, ansluter det till din IoT-hubb och använder verktyget Azure IoT Explorer för att visa den information som skickas till hubben. Exempelprogrammet är skrivet i C och ingår i Azure IoT-enhets-SDK för C. En lösningsbyggare kan använda Verktyget Azure IoT Explorer för att förstå funktionerna i en IoT Plug and Play-enhet utan att behöva visa någon enhetskod.
I den här kursen får du:
Ladda ned exempelkoden.
Skapa exempelkoden.
Kör exempelprogrammet för enheten och verifiera att det ansluter till din IoT-hubb.
Granska källkoden.
Förutsättningar
Innan du fortsätter kontrollerar du att du har konfigurerat din miljö, inklusive din IoT-hubb.
Du kan slutföra den här självstudien i Linux eller Windows. Shell-kommandona i den här självstudien följer Linux-konventionen för sökvägsavgränsare ,/ om du följer med i Windows måste du växla dessa avgränsare mot "\".
Förutsättningarna skiljer sig åt beroende på operativsystem:
Linux
Den här självstudien förutsätter att du använder Ubuntu Linux. Stegen i den här självstudien har testats med Ubuntu 18.04.
Slutför den här självstudien om Linux genom att installera följande programvara i din lokala Linux-miljö:
Installera GCC, Git, cmake och alla nödvändiga beroenden apt-get med kommandot :
git clone https://github.com/Azure/azure-iot-sdk-c.git
cd azure-iot-sdk-c
git submodule update --init
Förvänta dig att den här åtgärden tar flera minuter att slutföra.
Skapa och kör koden
Du kan skapa och köra koden med hjälp av Visual Studio eller cmake på kommandoraden.
Använda Visual Studio
Öppna rotmappen för den klonade lagringsplatsen. Efter ett par sekunder skapar CMake-stödet i Visual Studio allt du behöver för att köra och felsöka projektet.
När Visual Studio är klart går du till Solution Explorer och går till exempel iothub_client/samples/pnp/pnp_temperature_controller/.
Högerklicka på filen pnp_temperature_controller.c och välj Lägg till felsökningskonfiguration. Välj Standard.
Visual Studio öppnar filen launch.vs.json . Redigera den här filen enligt följande kodfragment för att ange de miljövariabler som krävs. Du antecknade primärnyckeln för omfångs-ID och registrering när du slutförde konfigurationen av din miljö för snabbstarter och självstudier för IoT Plug and Play:
Högerklicka på filen pnp_temperature_controller.c och välj Ange som startobjekt.
Om du vill spåra kodkörningen i Visual Studio lägger du till main en brytpunkt i funktionen i filen pnp_temperature_controller.c .
Nu kan du köra och felsöka exemplet från felsökningsmenyn.
Enheten är nu redo att ta emot kommandon och egenskapsuppdateringar och har börjat skicka telemetridata till hubben. Se till att exemplet körs när du slutför nästa steg.
Använd cmake på kommandoraden
Så här skapar du exemplet:
Skapa en cmake-undermapp i rotmappen för den klonade enhets-SDK:n och navigera till den mappen:
cmd/sh
cd azure-iot-sdk-c
mkdir cmake
cd cmake
Kör följande kommandon för att generera och skapa projektfilerna för SDK och exempel:
cmd/sh
cmake ..
cmake --build .
I Konfigurera din miljö skapade du fyra miljövariabler för att konfigurera exemplet för att använda Device Provisioning Service (DPS) för att ansluta till din IoT-hubb:
IOTHUB_DEVICE_SECURITY_TYPE med värdetDPS
IOTHUB_DEVICE_DPS_ID_SCOPE med DPS-ID-omfånget.
IOTHUB_DEVICE_DPS_DEVICE_ID med värdet my-pnp-device.
IOTHUB_DEVICE_DPS_DEVICE_KEY med den primära registreringsnyckeln.
IOTHUB_DEVICE_DPS_ENDPOINT med värdet global.azure-devices-provisioning.net.
Mer information om exempelkonfigurationen finns i exempelläsningen.
Så här kör du exemplet:
Från mappen cmake navigerar du till mappen som innehåller den körbara filen och kör den:
REM Windowscd iothub_client\samples\pnp\pnp_temperature_controller\Debug
pnp_temperature_controller.exe
Enheten är nu redo att ta emot kommandon och egenskapsuppdateringar och har börjat skicka telemetridata till hubben. Se till att exemplet körs när du slutför nästa steg.
Använd Azure IoT Explorer för att verifiera koden
När enhetsklientexemplet har startat använder du Azure IoT Explorer-verktyget för att kontrollera att det fungerar.
Öppna Azure IoT Explorer.
Om du inte redan har lagt till en anslutning till din IoT-hubb på sidan IoT-hubbar väljer du + Lägg till anslutning. Ange anslutningssträng för den IoT-hubb som du skapade tidigare och välj Spara.
På sidan Inställningar för IoT Plug and Play väljer du + Lägg till > lokal mapp och väljer mappen lokala modeller där du sparade dina modellfiler.
På sidan IoT-hubbar klickar du på namnet på den hubb som du vill arbeta med. Du ser en lista över enheter som är registrerade på IoT-hubben.
Klicka på Enhets-ID för den enhet som du skapade tidigare.
Menyn till vänster visar de olika typerna av information som är tillgängliga för enheten.
Välj IoT Plug and Play-komponenter för att visa modellinformationen för din enhet.
Du kan visa de olika komponenterna på enheten. Standardkomponenten och eventuella extra komponenter. Välj en komponent att arbeta med.
Välj sidan Telemetri och välj sedan Start för att visa telemetridata som enheten skickar för den här komponenten.
Välj sidan Egenskaper (skrivskyddad) för att visa de skrivskyddade egenskaper som rapporterats för den här komponenten.
Välj sidan Egenskaper (skrivbar) för att visa de skrivbara egenskaper som du kan uppdatera för den här komponenten.
Välj en egenskap efter dess namn, ange ett nytt värde för den och välj Uppdatera önskat värde.
Om du vill se det nya värdet väljer du knappen Uppdatera .
Välj sidan Kommandon för att visa alla kommandon för den här komponenten.
Välj det kommando som du vill testa för att ange parametern om det finns någon. Välj Skicka kommando för att anropa kommandot på enheten. Du kan se att enheten svarar på kommandot i kommandotolken där exempelkoden körs.
I det här exemplet använder koden några hjälpfunktioner från mappen /common :
pnp_device_client_ll innehåller connect-metoden för IoT Plug and Play med den model-id inkluderade som parameter: PnP_CreateDeviceClientLLHandle.
pnp_protocol: innehåller hjälpfunktionerna IoT Plug and Play:
PnP_CreateReportedProperty
PnP_CreateReportedPropertyWithStatus
PnP_ParseCommandName
PnP_CreateTelemetryMessageHandle
PnP_ProcessTwinData
PnP_CopyPayloadToString
PnP_CreateDeviceClientLLHandle_ViaDps
Dessa hjälpfunktioner är tillräckligt generiska för att användas i ditt eget projekt. Det här exemplet använder dem i de tre filer som motsvarar varje komponent i modellen:
pnp_deviceinfo_component
pnp_temperature_controller
pnp_thermostat_component
I filen pnp_deviceinfo_componentSendReportedPropertyForDeviceInformation använder funktionen till exempel två av hjälpfunktionerna:
C
if ((jsonToSend = PnP_CreateReportedProperty(componentName, propertyName, propertyValue)) == NULL)
{
LogError("Unable to build reported property response for propertyName=%s, propertyValue=%s", propertyName, propertyValue);
}
else
{
constchar* jsonToSendStr = STRING_c_str(jsonToSend);
size_t jsonToSendStrLen = strlen(jsonToSendStr);
if ((iothubClientResult = IoTHubDeviceClient_LL_SendReportedState(deviceClientLL, (constunsignedchar*)jsonToSendStr, jsonToSendStrLen, NULL, NULL)) != IOTHUB_CLIENT_OK)
{
LogError("Unable to send reported state for property=%s, error=%d", propertyName, iothubClientResult);
}
else
{
LogInfo("Sending device information property to IoTHub. propertyName=%s, propertyValue=%s", propertyName, propertyValue);
}
}
Varje komponent i exemplet följer det här mönstret.
Kodflöde
Funktionen main initierar anslutningen och skickar modell-ID:t:
Koden använder PnP_CreateDeviceClientLLHandle för att ansluta till IoT-hubben, ange modelId som ett alternativ och konfigurera enhetsmetoden och enhetstvillingens motringningshanterare för direktmetoder och uppdateringar av enhetstvillingar:
&g_pnpDeviceConfiguration innehåller också anslutningsinformationen. Miljövariabeln IOTHUB_DEVICE_SECURITY_TYPE avgör om exemplet använder en anslutningssträng eller enhetsetableringstjänsten för att ansluta till IoT-hubben.
När enheten skickar ett modell-ID blir det en IoT Plug and Play-enhet.
Med motringningshanterare på plats reagerar enheten på tvillinguppdateringar och direkta metodanrop:
För återanrop till enhetstvillingen PnP_TempControlComponent_DeviceTwinCallback anropas PnP_ProcessTwinData funktionen för att bearbeta data.
PnP_ProcessTwinDataanvänder besöksmönstret för att parsa JSON och sedan besöka varje egenskap och anropa PnP_TempControlComponent_ApplicationPropertyCallback varje element.
För återanropet PnP_TempControlComponent_DeviceMethodCallback av kommandon använder funktionen hjälpfunktionen för att parsa kommando- och komponentnamnen:
Funktionen main anger en loop för att uppdatera händelse- och telemetridata för varje komponent:
C
while (true)
{
PnP_TempControlComponent_SendWorkingSet(deviceClient);
PnP_ThermostatComponent_SendTelemetry(g_thermostatHandle1, deviceClient);
PnP_ThermostatComponent_SendTelemetry(g_thermostatHandle2, deviceClient);
}
Funktionen PnP_ThermostatComponent_SendTelemetry visar hur du använder structen PNP_THERMOSTAT_COMPONENT . Exemplet använder den här structen för att lagra information om de två termostaterna i temperaturstyrenheten. Koden använder PnP_CreateTelemetryMessageHandle funktionen för att förbereda meddelandet och skicka det:
Funktionen main förstör slutligen de olika komponenterna och stänger anslutningen till hubben.
Den här självstudien visar hur du skapar ett exempelprogram för IoT Plug and Play-enheter med komponenter, ansluter det till din IoT-hubb och använder verktyget Azure IoT Explorer för att visa den information som skickas till hubben. Exempelprogrammet är skrivet i C# och ingår i Azure IoT-enhetens SDK för C#. En lösningsbyggare kan använda Verktyget Azure IoT Explorer för att förstå funktionerna i en IoT Plug and Play-enhet utan att behöva visa någon enhetskod.
I den här kursen får du:
Ladda ned exempelkoden.
Skapa exempelkoden.
Kör exempelprogrammet för enheten och verifiera att det ansluter till din IoT-hubb.
Granska källkoden.
Förutsättningar
Innan du fortsätter kontrollerar du att du har konfigurerat din miljö, inklusive din IoT-hubb.
Du kan köra den här självstudien i Linux eller Windows. Shell-kommandona i den här självstudien följer Linux-konventionen för sökvägsavgränsare ,/ om du följer med i Windows måste du växla dessa avgränsare mot "\".
Klona exemplen från Azure IoT-exempel för C# GitHub-lagringsplatsen. Öppna en kommandotolk i valfri mapp. Kör följande kommando för att klona Microsoft Azure IoT SDK för .NET GitHub-lagringsplatsen:
Nu kan du skapa exemplet och köra det. Kör följande kommandon för att skapa exemplet:
cmd/sh
cd azure-iot-sdk-csharp/iothub/device/samples/solutions/PnpDeviceSamples/TemperatureController
dotnet build
Kör enhetsexemplet
Kör följande kommando för att köra exemplet:
cmd/sh
dotnet run
Enheten är nu redo att ta emot kommandon och egenskapsuppdateringar och har börjat skicka telemetridata till hubben. Se till att exemplet körs när du slutför nästa steg.
Använda Azure IoT Explorer för att verifiera koden
När enhetsklientexemplet har startat använder du Azure IoT Explorer-verktyget för att kontrollera att det fungerar.
Öppna Azure IoT Explorer.
Om du inte redan har lagt till en anslutning till din IoT-hubb på sidan IoT-hubbar väljer du + Lägg till anslutning. Ange anslutningssträng för den IoT-hubb som du skapade tidigare och välj Spara.
På sidan Inställningar för IoT Plug and Play väljer du + Lägg till > lokal mapp och väljer mappen lokala modeller där du sparade dina modellfiler.
På sidan IoT-hubbar klickar du på namnet på den hubb som du vill arbeta med. Du ser en lista över enheter som är registrerade på IoT-hubben.
Klicka på Enhets-ID för den enhet som du skapade tidigare.
Menyn till vänster visar de olika typerna av information som är tillgängliga för enheten.
Välj IoT Plug and Play-komponenter för att visa modellinformationen för din enhet.
Du kan visa de olika komponenterna på enheten. Standardkomponenten och eventuella extra komponenter. Välj en komponent att arbeta med.
Välj sidan Telemetri och välj sedan Start för att visa telemetridata som enheten skickar för den här komponenten.
Välj sidan Egenskaper (skrivskyddad) för att visa de skrivskyddade egenskaper som rapporterats för den här komponenten.
Välj sidan Egenskaper (skrivbar) för att visa de skrivbara egenskaper som du kan uppdatera för den här komponenten.
Välj en egenskap efter dess namn, ange ett nytt värde för den och välj Uppdatera önskat värde.
Om du vill se det nya värdet väljer du knappen Uppdatera .
Välj sidan Kommandon för att visa alla kommandon för den här komponenten.
Välj det kommando som du vill testa för att ange parametern om det finns någon. Välj Skicka kommando för att anropa kommandot på enheten. Du kan se att enheten svarar på kommandot i kommandotolken där exempelkoden körs.
Enhetskoden ansluter till din IoT-hubb med standardmetoden CreateFromConnectionString . Enheten skickar modell-ID:t för den DTDL-modell som den implementerar i anslutningsbegäran. En enhet som skickar ett modell-ID är en IoT Plug and Play-enhet:
C#
privatestatic DeviceClient InitializeDeviceClient(string hostname, IAuthenticationMethod authenticationMethod)
{
var options = new ClientOptions
{
ModelId = ModelId,
};
var deviceClient = DeviceClient.Create(hostname, authenticationMethod, TransportType.Mqtt, options);
deviceClient.SetConnectionStatusChangesHandler((status, reason) =>
{
s_logger.LogDebug($"Connection status change registered - status={status}, reason={reason}.");
});
return deviceClient;
}
Modell-ID:t lagras i koden enligt följande kodfragment:
När enheten har anslutit till din IoT-hubb registrerar koden kommandohanterarna. Kommandot reboot definieras i standardkomponenten. Kommandot getMaxMinReport definieras i var och en av de två termostatkomponenterna:
Metoden SendTemperatureTelemetryAsync använder PnpHelper klassen för att skapa meddelanden för varje komponent:
C#
using Message msg = PnpHelper.CreateIothubMessageUtf8(telemetryName, JsonConvert.SerializeObject(currentTemperature), componentName);
Klassen PnpHelper innehåller andra exempelmetoder som du kan använda med en modell med flera komponenter.
Använd verktyget Azure IoT Explorer för att visa telemetrin och egenskaperna från de två termostatkomponenterna:
Du kan också använda Azure IoT Explorer-verktyget för att anropa kommandon i någon av de två termostatkomponenterna eller i standardkomponenten.
Den här självstudien visar hur du skapar ett exempelprogram för IoT Plug and Play-enheter med komponenter, ansluter det till din IoT-hubb och använder verktyget Azure IoT Explorer för att visa den information som skickas till hubben. Exempelprogrammet är skrivet i Java och ingår i Azure IoT-enhetens SDK för Java. En lösningsbyggare kan använda Verktyget Azure IoT Explorer för att förstå funktionerna i en IoT Plug and Play-enhet utan att behöva visa någon enhetskod.
I den här kursen får du:
Ladda ned exempelkoden.
Skapa exempelkoden.
Kör exempelprogrammet för enheten och verifiera att det ansluter till din IoT-hubb.
Granska källkoden.
Förutsättningar
Innan du fortsätter kontrollerar du att du har konfigurerat din miljö, inklusive din IoT-hubb.
Du kan köra den här självstudien i Linux eller Windows. Shell-kommandona i den här självstudien följer Linux-konventionen för sökvägsavgränsare ,/ om du följer med i Windows måste du växla dessa avgränsare mot "\".
Slutför den här självstudien genom att installera följande programvara i din lokala utvecklingsmiljö:
Förvänta dig att den här åtgärden tar flera minuter att slutföra.
Skapa koden
Gå till rotmappen för temperaturstyrenhetsexemplet i den klonade Java SDK-lagringsplatsen och skapa den:
Windows Command Prompt
cd azure-iot-sdk-java/device/iot-device-samples/pnp-device-sample/temperature-controller-device-sample
mvn clean package
Kör enhetsexemplet
I Konfigurera din miljö skapade du fyra miljövariabler för att konfigurera exemplet för att använda Device Provisioning Service (DPS) för att ansluta till din IoT-hubb:
IOTHUB_DEVICE_SECURITY_TYPE med värdetDPS
IOTHUB_DEVICE_DPS_ID_SCOPE med DPS-ID-omfånget.
IOTHUB_DEVICE_DPS_DEVICE_ID med värdet my-pnp-device.
IOTHUB_DEVICE_DPS_DEVICE_KEY med den primära registreringsnyckeln.
IOTHUB_DEVICE_DPS_ENDPOINT med värdet global.azure-devices-provisioning.net.
Om du vill köra exempelprogrammet går du till mappen /device/iot-device-samples/pnp-device-sample/temperature-controller-device-sample och kör följande kommando:
Enheten är nu redo att ta emot kommandon och egenskapsuppdateringar och har börjat skicka telemetridata till hubben. Se till att exemplet körs när du slutför nästa steg.
Använda Azure IoT Explorer för att verifiera koden
När enhetsklientexemplet har startat använder du Azure IoT Explorer-verktyget för att kontrollera att det fungerar.
Öppna Azure IoT Explorer.
Om du inte redan har lagt till en anslutning till din IoT-hubb på sidan IoT-hubbar väljer du + Lägg till anslutning. Ange anslutningssträng för den IoT-hubb som du skapade tidigare och välj Spara.
På sidan Inställningar för IoT Plug and Play väljer du + Lägg till > lokal mapp och väljer mappen lokala modeller där du sparade dina modellfiler.
På sidan IoT-hubbar klickar du på namnet på den hubb som du vill arbeta med. Du ser en lista över enheter som är registrerade på IoT-hubben.
Klicka på Enhets-ID för den enhet som du skapade tidigare.
Menyn till vänster visar de olika typerna av information som är tillgängliga för enheten.
Välj IoT Plug and Play-komponenter för att visa modellinformationen för din enhet.
Du kan visa de olika komponenterna på enheten. Standardkomponenten och eventuella extra komponenter. Välj en komponent att arbeta med.
Välj sidan Telemetri och välj sedan Start för att visa telemetridata som enheten skickar för den här komponenten.
Välj sidan Egenskaper (skrivskyddad) för att visa de skrivskyddade egenskaper som rapporterats för den här komponenten.
Välj sidan Egenskaper (skrivbar) för att visa de skrivbara egenskaper som du kan uppdatera för den här komponenten.
Välj en egenskap efter dess namn, ange ett nytt värde för den och välj Uppdatera önskat värde.
Om du vill se det nya värdet väljer du knappen Uppdatera .
Välj sidan Kommandon för att visa alla kommandon för den här komponenten.
Välj det kommando som du vill testa för att ange parametern om det finns någon. Välj Skicka kommando för att anropa kommandot på enheten. Du kan se att enheten svarar på kommandot i kommandotolken där exempelkoden körs.
Enhetskoden använder standardklassen DeviceClient för att ansluta till din IoT-hubb. Enheten skickar modell-ID:t för den DTDL-modell som den implementerar i anslutningsbegäran. En enhet som skickar ett modell-ID är en IoT Plug and Play-enhet:
Java
privatestaticvoidinitializeDeviceClient()throws URISyntaxException, IOException {
ClientOptions options = new ClientOptions();
options.setModelId(MODEL_ID);
deviceClient = new DeviceClient(deviceConnectionString, protocol, options);
deviceClient.registerConnectionStatusChangeCallback((status, statusChangeReason, throwable, callbackContext) -> {
log.debug("Connection status change registered: status={}, reason={}", status, statusChangeReason);
if (throwable != null) {
log.debug("The connection status change was caused by the following Throwable: {}", throwable.getMessage());
throwable.printStackTrace();
}
}, deviceClient);
deviceClient.open();
}
Modell-ID:t lagras i koden enligt följande kodfragment:
Klassen PnpHelper innehåller andra exempelmetoder som du kan använda med en modell med flera komponenter.
Använd verktyget Azure IoT Explorer för att visa telemetrin och egenskaperna från de två termostatkomponenterna:
Du kan också använda Azure IoT Explorer-verktyget för att anropa kommandon i någon av de två termostatkomponenterna eller i standardkomponenten.
Den här självstudien visar hur du skapar ett exempelprogram för IoT Plug and Play-enheter med komponenter, ansluter det till din IoT-hubb och använder verktyget Azure IoT Explorer för att visa den information som skickas till hubben. Exempelprogrammet är skrivet för Node.js och ingår i Azure IoT Hub Device SDK för Node.js. En lösningsbyggare kan använda Verktyget Azure IoT Explorer för att förstå funktionerna i en IoT Plug and Play-enhet utan att behöva visa någon enhetskod.
I den här kursen får du:
Ladda ned exempelkoden.
Kör exempelprogrammet för enheten och verifiera att det ansluter till din IoT-hubb.
Granska källkoden.
Förutsättningar
Innan du fortsätter kontrollerar du att du har konfigurerat din miljö, inklusive din IoT-hubb.
För att slutföra den här självstudien behöver du Node.js på utvecklingsdatorn. Du kan ladda ned den senaste rekommenderade versionen för flera plattformar från nodejs.org.
Du kan kontrollera den aktuella versionen av Node.js på utvecklingsdatorn med följande kommando:
Öppna en kommandotolk i valfri katalog. Kör följande kommando för att klona Microsoft Azure IoT SDK för Node.js GitHub-lagringsplats till den här platsen:
Du använder enhets-SDK:n för att skapa den inkluderade exempelkoden. Programmet du skapar simulerar en Plug and Play-enhet med flera komponenter som ansluter till en IoT-hubb. Programmet skickar telemetri och egenskaper och tar emot kommandon.
I ett lokalt terminalfönster går du till mappen för den klonade lagringsplatsen och navigerar till mappen /azure-iot-sdk-node/device/samples/javascript . Kör sedan följande kommando för att installera de bibliotek som krävs:
cmd/sh
npm install
Det här kommandot installerar relevanta npm-filer som krävs för att köra exemplen i mappen.
Granska koden
Gå till mappen azure-iot-sdk-node/device/samples/javascript .
Mappen azure-iot-sdk-node/device/samples/javascript innehåller exempelkoden för IoT Plug and Play-temperaturstyrenheten.
Öppna filen pnp_temperature_controller.js i valfri kodredigerare. Exempelkoden visar hur du:
modelId Definiera DTMI för den enhet som du implementerar. Denna DTMI är användardefinierad och måste matcha DTMI för temperaturstyrenhetens DTDL-modell.
Implementera komponenterna som definierats i temperaturstyrenhetens DTDL-modell. Komponenterna i en verklig temperaturkontrollant bör implementera dessa två gränssnitt. Dessa två gränssnitt har redan publicerats på en central lagringsplats. I det här exemplet är de två gränssnitten:
Termostat
Enhetsinformation som utvecklats av Azure
Definiera komponentnamn. Det här exemplet har två termostater och en komponent för enhetsinformation.
Definiera kommandonamn för de kommandon som enheten svarar på.
Definiera konstanten serialNumber .
serialNumber Är fast alla givna enheter.
Definiera kommandohanterarna.
Definiera funktionerna för att skicka kommandosvar.
Definiera hjälpfunktioner för att logga kommandobegäranden.
Definiera en hjälpfunktion för att skapa egenskaperna.
Definiera en lyssnare för egenskapsuppdateringar.
Definiera en funktion för att skicka telemetri från den här enheten. Både termostater och standardkomponenten skickar telemetri. Den här funktionen tar emot komponentnamnet som parameter.
Definiera en main funktion som:
Använder enhetens SDK för att skapa en enhetsklient och ansluta till din IoT-hubb. Enheten tillhandahåller modelId så att IoT Hub kan identifiera enheten som en IoT Plug and Play-enhet.
Börjar lyssna efter kommandobegäranden med hjälp av onDeviceMethod funktionen. Funktionen konfigurerar en lyssnare för kommandobegäranden från tjänsten:
Enhetens DTDL definierar kommandona reboot och getMaxMinReport .
Funktionen commandHandler definierar hur enheten svarar på ett kommando.
Börjar skicka telemetri med hjälp setInterval av och sendTelemetry.
helperCreateReportedPropertiesPatch Använder funktionen för att skapa egenskaperna och updateComponentReportedProperties för att uppdatera egenskaperna.
Används desiredPropertyPatchListener för att lyssna efter egenskapsuppdateringar.
Inaktiverar alla lyssnare och uppgifter och avslutar loopen när du trycker på Q eller q.
I Konfigurera din miljö skapade du fyra miljövariabler för att konfigurera exemplet för att använda Device Provisioning Service (DPS) för att ansluta till din IoT-hubb:
IOTHUB_DEVICE_SECURITY_TYPE med värdetDPS
IOTHUB_DEVICE_DPS_ID_SCOPE med DPS-ID-omfånget.
IOTHUB_DEVICE_DPS_DEVICE_ID med värdet my-pnp-device.
IOTHUB_DEVICE_DPS_DEVICE_KEY med den primära registreringsnyckeln.
IOTHUB_DEVICE_DPS_ENDPOINT med värdet global.azure-devices-provisioning.net.
Mer information om exempelkonfigurationen finns i exempelläsningen.
Nu när du har sett koden använder du följande kommando för att köra exemplet:
cmd/sh
node pnp_temperature_controller.js
Du ser följande utdata som anger att enheten har börjat skicka telemetridata till hubben och nu är redo att ta emot kommandon och egenskapsuppdateringar.
Se till att exemplet körs när du slutför nästa steg.
Använda Azure IoT Explorer för att verifiera koden
När enhetsklientexemplet har startat använder du Azure IoT Explorer-verktyget för att kontrollera att det fungerar.
Öppna Azure IoT Explorer.
Om du inte redan har lagt till en anslutning till din IoT-hubb på sidan IoT-hubbar väljer du + Lägg till anslutning. Ange anslutningssträng för den IoT-hubb som du skapade tidigare och välj Spara.
På sidan Inställningar för IoT Plug and Play väljer du + Lägg till > lokal mapp och väljer mappen lokala modeller där du sparade dina modellfiler.
På sidan IoT-hubbar klickar du på namnet på den hubb som du vill arbeta med. Du ser en lista över enheter som är registrerade på IoT-hubben.
Klicka på Enhets-ID för den enhet som du skapade tidigare.
Menyn till vänster visar de olika typerna av information som är tillgängliga för enheten.
Välj IoT Plug and Play-komponenter för att visa modellinformationen för din enhet.
Du kan visa de olika komponenterna på enheten. Standardkomponenten och eventuella extra komponenter. Välj en komponent att arbeta med.
Välj sidan Telemetri och välj sedan Start för att visa telemetridata som enheten skickar för den här komponenten.
Välj sidan Egenskaper (skrivskyddad) för att visa de skrivskyddade egenskaper som rapporterats för den här komponenten.
Välj sidan Egenskaper (skrivbar) för att visa de skrivbara egenskaper som du kan uppdatera för den här komponenten.
Välj en egenskap efter dess namn, ange ett nytt värde för den och välj Uppdatera önskat värde.
Om du vill se det nya värdet väljer du knappen Uppdatera .
Välj sidan Kommandon för att visa alla kommandon för den här komponenten.
Välj det kommando som du vill testa för att ange parametern om det finns någon. Välj Skicka kommando för att anropa kommandot på enheten. Du kan se att enheten svarar på kommandot i kommandotolken där exempelkoden körs.
Den här självstudien visar hur du skapar ett exempelprogram för IoT Plug and Play-enheter med komponenter, ansluter det till din IoT-hubb och använder verktyget Azure IoT Explorer för att visa den information som skickas till hubben. Exempelprogrammet är skrivet i Python och ingår i Azure IoT-enhetens SDK för Python. En lösningsbyggare kan använda Verktyget Azure IoT Explorer för att förstå funktionerna i en IoT Plug and Play-enhet utan att behöva visa någon enhetskod.
I den här kursen får du:
Ladda ned exempelkoden.
Kör exempelprogrammet för enheten och verifiera att det ansluter till din IoT-hubb.
Granska källkoden.
Förutsättningar
Innan du fortsätter kontrollerar du att du har konfigurerat din miljö, inklusive din IoT-hubb.
Du kan köra den här självstudien i Linux eller Windows. Shell-kommandona i den här självstudien följer Linux-konventionen för sökvägsavgränsare ,/ om du följer med i Windows måste du växla dessa avgränsare mot "\".
För att slutföra den här självstudien behöver du Python installerat på utvecklingsdatorn.
Kontrollera Azure IoT Python SDK för aktuella versionskrav för Python. Du kan kontrollera Python-versionen med följande kommando:
cmd/sh
python --version
Du kan ladda ned den senaste rekommenderade versionen för flera plattformar från python.org.
Ladda ned koden
Paketet azure-iot-device publiceras som en PIP.
Installera paketet på följande sätt i din lokala Python-miljö:
Mappen azure-iot-sdk-python/samples/pnp innehåller exempelkoden för IoT Plug and Play-enheten. Filerna för temperaturkontrollantexemplet är:
temp_controller_with_thermostats.py
pnp_helper.py
Temperaturstyrenheten har flera komponenter och en standardkomponent, baserat på temperaturstyrenhetens DTDL-modell.
Öppna filen temp_controller_with_thermostats.py i valfri redigerare. Koden i den här filen:
Importerar pnp_helper.py för att få åtkomst till hjälpmetoder.
Definierar två digitala tvillingmodellidentifierare (DTMIs) som unikt representerar två olika gränssnitt, definierade i DTDL-modellen. Komponenterna i en verklig temperaturkontrollant bör implementera dessa två gränssnitt. Dessa två gränssnitt har redan publicerats på en central lagringsplats. Dessa DTMIs måste vara kända för användaren och varierar beroende på scenariot med enhetsimplementering. För det aktuella exemplet representerar dessa två gränssnitt:
En termostat
Enhetsinformation som utvecklats av Azure.
Definierar DTMI model_id för den enhet som implementeras. DTMI är användardefinierad och måste matcha DTMI i DTDL-modellfilen.
Definierar de namn som ges till komponenterna i DTDL-filen. Det finns två termostater i DTDL och en komponent för enhetsinformation. En konstant med namnet serial_number definieras också i standardkomponenten. En serial_number kan inte ändras för en enhet.
Definierar implementeringar av kommandohanterare. Dessa hanterare definierar vad enheten gör när den tar emot kommandobegäranden.
Definierar funktioner för att skapa ett kommandosvar. Dessa funktioner definierar hur enheten svarar med kommandobegäranden. Du skapar kommandosvarsfunktioner om ett kommando behöver skicka ett anpassat svar tillbaka till IoT-hubben. Om en svarsfunktion för ett kommando inte tillhandahålls skickas ett allmänt svar. I det här exemplet har endast kommandot getMaxMinReport ett anpassat svar.
Definierar en funktion för att skicka telemetri från den här enheten. Både termostaterna och standardkomponenten skickar telemetri. Den här funktionen har en valfri komponentnamnsparameter som gör att den kan identifiera vilken komponent som skickade telemetrin.
Definierar en lyssnare för kommandobegäranden.
Definierar en lyssnare för önskade egenskapsuppdateringar.
Har en main funktion som:
Använder enhetens SDK för att skapa en enhetsklient och ansluta till din IoT-hubb. Enheten skickar model_id så att IoT-hubben kan identifiera enheten som en IoT Plug and Play-enhet.
create_reported_properties Använder funktionen i hjälpfilen för att skapa egenskaperna. Skicka komponentnamnet och egenskaperna som nyckelvärdepar till den här funktionen.
Uppdaterar de läsbara egenskaperna för dess komponenter genom att anropa patch_twin_reported_properties.
Börjar lyssna efter kommandobegäranden med hjälp av execute_command_listener funktionen. Funktionen konfigurerar en lyssnare för kommandobegäranden från tjänsten. När du konfigurerar lyssnaren anger du en method_name, user_command_handleroch en valfri create_user_response_handler som parametrar.
Definierar method_name kommandobegäran. I det här exemplet definierar modellen omstart av kommandon och getMaxMinReport.
Funktionen user_command_handler definierar vad enheten ska göra när den tar emot ett kommando.
Funktionen create_user_response_handler skapar ett svar som ska skickas till din IoT-hubb när ett kommando körs. Du kan visa det här svaret i portalen. Om den här funktionen inte tillhandahålls skickas ett allmänt svar till tjänsten.
Används execute_property_listener för att lyssna efter egenskapsuppdateringar.
Börjar skicka telemetri med .send_telemetry Exempelkoden använder en loop för att anropa tre telemetri-sändningsfunktioner. Var och en anropas var åttonde sekund
Inaktiverar alla lyssnare och uppgifter och avslutar loopen när du trycker på Q eller q.
I Konfigurera din miljö skapade du fyra miljövariabler för att konfigurera exemplet för att använda Device Provisioning Service (DPS) för att ansluta till din IoT-hubb:
IOTHUB_DEVICE_SECURITY_TYPE med värdetDPS
IOTHUB_DEVICE_DPS_ID_SCOPE med DPS-ID-omfånget.
IOTHUB_DEVICE_DPS_DEVICE_ID med värdet my-pnp-device.
IOTHUB_DEVICE_DPS_DEVICE_KEY med den primära registreringsnyckeln.
IOTHUB_DEVICE_DPS_ENDPOINT med värdet global.azure-devices-provisioning.net.
Mer information om exempelkonfigurationen finns i exempelläsningen.
Kör exemplet med följande kommando:
cmd/sh
python temp_controller_with_thermostats.py
Exempelenheten skickar telemetrimeddelanden med några sekunders mellanrum till din IoT-hubb.
Du ser följande utdata som anger att enheten skickar telemetridata till hubben och nu är redo att ta emot kommandon och egenskapsuppdateringar.
Se till att exemplet körs när du slutför nästa steg.
Använda Azure IoT Explorer för att verifiera koden
När enhetsklientexemplet har startat använder du Azure IoT Explorer-verktyget för att kontrollera att det fungerar.
Öppna Azure IoT Explorer.
Om du inte redan har lagt till en anslutning till din IoT-hubb på sidan IoT-hubbar väljer du + Lägg till anslutning. Ange anslutningssträng för den IoT-hubb som du skapade tidigare och välj Spara.
På sidan Inställningar för IoT Plug and Play väljer du + Lägg till > lokal mapp och väljer mappen lokala modeller där du sparade dina modellfiler.
På sidan IoT-hubbar klickar du på namnet på den hubb som du vill arbeta med. Du ser en lista över enheter som är registrerade på IoT-hubben.
Klicka på Enhets-ID för den enhet som du skapade tidigare.
Menyn till vänster visar de olika typerna av information som är tillgängliga för enheten.
Välj IoT Plug and Play-komponenter för att visa modellinformationen för din enhet.
Du kan visa de olika komponenterna på enheten. Standardkomponenten och eventuella extra komponenter. Välj en komponent att arbeta med.
Välj sidan Telemetri och välj sedan Start för att visa telemetridata som enheten skickar för den här komponenten.
Välj sidan Egenskaper (skrivskyddad) för att visa de skrivskyddade egenskaper som rapporterats för den här komponenten.
Välj sidan Egenskaper (skrivbar) för att visa de skrivbara egenskaper som du kan uppdatera för den här komponenten.
Välj en egenskap efter dess namn, ange ett nytt värde för den och välj Uppdatera önskat värde.
Om du vill se det nya värdet väljer du knappen Uppdatera .
Välj sidan Kommandon för att visa alla kommandon för den här komponenten.
Välj det kommando som du vill testa för att ange parametern om det finns någon. Välj Skicka kommando för att anropa kommandot på enheten. Du kan se att enheten svarar på kommandot i kommandotolken där exempelkoden körs.
Rensa resurser
Om du planerar att fortsätta med fler artiklar för enhetsutvecklare kan du behålla och återanvända de resurser som du använde i den här artikeln. Annars kan du ta bort de resurser som du skapade i den här artikeln för att undvika fler avgifter.
Du kan ta bort både hubben och den registrerade enheten samtidigt genom att ta bort hela resursgruppen med följande Azure CLI-kommando. Använd inte det här kommandot om dessa resurser delar en resursgrupp med andra resurser som du vill behålla.
Azure CLI
az group delete --name<YourResourceGroupName>
Om du bara vill ta bort IoT-hubben kör du följande kommando med Hjälp av Azure CLI:
Azure CLI
az iot hub delete --name<YourIoTHubName>
Om du bara vill ta bort enhetsidentiteten som du registrerade med din IoT-hubb kör du följande kommando med Hjälp av Azure CLI:
Azure CLI
az iot hub device-identity delete --hub-name<YourIoTHubName>--device-id<YourDeviceID>
Du kanske också vill ta bort de klonade exempelfilerna från utvecklingsdatorn.
Nästa steg
I den här självstudien har du lärt dig hur du ansluter en IoT Plug and Play-enhet med komponenter till en IoT-hubb. Mer information om IoT Plug and Play-enhetsmodeller finns i:
Skapa lösningar från slutpunkt till slutpunkt i Microsoft Azure för att skapa Azure Functions, implementera och hantera webbappar, utveckla lösningar som använder Azure Storage med mera.
Självstudie – Använda C#, JavaScript, Java eller Python för att ansluta till och interagera med en IoT Plug and Play-enhet som är ansluten till din Azure IoT-lösning.
Självstudie – Skapa och kör IoT Plug and Play-exempelenhetskod (C, C#, Java, JavaScript eller Python) i Linux eller Windows som ansluter till en IoT-hubb. Använd Azure IoT Explorer-verktyget för att visa informationen som skickas av enheten till hubben.
Läs mer om IoT Plug and Play. IoT Plug and Play baseras på ett öppet modelleringsspråk som gör det möjligt för smarta IoT-enheter att deklarera sina funktioner. IoT-enheter presenterar den deklarationen, som kallas enhetsmodell, när de ansluter till molnlösningar. Molnlösningen kan sedan automatiskt förstå enheten och börja interagera med den, allt utan att skriva någon kod.
Den här självstudien visar enhetsutvecklare hur de ansluter en enhet på ett säkert sätt till Azure IoT Hub. Du använder en Azure IoT-enhets-SDK för C, C#, Python, Node.js eller Java för att skapa en enhetsklient för Windows, Linux eller Raspberry Pi (Raspbian). Sedan ansluter och skickar du telemetri.