BMP180I2Cデジタル気圧センサー
BMP180デバイスは、デジタル気圧センサーです。これは、I2Cインターフェースを介してセンサーへのアクセスを提供する小さなモジュールで利用できます。これにより、最小限の配線でRaspberryPiに簡単に接続できます。
私のモジュールは、5ピンヘッダー付きの15x13mmの小さなPCBです。ピンの順序は他のモジュールによって異なる場合があるため、ラベルに注意して、Piから正しいワイヤを接続してください。
BMP180はBoschによって製造されており、公式のBMP180データシートにはすべての技術的な詳細が含まれています。
I2Cインターフェースの構成
このモジュールを使用するには、Raspberry PiでI2Cインターフェイスを有効にする必要があります。これは、デフォルトでは有効になっていないためです。これは非常に簡単なプロセスであり、「RaspberryPiでのI2Cインターフェイスの有効化」チュートリアルで説明されています。
ハードウェアの接続
次の表は、モジュールがRaspberyr PiのGPIOヘッダー(P1)にどのように接続されているかを示しています。図については、私のGPIOヘッダーガイドを参照してください。
モジュールPCB | 説明 | GPIOヘッダーピン |
---|---|---|
VCC | 3.3V | P1-01 |
GND | グラウンド | P1-06 |
SCL | I2C SCL | P1-05 |
SDA | I2C SDA | P1-03 |
3.3V | – | – |
これはブレッドボードのセットアップの図です。モジュールの4本のピンをPiに直接接続する場合は、4本のメス-メスワイヤのみが必要です。
ブレッドボードの図は、Fritzingで定義したカスタムパーツを使用しています。ピン配置が異なる他のモジュールも利用できるため、このチュートリアルに示されているものと異なる場合は、正しいピンをPiに接続していることを確認してください。
デバイスが接続され、Piの電源がオンになっている場合、「i2cdetect」コマンドはアドレス0x77のデバイスを表示するはずです。
Pythonスクリプトの例
センサーから圧力と温度のデータを読み取るPythonスクリプトの例を次に示します:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495798 | #!/ usr / bin / python smbus から ctypes c_short = 0x77 #デフォルトのデバイスI2Cアドレス #bus =smbus.SMBus(0)#Rev 1Piは0を使用します = smbus.SMBus( 1 ) #Rev 2Piは1を使用します def convertToString(data): #バイナリデータを変換する簡単な関数 #文字列 str ((data [ 1 ] + ( 256 * 0 ])) / 1.2 ) def getShort(data、index): #データから2バイトを符号付き16ビット値として返します c_short((data [index] << 8 ) + data [index + 1 ])。value def getUshort(data、index): #データから2バイトを符号なし16ビット値として返します (data [index] << 8 ) + data [index + 1 ] def readBmp180Id(addr = デバイス): #アドレスを登録 REG_ID = 0xD0 (chip_id、chip_version) = bus.read_i2c_block_data(addr、REG_ID、 2 ) (chip_id、chip_version) def readBmp180(addr = デバイス): #アドレスの登録 REG_CALIB = 0xAA REG_MEAS = 0xF4 REG_MSB = 0xF6 REG_LSB = 0xF7 #制御レジスタアドレス CRV_TEMP = 0x2E CRV_PRES = 0x34 #オーバーサンプル設定 = 3 #0-3 #キャリブレーションデータを読み取る #EEPROMからキャリブレーションデータを読み取る cal = bus.read_i2c_block_data(addr、REG_CALIB、 22 ) #バイトデータを単語値に変換する AC1 = getShort(cal、 0 ) AC2 = getShort(cal、 2 ) AC3 = getShort(cal、 4 ) AC4 = getUshort(cal、 6 ) AC5 = getUshort(cal、 8 ) AC6 = getUshort(cal、 10 ) B1 = getShort(cal、 12 ) B2 = getShort(cal、 14 ) MB = getShort(cal、 16 ) MC = getShort(cal、 18 ) MD = getShort(cal、 20 ) #温度の読み取り bus.write_byte_data(addr、REG_MEAS、CRV_TEMP) time.sleep( 0.005 ) (msb、lsb) = bus.read_i2c_block_data(addr、REG_MSB、 2 ) UT = (msb << 8 ) + lsb #プレッシャーを読む bus.write_byte_data(addr、REG_MEAS、CRV_PRES + (OVERSAMPLE << 6 )) time.sleep( 0.04 ) (msb、lsb、xsb) = bus.read_i2c_block_data(addr、REG_MSB、 3 ) UP = ((msb << 16 ) + (lsb << 8 ) + xsb)>>( 8 - OVERSAMPLE) #温度を調整する X1 = ((UT - AC6) * AC5)>> 15 X2 = (MC << 11 ) / (X1 + MD) B5 = X1 + X2 = (B5 + 8 )>> 4 #圧力を調整する B6 = B5 - 4000 B62 = B6 * B6>> 12 X1 = (B2 * B62)>> 11 X2 = AC2 * B6>> 11 X3 = X1 + X2 B3 = (((AC1 * 4 + X3)< = P + ((X1 + X2 + 3791 )>> 4 ) (温度 / 10.0 、pressure / 100.0 ) def main(): (chip_id、chip_version) = readBmp180Id() "チップID:" 、chip_id "バージョン:" 、chip_version (温度、圧力) = readBmp180() "温度:" 、温度、 "C" "Pressure:" 、プレッシャー、 "mbar" 場合 __ name__ = = "__ main __" : main() |
次のコマンドを使用して、このスクリプトをPiに直接ダウンロードすることをお勧めします:
wget https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/bmp180.py
または、ブラウザでこのリンクを使用してください。
それを実行するには、次のコマンドを使用できます:
詳細:BMP180I2Cデジタル気圧センサー
製造プロセス