Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Um dos cenários mais comuns para dispositivos IoT é a deteção de condições ambientais. Uma variedade de sensores está disponível para monitorar temperatura, umidade, pressão barométrica e muito mais.
Neste tópico, vais usar o .NET para ler as condições ambientais a partir de um sensor.
Pré-requisitos
- Computador de placa única (SBC) baseado em ARM (ARMv7 ou superior)
- Fragmentação do sensor de humidade/pressão/temperatura do BME280
- Fios de ligação
- Placa de ensaio (opcional)
- Placa de expansão GPIO para Raspberry Pi (opcional)
- .NET SDK 10 ou posterior
Observação
Este tutorial foi escrito assumindo que o dispositivo alvo é o Raspberry Pi. No entanto, este tutorial pode ser usado para qualquer SBC baseado em Linux que suporte .NET, como Orange Pi, ODROID e outros.
Importante
Existem muitos fabricantes de BME280 breakouts. A maioria dos designs são semelhantes, e o fabricante não deve fazer qualquer diferença para a funcionalidade. Este tutorial tenta explicar as variações. Garanta que o breakout BME280 inclui uma interface de Circuito Interintegrado (I2C).
Componentes como os breakouts BME280 são frequentemente vendidos com cabeçalhos de pinos não soldados. Se não se sentir confortável com a soldadura, procure uma placa breakout BME280 com um cabeçalho pré-soldado ou um conector diferente. Se quiser, considere aprender a soldar! Aqui está um bom guia para iniciantes na soldagem.
Preparar o SBC
Certifique-se de que o SBC está configurado para suportar os seguintes serviços:
- SSH
- I2C
Para muitos dispositivos, nenhuma configuração adicional é necessária. Para o Raspberry Pi, usa o raspi-config comando. Para mais informações sobre raspi-config, consulte a documentação do Raspberry Pi.
Preparar o hardware
Use os componentes de hardware para construir o circuito conforme descrito no diagrama a seguir:
As seguintes são as ligações entre o Raspberry Pi e o breakout BME280. Note que os rótulos dos pinos diferem em diferentes placas de conexão BME280.
| Pi de framboesa | BME280 Fuga | Cor |
|---|---|---|
| 3,3 V | VIN/3V3 | vermelho |
| Terreno | GND | preto |
| SDA (GPIO 2) | SDI/SDA | azul |
| SCL (GPIO 3) | SCK/SCL | laranja |
Consulte o diagrama de pinagem abaixo, conforme necessário.
Imagem cortesia da Raspberry Pi Foundation.
Sugestão
Recomenda-se uma placa de breakout GPIO em conjunto com uma placa de ensaio para agilizar as conexões ao cabeçalho GPIO.
Criar a aplicação
Conclua as seguintes etapas em seu ambiente de desenvolvimento preferido:
Crie uma nova aplicação de consola .NET usando .NET CLI ou Visual Studio. Chama-lhe SensorTutorial.
dotnet new console -o SensorTutorial cd SensorTutorialAdicione o pacote Iot.Device.Bindings ao projeto. Use .NET CLI do diretório do projeto ou Visual Studio.
dotnet package add Iot.Device.Bindings --version 4.1.0Substitua o conteúdo do 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é definido para uma nova instância deI2cConnectionSettings. O construtor define obusIdparâmetro como 1 e odeviceAddressparâmetro comoBme280.DefaultI2cAddress.Importante
Alguns fabricantes de módulos breakout BME280 usam o valor de endereço secundário. Para esses dispositivos, use
Bme280.SecondaryI2cAddress.Uma declaração de uso cria uma instância de
I2cDeviceao chamarI2cDevice.Createe passandoi2cSettings. IstoI2cDevicerepresenta o barramento I2C. Ausingdeclaração garante que o objeto é eliminado e que os recursos de hardware são devidamente libertados.Outra
usingdeclaração cria uma instância deBme280para representar o sensor. OI2cDeviceé passado no construtor.O tempo necessário para o chip fazer medições com as definições atuais (padrão) do chip é obtido ao chamar
GetMeasurementDuration.Um
whileloop corre indefinidamente. Cada iteração:Limpa o console.
Define o modo de energia para
Bmx280PowerMode.Forced. Isso força o chip a realizar uma medição, armazenar os resultados e, em seguida, dormir.Lê os valores de temperatura, pressão, umidade e altitude.
Observação
A altitude é calculada pela conexão do dispositivo. Esta sobrecarga de
TryReadAltitudeutiliza a pressão média ao nível do mar para gerar uma estimativa.Grava as condições ambientais atuais no console.
Dorme 1000 ms.
Crie o aplicativo. Se estiver a usar a CLI .NET, execute
dotnet build. Para construir em Visual Studio, pressione Ctrl+Shift+B.Implante o aplicativo no SBC como um aplicativo independente. Para instruções, consulte Deploy .NET apps para Raspberry Pi. Certifique-se de dar permissão de execução ao executável usando
chmod +x.Execute a aplicação no Raspberry Pi mudando para o diretório de implantação e executando o executável.
./SensorTutorialObserve a saída do sensor no console.
Termina o programa pressionando Ctrl+C.
Parabéns! Já usaste I2C para ler valores de um sensor de temperatura/humidade/pressão barométrica!
Obter o código-fonte
A fonte deste tutorial está disponível em GitHub.