
PCの電源を入れる前にARGB LEDのチェックをしたい。ファンのチェックをしたい。PCレスで動作チェックをするためのデバイスを作りました。
光りモノが多すぎる
今水冷PCの2号機を組んでいるところなんですが、今は何でもかんでも光りますよね。私も当初は否定的でしたが、今は好んで虹色に光るゲーミングPCにしています。ところがいろいろな光るパーツを集めていると、メーカーによってコネクタの形状が全然違うことに気づきました。そこで様々なコネクターに対応できるように複数のコネクタを用意。せっかくなのでファンのスピードも制御できるようにしました。
M5Stack Din Meterなら12V入力できる

今回はM5Stack Din Meterを使用することにしました。Din Meterはロータリーエンコーダーが付いてるので、メニュー表示や値の変更をする操作に適しています。また電源がUSBだけでなく、入力電圧6~36Vの電源ポートがあるのも特徴です。内部のDC-DCコンバーターで5Vを作ってるので、12Vを入力すればファン用の12Vと、LED用の5Vの両方が取り出せるというわけです。
いろんなコネクタ形状に合わせる
ARGBのコネクタというと、2.54mmピッチの丸ピンヘッダ(4列のうち3本のピンがあるやつ)だけかと思ったら、メーカーによって違うんですよね。とりあえず手持ちで自分が使うコネクタをカバーできるようにしてみました。

左の2つは4ピンのファン、その隣の2つはAcool、その隣はマザーボードに生えてる丸ピンのやつ、その隣は不明、そして奥の2つはBARROWという水冷メーカーのものです。
Din Meterには2つのGroveポートがあるので、最大4つまでのGPIOポートが任意に使用できます。今回はARGB LEDのデータ用、ファンのスピード制御(PWM)用、ファンの回転数取得用の3つを使用しました。
ユーザーインターフェース

UIはシンプルなものにしました。ロータリーエンコーダーで4つのメニューを移動し、押すとメニューに入って値を変更できるというものです。
メニューはLED/ファンのオン・オフ、ファンのスピード、LEDの色の変化スピード、LEDの明るさです。
プログラム
今回作ったプログラムは GitHub にアップしました。
ESP32 Arduino Core 2.0系から3.0系で破壊的な仕様変更があり、今まで動いていたPWM関連のプログラムがコンパイルエラーになりました。最初何が起こったのかわからず混乱しましたが、修正することで動作するようになりました。
#define PWM_FREQ 25000 // PWM周波数
#define PWM_BIT 8 // PWMの分解能bit
#define ADC_RESOLUTIUON 4095 // ADCの分解能(0-4095)
pinMode(GPIO_PWM_PIN, OUTPUT); // FAN PWM Pin
ledcSetup(PWM_CH, PWM_FREQ, PWM_BIT); // pwm ch0 setting : for ESP32 Arduino Core before v3
ledcAttachPin(GPIO_PWM_PIN, PWM_CH); // pwm ch0 attach GPIO : for ESP32 Arduino Core before v3attachInterrupt(digitalPinToInterrupt(GPIO_RPM_PIN), tachISR, FALLING);ledcSetup() ledcAttachPin() が attachInterrupt() になりました。チャンネル指定は自動でやってくれるらしいです。
ケースを作る

ケースはDin Meterを上から埋め込んでカチッと固定する形にしました。ケースのフタは横からスライドして止めます。こうゆうケースのフタって作るのが面倒で悩ましいところなんですが、最近超簡単な方法を見つけました。

両サイドを< >の形にしただけです。ケースとフタのクリアランスは0.05mmで(両サイドで0.1mm)。これで結構しっかりと固定されます。幅が広いと押したときにたわんでしまいますが、小さめのケースならこれで十分です。
今回作成したケースのSTLファイルもGitHubにアップしてあります。