資料介紹
描述
在這個項(xiàng)目中,我們將使用適用于 Windows 10 IoT Core on Raspberry Pi 2套件組件的 Adafruit 入門包來創(chuàng)建一個使用氣壓傳感器讀取溫度、壓力和高度的項(xiàng)目。?
注意:該套件有兩個版本,一個包含 BMP280 傳感器,另一個包含 BME280。如果你有 BME280,
硬件
根據(jù)下面“原理圖”部分中的 Fritzing 圖,將 Raspberry Pi2 連接到面包板和其他組件。
軟件?
您可以從https://github.com/ms-iot/adafruitsample下載代碼啟動項(xiàng)目,我們將引導(dǎo)您完成添加與 Web 服務(wù)對話并在地圖上獲取您的 pin 所需的代碼。什么地圖?
打開“Lesson_203\StartSolution\lesson_203.sln ”并打開 mainpage.xaml.cs 文件。
我們已經(jīng)填寫了一些方法作為您在此解決方案中的起點(diǎn)。如果你想跳到前面,你可以在以下位置找到所有代碼已完成的解決方案:“Lesson_203\FullSolution\lesson_203.sln”
MainPage.xaml.cs
打開 MainPage.xaml.cs 文件。
添加對氣壓傳感器 (BMP280) 類的引用。
public sealed partial class MainPage : Page
{
//A class which wraps the barometric sensor
BMP280 BMP280;
現(xiàn)在我們在 OnNavigatedTo 方法中添加代碼,該方法將為氣壓傳感器創(chuàng)建一個新的 BMP280 對象并初始化該對象。
如果您不想在地圖上添加圖釘,請刪除?MakePinWebAPICall();
//This method will be called by the application framework when the page is first loaded
protected override async void OnNavigatedTo(NavigationEventArgs navArgs)
{
Debug.WriteLine("MainPage::OnNavigatedTo");
MakePinWebAPICall();
try
{
//Create a new object for our barometric sensor class BMP280 = new BMP280();
//Initialize the sensor
await BMP280.Initialize();
接下來我們添加代碼來執(zhí)行以下操作:
- 創(chuàng)建變量來存儲溫度、壓力和高度。將它們設(shè)置為 0。
- 為海平面壓力創(chuàng)建一個變量。默認(rèn)值為 1013.25 hPa。
- 讀取溫度、壓力和高度 10 次并將值輸出到調(diào)試控制臺。
//Create variables to store the sensor data: temperature, pressure and altitude.
//Initialize them to 0.
float temp = 0;
float pressure = 0;
float altitude = 0;
//Create a constant for pressure at sea level.
//This is based on your local sea level pressure (Unit: Hectopascal)
const float seaLevelPressure = 1013.25f;
//Read 10 samples of the data
for(int i = 0; i < 10; i++)
{
temp = await BMP280.ReadTemperature();
pressure = await BMP280.ReadPreasure();
altitude = await BMP280.ReadAltitude(seaLevelPressure);
//Write the values to your debug console
Debug.WriteLine("Temperature: " + temp.ToString() + " deg C");
Debug.WriteLine("Pressure: " + pressure.ToString() + " Pa");
Debug.WriteLine("Altitude: " + altitude.ToString() + " m");
}
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
BMP280.cs
打開 BMP280.cs 文件。??
代碼的第一部分是列出 BMP280 中不同寄存器的地址。這些值可以在BMP280 數(shù)據(jù)表中找到。
在 BMP280 類中,在寄存器地址枚舉之后添加以下內(nèi)容。
//String for the friendly name of the I2C bus
const string I2CControllerName = "I2C1";
//Create an I2C device
private I2cDevice bmp280 = null;
//Create new calibration data for the sensor
BMP280_CalibrationData CalibrationData;
//Variable to check if device is initialized
bool init = false;
接下來在Initialize函數(shù)中添加如下代碼:
//Method to initialize the BMP280 sensor
public async Task Initialize()
{
Debug.WriteLine("BMP280::Initialize");
try
{
//Instantiate the I2CConnectionSettings using the device address of the BMP280
I2cConnectionSettings settings = new I2cConnectionSettings(BMP280_Address);
//Set the I2C bus speed of connection to fast mode settings.BusSpeed = I2cBusSpeed.FastMode;
//Use the I2CBus device selector to create an advanced query syntax string
string aqs = I2cDevice.GetDeviceSelector(I2CControllerName); //Use the Windows.Devices.Enumeration.DeviceInformation class to create a collection using the advanced query syntax string
DeviceInformationCollection dis = await DeviceInformation.FindAllAsync(aqs);
//Instantiate the the BMP280 I2C device using the device id of the I2CBus and the I2CConnectionSettings
bmp280 = await I2cDevice.FromIdAsync(dis[0].Id, settings);
//Check if device was found
if (bmp280 == null)
{
Debug.WriteLine("Device not found");
}
}
catch (Exception e)
{
Debug.WriteLine("Exception: " + e.Message + "\n" + e.StackTrace);
throw;
}
}
在Begin函數(shù)中添加如下代碼:??
private async Task Begin()
{
Debug.WriteLine("BMP280::Begin");
byte[] WriteBuffer = new byte[] { (byte)eRegisters.BMP280_REGISTER_CHIPID };
byte[] ReadBuffer = new byte[] { 0xFF };
//Read the device signature
bmp280.WriteRead(WriteBuffer, ReadBuffer);
Debug.WriteLine("BMP280 Signature: " + ReadBuffer[0].ToString()); //Verify the device signature
if (ReadBuffer[0] != BMP280_Signature)
{
Debug.WriteLine("BMP280::Begin Signature Mismatch.");
return;
}
//Set the initalize variable to true
init = true;
//Read the coefficients table
CalibrationData = await ReadCoefficeints();
//Write control register
await WriteControlRegister();
//Write humidity control register
await WriteControlRegisterHumidity();
}
將以下代碼添加到接下來的 2 個函數(shù)中以寫入控制寄存器。
//Method to write 0x03 to the humidity control register
private async Task WriteControlRegisterHumidity()
{
byte[] WriteBuffer = new byte[] { (byte)eRegisters.BMP280_REGISTER_CONTROLHUMID, 0x03 };
bmp280.Write(WriteBuffer);
await Task.Delay(1);
return;
}
//Method to write 0x3F to the control register
private async Task WriteControlRegister()
{
byte[] WriteBuffer = new byte[] { (byte)eRegisters.BMP280_REGISTER_CONTROL, 0x3F };
bmp280.Write(WriteBuffer);
await Task.Delay(1);
return;
}
將以下代碼添加到 ReadUInt16_LittleEndian 函數(shù)中即可:
//Method to read a 16-bit value from a register and return it in little endian format
private UInt16 ReadUInt16_LittleEndian(byte register)
{
UInt16 value = 0;
byte[] writeBuffer = new byte[] { 0x00 };
byte[] readBuffer = new byte[] { 0x00, 0x00 };
writeBuffer[0] = register;
bmp280.WriteRead(writeBuffer, readBuffer);
int h = readBuffer[1] << 8;
int l = readBuffer[0];
value = (UInt16)(h + l);
return value;
}
將以下代碼添加到 ReadByte 函數(shù)以從寄存器中讀取 8 位數(shù)據(jù)。
//Method to read an 8-bit value from a register
private byte ReadByte(byte register)
{
byte value = 0;
byte[] writeBuffer = new byte[] { 0x00 };
byte[] readBuffer = new byte[] { 0x00 };
writeBuffer[0] = register;
bmp280.WriteRead(writeBuffer, readBuffer);
value = readBuffer[0];
return value;
}
接下來的 3 個功能已為您完成。可以在數(shù)據(jù)表中找到編寫這些函數(shù)所需的信息。
- ReadCoefficeints:這是從寄存器地址讀取所有校準(zhǔn)數(shù)據(jù)的函數(shù)。
- BMP280_compensate_T_double:在此函數(shù)中,使用 BMP280 數(shù)據(jù)表中的補(bǔ)償公式計(jì)算以 oC 為單位的溫度。
- BMP280_compensate_P_Int64:在此函數(shù)中,使用 BMP280 數(shù)據(jù)表中的補(bǔ)償公式計(jì)算以 Pa 為單位的壓力。
添加如下代碼完成ReadTemperature功能。
public async Task<float> ReadTemperature()
{
//Make sure the I2C device is initialized
if (!init) await Begin();
//Read the MSB, LSB and bits 7:4 (XLSB) of the temperature from the BMP280 registers
byte tmsb = ReadByte((byte)eRegisters.BMP280_REGISTER_TEMPDATA_MSB);
byte tlsb = ReadByte((byte)eRegisters.BMP280_REGISTER_TEMPDATA_LSB);
byte txlsb = ReadByte((byte)eRegisters.BMP280_REGISTER_TEMPDATA_XLSB); // bits 7:4
//Combine the values into a 32-bit integer
Int32 t = (tmsb << 12) + (tlsb << 4) + (txlsb >> 4);
//Convert the raw value to the temperature in degC
double temp = BMP280_compensate_T_double(t);
//Return the temperature as a float value
return (float)temp;
}
重復(fù)相同的步驟以完成 ReadPressure 函數(shù)。?
public async Task<float> ReadPreasure()
{
//Make sure the I2C device is initialized
if (!init) await Begin();
//Read the temperature first to load the t_fine value for compensation
if (t_fine == Int32.MinValue)
{
await ReadTemperature();
}
//Read the MSB, LSB and bits 7:4 (XLSB) of the pressure from the BMP280 registers
byte tmsb = ReadByte((byte)eRegisters.BMP280_REGISTER_PRESSUREDATA_MSB);
byte tlsb = ReadByte((byte)eRegisters.BMP280_REGISTER_PRESSUREDATA_LSB);
byte txlsb = ReadByte((byte)eRegisters.BMP280_REGISTER_PRESSUREDATA_XLSB); // bits 7:4
//Combine the values into a 32-bit integer
Int32 t = (tmsb << 12) + (tlsb << 4) + (txlsb >> 4);
//Convert the raw value to the pressure in Pa
Int64 pres = BMP280_compensate_P_Int64(t);
//Return the temperature as a float value
return ((float)pres) / 256;
}
最后完成ReadAltitude函數(shù):
//Method to take the sea level pressure in Hectopascals(hPa) as a parameter and calculate the altitude using current pressure.
public async Task<float> ReadAltitude(float seaLevel)
{
//Make sure the I2C device is initialized
if (!init) await Begin();
//Read the pressure first
float pressure = await ReadPreasure();
//Convert the pressure to Hectopascals(hPa)
pressure /= 100;
//Calculate and return the altitude using the international barometric formula
return 44330.0f * (1.0f - (float)Math.Pow((pressure / seaLevel), 0.1903f));
}
您的項(xiàng)目現(xiàn)在可以部署了!
預(yù)期產(chǎn)出
在這里查看下一課。
- 氣壓傳感器BMP數(shù)據(jù)手冊下載 8次下載
- 高精度低功耗的小型雙氣壓計(jì)芯片SPL06-007 0次下載
- P900系列高性能金屬應(yīng)變式壓力傳感器的中文數(shù)據(jù)手冊免費(fèi)下載 15次下載
- 基于支持向量機(jī)的壓力傳感器校正模型 9次下載
- FM-DQY大氣壓力傳感器說明 8次下載
- P900系列高性能金屬應(yīng)變式壓力傳感器 12次下載
- 光纖壓力和溫度傳感器在石油天然氣應(yīng)用 36次下載
- 如何使用ATmega16實(shí)現(xiàn)壓力傳感器溫度補(bǔ)償智能化的設(shè)計(jì) 6次下載
- 如何實(shí)現(xiàn)壓阻式壓力傳感器溫度的補(bǔ)償方法 49次下載
- BMP085氣壓傳感器的詳細(xì)資料介紹和應(yīng)用代碼免費(fèi)下載 23次下載
- 進(jìn)氣壓力傳感器 24次下載
- 用硅壓阻式壓力傳感器解算高度速度的方法
- 輪胎氣壓傳感器設(shè)計(jì)
- 膜盒式壓力傳感器的應(yīng)用
- 壓力傳感器及誤差補(bǔ)償
- 使用氣壓傳感器MS5611獲取溫度數(shù)據(jù)和氣壓數(shù)據(jù) 2908次閱讀
- HPX氣體壓力傳感器的功能特性及如何實(shí)現(xiàn)飛行器高度測量 4255次閱讀
- 進(jìn)氣壓力傳感器輸出特性_進(jìn)氣壓力傳感器原理 3428次閱讀
- 進(jìn)氣壓力傳感器的作用及安裝位置 2.3w次閱讀
- 進(jìn)氣壓力傳感器信號電路電壓過高的原因 3.5w次閱讀
- 進(jìn)氣壓力傳感器故障現(xiàn)象及解決方法 2.1w次閱讀
- 氣壓傳感器的工作原理_氣壓傳感器應(yīng)用 2.4w次閱讀
- 進(jìn)氣壓力傳感器壞了有什么反應(yīng) 2.1w次閱讀
- 如何在導(dǎo)航儀中利用MEMS壓力傳感器輔助GPS接收器測量海拔高度 2306次閱讀
- 溫度傳感器和壓力傳感器在智能啤酒桶中的應(yīng)用 3720次閱讀
- VTI公司的壓力傳感器讓飛行員手表實(shí)現(xiàn)了精確氣壓和高度測量的功能 1376次閱讀
- 大陸集團(tuán)研發(fā)可自動調(diào)整車輛高度的新型傳感器 3401次閱讀
- 高度傳感器的應(yīng)用_高度傳感器的作用 2w次閱讀
- 壓力傳感器測試方法_壓力傳感器的測量原理_壓力傳感器種類 3.3w次閱讀
- 怎么檢測壓力傳感器? 3946次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評論
查看更多