I2C の I/O Expander を調べて見ました
ESP-01で何でもやらせて見ようと言う昔の記事に、I2Cで接続できるデバイスが
いくつか紹介されていたので、今回は I/O の拡張を行うものを検討して見ました。
I/Oの拡張用としては、廉価なものとして2種類がAmazonで紹介されていて、
それを購入して見ました。その時、LCDのインターフェイスをI2Cに対応させる為の
デバイスが通常のI/O Expanderの半額位で紹介されていたので、それも購入して、
それを汎用のI/O Expanderとして利用可能かどうかも調べてみました。
結果としては、このLCD用のものが、少しの変更で、全く問題無く汎用の
I/O Expanderとして利用できる事が判りました。その時の状況は次のものです。
<I/O Expander の概要>
購入したI/O Expanderは次の3種類で、いずれの基板もPCF8574のチップが
使用されていて、I2Cのインターフェイスで8bitsのI/Oを行うもので、次の様な
ものでした。
[デバイスの概要]
1.PCF8574のチップには、PCF8574とPCF8574Aの2種類がが有り、
違いはI2Cのアドレスのみ
PCF8574 : 0x20 - 0x27, PCF8574A : 0x38 - 0x3F
2.FC-113はLCD用のI2Cインターフェイス変換基板の為、そのままではP3の
I/OとINTの端子が利用できない(改造方法は下記を参照)
3.I/O出力は、LOW時の出力用は大きな電流にも対応しているが、HIGHの
時の電流は少ない為、プルアップの抵抗が必要
4.チップの電源は2.5V - 6V
[FC-113の改造]
1.P3ポートはLCDのK端子用のトランジスタのベースに接続されていて、
そのままではHIの出力が出来ないのでP3ポートが接続されている配線をカット
2.P3ポート(ICの7番ピン)を基板の空き端子に接続する
3./INTポート(ICの13番ピン)を基板の別の空き端子に接続する
[動作検証]
1.I2CのI/O Expanderでのステップモータ制御はESP-01で行う
2.I2CのI/O ExpanderとしてはFC-113を改造したものを使用
3.制御対象は、手作りのものの左右のステップモータによるタイヤの制御
4.コントロールはスマホからWiFi経由で行う
[動作状況]
<関連資料>
I/O Expanderのチップのデータシートは次のものを参考にしました。
URL : http://www.nxp.com/docs/en/data-sheet/PCF8574_PCF8574A.pdf
I/O Expanderの制御用コードは次のURLからのものを利用しました。
(コピー&ペーストで利用)
URL : http://playground.arduino.cc/Main/PCF8574Class
ESP-01で利用しているWebSocketのライブラリは次のものを使っています。
URL : https://github.com/Links2004/arduinoWebSockets
<テスト内容と結果>
I2CでのI/O Expanderのテストに関しては、前のこの記事で使用した
ステップモータを利用して、それによる手作りの模型の車をスマホから
コントロールする事にして行いました。
1.手作りの模型の車をステップモータで動く様にして、それをスマホから
制御
2.制御内容は、モータの回転速度と回転方向、ステアリングは左右の
モータのバランスで対応
動作させた結果としては、次の様なものでした。
1.スマホからの制御に関しては、目標通りに回転方向および回転速度を
制御する事が出来ました。
2.ただし、ステップモータのギア比が大きい為、大きなタイヤを探して、
速度を確保しようとしましたが、見つからず、速度は実用的なものに
できませんでした。(電源電圧を上げて速度を上げる方法は大掛かりと
なる為、今回は検討しませんでした。)
3.手作りの模型で有る為、車軸が揺れて車輪のスリップが多発し、
ステップモータによる駆動にも関わらず、直線走行させても、時々
修正が必要になりました。メカの技術の差が大きく出るのを実感
しました。
[テストでの機器の接続]
[コード類]
テストに使用したコード類は次のURLからダウンロード可能です。
Code download URL : https://www.dropbox.com/s/5eh8tykncr1k0sx/IO_Expander_test.zip?dl=0
いくつか紹介されていたので、今回は I/O の拡張を行うものを検討して見ました。
I/Oの拡張用としては、廉価なものとして2種類がAmazonで紹介されていて、
それを購入して見ました。その時、LCDのインターフェイスをI2Cに対応させる為の
デバイスが通常のI/O Expanderの半額位で紹介されていたので、それも購入して、
それを汎用のI/O Expanderとして利用可能かどうかも調べてみました。
結果としては、このLCD用のものが、少しの変更で、全く問題無く汎用の
I/O Expanderとして利用できる事が判りました。その時の状況は次のものです。
<I/O Expander の概要>
購入したI/O Expanderは次の3種類で、いずれの基板もPCF8574のチップが
使用されていて、I2Cのインターフェイスで8bitsのI/Oを行うもので、次の様な
ものでした。
[デバイスの概要]
1.PCF8574のチップには、PCF8574とPCF8574Aの2種類がが有り、
違いはI2Cのアドレスのみ
PCF8574 : 0x20 - 0x27, PCF8574A : 0x38 - 0x3F
2.FC-113はLCD用のI2Cインターフェイス変換基板の為、そのままではP3の
I/OとINTの端子が利用できない(改造方法は下記を参照)
3.I/O出力は、LOW時の出力用は大きな電流にも対応しているが、HIGHの
時の電流は少ない為、プルアップの抵抗が必要
4.チップの電源は2.5V - 6V
[FC-113の改造]
1.P3ポートはLCDのK端子用のトランジスタのベースに接続されていて、
そのままではHIの出力が出来ないのでP3ポートが接続されている配線をカット
2.P3ポート(ICの7番ピン)を基板の空き端子に接続する
3./INTポート(ICの13番ピン)を基板の別の空き端子に接続する
[動作検証]
1.I2CのI/O Expanderでのステップモータ制御はESP-01で行う
2.I2CのI/O ExpanderとしてはFC-113を改造したものを使用
3.制御対象は、手作りのものの左右のステップモータによるタイヤの制御
4.コントロールはスマホからWiFi経由で行う
[動作状況]
<関連資料>
I/O Expanderのチップのデータシートは次のものを参考にしました。
URL : http://www.nxp.com/docs/en/data-sheet/PCF8574_PCF8574A.pdf
I/O Expanderの制御用コードは次のURLからのものを利用しました。
(コピー&ペーストで利用)
URL : http://playground.arduino.cc/Main/PCF8574Class
ESP-01で利用しているWebSocketのライブラリは次のものを使っています。
URL : https://github.com/Links2004/arduinoWebSockets
<テスト内容と結果>
I2CでのI/O Expanderのテストに関しては、前のこの記事で使用した
ステップモータを利用して、それによる手作りの模型の車をスマホから
コントロールする事にして行いました。
1.手作りの模型の車をステップモータで動く様にして、それをスマホから
制御
2.制御内容は、モータの回転速度と回転方向、ステアリングは左右の
モータのバランスで対応
動作させた結果としては、次の様なものでした。
1.スマホからの制御に関しては、目標通りに回転方向および回転速度を
制御する事が出来ました。
2.ただし、ステップモータのギア比が大きい為、大きなタイヤを探して、
速度を確保しようとしましたが、見つからず、速度は実用的なものに
できませんでした。(電源電圧を上げて速度を上げる方法は大掛かりと
なる為、今回は検討しませんでした。)
3.手作りの模型で有る為、車軸が揺れて車輪のスリップが多発し、
ステップモータによる駆動にも関わらず、直線走行させても、時々
修正が必要になりました。メカの技術の差が大きく出るのを実感
しました。
[テストでの機器の接続]
[コード類]
テストに使用したコード類は次のURLからダウンロード可能です。
Code download URL : https://www.dropbox.com/s/5eh8tykncr1k0sx/IO_Expander_test.zip?dl=0