古人智慧

Just Do it!
上士聞道,勤而行之;中士聞道,若存若亡;下士聞道,大笑之。不笑,不足以爲道。
~ 道德經 41

搜尋此網誌

Translation

2015年5月10日 星期日

[Banana Pro]測試Linux的I2C tools [GY-273] [HMC5883]三軸電子羅盤 e-compass




用了Arduino之後,買了不少module都是I2C的interface。
本次實驗就用GY-273電子羅盤來試試Banana Pro的I2C的功能。
因為Bananian Linux是非常乾淨的OS,必須先安裝I2C tools

regis@bpro:~$ sudo apt-get install i2c-tools python-smbus 

安裝成功之後,會有這幾個features
i2cdetect – 用來列舉I2C bus和上面所有的裝置
i2cdump – 顯示裝置上所有register的值
i2cget – 讀取裝置上某個register的值
i2cset – 寫入裝置上某個register





首先,要注意先把GY-273在Banana斷電的狀態下把線接好,確定正負級與電壓,然後再上電。

接線如下:
Pin 1 - 3.3V 接到GY﹣273的 VCC
Pin 3 - SDA 接到GY﹣273的 SDA
Pin 5 - SCL 接到GY﹣273的 SCL
Pin 6 - GND 接到GY﹣273的 GND




上電後,進入Linux,先列出系統支援I2C bus

regis@bpro:~$ ls -l /dev/i2c*      

crw------- 1 root root 89, 0 Jan  1  2010 /dev/i2c-0
crw------- 1 root root 89, 1 Jan  1  2010 /dev/i2c-1
crw------- 1 root root 89, 2 Jan  1  2010 /dev/i2c-2
crw------- 1 root root 89, 3 Jan  1  2010 /dev/i2c-3
crw------- 1 root root 89, 4 Jan  1  2010 /dev/i2c-4

有5個bus,接下來就一個個來掃看看是否有接上device。

regis@bpro:~$ sudo i2cdetect -y 0

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

沒有任何device,再試下一個。。。直到

regis@bpro:~$ sudo i2cdetect -y 2

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

0x1e是HMC5883的I2C address,看來GY-273成功掛上Banana。

在對它做Read&Write之前,先了解它的register,還有相對應的value







用 continuous-measurement mode來做實驗:

先設定模式
regis@bpro:~$ i2cset -f -y 2 0x1e 0x00 0x70
regis@bpro:~$ i2cset -f -y 2 0x1e 0x01 0xa0
regis@bpro:~$ i2cset -f -y 2 0x1e 0x02 0x00

然後驗證是否成功:

regis@bpro:~$ i2cdump -f -y 2 0x1e
No size specified (using byte-data access)
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: 70 a0 00 00 84 ff d3 ff 58 03 48 34 33 00 00 3c    p?..?.?.X?H43..<
10: 00 00 00 00 00 00 00 00 00 00 00 1f 8b 05 e8 10    ...........?????
20: 00 00 00 00 00 00 00 00 10 00 00 00 00 00 00 00    ........?.......
30: 00 00 00 14 06 46 66 00 90 00 07 00 00 00 00 00    ...??Ff.?.?.....
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
80: 70 a0 00 00 84 ff d2 ff 58 03 48 34 33 00 00 3c    p?..?.?.X?H43..<
90: 00 00 00 00 00 00 00 00 00 00 00 1f 8b 05 e8 10    ...........?????
a0: 00 00 00 00 00 00 00 00 10 00 00 00 00 00 00 00    ........?.......
b0: 00 00 00 14 06 46 66 00 90 00 07 00 00 00 00 00    ...??Ff.?.?.....
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................


regis@bpro:~$ i2cdump -f -y 2 0x1e
No size specified (using byte-data access)
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: 70 a0 00 00 8a ff e3 ff 57 03 48 34 33 00 00 3c    p?..?.?.W?H43..<
10: 00 00 00 00 00 00 00 00 00 00 00 1f 8b 05 e8 10    ...........?????
20: 00 00 00 00 00 00 00 00 10 00 00 00 00 00 00 00    ........?.......
30: 00 00 00 14 06 46 66 00 90 00 07 00 00 00 00 00    ...??Ff.?.?.....
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
80: 70 a0 00 00 88 ff e0 ff 56 03 48 34 33 00 00 3c    p?..?.?.V?H43..<
90: 00 00 00 00 00 00 00 00 00 00 00 1f 8b 05 e8 10    ...........?????
a0: 00 00 00 00 00 00 00 00 10 00 00 00 00 00 00 00    ........?.......
b0: 00 00 00 14 06 46 66 00 90 00 07 00 00 00 00 00    ...??Ff.?.?.....
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................

把資料dump出來可以發現, "H43"是HMC5883的ID,而register 3~8可以看出來數值會隨著搖擺GY-273時而變化,證明本次實驗成功。
所以,用I2C tools可以快速確定是否正確安裝I2C的device。



總結:
1. 先確定硬體接線是否正確, 3.3v,GND,SCL,SDA這4條線
2. 安裝I2C tools
3. 研讀module的datasheet理解register
4. 用I2C tools來確定是否安裝正確



接下來準備用Python和C/C++來寫code驗證。








參考其他高手文章:
http://ddddiy.blogspot.tw/2014/04/gy-273-hmc5883-e-compass.html
http://blog.bitify.co.uk/2013/11/interfacing-raspberry-pi-and-mpu-6050.html
http://shyuanliang.blogspot.tw/2012/05/linux-i2c-tools-i2c-register.html

一些工具安裝指令:
sudo apt-get install i2c-tools python-smbus
sudo apt-get install python-setuptools
sudo apt-get install libffi-dev
測試程式Python:
git clone https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git

沒有留言:

張貼留言