ファンレスPCで24時間運転にチャレンジ (2) I2Cインターフェース
ファンレスPCの中には、I/Oが用意されている製品もあります。今回使っているJ5005、インテルの資料によればデバイスにはI/Oピンが用意されているようなのですが、ASRockのマザーボードには出ていません。COMポート以外にUARTコネクタがあります。
PCには複数のI2C(SMBus)バスが利用され、CPUの温度やPCIeバスの情報のやり取りに使われています。それらの多くは、情報が公開されていません。
●USB-I2Cボード
FT200XDやCP2112のようなUSBとI2Cを変換するデバイスがあります。しかし、プログラミングがC言語だけに対応しているなど、簡単に使えそうもありません。今回入手したUSB-I2CボードはFTDIのデバイスを搭載し、Windows10のPython3用ドライバが用意されています。
ボードの名称はI2CDriver、サポートされているソフトウェアは次のとおりです。
- Windows/Mac/Linux GUI
- Windows/Mac/Linux command-line
- Python 2 and 3 bindings
- Windows/Mac/Linux C/C++ bindings
ここでは、Windows10+Python3の環境で利用します。
ボード上には4組のI2Cヘッダピンが用意されています。電圧は3.3Vです。最大入力は5V(トレラント)です。
(※)入手先 https://www.crowdsupply.com/excamera/i2cdriver
●Python3のインストール
Pythonにはバージョンに2と3があり、2020年頭で2の更新は止まるようです。したがって、3をWindows10にインストールします。
Pythonのライブラリを利用する機会は多くあります。そのインストール方法は、ソースを入手してコンパイルする方法と、pipというツールを使う2通りの方法があります。Windows用のPythonのインストールでは、pipコマンドも同時にインストールされます。
https://www.python.org/downloads/windows/
3.7.2が最新の安定板です。
3.8.0a2をダウンロードし、インストーラを実行しました。Add Python 3.8 to PATHにチェックを入れて、Install Nowをクリックしてインストールをします。
●USB-I2Cボードのドライバをインストール
タスクバーにある「ここに入力して検索」にcmdと入力してリターンをたたくと、コマンドプロンプトが起動します。次のコマンドで、Python用のドライバをインストールします。
pip install i2cdriver
一度コマンドプロンプトを閉じます。再度コマンドプロンプトを開き、pythonと入力するとPython3のが起動し、>>>プロンプトが出ます。
USBケーブルでi2cdriverボードをつなぎ、デバイスマネージャを開き、COMポート番号を控えます。>>>プロンプトで、
import i2cdriver
エラーにならなければ引き続き、
i2c = i2cdriver.I2CDriver("COM5")
i2c.scan()
マップが表示されます。
温度センサLM75Bをつないでいるので、0x4fに見つけてきました。
●LM75Bをつないで温度測定
温度センサをつないでいる様子です。i2cdriverボード上のLEDにも0x4fの表示が見えます。SDA/SCLの信号にプルアップ抵抗は取り付けていません。ボード側で用意されています。
引き続き、コマンドプロンプトで、
temp=i2cdriver.LM75B(i2c)
temp.read()
20.25とレスポンスがありました。20.25℃です。LCDディスプレイに、0x4fではなく0x48からの通信が表示されています。実は、LM75Bのスレーブ・アドレスのピンを解放にしているので、アクセスするたびにアドレスが変わってしまっています。もちろん、こんな使い方をしてはいけません。
A0、A1、A2のスレーブ・アドレスを設定するピンを全部GNDへつなぐと0x48になります。