Считывание с датчика условий окружающей среды
Одним из наиболее распространенных сценариев использования устройств Интернета вещей является определение условий окружающей среды. Существует множество датчиков для отслеживания температуры, влажности, атмосферного давления и многих других показаний.
В этом разделе вы будете использовать .NET для считывания с датчика условий окружающей среды.
Предварительные требования
- Однопанерный компьютер (SBC) на основе ARM (ARMv7 или более поздней версии)
- Коммутационная плата BME280 датчика влажности, давления, температуры
- оптоволоконные кабеля с разъемами на обоих концах;
- Монтажная плата (необязательно)
- Коммутационная плата GPIO Raspberry Pi (необязательно)
- Пакет SDK для .NET 7 или более поздней версии
Примечание
В этом руководстве предполагается, что целевым устройством является Raspberry Pi. Однако это руководство можно использовать для любого SBC под управлением Linux, поддерживающего .NET, например Orange Pi, ODROID и т. д.
Важно!
Существует множество производителей коммутационных плат BME280. Большинство конструкций похожи, и производители не видят никакой разницы в функционале. В этом руководстве предпринимается попытка отразить отличия. Убедитесь, что коммутационная плата BME280 имеет интерфейс I2C.
Такие компоненты, как пробоя BME280, часто продаются с незапаздывными заголовками контактов. Если вы не хотите самостоятельно заниматься пайкой, ищите коммутационную панель BME280 с уже припаянным разъемом или другой разъем. Или попробуйте научиться паять самостоятельно! Вот неплохая инструкция для начинающих.
Подготовка SBC
Убедитесь, что SBC настроен для поддержки следующих служб:
- SSH
- I2C
Для многих устройств дополнительная настройка не требуется. Для Raspberry Pi используйте raspi-config
команду . Дополнительные сведения о raspi-config
см. в документации по Raspberry Pi.
Подготовка оборудования
Используйте компоненты оборудования для создания цепи, как показано на следующей схеме:
Ниже приведены подключения от Raspberry Pi к пробою BME280. Обратите внимание, что метки закрепления отличаются в разных пробоях BME280.
Raspberry Pi | BME280 Breakout | Цвет |
---|---|---|
3,3 В | VIN/3V3 | красный |
Заземление | GND | black |
SDA (GPIO 2) | SDI/SDA | blue |
SCL (GPIO 3) | SCK/SCL | orange |
При необходимости смотрите следующую схему контактов:
Изображение взято с Raspberry Pi Foundation.
Совет
Для упрощения подключения к заголовку GPIO рекомендуется использовать коммутационную плату GPIO в сочетании с монтажной платой для макетирования или тестирования.
Создайте приложение
Выполните следующие действия в предпочитаемой среде разработки.
Создайте консольное приложение .NET с помощью .NET CLI или Visual Studio. Назовите его SensorTutorial.
dotnet new console -o SensorTutorial cd SensorTutorial
Добавьте пакет Iot.Device.Bindings в проект. Используйте либо .NET CLI из каталога проекта, либо Visual Studio.
dotnet add package Iot.Device.Bindings --version 2.2.0-*
Замените содержимое Program.cs кодом из этого примера.
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); }
В приведенном выше коде:
Для
i2cSettings
задан новый экземплярI2cConnectionSettings
. Конструктор задает параметруbusId
значение 1, а параметруdeviceAddress
— значениеBme280.DefaultI2cAddress
.Важно!
Некоторые производители коммутационных плат BME280 используют значение дополнительного адреса. Для этих устройств используйте
Bme280.SecondaryI2cAddress
.Объявление using создает экземпляр
I2cDevice
путем вызоваI2cDevice.Create
и передачиi2cSettings
. ПредставляетI2cDevice
собой шину I2C. Объявлениеusing
гарантирует, что объект удален и аппаратные ресурсы освобождены должным образом.Другое объявление
using
создает экземплярBme280
для представления датчика.I2cDevice
передается конструктору.Время, необходимое микросхеме для выполнения измерений с текущими параметрами микросхемы (заданными по умолчанию), определяется путем вызова
GetMeasurementDuration
.Цикл
while
выполняется бесконечно. Каждая итерация:Очищает окно консоли.
Задает режим питания
Bmx280PowerMode.Forced
. В этом случае микросхема проводит одно измерение, сохраняет результаты, а затем переходит в спящий режим.Считывает значения температуры, давления, влажности и высоты над уровнем моря.
Примечание
Высота над уровнем моря вычисляется привязкой устройства. Для получения оценки эта перегрузка метода
TryReadAltitude
использует среднее значение давления на уровне моря.Записывает текущие условия среды в консоль.
Переходит в спящий режим на 1000 мс.
Построение приложения. При использовании интерфейса командной строки .NET выполните команду
dotnet build
. Чтобы выполнить сборку в Visual Studio, нажмите клавиши CTRL+SHIFT+B.Разверните приложение в SBC как автономное приложение. Инструкции см. в статье Развертывание приложений .NET в Raspberry Pi. Обязательно предоставьте исполняемому файлу разрешение execute с помощью
chmod +x
.Запустите приложение на устройстве Raspberry Pi, перейдя в каталог развертывания и запустив исполняемый файл.
./SensorTutorial
Наблюдайте за выходными данными датчика в консоли.
Завершите выполнение программы, нажав сочетание клавиш CTRL+C.
Поздравляем! Вы использовали I2C для считывания значений с датчика температуры, влажности и барометрического давления!
Получение исходного кода
Исходный код для этого учебника доступен на сайте GitHub.