
ESP32を用いてロータリエンコーダを実装したので、そのやり方について紹介したいと思います。
この記事を読むことで、話題のマイコンであるESP32でロータリエンコーダが実装できるようになります。
ロータリエンコーダは本当に多くの電子製品に搭載されています。アンプのような音響機器の音量調節や、グリルのタイマ部分などに使用されており、ロボット開発としても、活用方法は数多くあります。
Youtude
youtu.be
Arduino Nano版はこちら
ESP32,KY-040の簡単な説明
ESP32
ESP32の大きな特徴はWifi, Bluetoothを搭載しているところです。そのうえでArduinoよりも安価に購入でき、ArduinoコードやC++などいくつかの言語の互換性があります。そのため、1つのマイコンでいろいろなことを試したい方には大変おすすめなマイコンです。
リンク
ロータリエンコーダ (KY-040)
今回使用する安価なロータリエンコーダは分解能が荒く、モータの制御等には向かないですが、一方で構造上動かすのが容易です。逆に分解能が細かくロボット制御に向いているエンコーダもございますので今後はそれも動かしていこうと思います。
リンク
実験構成
今回の実験に使用する部品は以下のものです。
- ESP32
- ロータリエンコーダ (KY-040)
- ジャンパ線多数
ESP32、ロータリエンコーダは上記のものを使用しています。
ジャンパ線は何を使用してもいいですが、一応リンクを張っておきます。
リンク
実験
配線
まず配線は以下のようにします。

配線ができると以下のような画像のようになります。

実行コード
ここまで出来たら以下のコードを実行することで動作確認ができます。
int val;
int encoder0PinA = 26;
int encoder0PinB = 27;
int encoder0Pos = 0;
int encoder0PinALast = LOW;
int n = LOW;
void setup() {
pinMode (encoder0PinA, INPUT);
pinMode (encoder0PinB, INPUT);
Serial.begin (9600);
}
void loop() {
n = digitalRead(encoder0PinA);
if ((encoder0PinALast == LOW) && (n == HIGH)) {
if (digitalRead(encoder0PinB) == LOW) {
encoder0Pos--;
delay(abs(encoder0Pos));
} else {
encoder0Pos++;
delay(abs(encoder0Pos));
}
Serial.print (encoder0Pos);
Serial.print ("/");
}
encoder0PinALast = n;
}
今回はロータリエンコーダの数値をシリアルモニタで確認できるようにしています。
値を角度に変換していないので分解能の異なるエンコーダにも応用できるかと思います。
まとめ
今回は、ESP32でロータリエンコーダを動かすために必要なものの紹介と、サンプルプログラムの紹介をしました。