I2C温度センサー

投稿日: Leave a comment

ちょっと前にI2Cの温度センサー基板を買っておいたので,朝からちょっと工作をして Raspberry Piとつないでみた.

20131027_rpi_temp

 

I2C以外にもHDMI,Ether,USBがつながっている状態.I2Cの結線は回路図(PDF)から以下のようにした.

  • RPIのP1: 1 (3.3V) → 温度センサーのV+端子
  • RPIのP1: 3 (SDA1) → 温度センサーのSDA端子
  • RPIのP1: 5 (SCL1) → 温度センサーのSCL端子
  • RPIのP1: 9 (GND) → 温度センサーのGND端子

ちなみに使った温度センサーはここのTMP102という温度センサーチップの載った基板.マニュアルによるとADD0ピンの接続先でアドレスが変わるというので,基板のレジストをはがしてGNDとショートさせて,アドレスを0x48に設定した (C1の右下の半田の盛ったところ).また,SDAとSCLはRaspberry Pi上でプルアップされているので,この基板のプルアップ抵抗 R1,R2 (ともに1608サイズの1kΩ)は取り外した.

20131027_i2c_temp

で,Raspbianから動作確認.i2cdetectでアドレスを確認.

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

確かに0x48で見えている.

次に,レジスタの読み出し.

  • レジスタ0: 温度
  • レジスタ1: コンフィギュレーションレジスタ
  • レジスタ2: T_LOW
  • レジスタ3: T_HIGH

だそうなので,順に読みだしてみた.

# i2cget -y 1 0x48 0 w
0xd015
# i2cget -y 1 0x48 1 w
0xa060
# i2cget -y 1 0x48 2 w
0x004b
# i2cget -y 1 0x48 3 w
0x0050

レジスタ0の読み出し結果が0xd015になっているが,バイト0の下4ビットは0のはずなので,エンディアンが逆っぽい。0x15d0だとすると,0x15d0 = 5584, 5584/256 = 21.8125℃.ほぼ室温.

読み出しはi2cdumpでもいいみたい.

# i2cdump -y -r 0-3 1 0x48 w
     0,8  1,9  2,a  3,b  4,c  5,d  6,e  7,f
00: f015 a060 004b 0050

温度がちょっと変わったらしい.

今回はテスト用に短めの線でつないだけど,もう少し長くして情報盤 (LAN SWとTVブースターが入っている) の内部温度をモニターしようと思う.

Raspberry Pi で SPI, I2C, 1-wire デバイスを使えるようにする

投稿日: Leave a comment

Raspberry PiでI2Cと1-wireデバイスを使えるように設定した.

I2Cはモジュール追加とパッケージ追加,SPIと1-wireはモジュールの追加のみ.I2Cはここ,SPIはここ,1-wireはここを参考にした.

今回は設定のみ.動作確認はまたの機会.

1. デフォルトでデバイスを探しにいかないようなので,/etc/modulesに以下を追加

i2c-dev
spidev
w1-gpio
w1-therm

※参考にしたページにはi2c-bcm2708も追加するよう書いてあったけど,なくても認識した.

2. /etc/modprobe.d/raspi-blacklist.conf の 以下をコメントアウト

i2c-bcm2708

3. i2c-tools パッケージをインストール

$ sudo apt-get install i2c-tools

NOOBS (New Out Of Box Software)

投稿日: Leave a comment

Raspberry Pi で GPIO とか I2C とかを触ろうと思ったら NetBSD だと情報がなさ過ぎてつらいのでDebian Linux ベースの Raspbian を入れることにした.

本家のページに行ったらNOOBS (New Out Of Box Software)と書いてあるのでRaspbianのイメージを直接焼かず,NOOBSからインストールすることにした.

手順:

  1. SD AssociationのSDフォーマッターで論理サイズ調整ONでフォーマット
  2. NOOBS_v1_3.zip をダウンロードして展開
  3. osフォルダの中のraspbian以外のフォルダを削除
  4. フォーマットしたSDにコピー
  5. Raspberry Piに挿して起動

NOOBSはHDMI接続のモニターとUSBキーボード・マウスが必要なので,モニターはHDMI-DVI変換アダプター経由で液晶モニターに接続し,キーボードとマウスはセルフパワーのUSBハブ経由で接続して起動した.

電源を入れるとモニターの最適解像度を自動検出して 1280×1024 で表示.パーティションが自動的に変更され,インストーラーが起動する.そして,Raspbianにチェックを入れて Install を押すとインストールが開始される.

インストールは主にイメージの展開.しばらく待つと終了し,OSが起動し,raspi-configが立ち上がるのでホスト名とか適当に設定して終了.

デフォルトでIPv6が無効になっているようなので有効になるように設定を追加しておいた.

  1. /etc/modprobe に ipv6 を追加 (ipv6有効化)
  2. /etc/sysctl.conf に net.ipv6.conf.eth0.use_tempaddr = 2 を追加 (匿名アドレスの有効化)

 

 

NetBSD/evbarm

投稿日: Leave a comment

Fedora上でNetBSD/evbarmをビルドしたのでその記録.ここを参照した.

Linux上でのクロスコンパイルなんだけど,見た目Linuxで動作させている感じが全く現れていない.というか何の問題もなくクロスビルドできちゃうところがすごい.

ソースの取得

CVSから.コマンドはこんな感じ.

$ cd work/netbsd/current
$ export CVSROOT=anoncvs@anoncvs.NetBSD.org:/cvsroot
$ export CVS_RSH=ssh
$ cvs checkout -P src

クロスビルド環境の構築

$ cd src
$ ./build.sh -O ../objarm -m evbarm -j 4 -u -U tools

./build.sh –help するといろいろ説明が出てくるけど,-uはcleanしない,-Uは非rootユーザーでビルドを実行する,の意味.

リリースビルド

$ cd src
$ ./build.sh -O ../objarm -m evbarm -j 4 -u -U release

初回ビルドだと結構時間がかかるが一度ビルドすると差分ビルドになるので時間はかなり短縮される.

ビルドが完了すると,../objarm/releasedir/evbarm/binary/gzimg/rpi.img.gz に SDカードのイメージができる.

SDカードの作成

Windows環境でイメージファイルをSDに焼くツールはいろいろあるけど,今回使ったのは win32diskimager というツール.USBメモリーやSDカードなどのフラッシュメモリの消去やチェックができるChkFlshというツールでも書き込み可能.

どのツールを使うにせよ,SDにパーティションが切られているとうまくかけないので,Windows標準(Vista以降?)のdiskpartコマンドでパーティションを消去する.

DISKPART> list disk

  ディスク      状態           サイズ   空き   ダイナ GPT
  ###                                          ミック
  ------------  -------------  -------  -------  ---  ---
  ディスク 0    オンライン     298 GB   0 B
  ディスク 1    オンライン     947 MB   0 B

ここでは1GBのSDカードを入れたのでディスク1を選択する.

DISKPART> select disk 1

ディスク 1が選択されました。

削除する前に,念のためパーティションを確認する.

DISKPART> list part

  Partition ###  Type                Size     Offset
  -------------  ------------------  -------  -------
  Partition 1    プライマリ          56 MB    4096 KB

消して良さそうなら削除する (次のコマンドを実行した瞬間に反映されるのでEnterを押すときは慎重に)

DISKPART> clean

DiskPart はディスクを正常にクリーンな状態にしました。

いよいよrpi.imgの焼きこみ.ドライブ文字とファイルのパスを指定して書き込んでおしまい.

ファームウェアの入れ替え

このままSDカードに焼いても手元のRaspberry Piはブートせず.どうやらファームウェアがダメみたいなので,ファームウェアを最新のものに入れ替える.

ファームウェアはSD上のMSDOSファイルシステム(64MB)においてあるので,GitHubから持ってきて差し替える.

具体的には,bootフォルダのkernel.img以外をダウンロードしてSDに突っ込むだけ.

これで無事カーネルが起動してOSが立ち上がった.

以下,おまけ.

ソースを更新するには

$ cvs update -dP

カーネルを作り直すには?

src/sys/arch/evbarm/conf/ にコンフィグレーションファイルをおいて,

./build.sh -O ../objarm -m evbarm -j 4 -u -U kernel=<コンフィグレーションファイル名>

を実行すると,../objarm/sys/arch/evbarm/compile/<コンフィグレーション>/netbsd.bin ができるので,これを kernel.img にリネームしてSDカードに置く.