#はじめに
Pythonでプログラムを作り、そのプログラムで、外部H/Wを制御したい時があります。
例えば、ノートパソコンをPLCの24Vラインに繋いで、直接に信号の通信を行う場合です。この通信を実現するために、パソコンが制御できるI/Oポートが必要になります。
関連記事:ノートパソコンにGPIOインターフェースあれば・・
Rasbeprry PIやNVIDIA Jetson nanoのようなシングルボード小型コンピュータには、自前のGPIOポートを内蔵しているため、関連の設定が簡単です。しかし、パソコンの場合には、USB以外のI/Oポートがしないため、別途のGPIOボードを用意し、ドライバーの設置やライブラリーの設定を行う必要があります。
今回の記事では、Windowsパソコンに12ポートのGPIOボードを設置する方法をご紹介します。
#GPIOボードの紹介
GPIOボードとしてAdafruit社のFT232H Breakoutボードを使用します。日本では、スイッチサイエンスや秋月電子さんのサイトで購入可能です。
##仕様
次の表に、GPIOボードの仕様を掲載します。
パソコン側のUSB_5Vを電源としてい利用します。GPIOボードのデジタル出力レベルは3.3Vです。
デジタルI/Oポートは、12本提供します。
そして、直接にデジタル方式のセンサ・アクチュエータとの通信のため、I2CとSPI規格のインタフェースも用意されています。
パラメータ | 詳細 | 内容 |
---|---|---|
Power Pins | 5V | this is the 5V power from the USB input. |
GND | this is the common ground for all power and logic. | |
GPIO Pins | D4 to D7 | can be used as either digital inputs and outputs. |
C0 to C7 | can be used as either digital inputs or outputs. | |
Others | I2C Pins | SCL, SDA |
SPI Pins | SCLK, MOSI, MISO, CS0 |
##パソコンとの接続
今回は、PythonでGPIOボードの制御を行います。Circuit Python Librariesを利用します。
しかし、Pythonが直接にCircuit Python Librariesにアクセスが難しいため、BLINKAというものが必要となります。(Adafruitの説明)
BLINKAとは、PythonがCircuitPython LibrariesへアクセスできるようにするAdafruit社の専用ライブラリです。
パソコンとGPIOボードは、USBポートによってい接続が形成されます。パソコンからGPIOポートへの信号の変換は、FT232Hチップが行います。
複数のパーツが出て、最小は若干複雑に見えますが、いったん設置が終われば、そのパーツの存在を気にせずに使えます。
##ドライバーとライブラリの設置
次は設置プロセスです。ここが一番大事な部分です。
詳細は、下記のリンクを参照して、設置を進めてください。順番がとても重要です。
このポストでは、やるほうの項目だけ記入します。全部の設置には、10分~15分程度かかります。
- パソコンにPython3の設置を確認 : Python 2.7は未対応のため
- FT232Hのドライバー更新
- pyftdiとpyusb(修正版)の設置
- pyusbとpyftdiのテスト
- Adafruit Blinkaの設置
- 環境変数の設定 (set BLINKA_FT232H=1)
- python上でGPIOボードの認識の確認
#GPIOボードの出力テスト
GPIOボードのC0ポートを利用し、LEDを点滅させてみます。
C0ポートをOUTPUTポートに設定し、0.5秒はON、0.5秒はOFFを繰り返します。
出力の様子は、LEDの点滅で確認できます。
次の配線の概略を表します。各素子を直列に接続します。
C0ポート - LED - 1 kOhm 抵抗 - GND
##プログラムコード
環境変数 BLINKA_FT232Hを1に設定する部分を、import boardの前に設置する必要があります。
import os
os.environ['BLINKA_FT232H'] = '1' #Setting Environmental Variable
import board
import time
import digitalio
#GPIO Setting : C0 will be output port.
led = digitalio.DigitalInOut(board.C0)
led.direction = digitalio.Direction.OUTPUT
while True:
led.value = True
time.sleep(0.5)
led.value = False
time.sleep(0.5)
動作の様子です。プログラム通り、OUTPUTポートから出力されることが確認できました。
#まとめ
パソコンにGPIOボードを追加する方法を紹介し、その動作を確認しました。
#今後の予定
次回は、GPIOボードからINPUT信号をもらい、Python上でその結果を表示する方法を紹介します。
#参考資料