Using the beaglebone as a weatherstation [Koen's blog] 辺りを参考に I2C 温度センサデバイス LM73 を I2C2 につないでみた。
これはポートを pull-up すべきところが pull-down されているためであるらしい。mux をみると 0x63 であるから、なるほど pull-down になっている。MODE は 3 で I2C2 が選択されている。# i2cdetect -r -y 3 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: [ 98.424914] omap_i2c omap_i2c.3: controller timed out -- [ 99.424914] omap_i2c omap_i2c.3: controller timed out -- [ 100.424911] omap_i2c omap_i2c.3: controller timed out -- [ 101.424916] omap_i2c omap_i2c.3: controller timed out -- [ 102.424908] omap_i2c omap_i2c.3: controller timed out ^C #
で、これを pull-up とするには 0x73 とすれば良い。# cat /sys/kernel/debug/omap_mux/uart1_rtsn name: uart1_rtsn.i2c2_scl (0x44e1097c/0x97c = 0x0063), b NA, t NA mode: OMAP_PIN_OUTPUT | OMAP_MUX_MODE3 signals: uart1_rtsn | NA | d_can0_rx | i2c2_scl | spi1_cs1 | NA | NA | NA # cat /sys/kernel/debug/omap_mux/uart1_ctsn name: uart1_ctsn.i2c2_sda (0x44e10978/0x978 = 0x0063), b NA, t NA mode: OMAP_PIN_OUTPUT | OMAP_MUX_MODE3 signals: uart1_ctsn | NA | d_can0_tx | i2c2_sda | spi1_cs0 | NA | NA | NA #
こうしておいて再度バスの様子を見る。# echo 0x73 > /sys/kernel/debug/omap_mux/uart1_rtsn # cat /sys/kernel/debug/omap_mux/uart1_rtsn name: uart1_rtsn.i2c2_scl (0x44e1097c/0x97c = 0x0073), b NA, t NA mode: OMAP_PIN_OUTPUT | OMAP_MUX_MODE3 signals: uart1_rtsn | NA | d_can0_rx | i2c2_scl | spi1_cs1 | NA | NA | NA # echo 0x73 > /sys/kernel/debug/omap_mux/uart1_ctsn # cat /sys/kernel/debug/omap_mux/uart1_ctsn name: uart1_ctsn.i2c2_sda (0x44e10978/0x978 = 0x0073), b NA, t NA mode: OMAP_PIN_OUTPUT | OMAP_MUX_MODE3 signals: uart1_ctsn | NA | d_can0_tx | i2c2_sda | spi1_cs0 | NA | NA | NA #
ここに LM73 (スレーブアドレス 100100=0x48)をつなぐと(p9-19:I2C2_SCL, P9-20:SDA)、このようになる。# i2cdetect -r -y 3 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- UU -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- #
そして Linux カーネルに対し、アドレス 0x48 に LM73 が接続されたことを指示する(How to instantiate I2C devices)。I2C2 は Linux で i2c-3 に割り当てられている。# i2cdetect -r -y 3 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- UU -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- #
確認。このようにできるのは LM73 用のドライバーモジュールが用意されているためである。この後で i2cdetect を実行すると '48' の部分が 'UU' になっている。# echo lm73 0x48 > /sys/class/i2c-adapter/i2c-3/new_device #
でもって、センサの出力値を取ってみる。# dmesg | grep -i lm73 [ 2264.522285] i2c i2c-3: new_device: Instantiated device lm73 at 0x48 [ 2264.548761] lm73 3-0048: hwmon0: sensor 'lm73' #
これを 1/1000 すると摂氏での温度となる。25.5 度と実際より多少高い値になっているようだが、まあ良しとしておこう。# cat /sys/bus/i2c/drivers/lm73/3-0048/temp1_input 25500 #
# cat weatherstation/bmp085-pressure.js exports.tempConfig = { file: "/sys/bus/i2c/drivers/lm73/3-0048/temp1_input", // "/sys/bus/i2c/drivers/bmp085/3-0077/temp0_input", unit: "° C", delay: 2000, scale: 1000, // 10, rangeHigh: 40, rangeLow: -20, }; #
おそらく携帯電話等からは投稿できません。日本語文字列を含まないコメントやトラックバック、および当サイトへの言及を含まないトラックバックは御遠慮いただいております。また、90日以上経過した記事へのコメントはできません。