LoginSignup
2

More than 3 years have passed since last update.

[備忘録]ラズパイにて、 /dev/i2c-3(SDA.0, SCL.0)を使用する(温度と大気圧の取得も)

Posted at

はじめに

ラズベリーパイにて、I2Cデバイスを使用する場合、
通常はSDA.1, SCL.1(BCM2, BCM3)を利用します。

今回は、SDA.0, SCL.0(BCM0, BCM1)を利用する方法を紹介します。

IMG_8169 (1).jpg

紹介する内容

  • /dev/i2c-3の設定方法
  • BMP180による動作確認undefined

作業環境

  • ラズベリーパイ3P
    • Linux raspberrypi 4.14.79-v7+ #1159 SMP Sun Nov 4 17:50:20 GMT 2018 armv7l GNU/Linux
    • Python 3.6.6 (default, Jan 24 2019, 20:40:14)

接続図

  • 大気圧センサーBMP180を使用して説明を行います。
BMP180 ラズパイ側 備考
VCC 3.3V
GND GND
SCL SCL.0(BCM1) ※通常はSCL.1(BCM3)を使用する
SDA SDA.0(BCM0) ※通常はSDA.1(BCM2)を使用する

setuzoku.PNG

手順

現在の状態を確認する

本手順はスキップしても問題ありません。

~$ ls -l /dev/i2c-*
crw-rw---- 1 root i2c 89, 1  5月 24 16:54 /dev/i2c-1

"/dev/i2c-1"が、[SCL.1(BCM3), SDA.1(BCM2)]となります。
現時点では、SCL.0(BCM1), SDA.0(BCM0)は使用できません。

/boot/config.txt を編集し、適用する

  • /boot/config.txtのファイルに、以下を追記します。
dtoverlay=i2c-gpio,i2c_gpio_sda=0,i2c_gpio_scl=1,i2c_gpio_delay_us=2
  • nanoを使用して、追記しました。
$ sudo nano /boot/config.txt 

↓最後の行に追記
dtoverlay=i2c-gpio,i2c_gpio_sda=0,i2c_gpio_scl=1,i2c_gpio_delay_us=2
  • 0, 1は、BCMにて指定します
  • i2c_gpio_delay_us=2は、100kHzの意味となります

適用するために再起動を実施します。

$ sudo reboot

適用されているかを確認する

~$ ls -l /dev/i2c-*
crw-rw---- 1 root i2c 89, 1  5月 24 16:54 /dev/i2c-1
crw-rw---- 1 root i2c 89, 3  5月 24 16:54 /dev/i2c-3

/dev/i2c-3が[SCL.0(BCM1), SDA.0(BCM0)]となります。

また、i2c-3にbmp180(device-address == 0x77)があり、

$ i2cdetect -y 3
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- 77                         

で確認できます。

BMP180(温度/大気圧)を取得する

Pythonにて動作確認を行います。

必要なライブラリをインストールする

$ pip install smbus

コードの修正をする

m-rtijn/bmp180
を使用させていただきます。

そのまま使用すると、/dev/i2c-1にアクセスしてしまい、修正が必要となります。

修正箇所は以下となります。

ファイル名:bmp180.py

import smbus
import math
from time import sleep

class bmp180:
    # Global variables
    address = None
    # bus = smbus.SMBus(1)  # comment
    bus = smbus.SMBus(3) # add

動作を確認する

ファイル構成

$ ls -l
-rw-r--r-- 1 pi pi 6941  5月 24 17:41 bmp180.py
-rw-r--r-- 1 pi pi 6941  5月 24 17:41 sample.py

sample.py

from bmp180 import bmp180

bmp = bmp180(0x77)

print("Temp: " + str(bmp.get_temp()) + " Celcius")
print("Pressure: " + str(bmp.get_pressure()) + " Pascal")
print("Altitude: " + str(bmp.get_altitude()) + " meter")

実行結果

$ python3 sample.py 
Temp: 32.6840866979166 Celcius
Pressure: 100093.18191775003 Pascal
Altitude: 0.1028604404914446 meter

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2