ミニ工作——I2C温度センサを記録する
ここまで学んだ部品を1本の線でつなぎ、小さな作品を完成させます。作るのは「温度をずっと記録し続ける装置」。センサをI2Cで4本つなぎ、値を読み、毎分CSVに書き足し、tailで眺める——それだけです。配線・検出・読み取り・自動化・観察という組込みの基本動作がひと通り登場し、これまで別々に学んだ自動化トラックやシェルの知識がここで合流します。難しい理屈より、まず一度動かして「記録が増えていく」瞬間を味わってほしいところです。
ここまでで、GPIO・I2C・シリアルといった部品を1つずつ触ってきた。今回はそれらを1本の線でつなぎ、小さいけれど「ちゃんと役に立つ作品」を完成させる。作るのは、温度を延々と記録し続ける装置だ。
やることは4段だけ。センサをつなぐ→値を読む→ファイルに記録する→眺める。難しい理屈は後回しでいい。まずは記録がじわじわ増えていく瞬間を、自分の手で味わってほしい。
🧭 センサ→読む→記録→見る
全体の流れを最初につかんでおく。温度センサが測った値を、Linux が I2C 経由で読み取り、その数字を CSV ファイルに1行追記し、あとから tail で眺める——この一本道だ。
この4段は、実は組込みの入出力の縮図でもある。物理世界(温度)をデジタルの数字にし、保存し、人間が読む。ここが理解できれば、センサが照度計でも湿度計でも、作り方の骨格は同じだ。
🔌 配線は4本(VCC/GND/SDA/SCL)
I2C センサの配線は、たった4本で済む。電源を送る VCC、基準の GND、そしてデータをやり取りする SDA、タイミングを刻む SCL だ。この4本を基板の対応するピンに挿すだけで準備は終わる。
VCC は電圧を間違えないことだけ気をつける。3.3V のセンサに 5V を掛けると壊れることがある。センサの表記を見て、基板側の同じ電圧のピンにつなぐ。残りの GND・SDA・SCL は名前どうしを合わせればよい。
🔍 i2cdetect で発見する
配線したら、いきなり読みにいく前に「センサがちゃんと見えているか」を確かめる。ここで使うのが i2cdetect だ。I2C バス上にいる機器のアドレス(背番号のようなもの)を一覧してくれる。
表に番号が現れれば、配線は成功だ。逆に何も出なければ、たいてい配線か電源の問題なので、読み取りに進む前にここで引き返す。切り分けの関所として、この一手が効く。
📖 i2cget または Python で読む
アドレスが分かれば、いよいよ値を読む。手軽なのは i2cget で、指定したアドレスの指定した場所から、生の数値をそのまま1つ取り出せる。まず「読めること」を確認するのに向く。
ただし i2cget が返すのは「生の数字」で、そのままでは摂氏にならない。センサごとの計算式で変換が要る。この計算やCSV整形まで含めると、Python で1本のスクリプトにまとめたほうが扱いやすい。
⏱️ cron で毎分CSVに追記
手で毎分コマンドを打つのは非現実的だ。そこで、以前学んだ自動化の出番になる。定期実行の cron に「1分ごとに読み取りスクリプトを走らせる」よう登録すれば、あとは装置が勝手に記録を続ける。
スクリプトの中では、1回の測定を「日時,温度」の1行にして、CSV ファイルの末尾に追記する。追記は上書きではないので、行がどんどん積み上がり、時系列の記録になっていく。
👀 tail -f で眺める
記録が育っているかは、tail -f で確かめられる。このコマンドは、ファイルの末尾を表示したまま「新しい行が増えるたびに自動で足して見せてくれる」。まさに記録の実況中継だ。
1分待って新しい行が1本増えれば、装置は完璧に動いている。この「増えた1行」を見た瞬間が、この工作のクライマックスだ。
🌉 自動化・シェルが合流する
この小さな作品には、これまで別々に学んだものが集まっている。I2C の読み取り、シェルスクリプトでの整形、cron による定期実行、追記リダイレクト——点だった知識が、ここで1本の線につながる。
記録が溜まれば、次は表計算で温度の折れ線グラフを描いたり、ある温度を超えたら通知したり——遊び方はいくらでも広がる。まずはこの「増え続けるCSV」を、自分の手で立ち上げてみてほしい。