2021/12/15 よりサイトリニューアルしました

M5Stack core2のスライダーでESP32のLEDをPWM制御してみる

pwm led

 

前回、M5StackからUDP通信でESP32のLチカをやってみました。↓

 

今回はM5Stackからスライダーを使い、その値をESP32へ渡してLEDをPWM制御したいと思います。

スライダーの機能はM5Stack core2ならUiFlowで超絶簡単に実装できるので、今回はcore2を使用しました。

他は前回と同じような構成です。プログラムはどちらのデバイスもmicropythonで記述しています。

 

 

初めに

使うもの

・M5Stack core2

・ESP32

・ブレッドボード

・LED2個、抵抗

・ジャンピングワイヤー

 

構成

M5Stack core2(スライダーを2つ実装) ⇒ UDP ⇒ ESP32(受け取った値でLEDをPWM制御)

サーバー側にESP32を配置し、クライアント側のM5Stackからスライダーの値をUDPでESP32に送り続けます。

ESP32は受け取った値をもとに、2つのLEDをPWM制御します。

 

 

スライダーについて

M5Stack core2 Uiflow

uiflow

core2ではuiflowでスライダーが簡単に実装できます。

左は端にスライダーのアイコンがあるので、ドラッグアンドドロップでM5Stacの画面内にもってくるとmicropythonに記述が反映されます。

基本、スライダーの実装だけならこれでOKです。

後は後述しますが、このインスタンスからvalueで値を読み出したりすることができます。

 

 

プログラム

M5Stack側(micropython)

WIFI接続後、サーバー宛て(ESP32)のソケットを作成します。

スライダーの記述ですが、set_rangeの引数に任意の最小~最大値を入れる事でスライダーの位置に応じた値を決めることが出来ます。ちなみに今回はデューティーサイクルの最小と最大値をそのまま入れています。

set_valueは、スライダーの初期位置です。

ループ処理では、サーバーにスライダーの位置情報(値)を随時転送しています。

転送するデータの先頭に”A”もしくは”B”を付けているのは、ESP32で受信した際に、どちらのスライダーからの情報かを判断させるための強引な手法です(-_-;)。。(多分もっとスマートなやりかたはあるはず。。)

 

ESP32側(micropython)

WIFI接続後、サーバーのソケットを作成。バインドさせます。

PWMのインスタンスを作成、周波数は5KHzとします。

ループ内ではクライアントからのソケットのvalueを受信し、データの中に”A”があればp1、”B”があればp2のpwmを実行するようにしています。

dutyの引数には0~1023が直接入るので、スライダーの位置に応じたLEDの発光を再現できます。

 

 

完成

こんな感じになります。↓

 

ゆくゆくはこれを応用してラジコンを作成したいので、次回は左側のスライダーでDCモーターのPWM制御をやってみたいと思います。

 

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です