Zelfstudie: Ontwikkel IoT Edge modules met Linux-containers
Van toepassing op:
IoT Edge 1,1
IOT Edge 1,2
Gebruik Visual Studio Code om code te ontwikkelen en te implementeren op apparaten met IoT Edge.
In de quickstart hebt u een IoT Edge gemaakt en een module geïmplementeerd vanuit de Azure Marketplace. In deze zelfstudie wordt uitgelegd hoe u uw eigen code ontwikkelt en implementeert op een IoT Edge-apparaat. Het is handig dit artikel door te nemen voor de andere zelfstudies, die dieper ingaan op specifieke programmeertalen of Azure-services.
In deze zelfstudie wordt gebruikgemaakt van het voorbeeld van de implementatie van een C#-module op een Linux-apparaat. Dit voorbeeld is gekozen omdat dit het meest voorkomende ontwikkelaarsscenario voor IoT Edge oplossingen is. Ook als u van plan bent een andere taal te gebruiken of een Azure-service te implementeren, is deze zelfstudie nog steeds nuttig om meer te leren over de ontwikkelhulpprogramma's en -concepten. Voltooi deze inleiding tot het ontwikkelproces en kies vervolgens de gewenste taal of Azure-service om de details te bekijken.
In deze zelfstudie leert u het volgende:
- Uw ontwikkelcomputer instellen.
- De IoT Edge Tools voor Visual Studio Code gebruiken om een nieuw project te maken.
- Uw project bouwen als een container en het opslaan in een Azure-containerregister.
- Uw code implementeren op een IoT Edge-apparaat.
Vereisten
Een ontwikkelcomputer:
- U kunt uw eigen computer of een virtuele machine gebruiken, afhankelijk van uw ontwikkelvoorkeuren.
- Zorg ervoor dat uw ontwikkelcomputer ondersteuning biedt voor geneste virtualisatie. Deze mogelijkheid is nodig voor het uitvoeren van een container-engine, die u in de volgende sectie installeert.
- De meeste besturingssystemen waarop een container-engine kan worden uitgevoerd, kunnen worden gebruikt voor het ontwikkelen van IoT Edge-modules voor Linux-apparaten. In deze zelfstudie wordt gebruikgemaakt van een Windows-computer. Er wordt echter gewezen op bekende verschillen in macOS of Linux.
- Installeer Git om verderop in deze zelfstudie modulesjabloonpakketten op te halen.
- De extensie C# voor Visual Studio Code (van OmniSharp).
- .NET Core 2.1 SDK.
Een Azure IoT Edge-apparaat:
- We raden u aan om IoT Edge niet uit te voeren op uw ontwikkelcomputer, maar een afzonderlijk apparaat te gebruiken. Dit onderscheid tussen ontwikkelcomputer en IoT Edge apparaat sluit nauwer aan op een echt implementatiescenario en helpt om de verschillende concepten uit elkaar te houden.
- Als u geen tweede apparaat beschikbaar hebt, gebruikt u het quickstart-artikel om een IoT Edge-apparaat in Azure te maken met een virtuele Linux-machine.
Cloudresources:
- Een gratis of standaard IoT-hub-laag in Azure.
Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.
Belangrijkste concepten
In deze zelfstudie doorloopt u de ontwikkeling van een IoT Edge-module. Een IoT Edge-module, of soms kortweg module genoemd, is een container met uitvoerbare code. U kunt een of meer modules implementeren op een IoT Edge-apparaat. Modules voeren specifieke taken uit, zoals het opnemen van gegevens van sensoren, het opschonen en analyseren van gegevens of het verzenden van berichten naar een IoT-hub. Zie Informatie over Azure IoT Edge-modules voor meer informatie.
Bij het ontwikkelen van IoT Edge-modules is het belangrijk dat u begrijpt wat het verschil is tussen de ontwikkelcomputer en het IoT Edge doelapparaat waarop de module uiteindelijk zal worden geïmplementeerd. De container die u voor de modulecode bouwt, moet overeenkomen met het besturingssysteem van het doelapparaat. Zo is het meest voorkomende scenario dat iemand een module ontwikkelt op een Windows-computer met het doel deze op een Linux-apparaat met IoT Edge te implementeren. In dat geval zou het besturingssysteem van de container Linux zijn. Als u deze zelfstudie doorloopt, moet u rekening houden met het verschil tussen het besturingssysteem van de ontwikkelcomputer en het besturingssysteem van de container.
Tip
Als u een linux IoT Edge gebruikt op Windows,is het doelapparaat in uw scenario de virtuele Linux-machine, niet de Windows host.
Deze zelfstudie is gericht op apparaten IoT Edge met Linux-containers. Als de ontwikkelcomputer Linux-containers uitvoert, kunt u uw favoriete besturingssysteem gebruiken. We raden u aan Visual Studio code te gebruiken om te ontwikkelen met Linux-containers, dus dat wordt in deze zelfstudie gebruikt. U kunt ook Visual Studio gebruiken, maar er zijn wel verschillen in ondersteuning tussen de twee hulpprogramma's.
De volgende tabel bevat een overzicht van de ondersteunde ontwikkelscenario's voor Linux-containers in Visual Studio Code en Visual Studio.
| Visual Studio Code | Visual Studio 2017/2019 | |
|---|---|---|
| Architectuur van Linux-apparaat | Linux AMD64 Linux ARM32 |
Linux AMD64 Linux ARM32 |
| Azure-services | Azure Functions Azure Stream Analytics Azure Machine Learning |
|
| Talen | C C# Java Node.js Python |
C C# |
| Meer informatie | Azure IoT Edge voor Visual Studio Code | Azure IoT Edge Tools voor Visual Studio 2017 Azure IoT Edge Tools voor Visual Studio 2019 |
Notitie
Ondersteuning voor Linux ARM64-apparaten is beschikbaar in openbare preview. Zie ARM64 IoT Edge-modules ontwikkelen in Visual Studio Code en er fouten in opsporen (preview) voor meer informatie.
In deze zelfstudie leert u de ontwikkelstappen voor Visual Studio Code. Als u liever Visual Studio gebruikt, raadpleegt u de instructies in Visual Studio 2019 gebruiken voor het ontwikkelen van en opsporen van fouten in modules voor Azure IoT Edge.
Container-engine installeren
IoT Edge-modules worden verpakt als container. U hebt dus een container-engine op uw ontwikkelcomputer nodig om modules te bouwen en te beheren. We raden aan Docker Desktop te gebruiken voor ontwikkeling vanwege de ondersteuning en populariteit van de functies. Met Docker Desktop in Windows kunt u schakelen tussen Linux-containers en Windows-containers, en kunt u dus eenvoudig modules ontwikkelen voor verschillende soorten IoT Edge apparaten.
Gebruik de Docker-documentatie om Docker Desktop te installeren op uw ontwikkelcomputer:
Docker Desktop voor Windows installeren
- Wanneer u Docker Desktop voor Windows installeert, wordt u gevraagd of u Linux- of Windows-containers wilt gebruiken. Deze beslissing kan op elk gewenst moment worden gewijzigd met een eenvoudige schakeloptie. Voor deze zelfstudie gebruiken we Linux-containers omdat onze modules gericht zijn op Linux-apparaten. Zie Schakelen tussen Windows- en Linux-containers voor meer informatie.
Lees About Docker CE voor informatie over de installatie op verschillende Linux-platforms.
- Installeer Docker Desktop voor Windows voor het Windows-subsysteem voor Linux (WSL).
VS Code en hulpprogramma's instellen
Gebruik de IoT-extensies voor Visual Studio Code voor het ontwikkelen van IoT Edge-modules. Deze extensies bieden projectsjablonen, automatiseren het maken van het implementatiemanifest en bieden u de mogelijkheid om IoT Edge apparaten te bewaken en te beheren. In deze sectie installeert u Visual Studio Code en de IoT-extensie. Vervolgens stelt u uw Azure-account in voor het beheren van IoT Hub-resources vanuit Visual Studio Code.
Installeer Visual Studio Code op uw ontwikkelcomputer.
Wanneer de installatie is voltooid, selecteert u View > Extensions.
Zoek naar Azure IoT Tools. Dit is feitelijk een verzameling extensies waarmee u kunt communiceren met IoT-hub- en IoT-apparaten, en IoT Edge-modules kunt ontwikkelen.
Selecteer Installeren. Elke extensie die wordt opgenomen, wordt afzonderlijk geïnstalleerd.
Wanneer de extensies zijn geïnstalleerd, opent u het opdrachtpalet door View > Command Palette te selecteren.
In het opdrachtenpalet zoekt en selecteert u Azure: Aanmelden en voer deze uit. Volg de aanwijzingen om u aan te melden bij uw Azure-account.
Weer in het opdrachtenpalet zoekt en selecteert u Azure IoT Hub: Select IoT Hub. Volg de aanwijzingen om uw Azure-abonnement en IoT-hub te selecteren.
Open de sectie Explorer van Visual Studio Code door het pictogram te selecteren in de activiteitenbalk aan de linkerkant of door View > Explorer te selecteren.
Vouw onderaan de sectie Explorer het samengevouwen menu Azure IoT Hub / Devices uit. Als het goed is, ziet u nu de apparaten en IoT Edge-apparaten die zijn gekoppeld aan de IoT-hub die u hebt geselecteerd in het opdrachtenpalet.

Een containerregister maken
In deze zelfstudie gebruikt u de Azure IoT Tools-extensie om een module te bouwen en maakt u een containerinstallatiekopie van de bestanden. Vervolgens pusht u deze installatiekopie naar een register waarin uw installatiekopieën worden opgeslagen en beheerd. Tot slot implementeert u de installatiekopie uit het register voor uitvoering op uw IoT Edge-apparaat.
U kunt een Docker-register gebruiken om de containerinstallatiekopieën op te slaan. Twee populaire Docker-registerservices zijn Azure Container Registry en Docker Hub. In deze zelfstudie wordt Azure Container Registry gebruikt.
Als u nog geen containerregister hebt, volgt u deze stappen om een nieuw containerregister te maken in Azure:
Selecteer in Azure Portal de optie Een resource maken > Containers > Container Registry.
Geef de volgende waarden op om uw containerregister te maken:
Veld Waarde Abonnement Selecteer een abonnement in de vervolgkeuzelijst. Resourcegroep Het wordt aangeraden om dezelfde resourcegroep te gebruiken voor alle test-resources die u maakt met de snelstartgidsen en zelfstudies voor IoT Edge, zoals IoTEdgeResources. Registernaam Geef hier een unieke naam op. Locatie Kies een locatie dicht bij u in de buurt. SKU Selecteer Basic. Selecteer Maken.
Nadat u het containerregister hebt gemaakt, bladert u ernaartoe en selecteert u in het linkerdeelvenster Toegangssleutels in het menu onder Instellingen.
Klik om de beheerder in te schakelen om de gebruikersnaam en het wachtwoord voor het containerregister weer te geven.
Kopieer de waarden voor Aanmeldingsserver, Gebruikersnaam en Wachtwoord en sla deze op een handige plaats op. U gebruikt deze waarden verderop in de zelfstudie om toegang te verlenen tot het containerregister.

Een nieuw moduleproject maken
De extensie voor Azure IoT-hulpprogramma's biedt projectsjablonen voor alle ondersteunde IoT Edge-moduletalen in Visual Studio Code. Deze sjablonen bevatten alle bestanden en code die u nodig hebt om een werkende module te implementeren om IoT Edge te testen of bieden u een uitgangspunt om de sjabloon aan te passen met uw eigen bedrijfslogica.
Voor deze zelfstudie gebruiken we de C#-modulesjabloon omdat deze de meestgebruikte sjabloon is.
Een projectsjabloon maken
Zoek en selecteer in het Visual Studio Code-opdrachtenpalet de optie Azure IoT Edge: New IoT Edge Solution. Volg de aanwijzingen en gebruik de volgende waarden om uw oplossing te maken:
| Veld | Waarde |
|---|---|
| Map selecteren | Kies de locatie op uw ontwikkelcomputer waar VS Code de oplossingsbestanden moet maken. |
| Een naam opgeven voor de oplossing | Voer een beschrijvende naam voor de oplossing in of accepteer de standaardnaam EdgeSolution. |
| Modulesjabloon selecteren | Kies C# Module. |
| Een modulenaam opgeven | Accepteer de standaardwaarde SampleModule. |
| Opslagplaats voor Docker-afbeeldingen voor de module opgeven | Een opslagplaats voor afbeeldingen bevat de naam van het containerregister en de naam van uw containerafbeelding. De containerafbeelding wordt vooraf gevuld vanuit de naam die u in de laatste stap hebt opgegeven. Vervang localhost:5000 door de waarde van de aanmeldingsserver uit uw Azure-containerregister. U vindt de waarde van de aanmeldingsserver op de overzichtspagina van het containerregister in de Azure-portal. De uiteindelijke opslagplaats voor de installatiekopie ziet er als volgt uit: <registry name>.azurecr.io/nodemodule. |

Zodra de nieuwe oplossing in het Visual Studio Code-venster is geladen, neemt u even de tijd om vertrouwd te raken met de bestanden die zijn gemaakt:
De map .vscode bevat een bestand met de naam launch.json, dat wordt gebruikt voor het opsporen van fouten in modules.
De map modules bevat een map voor elke module in uw oplossing. Op dit moment moet dit alleen SampleModule zijn, of een andere naam die u aan de module hebt gegeven. De map SampleModule bevat de belangrijkste programmacode, de metagegevens van de module en verschillende Docker-bestanden.
Het bestand .env bevat de referenties voor uw containerregister. Deze referenties worden gedeeld met uw IoT Edge-apparaat, zodat het de containerinstallatiekopieën kan ophalen.
Het bestand deployment.debug.template.json en het bestand deployment.template.json zijn sjablonen die u helpen bij het maken van een implementatiemanifest. Een implementatiemanifest is een bestand dat precies aangeeft welke modules u wilt implementeren op een apparaat, hoe ze moeten worden geconfigureerd en hoe ze met elkaar en de cloud kunnen communiceren. De sjabloonbestanden gebruiken aanwijzers voor bepaalde waarden. Wanneer u de sjabloon omzet in een echt implementatiemanifest, worden de aanwijzers vervangen door waarden die zijn overgenomen uit andere oplossingsbestanden. Zoek de twee gebruikelijke tijdelijke aanduidingen in uw implementatiesjabloon:
- In de sectie met registerreferenties wordt het adres automatisch ingevuld op basis van de informatie die u hebt ingevoerd tijdens het maken van de oplossing. De gebruikersnaam en het wachtwoord verwijzen echter naar de variabelen die zijn opgeslagen in het .env-bestand. Deze configuratie is om beveiligingsredenen, omdat het .env-bestand door Git wordt genegeerd, maar de implementatiesjabloon niet.
- In de sectie SampleModule is de containerinstallatiekopie niet ingevuld, zelfs als u de opslagplaats voor de installatiekopie tijdens het maken van de oplossing hebt opgegeven. Deze tijdelijke aanduiding verwijst naar het bestand module.json in de map SampleModule. Als u naar dat bestand gaat, ziet u dat het installatiekopieveld de opslagplaats bevat, maar ook een tagwaarde die uit de versie en het platform van de container bestaat. U kunt de versie handmatig implementeren als onderdeel van de ontwikkelcyclus en u selecteert het containerplatform met behulp van een schakelaar die verderop in deze sectie wordt geïntroduceerd.
De IoT Edge runtime instellen
De IoT Edge-extensie wordt standaard ingesteld op de nieuwste stabiele versie van de IoT Edge runtime wanneer uw implementatie-assets worden gemaakt. Op dit moment is versie 1.2 de meest recente stabiele versie. Als u modules ontwikkelt voor apparaten met de versie voor langetermijnondersteuning 1.1 of de eerdere versie van 1.0, moet u de versie van de IoT Edge-runtime in Visual Studio Code zo bijwerken dat deze overeenkomen.
Selecteer > Opdrachtpalet weergeven.
Voer in het opdrachtpalet de opdracht in en voer deze uit Azure IoT Edge: Stel de standaardwaarde IoT Edge runtime-versie in.
Kies in de lijst de runtimeversie IoT Edge uw apparaten worden uitgevoerd.
Nadat u een nieuwe runtimeversie hebt geselecteerd, wordt uw implementatiemanifest dynamisch bijgewerkt om de wijziging in de installatie van de runtimemodule weer te geven.
Uw registerreferenties voor de IoT Edge-agent opgeven
In het omgevingsbestand worden de referenties voor het containerregister opgeslagen. Deze referenties worden gedeeld met de IoT Edge-runtime. De runtime heeft deze referenties nodig om uw containerinstallatiekopieën naar het IoT Edge-apparaat te halen.
Notitie
Als u de waarde localhost:5000 niet hebt vervangen door de waarde voor de aanmeldingsserver van uw Azure-containerregister, ontbreken in de stap Een projectsjabloon maken het . env-bestand en de sectie registryCredentials van het implementatiemanifest.
De IoT Edge-extensie probeert uw containerregisterreferenties van Azure op te halen en deze in het omgevingsbestand in te vullen. Controleer of uw referenties al zijn toegevoegd. Als dat niet het geval is, voegt u ze nu toe:
- Open het .env-bestand in uw moduleoplossing.
- Voeg de waarden voor gebruikersnaam en wachtwoord toe die u hebt gekopieerd uit het Azure-containerregister.
- Sla de wijzigingen in het .env-bestand op.
Notitie
In deze zelfstudie worden beheerdersreferenties voor Azure Container Registry gebruikt, wat handig is voor ontwikkelings- en testscenario's. Wanneer u klaar bent voor productiescenario's, raden we u aan een verificatieoptie met de minste bevoegdheden te gebruiken, zoals service-principals of tokens binnen het bereik van de opslagplaats. Zie Toegang tot uw containerregister beheren voor meer informatie.
Uw doelarchitectuur selecteren
Momenteel kunt u met Visual Studio Code C#-modules ontwikkelen voor Linux AMD64- en ARM32v7-apparaten. U moet voor elke oplossing selecteren op welke architectuur u zich richt, omdat dit beïnvloedt hoe de container wordt opgebouwd en uitgevoerd. De standaardinstelling is Linux AMD64.
Open het opdrachtpalet en zoek Azure IoT Edge: standaarddoelplatform voor Edge-oplossing instellen of selecteer het snelkoppelingspictogram onderaan het venster.

Selecteer in het opdrachtpalet de doelarchitectuur in de lijst met opties. In deze zelfstudie gebruiken we een virtuele Ubuntu-machine als het IoT Edge-apparaat, dus laten we de standaardinstelling amd64 staan.
De voorbeeldcode bekijken
De oplossingssjabloon die u hebt gemaakt, bevat voorbeeldcode voor een IoT Edge-module. In deze voorbeeldmodule worden berichten eenvoudigweg ontvangen en vervolgens doorgegeven. Met de pijplijnfunctionaliteit wordt een belangrijk concept in IoT Edge gedemonstreerd, waarmee modules met elkaar communiceren.
Elke module kan meerdere invoer- en uitvoer wachtrijen hebben die in hun code zijn gedeclareerd. Met de IoT Edge-hub die op het apparaat wordt uitgevoerd, worden berichten van de uitvoer van een module naar de invoer van een of meer modules gerouteerd. De specifieke code voor het declareren van invoer en uitvoer verschilt per taal, maar het concept is voor alle modules hetzelfde. Zie Routes declareren voor meer informatie over routering tussen modules.
De C#-voorbeeldcode die bij de projectsjabloon hoort, maakt gebruik van de ModuleClient-klasse van de IoT Hub SDK voor .NET.
Open het bestand Program.cs, dat zich in de map modules/SampleModule/ bevindt.
Zoek in program.cs de methode SetInputMessageHandlerAsync.
Met de methode SetInputMessageHandlerAsync wordt een invoerwachtrij ingesteld voor het ontvangen van inkomende berichten. Bekijk deze methode en zie hoe hiermee een invoerwachtrij met de naam input1 wordt geïnitialiseerd.

Zoek vervolgens de methode SendEventAsync.
Met de methode SendEventAsync worden ontvangen berichten verwerkt en wordt een uitvoerwachtrij ingesteld om de berichten door te geven. Bekijk deze methode en controleer of er een uitvoerwachtrij met de naam output1 wordt geïnitialiseerd.

Open het bestand deployment.template.json.
Zoek de eigenschap modules van de gewenste eigenschappen van $edgeAgent.
Er moeten hier twee modules worden weergegeven. Een is de SimulatedTemperatureSensor-module, die standaard is opgenomen in alle sjablonen om gesimuleerde temperatuurgegevens te bieden die u kunt gebruiken om uw modules te testen. De andere is de module SampleModule die u als onderdeel van deze oplossing hebt gemaakt.
Zoek onder aan het bestand de gewenste eigenschappen voor de module $edgeHub.
Een van de functies van de IoT Edge hub-module bestaat uit het routeren van berichten tussen alle modules in een implementatie. Bekijk de waarden in de eigenschap routes. De ene route, SampleModuleToIoTHub, gebruikt een jokerteken (* * _) om berichten aan te geven die afkomstig zijn uit uitvoerwachtrijen in de SampleModule-module. Deze berichten gaan naar _$upstream*, een gereserveerde naam die IoT Hub aangeeft. De andere route, sensorToSampleModule, neemt berichten over van de SimulatedTemperatureSensor-module en stuurt deze door naar de invoerwachtrij input1 die in de SampleModule-code is geïnitialiseerd.

De oplossing bouwen en pushen
U hebt de modulecode en de implementatiesjabloon gecontroleerd om inzicht te krijgen in enkele belangrijke concepten van de implementatie. Nu moet u de SampleModule-containerinstallatiekopie bouwen en naar het containerregister pushen. Met de extensie voor IoT-hulpprogramma's voor Visual Studio Code worden in deze stap ook het implementatiemanifest op basis van de informatie in het sjabloonbestand en de modulegegevens van de oplossingsbestanden gegenereerd.
Aanmelden bij Docker
Geef de containerregisterreferenties op voor Docker, zodat de containerinstallatiekopie voor opslag in het register kan worden gepusht.
Open de in Visual Studio Code geïntegreerde terminal door View > Terminal te selecteren.
Meld u aan bij Docker met de Azure-containerregisterreferenties die u hebt opgeslagen nadat u het register hebt gemaakt.
docker login -u <ACR username> -p <ACR password> <ACR login server>Mogelijk wordt een beveiligingswaarschuwing weergegeven waarin het gebruik van
--password-stdinwordt aanbevolen. Hoewel dit wordt aanbevolen voor productiescenario's, valt het buiten het bereik van deze zelfstudie. Zie de documentatie voor aanmelding bij Docker voor meer informatie.Inloggen in Azure Container Registry
az acr login -n <ACR registry name>
Bouwen en pushen
Visual Studio Code heeft nu toegang tot uw containerregister, dus is het tijd om de oplossingscode in te schakelen in een containerinstallatiekopie.
Klik in de Visual Studio Code Explorer met de rechtermuisknop op het bestand deployment.template.json en selecteer Build and Push IoT Edge Solution.

Met de opdracht voor bouwen en pushen worden drie bewerkingen gestart. Eerst wordt er een nieuwe map met de naam config in de oplossing gemaakt die het volledige implementatiemanifest bevat, op basis van de informatie in de implementatiesjabloon en andere oplossingsbestanden. Daarna wordt
docker builduitgevoerd om de containerinstallatiekopie te bouwen op basis van de juiste dockerfile voor uw doelarchitectuur. Vervolgens wordtdocker pushuitgevoerd om de opslagplaats van de installatiekopie naar het containerregister te pushen.Dit proces kan de eerste keer enkele minuten duren, maar de volgende keer dat u de opdrachten uitvoert, wordt het sneller uitgevoerd.
Open het bestand deployment.amd64.json in de zojuist gemaakte configuratiemap. De bestandsnaam geeft de doelarchitectuur aan. Deze is dus anders als u een andere architectuur hebt gekozen.
U ziet dat de twee parameters met een tijdelijke aanduiding nu de juiste waarden bevatten. In het gedeelte registryCredentials zijn de gebruikersnaam en wachtwoord voor het register opgehaald uit het .env-bestand. De SampleModule bevat de volledige installatiekopieopslagplaats met de naam, versie en architectuurtag van het module.json-bestand.
Open het bestand module.json in de map SampleModule.
Wijzig het versienummer voor de installatiekopie van de module. (De versie, niet de $schema-version.) Verhoog bijvoorbeeld het versienummer van de patch naar 0.0.2, alsof er een kleine correctie in de modulecode is aangebracht.
Tip
Moduleversies bieden ondersteuning voor versiebeheer en bieden u de mogelijkheid wijzigingen te testen op een klein aantal apparaten voordat u updates in een productieomgeving implementeert. Als u de moduleversie niet verhoogt voordat u bouwt en pusht, overschrijft u de opslagplaats in uw containerregister.
Sla de wijzigingen op in het bestand module.json.
Klik opnieuw met de rechtermuisknop op het bestand deployment.template.json en selecteer opnieuw Build and Push IoT Edge solution.
Open het bestand deployment.amd64.json opnieuw. U ziet dat er geen nieuw bestand is gemaakt tijdens het uitvoeren van de opdracht voor het bouwen en pushen. Hetzelfde bestand is bijgewerkt met de wijzigingen. De SampleModule-installatiekopie verwijst nu naar de versie 0.0.2 van de container.
Ga naar Azure Portal en navigeer naar het containerregister om verder te controleren wat de opdracht voor het bouwen en pushen heeft gedaan.
Selecteer in het containerregister Opslagplaatsen en vervolgens samplemodule. Controleer of beide versies van de installatiekopie naar het register zijn gepusht.

Problemen oplossen
Als er fouten optreden bij het bouwen en pushen van de installatiekopie van de module, heeft dit vaak te maken met Docker-configuratie op uw ontwikkelcomputer. Gebruik de volgende controles om uw configuratie te controleren:
- Hebt u de opdracht
docker loginuitgevoerd met behulp van de referenties die u uit het containerregister hebt gekopieerd? Deze referenties zijn anders dan de referenties die u gebruikt om u aan te melden bij Azure. - Hebt u de juiste containeropslagplaats? Heeft deze de juiste containerregisternaam en de juiste modulenaam? Open het bestand module.json in de map SampleModule om dit te controleren. De waarde van de opslagplaats moet eruitzien als <registry name>.azurecr.io/samplemodule.
- Als u een andere naam dan SampleModule voor uw module hebt gebruikt, is die naam dan wel consistent in de hele oplossing?
- Worden op de computer hetzelfde type containers uitgevoerd als die u bouwt? Deze zelfstudie is voor Linux IoT Edge-apparaten en daarom moet in de zijbalk van Visual Studio Code amd64 of arm32v7 worden vermeld, en moeten op Docker Desktop Linux-containers worden uitgevoerd.
Modules op het apparaat implementeren
U hebt gecontroleerd of de gemaakte containerinstallatiekopieën zijn opgeslagen in het containerregister, dus het is tijd om ze te implementeren op een apparaat. Zorg ervoor dat uw IoT Edge-apparaat actief is.
Vouw in de Visual Studio Code Explorer, onder de sectie Azure IoT Hub, de optie Apparaten uit om de lijst met IoT-apparaten weer te geven.
Klik met de rechtermuisknop op de naam van het IoT Edge-apparaat dat u wilt implementeren en selecteer Create Deployment for Single Device.

Ga in de bestandsverkenner naar de map config en selecteer vervolgens het bestand deployment.amd64.json.
Gebruik niet het bestand deployment.template.json, dat geen containerregisterreferenties of module-installatiekopiewaarden bevat. Als u ontwikkelt voor een Linux ARM32-apparaat, wordt het implementatiemanifest deployment.arm32v7.json genoemd.
Vouw onder uw apparaat Modules uit voor een lijst met de geïmplementeerde en actieve modules. Klik op de knop Vernieuwen. U ziet nu de nieuwe SimulatedTemperatureSensor- en SampleModule-modules die op uw apparaat worden uitgevoerd.
Het kan enkele minuten duren voordat de modules zijn gestart. De IoT Edge-runtime moet het nieuwe implementatiemanifest ontvangen, de module-installatiekopieën uit de containerruntime ophalen en vervolgens elke nieuwe module starten.

Berichten van het apparaat weergeven
De SampleModule-code ontvangt berichten via de invoerwachtrij en geeft deze door aan de uitvoerwachtrij. Het implementatiemanifest heeft routes gedeclareerd die berichten hebben doorgegeven aan SampleModule van SimulatedTemperatureSensor en berichten vervolgens hebben doorgestuurd van SampleModule naar IoT Hub. Met de Azure IoT Tools voor Visual Studio Code kunt u berichten zien wanneer ze vanaf uw afzonderlijke apparaten op IoT Hub arriveren.
Klik in de Visual Studio Code Explorer met de rechtermuisknop op de naam van het IoT Edge-apparaat dat u wilt controleren en selecteer Start Monitoring Built-in Event Endpoint.
Bekijk het uitvoervenster in Visual Studio Code om berichten te zien die binnenkomen op uw IoT-hub.

Wijzigingen op apparaat weergeven
Als u wilt zien wat er gebeurt op uw apparaat zelf, gebruikt u de opdrachten in deze sectie om de IoT Edge-runtime en -modules op uw apparaat te controleren.
De opdrachten in deze sectie zijn voor uw IoT Edge apparaat, niet voor uw ontwikkelcomputer. Als u een virtuele machine voor uw IoT Edge-apparaat gebruikt, kunt u er nu verbinding mee maken. Ga in Azure naar de overzichtspagina van de virtuele machine en selecteer Verbinding maken voor toegang tot de beveiligde shell-verbinding.
Bekijk alle modules die op het apparaat zijn geïmplementeerd en controleer de status ervan:
iotedge listU moet vier modules zien: de twee IoT Edge-runtime-modules, SimulatedTemperatureSensor en SampleModule. Alle vier moeten worden weergegeven als actief.
Controleer de logboeken voor een specifieke module:
iotedge logs <module name>IoT Edge-modules zijn hoofdlettergevoelig.
De SimulatedTemperatureSensor- en SampleModule-logboeken moeten de berichten weergeven die ze verwerken. De edgeAgent-module is verantwoordelijk voor het starten van de andere modules, dus de logboeken hiervan bevatten informatie over het implementeren van het implementatiemanifest. Als een module niet wordt vermeld of niet wordt uitgevoerd, bevatten de edgeAgent-logboeken waarschijnlijk de fouten. De edgeHub-module is verantwoordelijk voor de communicatie tussen de modules en IoT Hub. Als de modules actief zijn, maar de berichten niet op uw IoT-hub arriveren, bevatten de edgeHub-logboeken waarschijnlijk de fouten.
Resources opschonen
Als u van plan bent door te gaan met het volgende aanbevolen artikel, kunt u de resources en configuraties die u hebt gemaakt behouden en opnieuw gebruiken. U kunt ook hetzelfde IoT Edge-apparaat blijven gebruiken als een testapparaat.
Anders kunt u de lokale configuraties en Azure-resources die u in dit artikel hebt gemaakt, verwijderen om kosten te voorkomen.
Azure-resources verwijderen
Het verwijderen van de Azure-resources en resourcegroepen kan niet ongedaan worden gemaakt. Zorg ervoor dat u niet per ongeluk de verkeerde resourcegroep of resources verwijdert. Als u de IoT-hub in een bestaande resourcegroep hebt gemaakt met de resources die u wilt behouden, moet u alleen de IoT-hub zelf verwijderen en niet de resourcegroep.
Om de resources te verwijderen:
Meld u aan bij Azure Portal en selecteer vervolgens Resourcegroepen.
Selecteer de naam van de resourcegroep die uw IoT Edge-testresources bevat.
Bekijk de lijst met resources die zich in de resourcegroep bevinden. Als u alle mappen wilt verwijderen, kunt u Resourcegroep verwijderen selecteren. Als u slechts een deel ervan wilt verwijderen, kunt u in elke resource afzonderlijk klikken om ze te verwijderen.
Volgende stappen
In deze zelfstudie hebt u Visual Studio Code op uw ontwikkelcomputer ingesteld en uw eerste IoT Edge-module geïmplementeerd. Nu u de basisconcepten kent, kunt u functionaliteit toevoegen aan een module, zodat de gegevens die worden doorgegeven, kunnen worden geanalyseerd. Kies uw voorkeurstaal: