Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Один из самых распространённых сценариев для устройств Интернета вещей — это обнаружение условий окружающей среды. Доступны различные датчики для мониторинга температуры, влажности, атмосферного давления и других параметров.
В этом разделе вы будете использовать .NET для чтения условий окружающей среды с датчика.
Предпосылки
- Компьютер на основе ARM (ARMv7 или более поздней версии) с одной платой (SBC)
- Влажность BME280 / барометрическое давление/разрыв датчика температуры
- Провода-перемычки
- Хлебная доска (необязательно)
- Распиновочная плата Raspberry Pi GPIO (необязательно)
- SDK-пакет .NET версии 10 или более поздней
Примечание.
В этом руководстве предполагается, что целевое устройство — Raspberry Pi. Однако это руководство можно использовать для любого SBC на основе Linux, который поддерживает .NET, например Orange Pi, ODROID и многое другое.
Это важно
Существует много производителей плат с модулем BME280. Большинство дизайнов похожи, и производитель не должен влиять на функциональность. Этот учебник пытается учесть вариации. Убедитесь, что модуль BME280 включает интерфейс Inter-Integrated Circuit (I²C).
Компоненты, такие как платы расширения BME280, часто продаются с несоединенными штырьковыми разъемами. Если вам неудобно паять, поищите плату расширения BME280 с предварительно припаянным разъёмом или другим разъёмом. Если хотите, подумайте о том, чтобы научиться паять! Вот хорошее руководство новичка по пайке.
Подготовьте SBC
Убедитесь, что SBC настроен для поддержки следующих служб:
- SSH
- I2C
Для многих устройств дополнительная конфигурация не требуется. Для Raspberry Pi используйте raspi-config команду. Дополнительные сведения см. в документации Raspberry Pi.
Подготовка оборудования
Используйте аппаратные компоненты для построения канала, как показано на следующей схеме:
Ниже приведены подключения от Raspberry Pi к плате расширения BME280. Обратите внимание, что маркировка выводов может различаться на разных вариантах BME280.
| Raspberry Pi | Разрыв BME280 | Цвет |
|---|---|---|
| 3.3V | VIN/3V3 | red |
| земля | GND | черный |
| 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 package add Iot.Device.Bindings --version 4.1.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 как автономное приложение. Инструкции см. в разделе Deploy .NET приложения в Raspberry Pi. Обязательно предоставьте исполняемому файлу разрешение на выполнение с помощью
chmod +x.Запустите приложение на Raspberry Pi, переключившись в каталог развертывания и запустив исполняемый файл.
./SensorTutorialНаблюдайте за выводом датчика в консоли.
Завершите программу, нажав клавиши CTRL+C.
Поздравляю! Вы использовали I2C для чтения значений из датчика температуры/ влажности/барометрического давления!
Получение исходного кода
Исходный код этого руководства доступен на GitHub.