|
|
|
|
Debian | コードネーム | 年月 | 備考 | (参考)Ubuntuでの該当名称 |
Debian 11 | Bullseye | 2021/08/14~ | 2021/11からラズパイにリリース | Focal Fossa 20.04 LTS ? |
Debian 10 | Buster | 2019/06/20~ | 2019/06からラズパイ4対応 | Bionic 18.04 LTS |
Debian 9 | Stretch | 2017/08/16~ | 2018/03からラズパイ3B+対応 | Xenial 16.04 LTS |
Debian 8 | Jessie | 2015~ | 2016/02からラズパイ3対応 | Trusty 14.04 LTS |
Debian 7 | Wheezy | 2013~2016 | ||
Debian 6.0 | Squeeze | 2011~2014 | ||
Debian GNU/Linux 5.0 | Lenny | 2009~2012 |
![]() GY-91 MPU9250 BMP280 10DOF Acceleration Gyroscope Compass 9 Shaft Sensor ASIN: B01CG26A3A |
![]() EasyWordMall GY-68 BMP180 大気圧センサーモジュールArduino用 ASIN: B0112A1ZD2 |
![]() 【ノーブランド 品】大気圧 センサ モジュール 気圧 センサー BMP180 気圧センサー ASIN: B01C2I7CMG |
![]() SODIAL(R)BMP180デジタル気圧センサボードモジュール8ピンArduinoスペアBMP085用 ASIN: B00YM2SFK4 |
$ sudo raspi-config $ sudo apt-get -y install python-smbus i2c-tools $ sudo i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- 76 -- 0x76に存在するのを確認する(SDOはプルダウンなので I2Cアドレスは 0x76となる)
# -*- coding: utf-8 -*- #!/usr/bin/python # http://www.neko.ne.jp/~freewing/raspberry_pi/ # Copyright (c)2016 FREE WING, Y.Sakamoto import RPi.GPIO as GPIO import os import smbus import time # BMP280 Class # https://www.bosch-sensortec.com/bst/products/all_products/bmp280 class BMP280(): DevAdr = 0x76 myBus = "" if GPIO.RPI_INFO['P1_REVISION'] == 1: myBus = 0 else: myBus = 1 b = smbus.SMBus(myBus) t_fine = 0 cal_T1 = 0 cal_T2 = 0 cal_T3 = 0 cal_P1 = 0 cal_P2 = 0 cal_P3 = 0 cal_P4 = 0 cal_P5 = 0 cal_P6 = 0 cal_P7 = 0 cal_P8 = 0 cal_P9 = 0 def setUp(self): self.b.write_byte_data(self.DevAdr, 0xE0, 0xB6) # SOFT_RESET time.sleep(0.1) self.b.read_byte_data(self.DevAdr, 0xD0) # ID=0x58 BMP280 self.b.write_byte_data(self.DevAdr, 0xF4, 0x6F) # ctrl_meas self.cal_T1 = self.getValue16(0x88) self.cal_T2 = self.getValue16s(0x8A) self.cal_T3 = self.getValue16s(0x8C) self.cal_P1 = self.getValue16(0x8E) self.cal_P2 = self.getValue16s(0x90) self.cal_P3 = self.getValue16s(0x92) self.cal_P4 = self.getValue16s(0x94) self.cal_P5 = self.getValue16s(0x96) self.cal_P6 = self.getValue16s(0x98) self.cal_P7 = self.getValue16s(0x9A) self.cal_P8 = self.getValue16s(0x9C) self.cal_P9 = self.getValue16s(0x9E) self.getValueTemp() self.getValuePres() / 100.0 def getValueTemp(self): val = self.getValue(0xFA) val = val>>4 val_1 = ((((val>>3) - (self.cal_T1 <<1))) * (self.cal_T2)) >> 11 val_2 = (((((val>>4) - (self.cal_T1)) * ((val>>4) - (self.cal_T1))) >> 12) * (self.cal_T3)) >> 14 val_f = val_1 + val_2 self.t_fine = val_f return ((val_f * 5 + 128) >> 8) / 100.0 def getValuePres(self): val = self.getValue(0xF7) val = val>>4 val_1 = (self.t_fine) - 128000 val_2 = val_1 * val_1 * self.cal_P6 val_2 = val_2 + ((val_1*self.cal_P5)<<17) val_2 = val_2 + ((self.cal_P4)<<35) val_1 = ((val_1 * val_1 * self.cal_P3)>>8) + ((val_1 * self.cal_P2)<<12) val_1 = ((((1)<<47)+val_1))*(self.cal_P1)>>33 if val_1 == 0: return 0 p = 1048576 - val p = (((p<<31) - val_2)*3125) / val_1 val_1 = ((self.cal_P9) * (p>>13) * (p>>13)) >> 25 val_2 = ((self.cal_P8) * p) >> 19 p = ((p + val_1 + val_2) >> 8) + ((self.cal_P7)<<4) return p/256.0 def getValueAlti(self): seaLevelhPa = 1013.25 p = self.getValuePres() p = p/100.0 alti = 44330 * (1.0 - pow(p / seaLevelhPa, 0.1903)); return alti def getValue16(self, adr): data = self.b.read_i2c_block_data(self.DevAdr, adr, 2) tmp = data[1] tmp = tmp<<8 tmp = tmp | data[0] return tmp def getValue16s(self, adr): data = self.b.read_i2c_block_data(self.DevAdr, adr, 2) tmp = data[1] sign = tmp & 0x80 tmp = tmp & 0x7F tmp = tmp<<8 tmp = tmp | data[0] if sign > 0: tmp = tmp - 32768 return tmp def getValue(self, adr): self.b.write_byte(self.DevAdr, adr) data = self.b.read_i2c_block_data(self.DevAdr, adr, 3) tmp = data[0] tmp = tmp<<8 tmp = tmp | data[1] tmp = tmp<<8 tmp = tmp | data[2] tmp = tmp & 0xFFFFFF return tmp # tmp = self.b.read_word_data(self.DevAdr, adr) # MAIN myBMP280 = BMP280() myBMP280.setUp() # LOOP for a in range(1000): t = myBMP280.getValueTemp() p = myBMP280.getValuePres() / 100.0 a = myBMP280.getValueAlti() os.system("clear") print 'Temp.= %7.2f C' % t print 'Pres.= %7.2f hPa' % p print 'Alti.= %7.2f m' % a time.sleep(0.5)
$ sudo apt-get -y install python-smbus i2c-tools $ nano BMP280.py $ python BMP280.py
加速度センサ | MMA7455L NXP | 使い方の説明 | 0x1D | (W:0x32 R:0x33) | MMA7455 三軸加速度センサモジュール AQM0802Aと一緒に使えない相性? |
地磁気センサ | HMC5883L Honeywell | 使い方の説明 | 0x1E | (W:0x3C R:0x3D) | CJ-M49 デジタルコンパスモジュール 3軸地磁気センサ |
RFID NFCリーダライタ | NXP PN532 | 使い方の説明 | 0x24 | (W:0x48 R:0x49) | ELECHOUSE NFC MODULE V3 |
8ビット I/Oエクスパンダ | PCF8574 Texas Instruments | 使い方の説明 | 0x2F | (W:0x5E R:0x5F) | FC-113 PCF8574 キャラクタ液晶モジュール接続用 |
キャラクタ液晶 8文字x2行 | 秋月 AQM0802A ST7032 Sitronix | 使い方の説明 | 0x3E | (W:0x7E R:0x7F) | 秋月の AQM0802液晶はラズパイ側の回路が原因の癖が有ります。 MMA7455と一緒に使えない相性? PCA9515AD I2Cバスリピーターとの併用を推奨 |
キャラクタ液晶モジュール 16文字×2行 | 秋月 AQM1602A ST7032 Sitronix | 使い方の説明 | 0x3E | (W:0x7E R:0x7F) | 秋月の AQM1602A液晶モジュール |
湿度センサ | HTU21D TE Connectivity | 使い方の説明 | 0x40 | (W:0x80 R:0x81) | GY-21 温度、湿度センサーモジュール |
AD/DA変換 | PCF8591 NXP | 使い方の説明 | 0x48 | (W:0x90 R:0x91) | YL-40 8ビットA/D & D/Aコンバータ |
温度センサ | LM75A Texas Instruments | 使い方の説明 | 0x4F A0-A2=H | (W:0x9E R:0x9F) | A0~A2を "H"に設定で 0x4F デフォルト 0x48 |
3軸加速度センサ | ADXL345 Analog Devices | 使い方の説明 | 0x53 | (W:0xA6 R:0xA7) | GY-291 3軸加速度センサモジュール |
I2Cメモリ | AT24C32 (4KBメモリ) | 0x57 | (W:0xAE R:0xAF) | ZS-042 下記の RTCモジュールに搭載 | |
RTC リアルタイムクロック | DS3231 現 Maxim 旧 Dallas Semiconductor | 使い方の説明 | 0x68 | (W:0xD0 R:0xD1) | ZS-042 温度補償水晶発振器(TCXO)および水晶を内蔵する低コスト、 超高精度 I2Cリアルタイムクロック(RTC) |
赤外線アレイセンサ | AMG8833 Panasonic | 使い方の説明 | 0x68 | (W:0xD0 R:0xD1) | AMG8833 赤外線アレイセンサ Grid-EYEモジュール サーモグラフィーごっこが可能 |
6軸 ジャイロ+加速度センサ | MPU-6050 InvenSense | 使い方の説明 | 0x68 ADO=L | (W:0xD0 R:0xD1) | GY-521 三軸加速度センサ・三軸ジャイロセンサモジュール、 AD0端子 プルアップ時=0x69、 AD0端子 プルダウン時=0x68 |
9軸 ジャイロ+加速度+地磁気センサ | MPU-9150 InvenSense | 0x69 | (W:0xD0 R:0xD1) | MPU-6050に地磁気センサーを追加した最強センサー | |
9軸 ジャイロ+加速度+地磁気センサ | MPU-9250 InvenSense | 0x69 | (W:0xD0 R:0xD1) | MPU-9150の改良型、3軸加速度 + 3軸ジャイロ + 3軸コンパス | |
気圧/気温/高度センサ | BMP180 Bosch Sensortec | 0x77 | (W:0xEE R:0xEF) | BMP085の改良型 | |
気圧/温度/高度センサ | BMP280 Bosch Sensortec | 使い方の説明 | 0x76 SDO=L | (W:0xEC R:0xED) | BMP180の改良型、温度・気圧(高度)センサー SDO端子 プルアップ時=0x77、 SDO端子 プルダウン時=0x76 |
湿度/気圧/温度/高度センサ | BME280 Bosch Sensortec | 0x76 SDO=L | (W:0xEC R:0xED) | BMP280の進化型、湿度・温度・気圧(高度)の 4種類の環境情報を取得できる(湿度が追加になった) SDO端子 プルアップ時=0x77、 SDO端子 プルダウン時=0x76 | |
照度、近接センサ | APDS-9930 Broadcom | 使い方の説明 | 0x39 | (W:0x72 R:0x73) | |
RGB色センサ、ジェスチャー、照度、近接センサ | APDS-9960 Broadcom | 使い方の説明 | 0x39 | (W:0x72 R:0x73) | |
RGB色センサ | TCS34725 TAOS | 使い方の説明 | 0x29 | (W:0x52 R:0x53) | |
12点 静電タッチセンサ | MPR121 Freescale Semiconductor | 使い方の説明 | 0x5A | (W:0xB4 R:0xB5) | |
有機LEDモジュール 128x64 0.96インチ | SSD1306 SOLOMON SYSTECH | 使い方の説明 | 0x3C | (W:0x78 R:0x79) | DC='L'で 0x3C、DC='H'で 0x3D |