🐧 Linux 総合学習プラットフォーム
実機制御 GPIO/I2C/SPI・RT ・ 中級〜上級

ミニ工作——I2C温度センサを記録する

ここまで学んだ部品を1本の線でつなぎ、小さな作品を完成させます。作るのは「温度をずっと記録し続ける装置」。センサをI2Cで4本つなぎ、値を読み、毎分CSVに書き足し、tailで眺める——それだけです。配線・検出・読み取り・自動化・観察という組込みの基本動作がひと通り登場し、これまで別々に学んだ自動化トラックやシェルの知識がここで合流します。難しい理屈より、まず一度動かして「記録が増えていく」瞬間を味わってほしいところです。

ここまでで、GPIO・I2C・シリアルといった部品を1つずつ触ってきた。今回はそれらを1本の線でつなぎ、小さいけれど「ちゃんと役に立つ作品」を完成させる。作るのは、温度を延々と記録し続ける装置だ。

やることは4段だけ。センサをつなぐ→値を読む→ファイルに記録する→眺める。難しい理屈は後回しでいい。まずは記録がじわじわ増えていく瞬間を、自分の手で味わってほしい。

🔗
たとえこれは「気温を毎分メモしてくれる小さな記録係」を雇うようなものだ。人間なら眠ってしまうが、この係は文句も言わず、毎分きっちり数字を1行ずつノート(CSV)に書き足し続ける。

🧭 センサ→読む→記録→見る

全体の流れを最初につかんでおく。温度センサが測った値を、Linux が I2C 経由で読み取り、その数字を CSV ファイルに1行追記し、あとから tail で眺める——この一本道だ。

この4段は、実は組込みの入出力の縮図でもある。物理世界(温度)をデジタルの数字にし、保存し、人間が読む。ここが理解できれば、センサが照度計でも湿度計でも、作り方の骨格は同じだ。

温度センサ物理→数字読むi2cget記録CSVに追記眺めるtail -f

🔌 配線は4本(VCC/GND/SDA/SCL)

I2C センサの配線は、たった4本で済む。電源を送る VCC、基準の GND、そしてデータをやり取りする SDA、タイミングを刻む SCL だ。この4本を基板の対応するピンに挿すだけで準備は終わる。

VCC は電圧を間違えないことだけ気をつける。3.3V のセンサに 5V を掛けると壊れることがある。センサの表記を見て、基板側の同じ電圧のピンにつなぐ。残りの GND・SDA・SCL は名前どうしを合わせればよい。

💡
ポイントI2C は「電源2本(VCC/GND)+信号2本(SDA/SCL)」の合計4本。UART と違い、SDA/SCL は交差させず名前どおり素直につなぐ。まずここを落ち着いて確認する。

🔍 i2cdetect で発見する

配線したら、いきなり読みにいく前に「センサがちゃんと見えているか」を確かめる。ここで使うのが i2cdetect だ。I2C バス上にいる機器のアドレス(背番号のようなもの)を一覧してくれる。

$ i2cdetect -y 1 0 1 2 ... 40: -- -- -- 48 -- -- ... (アドレス 0x48 に何かがいる、と分かる。この番号を次で使う)

表に番号が現れれば、配線は成功だ。逆に何も出なければ、たいてい配線か電源の問題なので、読み取りに進む前にここで引き返す。切り分けの関所として、この一手が効く。

つまずきi2cdetect の -y 1 の 1 は「I2Cバスの番号」だ。基板によって 0 だったり 1 だったりする。片方で出なければもう片方を試す。Raspberry Pi の最近の機種では 1 が定番だ。

📖 i2cget または Python で読む

アドレスが分かれば、いよいよ値を読む。手軽なのは i2cget で、指定したアドレスの指定した場所から、生の数値をそのまま1つ取り出せる。まず「読めること」を確認するのに向く。

$ i2cget -y 1 0x48 0x00 w 0x1a0c (バス1・アドレス0x48・レジスタ0x00から2バイト読む。これを温度に換算する)

ただし i2cget が返すのは「生の数字」で、そのままでは摂氏にならない。センサごとの計算式で変換が要る。この計算やCSV整形まで含めると、Python で1本のスクリプトにまとめたほうが扱いやすい。

コツ最初は i2cget で「とにかく数字が返る」ことだけ確認し、換算やファイル書き込みは後から Python に任せる、と段階を分けると挫折しにくい。一度に全部やろうとしないのがコツだ。

⏱️ cron で毎分CSVに追記

手で毎分コマンドを打つのは非現実的だ。そこで、以前学んだ自動化の出番になる。定期実行の cron に「1分ごとに読み取りスクリプトを走らせる」よう登録すれば、あとは装置が勝手に記録を続ける。

スクリプトの中では、1回の測定を「日時,温度」の1行にして、CSV ファイルの末尾に追記する。追記は上書きではないので、行がどんどん積み上がり、時系列の記録になっていく。

* * * * * /home/pi/read_temp.sh >> /home/pi/temp.csv (crontab に書く。毎分スクリプトを走らせ、出力を temp.csv に足していく)
cron毎分おこす読み取り1行つくるtemp.csv12:00,23.412:01,23.512:02,23.5 ←追記

👀 tail -f で眺める

記録が育っているかは、tail -f で確かめられる。このコマンドは、ファイルの末尾を表示したまま「新しい行が増えるたびに自動で足して見せてくれる」。まさに記録の実況中継だ。

$ tail -f /home/pi/temp.csv 12:00,23.4 12:01,23.5 (新しい行が1分ごとに下に追加されていくのが見える。止めるのは Ctrl-c)

1分待って新しい行が1本増えれば、装置は完璧に動いている。この「増えた1行」を見た瞬間が、この工作のクライマックスだ。

🌉 自動化・シェルが合流する

この小さな作品には、これまで別々に学んだものが集まっている。I2C の読み取り、シェルスクリプトでの整形、cron による定期実行、追記リダイレクト——点だった知識が、ここで1本の線につながる。

💡
ポイントセンサ工作は「新しい難所」ではなく、既に学んだ部品の組み合わせだ。I2C+シェル+cron+リダイレクトが合流して1つの装置になる。ここが分かれば、湿度でも照度でも同じ型で作れる。

記録が溜まれば、次は表計算で温度の折れ線グラフを描いたり、ある温度を超えたら通知したり——遊び方はいくらでも広がる。まずはこの「増え続けるCSV」を、自分の手で立ち上げてみてほしい。

この項目に出てくる用語

センサロギングせんさろぎんぐ
センサの測定値を定期的に読み取り、時系列で記録し続けること。
CSV追記しーえすぶいついき
1行=1レコードのCSVファイル末尾に、新しい行を足していく記録方法。

関連コマンド

i2cgeti2cdetect

▶ 学習アプリでこの続きを学ぶ・演習する