ファンレス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になります。