2021年10月7日木曜日
PCファン用4Pコネクタを手に入れたので、
これを使った機器を作ろうと思う。
機能としては温度計測と、それに伴うFANの制御。
温度とFANの状況の報告など。
となるとCPUはESP32、
LCDは沢山もっている2.4インチLCDモジュール・タッチスクリーン付きとした。
ESP32は、当初
ESP32-WROOM32モジュールを直接使用するつもりだったが、
設計を進めるうち、意外と基板のスペースに余裕がないことに気が付き、
ESP32 Devkitを使用するとUSBシリアル、ファーム書き込み、電源レギュレータ等を
省けるし、使い回しも可能なので、こちらを使うことにし、基板を注文。
秋月にも部品を注文するが(コロナのせいで?)発送が滞っているらしく
基板と同時に到着した。
基板を組み立てると色々と設計ミスが判明。
大きなところではLCDモジュールのコネクタを180度間違えた。
でもまぁ機能の確認はできるので、
この基板でソフトの開発を行うことにする。
 |
 |
 |
基板到着 |
LCDモジュールと基板とESP32 devkitC |
上面。LCDのコネクタの向きを間違えたので180度ずれて装着 |
ソフトの環境はVSCode + PlatformIO。
使い方に慣れて最近は、こればかり使用している。
特にgitのログが見易い。
まずはLCDを使えるようにしようと、
どのライブラリを使うか考え、
自作の
Humblesoft_ILI9341
を使用することにする。
Adafruit_ILI9341と比べると、
fontxの漢字が使用可能、部分スクロール機能、
高速化などが違うのだが、
今回は漢字は必須ではないし部分スクロールも使わない、
高速化も5年前の話なので今となっては速いかどうかわからないが、
自作のものの方が使いやすい、たまには更新したなどの理由で
こちらにした。
使用するSPIを指定する機能などを追加して
表示できるようになった。
さて次はファンや温度センサーを動かしたいのだが
タッチスクリーンでファンを制御できるようにしようか、
ライブラリは昔、作ったよね、どこだっけ?
いきなりタッチスクリーン操作は面倒なので
最初はシリアルモニターからコマンドを入力して操作する
CLI(Command Line Interface)の方が楽よね。
Arduino用のCLIライブラリも昔、作ったよね。
どこだ? gitにも置いていない。
既存のものを探してみると"arduino cli"で検索すると
Arduino CLIというArduinoのCLIでの開発環境のページばかり
表示される。
"arduino cli library"で
SimpleCLIを知るが、
あまり使い易そうではない。
はやり自作が一番ということで
CLI_Libraryという名前で
改めて作成した。
使用例は、こんな感じ。
#include <Arduino.h>
#include <cli.h>
CLI cli;
bool cmd_sum(CLI *cli, const char *arg) {
const char *p = arg;
int sum = 0, iVal;
while (get_int(p, &iVal, &p)) sum += iVal;
return cli->printf("sum = %d\n", sum);
}
bool cmd_factorize(CLI *cli, const char *arg) {
int n, i, c = 0;
if (!get_int(arg, &n, NULL))
return cli->error("integer argment required");
if (n < 2) return cli->error("bad interger %d, must be >1", n);
cli->printf("%d =", n);
for (i = 2; i <= n; i++) {
while (n % i == 0) {
cli->printf(" %s%d", c++ ? "* ": "", i);
n /= i;
}
}
return cli->printf("\n");
}
void setup(void) {
Serial.begin(115200);
cli.init(&Serial);
cli.cmd("sum", "Calculate the sum of the arguments", cmd_sum);
cli.cmd("f", "factorize the argument", cmd_factorize);
}
void loop(void) {
cli.update();
}
結構、気に入っているがどうだろう。
ほぼ、自分専用のライブラリであっても
githubに置いておいたほうが使い易い。