h_nari @ 熊本市のブログ。電子工作、プログラミング、ゲーム、TV、 政治、インターネットなどに日々の思い付きを、 うだうだ~と書いていきたい。
このブログにはコメント欄を設けておりません。 記事への御意見、ご質問はtwitter @h_nari宛に お願い致します。


アーカイブ

メタ情報
RSS
Login

FANコントローラ作成中

PCファン用4Pコネクタを手に入れたので、 これを使った機器を作ろうと思う。 機能としては温度計測と、それに伴うFANの制御。 温度とFANの状況の報告など。 となるとCPUはESP32、 LCDは沢山もっている2.4インチLCDモジュール・タッチスクリーン付きとした。

ESP32は、当初 ESP32-WROOM32モジュールを直接使用するつもりだったが、 設計を進めるうち、意外と基板のスペースに余裕がないことに気が付き、 ESP32 Devkitを使用するとUSBシリアル、ファーム書き込み、電源レギュレータ等を 省けるし、使い回しも可能なので、こちらを使うことにし、基板を注文。 秋月にも部品を注文するが(コロナのせいで?)発送が滞っているらしく 基板と同時に到着した。

基板を組み立てると色々と設計ミスが判明。 大きなところでは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に置いておいたほうが使い易い。