Поделиться через


Чтение условий окружающей среды с датчика

Один из самых распространённых сценариев для устройств Интернета вещей — это обнаружение условий окружающей среды. Доступны различные датчики для мониторинга температуры, влажности, атмосферного давления и других параметров.

В этом разделе вы будете использовать .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.

Подготовка оборудования

Используйте аппаратные компоненты для построения канала, как показано на следующей схеме:

Диаграмма Fritzing, показывающая подключение от Raspberry Pi к плате расширения BME280

Ниже приведены подключения от 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 GPIO. Изображение предоставлено любезно фондом Raspberry Pi.
Изображение любезно Raspberry Pi Foundation.

Подсказка

Рекомендуется использовать плату расширения GPIO в сочетании с макетной платой для упрощения подключения к разъему GPIO.

Создание приложения

Выполните следующие действия в предпочтительной среде разработки:

  1. Создайте консольное приложение .NET с помощью .NET CLI или Visual Studio. Назовите его SensorTutorial.

    dotnet new console -o SensorTutorial
    cd SensorTutorial
    
  2. Добавьте в проект пакет Iot.Device.Bindings . Используйте .NET CLI из каталога проекта или Visual Studio.

    dotnet package add Iot.Device.Bindings --version 4.1.0
    
  3. Замените содержимое файла 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 выполняется неограниченно. Каждая итерация:

      1. Очищает консоль.

      2. Устанавливает режим питания на Bmx280PowerMode.Forced. Это заставляет микросхему выполнить одно измерение, сохранить результаты и затем перейти в спящий режим.

      3. Считывает значения температуры, давления, влажности и высоты.

        Примечание.

        Высота вычисляется связыванием устройства. Эта перегрузка TryReadAltitude использует среднее давление на уровне моря для создания оценки.

      4. Записывает текущие условия окружающей среды в консоль.

      5. Задержка 1000 мс.

  4. сборка приложения. При использовании интерфейса командной строки .NET выполните dotnet build. Чтобы создать Visual Studio, нажмите клавиши Ctrl+Shift+B.

  5. Разверните приложение в SBC как автономное приложение. Инструкции см. в разделе Deploy .NET приложения в Raspberry Pi. Обязательно предоставьте исполняемому файлу разрешение на выполнение с помощью chmod +x.

  6. Запустите приложение на Raspberry Pi, переключившись в каталог развертывания и запустив исполняемый файл.

    ./SensorTutorial
    

    Наблюдайте за выводом датчика в консоли.

  7. Завершите программу, нажав клавиши CTRL+C.

Поздравляю! Вы использовали I2C для чтения значений из датчика температуры/ влажности/барометрического давления!

Получение исходного кода

Исходный код этого руководства доступен на GitHub.

Дальнейшие действия