昨天吃了空, 拿出樹莓派玩, 想試試用它放個高清碟是啥效果,結果悲劇的是高清碟沒放出, 還把系統搞死了. 沒法只好重裝了系統, 也好, 就隨便記錄了下從BMP085上讀取數據的整個過程.
因為咱對硬件不熟悉, 也就不羅嗦樹莓派系統怎么啟動, 傳感器怎么連接等等問題了, 反正這些問題我全是google來的. 這里我從樹莓派啟動完成, BMP085連接完成開始說了.
1. 激活I2C總線
BMP085傳感器使用的是I2C總線, 要想訪問連接在上面的BMP085, 就必須先激活I2C總線, 因為默認情況下, 樹莓派是關閉I2C總線的.
a. 修改系統'模塊黑名單'配置
如下命令, 將i2c總線從系統默認的黑名單中剔除
pi@raspberrypi:~/Adafruit-Raspberry-Pi-Python-Code-master/Adafruit_BMP085$ vi /etc/modprobe.d/raspi-blacklist.conf
# blacklist spi and i2c by default (many users don't need them)
blacklist spi-bcm2708
blacklist i2c-bcm2708
注釋掉i2c模塊配置
#blacklist i2c-bcm2708
b. 激活i2c總線
pi@raspberrypi:~$ sudo modprobe i2c-dev
重啟后, 通過下列命令可以看到i2c總線已經激活,可以使用了.
pi@raspberrypi:~$ ls /dev/i2c*
/dev/i2c-0 /dev/i2c-1
或者,
pi@raspberrypi:~$ sudo i2cdetect -l
i2c-0 i2c bcm2708_i2c.0 I2C adapter
i2c-1 i2c bcm2708_i2c.1 I2C adapter
或者,
pi@raspberrypi:~$ 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: -- -- -- -- -- -- -- 77
這里的77, 就是我們的BMP085了.(BMP085在I2C設備中的編號是0x77)
到此BMP085配置完成, 可以使用了. 但記得每次樹莓派重啟后, 都需要重新激活I2C總線, 要想偷懶, 那就在系統啟動模塊配置中添加I2C模塊, 如下命令:
pi@raspberrypi:~$ sudo vi /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
# Parameters can be specified after the module name.
snd-bcm2835
i2c-bcm2708
i2c-dev
當然, 你也可以將I2C激活命令添加到類似init.d或者rc.local中去.
2. 安裝I2C運行開發庫
因為樹莓派直接支持Python, 所以這里選擇使用Python來讀取BMP085數據.
a. 安裝i2c-tools工具
sudo apt-get install i2c-tools
b.安裝python smbus庫
sudo apt-get install python-smbus
(這兩步似乎可以不做. 最早我是安裝了的, 但后來卸載了這兩個可以, 依然可以讀取的數據)
c. 下載/解壓Adafruit庫
wget http://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code/archive/master.zip
unzip master.zip
Adafruit庫是一個使用Python實現I2C操作的庫, 其中包括了多個I2C設備的代碼, BMP085只是其支持的一個傳感器.
到此, 就可以讀取BMP085的數據了.
pi@raspberrypi:~/Adafruit-Raspberry-Pi-Python-Code-master/Adafruit_BMP085$ sudo ./Adafruit_BMP085_example.py
Temperature: 25.50 C
Pressure: 1018.63 hPa
Altitude: -45.28