Treinamento
Módulo
Desenvolva soluções de IoT seguras para o Azure Sphere com o Hub IoT - Training
Desenvolver soluções de IoT altamente seguras com o Azure Sphere, o Azure RTOS e o Hub IoT do Azure
Não há mais suporte para esse navegador.
Atualize o Microsoft Edge para aproveitar os recursos, o suporte técnico e as atualizações de segurança mais recentes.
Um dos cenários mais comuns para dispositivos IoT é a detecção de condições ambientais. Uma variedade de sensores estão disponíveis para monitorar temperatura, umidade, pressão barométrica e muito mais.
Neste tópico, você usará o .NET para ler as condições ambientais de um sensor.
Observação
Este tutorial foi escrito supondo que o dispositivo de destino seja o Raspberry Pi. No entanto, este tutorial pode ser usado para qualquer SBC baseado em Linux com suporte para .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 temos um bom guia para iniciantes sobre soldagem.
Verifique se o SBC está configurado para dar suporte aos seguintes serviços:
Para muitos dispositivos, nenhuma configuração adicional é necessária. Para Raspberry Pi, use o comando raspi-config
. Para obter mais informações sobre raspi-config
, consulte a Documentação do Raspberry Pi.
Use os componentes de hardware para construir o circuito conforme ilustrado 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 | Color |
---|---|---|
3,3V | VIN/3V3 | vermelha |
Terra | GND | black |
SDA (GPIO 2) | SDI/SDA | blue |
SCL (GPIO 3) | SCK/SCL | orange |
Consulte o seguinte diagrama de pinagem conforme necessário:
Imagem cortesia da 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.
Siga estas etapas em seu ambiente de desenvolvimento preferencial:
Crie um aplicativo de console .NET usando a CLI do .NET ou o Visual Studio. Nomeie-o SensorTutorial.
dotnet new console -o SensorTutorial
cd SensorTutorial
Adicione o pacote Iot.Device.Bindings ao projeto. Use a CLI do .NET no diretório do projeto ou no Visual Studio.
dotnet add package Iot.Device.Bindings --version 2.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:
i2cSettings
é definido como uma nova instância de I2cConnectionSettings
. O construtor define o parâmetro busId
como 1 e o parâmetro deviceAddress
como Bme280.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 I2cDevice
chamando I2cDevice.Create
e passando por i2cSettings
. Esse I2cDevice
representa o barramento I2C. A declaração using
garante que o objeto seja descartado e os recursos de hardware sejam liberados corretamente.
Outra declaração using
cria uma instância de Bme280
para representar o sensor. O I2cDevice
é passado pelo construtor.
O tempo necessário para que o chip faça medidas com as configurações atuais (padrão) do chip é recuperado chamando GetMeasurementDuration
.
Um loop de while
é 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, entra em modo de suspensão.
Lê os valores de temperatura, pressão, umidade e altitude.
Observação
A altitude é calculada pela associação do dispositivo. Essa sobrecarga de TryReadAltitude
usa 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. Ao usar a CLI do .NET, execute dotnet build
. Para criar no Visual Studio, pressione Ctrl+Shift+B.
Implante o aplicativo no SBC como um aplicativo autônomo. Para obter instruções, confira Implantar aplicativos .NET no Raspberry Pi . Dê a permissão de execução ao executável usando chmod +x
.
Execute o aplicativo no Raspberry Pi alternando para o diretório de implantação e executando o executável.
./SensorTutorial
Observe 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!
A fonte deste tutorial está disponível no GitHub.
Comentários do .NET
O .NET é um projeto código aberto. Selecione um link para fornecer comentários:
Treinamento
Módulo
Desenvolva soluções de IoT seguras para o Azure Sphere com o Hub IoT - Training
Desenvolver soluções de IoT altamente seguras com o Azure Sphere, o Azure RTOS e o Hub IoT do Azure