Ler as condições ambientais de um sensor
Um dos cenários mais comuns para dispositivos IoT é a deteção de condições ambientais. Estão disponíveis vários sensores para monitorizar a temperatura, a humidade, a pressão barométrica e muito mais.
Neste tópico, irá utilizar o .NET para ler as condições ambientais de um sensor.
Pré-requisitos
- Computador de quadro único (SBC) baseado em ARM (ARMv7 ou superior)
- BME280 humidade/pressão barométrica/sensor de temperatura simultânea
- Fios jumper
- Breadboard (opcional)
- Placa simultânea raspberry Pi GPIO (opcional)
- SDK .NET 7 ou posterior
Nota
Este tutorial é escrito partindo do princípio de que o dispositivo de destino é Raspberry Pi. No entanto, este tutorial pode ser utilizado para qualquer SBC baseado em Linux que suporte .NET, como Orange Pi, ODROID e muito mais.
Importante
Existem muitos fabricantes de fugas de BME280. A maioria dos designs são semelhantes e o fabricante não deve fazer qualquer diferença para a funcionalidade. Este tutorial tenta contabilizar as variações. Certifique-se de que a análise do BME280 inclui uma interface do Circuito do Inter-Integrated (I2C).
Os componentes, como os simultâneas BME280, são frequentemente vendidos com cabeçalhos de pinos não afixados. Se não se sentir à vontade com a soldadeira, procure uma placa simultânea BME280 com um cabeçalho pré-vendido ou um conector diferente. Se quiser, considere aprender a soldar! Aqui está um bom guia para principiantes para a soldadeira.
Preparar o SBC
Certifique-se de que o SBC está configurado para suportar os seguintes serviços:
- SSH
- I2C
Para muitos dispositivos, não é necessária qualquer configuração adicional. Para Raspberry Pi, utilize o raspi-config
comando . Para obter mais informações sobre raspi-config
, consulte a documentação do Raspberry Pi.
Preparar o hardware
Utilize os componentes de hardware para criar o circuito, conforme descrito no diagrama seguinte:
Seguem-se as ligações do Raspberry Pi à fuga do BME280. Tenha em atenção que as etiquetas de afixar diferem em várias análises BME280.
Raspberry Pi | Análise do BME280 | Cor |
---|---|---|
3.3V | VIN/3V3 | red |
Terreno | GND | black |
SDA (GPIO 2) | SDI/SDA | blue |
SCL (GPIO 3) | SCK/SCL | orange |
Veja o seguinte diagrama de pinout, conforme necessário:
Imagem cortesia Raspberry Pi Foundation.
Dica
Recomenda-se uma placa simultânea GPIO em conjunto com uma placa de pão para simplificar as ligações ao cabeçalho GPIO.
Criar a aplicação
Conclua os seguintes passos no seu ambiente de desenvolvimento preferencial:
Crie uma nova Aplicação de Consola .NET com a CLI do .NET ou o Visual Studio. Dê-lhe o nome SensorTutorial.
dotnet new console -o SensorTutorial cd SensorTutorial
Adicione o pacote Iot.Device.Bindings ao projeto. Utilize a CLI de .NET a partir do diretório do projeto ou do Visual Studio.
dotnet add package Iot.Device.Bindings --version 2.2.0-*
Substitua o conteúdo do ficheiro Program.cs pelo seguinte código:
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); }
No código anterior:
i2cSettings
está definido para uma nova instância deI2cConnectionSettings
. O construtor define obusId
parâmetro como 1 e odeviceAddress
parâmetro comoBme280.DefaultI2cAddress
.Importante
Alguns fabricantes de análise do BME280 utilizam o valor de endereço secundário. Para esses dispositivos, utilize
Bme280.SecondaryI2cAddress
.Uma declaração de utilização cria uma instância de
I2cDevice
ao chamarI2cDevice.Create
e transmitiri2cSettings
. IstoI2cDevice
representa o autocarro I2C. Ausing
declaração garante que o objeto é eliminado e que os recursos de hardware são libertados corretamente.Outra
using
declaração cria uma instância deBme280
para representar o sensor. OI2cDevice
é passado no construtor.O tempo necessário para que o chip efetue medições com as definições atuais (predefinições) do chip é obtido ao chamar
GetMeasurementDuration
.Um
while
ciclo é executado indefinidamente. Cada iteração:Limpa a consola.
Define o modo de energia como
Bmx280PowerMode.Forced
. Isto força o chip a efetuar uma medição, armazenar os resultados e, em seguida, suspender.Lê os valores de temperatura, pressão, humidade e altitude.
Nota
A altitude é calculada pelo enlace do dispositivo. Esta sobrecarga de
TryReadAltitude
utiliza a pressão média do nível do mar para gerar uma estimativa.Escreve as condições ambientais atuais na consola do .
Dorme 1000 ms.
Crie a aplicação. Se estiver a utilizar a CLI de .NET, execute
dotnet build
. Para criar no Visual Studio, prima Ctrl+Shift+B.Implemente a aplicação no SBC como uma aplicação autónoma. Para obter instruções, veja Implementar aplicações .NET no Raspberry Pi. Confirme que concede permissão de execução executável com
chmod +x
.Execute a aplicação no Raspberry Pi ao mudar para o diretório de implementação e executar o executável.
./SensorTutorial
Observe a saída do sensor na consola do .
Termine o programa premindo Ctrl+C.
Parabéns! Utilizou o I2C para ler valores de um sensor de temperatura/humidade/pressão barométrica!
Obter o código-fonte
A origem deste tutorial está disponível no GitHub.