2022年03月11日 | 公開。 |
2022年03月28日 | 「ESP32-DevKitC V4がI2C接続に使うピンを変更する方法 」の節を追加。 |
TwiKeypadライブラリ Ver. 1.01で、ESP32やESP8266でもI2C接続4×4キーパッドが使える様になりました。この記事では、その際の配線方法等について説明します。
商品名 | I2C接続4X4キーパッド | |
税抜き小売価格 | 2400円 | |
販売店 | スイッチサイエンス マルツ | |
サポートページ | I2C接続4×4キーパッドサポートページ |
この章では、ESP32-DevKitC V4というESP32の開発ボードを使って、I2C接続4×4キーパッドを使う方法を説明します。この記事を参考に、他のESP32製品でも、I2C接続4×4キーパッドが使える様になるはずです。
ESP32-DevKitC V4は、ESP-WROOM-32に、USBシリアル変換回路、3.3VのLDO(電源回路)、リセット回路を付けて、USBケーブルをパソコンにつなげれば、すぐに開発ができる様にしたものです。
参考:ESP-WROOM-32は、ESP32に水晶発振器とフラッシュメモリとアンテナを付けたモジュールです。
電源は、USBから取る事ができ、プログラム(スケッチ)の書き込みは、パソコンからUSB経由で行なえます。
Arduino core for the ESP32, ESP32-S2 and ESP32-C3を使えば、Arduino IDEでプログラム開発ができます。
ESP32-DevKitC V4の外観を、写真1と写真2に示します。
ESP32でI2Cバスを使う場合は、デフォルトでIO21のピンががSDA信号、IO22のピンががSCL信号に割り当てられていますから、I2C接続4×4キーパッドとの接続は、図1の様になります。
キーパッドの電源は、ESP32-DevKitC V4から供給してもらう事にします。ESP32-DevKitC V4の電源は、USBケーブルから給電してもらう事にします。
キーパッドの電源電圧は、ESP32と同じにする必要があります。ESP32-DevKitC V4を使う場合は、3V3ピン(3.3V)をキーパッドのVCCピンに接続します。
実際にESP32-DevKitC V4をI2C接続4×4キーパッドに接続した様子を、写真3に示します。また、配線の様子が見やすい様に、一部を拡大した写真を写真3に示します。
なお写真3では、配線を中継するための基板を使っています。この基板の写真を写真5~写真7に示します。写真を見て分かる通り、この基板は、ESP32-DevKitC V4のピンを、すぐそばのピンソケットに接続しているだけです。
ESP32-DevKitC V4のピンヘッダの間隔が1000mil(ユニバーサル基板の穴の間隔の10倍)もあるので、通常の片側5穴のブレッドボードではうまく配線できません。そのため、この様な中継基板を作って配線しました。
参考:片側6穴のブレッドボードを使えば、写真5の様な中継基板を使わなくても、ESP32-DevKitC V4の配線ができます。
ESP32-DevKitC V4に接続したI2C接続キーパッドが正常に動作するかをテストするには、TwiKeypadライブラリに付属するサンプルスケッチを動かしてみるのが簡単です。
TwiKeypadライブラリをインストールしたArduino IDEを起動し、図2に示す様に、ファイル→スケッチ例→TwiKeypad→GetCharメニューを選択します。
そうすると、リスト1に示すスケッチが開きます。(あるいは、コピー&ペーストで、リスト1のスケッチをArduino IDEに貼り付けても構いません)
/*
GetChar.ino
This sketch demonstrates how GetChar function works.
*/
// include libraries
#include <Wire.h>
#include <TwiKeypad.h>
// variables
TwiKeypad keypad; // keypad object
const int TwiAdr=8; // keypad's TWI(I2C) Address
// functions
void setup()
{
Wire.begin();// initialize TWI as master.
keypad.begin(Wire,TwiAdr); // initialize keypad.
Serial.begin(9600); // initialize serial port at 9600bps.
while(!Serial); // wait for serial port to connect.
Serial.println("Press keys.");
} // setup
void loop()
{
char c=keypad.GetChar();
if(c!='\0') {
Serial.print(c);
} // if
} // loop
このスケッチは、GetChar関数によりキーパッドから押されたキーを読み取り、その結果をシリアルに出力するスケッチです。このスケッチを、例えば図3に示すボードの設定でESP32-DevKitC V4に書き込み、9600bpsに設定したシリアルモニタで観察すると、図4に示す様に、押したキーがシリアルモニタに表示されます。
注:スケッチが書き込めているのに、うまく動作しない時は、一度USBケーブルを抜いて、ESP32-DevKitCへの電源供給を止めて、再び電源を入れてください。この操作により、ESP32-DevKitCとI2C接続キーパッドの両方がリセットされます。
キーを1、2、3、4の順に押した例を示します。
Press keys.のメッセージの前に、文字化けしたメッセージが表示されていますが、これは、ESP32の起動メッセージが115.2kbpsで送信された事によるものです。
ESP32-DevKitC V4でI2Cバスを使う場合は、SDA信号をIO21ピン、SCL信号をIO22ピンに接続するのがデフォルトですが、スケッチを修正する事で、接続するピンを変更する事ができます。
I2Cインターフェースを初期化するWire.begin関数は、次の様な書式になっています。
参考:Wire.begin関数についての詳細は、ESP32 Arduino CoreのドキュメントのI2Cのページをご覧ください。
ここで引数sdaは、SDA信号に割り当てるGPIOのピンで、引数sclは、SCL信号に割り当てるGPIOのピンです。(ただし、引数を省略してWire.begin()
とすると、Wire.begin(21,22)
と解釈されます)
例えば、SDA信号をIO18ピンにつなぎ、SDO信号をIO19ピンにつなぐ場合は、リスト1の18行目のWire.begin();
をWire.begin(18,19);
と書き換えます。
次のページでは、ESP-WROOM-02でI2C接続4×4キーパッドを使う方法について説明します。
商品名 | I2C接続4X4キーパッド | |
税抜き小売価格 | 2400円 | |
販売店 | スイッチサイエンス マルツ | |
サポートページ | I2C接続4×4キーパッドサポートページ |