Lire les conditions environnementales d’un capteur
L’un des scénarios les plus courants pour les appareils IoT est la détection des conditions environnementales. Plusieurs capteurs sont disponibles pour surveiller la température, l’humidité, la pression barométrique, etc.
Dans cette rubrique, vous allez utiliser .NET pour lire les conditions environnementales d’un capteur.
Prérequis
- Ordinateur à carte unique (SBC) ARM (ARMv7 ou version supérieure)
- Carte d’évaluation de capteur d’humidité/pression atmosphérique/température BME280
- Câbles de liaison
- Tableau de navigation (facultatif)
- Carte d’évaluation GPIO Raspberry Pi (facultative)
- Kit de développement logiciel (SDK) .NET version 7 ou ultérieure
Notes
Ce tutoriel est écrit en supposant que l’appareil cible est Raspberry Pi. Toutefois, ce tutoriel peut être utilisé pour n’importe quel SBC Linux qui prend en charge .NET, comme Orange Pi, ODROID, etc.
Important
Il existe de nombreux fabricants de cartes BME280. La plupart des conceptions sont similaires, et le fabricant n’influe pas sur leur fonctionnement. Ce didacticiel tente de tenir compte des variations. Vérifiez que votre carte BME280 comprend une interface I2C (Inter-Integrated Circuit).
Les composants comme les circuits imprimés BME280 sont généralement vendus avec des têtes de broche non soudées. Si vous n’êtes pas à l’aise avec le soudage, recherchez un circuit imprimé BME280 avec une tête de broche présoudée ou un autre connecteur. Si vous le souhaitez, envisagez d’apprendre à souder ! Voici un bon guide de débutant pour le soudage.
Préparer le SBC
Vérifiez que votre SBC est configuré pour prendre en charge les services suivants :
- SSH
- I2C
Pour de nombreux appareils, aucune configuration supplémentaire n’est requise. Pour Raspberry Pi, utilisez la commande raspi-config
. Pour plus d’informations sur raspi-config
, reportez-vous à la documentation sur Raspberry Pi.
Préparer le matériel
Utilisez les composants matériels pour générer le circuit, comme illustré dans le diagramme suivant :
Voici les connexions du Raspberry Pi au circuit imprimé BME280. Notez que les étiquettes de broche diffèrent sur les différents circuits imprimés BME280.
Raspberry Pi | Circuit imprimé BME280 | Couleur |
---|---|---|
3,3V | VIN/3V3 | rouge |
Masse | GND | black |
SDA (GPIO 2) | SDI/SDA | blue |
SCL (GPIO 3) | SCK/SCL | orange |
Si nécessaire, reportez-vous au schéma de raccordement suivant :
Image avec la permission de Raspberry Pi Foundation.
Conseil
Un circuit imprimé GPIO conjointement avec un tableau de navigation est recommandé pour simplifier les connexions à la tête du GPIO.
Créer l’application
Effectuez les étapes suivantes dans votre environnement de développement préféré :
Créez une application console .NET à l’aide de l’interface CLI .NET ou de Visual Studio. Nommez le SensorTutorial.
dotnet new console -o SensorTutorial cd SensorTutorial
Ajoutez le package Iot.Device.Bindings au projet. Utilisez l’interface CLI .NET du répertoire du projet ou Visual Studio.
dotnet add package Iot.Device.Bindings --version 2.2.0-*
Remplacez le contenu du fichier Program.cs par le code suivant :
using System; using System.Device.I2c; using System.Threading; using Iot.Device.Bmxx80; using Iot.Device.Bmxx80.PowerMode; var i2cSettings = new I2cConnectionSettings(1, Bme280.DefaultI2cAddress); using I2cDevice i2cDevice = I2cDevice.Create(i2cSettings); using var bme280 = new Bme280(i2cDevice); int measurementTime = bme280.GetMeasurementDuration(); while (true) { Console.Clear(); bme280.SetPowerMode(Bmx280PowerMode.Forced); Thread.Sleep(measurementTime); bme280.TryReadTemperature(out var tempValue); bme280.TryReadPressure(out var preValue); bme280.TryReadHumidity(out var humValue); bme280.TryReadAltitude(out var altValue); Console.WriteLine($"Temperature: {tempValue.DegreesCelsius:0.#}\u00B0C"); Console.WriteLine($"Pressure: {preValue.Hectopascals:#.##} hPa"); Console.WriteLine($"Relative humidity: {humValue.Percent:#.##}%"); Console.WriteLine($"Estimated altitude: {altValue.Meters:#} m"); Thread.Sleep(1000); }
Dans le code précédent :
i2cSettings
est défini sur une nouvelle instance deI2cConnectionSettings
. Le constructeur définit le paramètrebusId
sur 1 et le paramètredeviceAddress
surBme280.DefaultI2cAddress
.Important
Certains fabricants de circuits imprimés BME280 utilisent la valeur d’adresse secondaire. Pour ces appareils, utilisez
Bme280.SecondaryI2cAddress
.Une déclaration using crée une instance d’appel de
I2cDevice
en appelantI2cDevice.Create
et en transférant ài2cSettings
. CeI2cDevice
représente le bus I2C. La déclarationusing
garantit que l’objet est supprimé et que les ressources matérielles sont correctement libérées.Une autre déclaration
using
crée une instance deBme280
représentant le capteur. LeI2cDevice
est transmis au constructeur.Le temps nécessaire pour que la puce prenne des mesures avec les paramètres actuels (par défaut) de la puce est récupéré en appelant
GetMeasurementDuration
.Une boucle
while
s’exécute indéfiniment. Chaque itération :Efface la console.
Définit le mode d’alimentation sur
Bmx280PowerMode.Forced
. Cela force la puce à effectuer une mesure, à stocker les résultats, puis à se mettre en veille.Lit les valeurs de température, de pression, d’humidité et d’altitude.
Notes
L’altitude est calculée par la liaison de périphériques. Cette surcharge de
TryReadAltitude
utilise la pression moyenne au niveau de la mer pour générer une estimation.Écrit les conditions environnementales actuelles dans la console.
Mise en veille pendant 1 000 ms.
Générez l'application. Si vous utilisez l’interface CLI .NET, exécutez
dotnet build
. Pour générer dans Visual Studio, appuyez sur Ctrl+Maj+B.Déployez l’application sur le SBC en tant qu’application autonome. Pour obtenir des instructions, consultez Déployer des applications .NET sur Raspberry Pi. Veillez à accorder à l’exécutable l’autorisation exécuter à l’aide de
chmod +x
.Exécutez l’application sur le Raspberry Pi en basculant vers le répertoire de déploiement et en exécutant l’exécutable.
./SensorTutorial
Observez la sortie du capteur dans la console.
Terminez le programme en appuyant sur Ctrl+C.
Félicitations ! Vous avez utilisé I2C pour lire les valeurs d’un capteur de pression barométrique/de température/d’humidité !
Obtenir le code source
La source de ce tutoriel est disponible sur GitHub.