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á .NET para ler as condições ambientais de um sensor.
Pré-requisitos
- Computador de placa única baseado em ARM (ARMv7 ou superior) (SBC)
- Divisão do sensor de umidade/pressão barométrica/temperatura do BME280
- Cabos de jumper
- Breadboard (opcional)
- Placa de contato impresso GPIO do Raspberry Pi (opcional)
- .NET SDK 10 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 a .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. Certifique-se de que sua placa breakout BME280 inclua uma interface de circuito inter-integrado (I2C).
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 .NET usando a CLI .NET ou Visual Studio. Nomeie-o 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 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 de uso cria uma instância de
I2cDevicechamandoI2cDevice.Createe passando emi2cSettings. IssoI2cDevicerepresenta o ônibus 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. NoI2cDeviceé passado para o 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. Esta sobrecarga de
TryReadAltitudeusa pressão ao nível médio 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 .NET, execute
dotnet build. Para criar em Visual Studio, pressione Ctrl+Shift+B.Implante o aplicativo no SBC como um aplicativo independente. Para obter instruções, consulte Deploy .NET aplicativos para Raspberry Pi. Certifique-se de conceder permissão de execução ao executável usando
chmod +x.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 dados de um sensor de temperatura, umidade e pressão barométrica!
Obter o código-fonte
A origem deste tutorial está disponível em GitHub.