Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Um dos cenários mais comuns para dispositivos IoT é a detecção de condições ambientais. Uma variedade de sensores está disponível para monitorar a temperatura, a umidade, a pressão barométrica e muito mais.
Neste tópico, você usará o .NET para ler as condições ambientais de um sensor.
Pré-requisitos
- Computador de placa única baseado em ARM (ARMv7 ou superior) (SBC)
- Detalhamento dos tipos de sensor de umidade/pressão barométrica/temperatura BME280
- Cabos de jumper
- Breadboard (opcional)
- Placa de contato impresso GPIO do Raspberry Pi (opcional)
- SDK do .NET 8 ou posterior
Observação
Este tutorial é escrito supondo que o dispositivo de destino seja Raspberry Pi. No entanto, este tutorial pode ser usado para qualquer SBC baseado em Linux que dê suporte ao .NET, como Orange Pi, ODROID e muito mais.
Importante
Há muitos outros fabricantes de placas de contato impresso BME280. A maioria dos designs são semelhantes, e o fabricante não deve fazer nenhuma diferença na funcionalidade. Este tutorial tenta considerar as variações. Verifique se a placa de contato BME280 inclui uma interface I2C (interintegrada).
Componentes como breakouts BME280 geralmente são vendidos com cabeçalhos de marcação não soldados. Se você estiver desconfortável com a soldagem, procure uma placa de 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 para solda.
Preparar o SBC
Verifique se o SBC está configurado para dar suporte aos seguintes serviços:
- SSH
- I2C
Para muitos dispositivos, nenhuma configuração adicional é necessária. Para Raspberry Pi, use o raspi-config comando. Para obter mais informações sobre raspi-config, consulte a documentação do Raspberry Pi.
Preparar o hardware
Use os componentes de hardware para criar o circuito, conforme descrito no diagrama a seguir:
Veja a seguir as conexões do Raspberry Pi com o breakout BME280. Observe que os rótulos de fixação diferem em vários breakouts BME280.
| Raspberry Pi | Breakout BME280 | Cor |
|---|---|---|
| 3,3V | VIN/3V3 | vermelho |
| Terra | GND | preto |
| SDA (GPIO 2) | SDI/SDA | azul |
| SCL (GPIO 3) | SCK/SCL | laranja |
Consulte o seguinte diagrama de pinagem conforme necessário:
Imagem cortesia Raspberry Pi Foundation.
Dica
Recomenda-se uma placa de fuga GPIO com uma placa de ensaio para simplificar as conexões com o cabeçalho GPIO.
Criar o aplicativo
Conclua as seguintes etapas em seu ambiente de desenvolvimento preferencial:
Crie um novo aplicativo de console do .NET usando a CLI do .NET ou o Visual Studio. Nomeie-o sensorTutorial.
dotnet new console -o SensorTutorial cd SensorTutorialAdicione o pacote Iot.Device.Bindings ao projeto. Use o CLI do .NET do diretório do projeto ou o Visual Studio.
dotnet add package Iot.Device.Bindings --version 3.2.0-*Substitua 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 apresentado:
i2cSettingsé definido como uma nova instância deI2cConnectionSettings. O construtor define obusIdparâmetro como 1 e odeviceAddressparâmetro comoBme280.DefaultI2cAddress.Importante
Alguns fabricantes de breakout BME280 usam o valor de endereço secundário. Para esses dispositivos, use
Bme280.SecondaryI2cAddress.Uma declaração using cria uma instância de
I2cDevicechamandoI2cDevice.Createe transmitindoi2cSettings. EsseI2cDevicerepresenta o barramento I2C. Ausingdeclaração garante que o objeto seja descartado e os recursos de hardware sejam liberados corretamente.Outra declaração
usingcria uma instância deBme280para representar o sensor. OI2cDeviceé passado pelo construtor.O tempo necessário para o chip fazer medidas com as configurações atuais (padrão) do chip é recuperado chamando
GetMeasurementDuration.Um
whileloop é executado indefinidamente. Cada iteração:Limpa o console.
Define o modo de energia como
Bmx280PowerMode.Forced. Isso força o chip a executar uma medida, armazenar os resultados e, em seguida, dormir.Lê os valores de temperatura, pressão, umidade e altitude.
Observação
A altitude é calculada pela vinculação do dispositivo. Essa sobrecarga de
TryReadAltitudeusa a pressão média do nível do mar para gerar uma estimativa.Grava as condições ambientais atuais no console.
Entra em modo de suspensão após 1000 ms.
Crie o aplicativo. Se estiver usando a CLI do .NET, execute
dotnet build. Para compilar no Visual Studio, pressione Ctrl+Shift+B.Implante o aplicativo no SBC como um aplicativo independente. Para obter instruções, consulte Implantar aplicativos .NET no Raspberry Pi. Certifique-se de conceder permissão de execução ao executável usando .
Execute o aplicativo no Raspberry Pi acessando o diretório de implantação e executando o arquivo executável.
./SensorTutorialObserve a saída do sensor no console.
Encerre o programa pressionando Ctrl+C.
Parabéns! Você usou I2C para ler valores de um sensor de temperatura/umidade/pressão barométrica!
Obter o código-fonte
A origem deste tutorial está disponível no GitHub.