気圧センサLPS331AP
説明書を見ながら間に合わせな感じでハンダ付け.
精度はかなり良いみたいです.

Arduinoでプログラミング.
気圧センサがちゃんと動きました.
3バイト読みだしてシフトしながら処理すると気圧が読み取れます.
1022.XX hPa の値が読み出せています.

データシートはこちら↓ アドレス0x20に書き込むデータで更新頻度が変えられます.
http://strawberry-linux.com/pub/DM00036196.pdf
スケッチはこちら↓
#include < Wire.h>
int sensorAddress = 0xB8 >> 1; // LPS331APのアドレス,SA0=GNDで0xB8,SA0=VDDで0xBA
unsigned long read2a, read29, read28;
float reading= 0;
// I2Cで指定したセンサの指定アドレスから1バイト読み出す
int i2cReadByte(int deviceAddress, int registerAddress){
Wire.beginTransmission(deviceAddress);
Wire.write(registerAddress);
Wire.endTransmission();
Wire.requestFrom(deviceAddress, 1);
return(Wire.read());
}
// I2Cで指定したセンサの指定アドレスに1バイト書き込む
void i2cWriteByte(int deviceAddress, int registerAddress, int data){
Wire.beginTransmission(deviceAddress);
Wire.write(registerAddress);
Wire.write(data);
Wire.endTransmission();
}
void setup()
{
Serial.begin(9600);
Wire.begin();
Serial.println( i2cReadByte(sensorAddress, 0x0f), HEX); // 気圧センサのテスト,0f番地からBBが読めれば正常
i2cWriteByte(sensorAddress, 0x20, 0xa0); // 0xa0で7Hz,0x90にすると1Hzで気圧を更新
delay(1000);
}
void loop(){
read2a = i2cReadByte(sensorAddress, 0x2a); // 気圧の上位バイト
read29 = i2cReadByte(sensorAddress, 0x29); // 気圧の中位バイト
read28 = i2cReadByte(sensorAddress, 0x28); // 気圧の下位バイト
reading =(read2a<<16) + (read29<<8) + read28;
reading /=4096; // hPa単位に直す
Serial.print(read2a,HEX); Serial.print(" ");
Serial.print(read29,HEX); Serial.print(" ");
Serial.print(read28,HEX); Serial.print(" ");
Serial.println(reading ); // 気圧をシリアル出力
delay(100);
}
|
ESP32 Wifi Bluetooth開発ボード |
|
Arduino Nano Every |
|
Raspberry Pi pico |
|
FPGA XILINX Artix-7 |
