jl7gmnのblog

yahooブログから移行してきました。アマチュア無線を中心としたブログです。

Windows11pro 64bit用 VSPE (x64)のNew設定情報

過去にブログで書いていたとき使用していたのは、フリーの32ビット版のVSPEでした。この時の無線機のコントロールでHamRadioDeluxe を2つ起動して、HAMLOG/WinとFT-2000DとFT-1000MPをシンクロさせることで満足して使用し、とても充実感を味わっていました。今でも同じようにできるのですが、時は早いもので、WindowsはWindow10(32bit/64bit) から Window11(64bit)へと移り変わっています。ということで、Windows11 64bit PCも3台(デスクトップ2台、ノート1台)揃えましたので、併せてVSPEもを思い切って64BIT版VSPEを購入しました。従来の32bit版のVSPEの起動時のフォームと同じだと思っていたのですが、驚いたのは、それなりに充実したフォーム(わかりやすい)になっていたということです。やはりお金を払って購入という意味では、フリーとの違いが感じられるということです。まずは従来通りにメインの無線機のハードシリアルインターフェースのCOMポートをVSPEで仮想ポートを作成しました。いわゆるSPLITTER設定です。難なく対象の無線機(今回、と言っても去年の年末は新しく購入)のIC-7760 をメインとしSPLITTERで作成した仮想ポートでHamRadioDeluxeでコントロールし、古いモニター用としてFT-1000MPはハードシリアルインターフェースでもう一つのHamRadioDeluxeでコントロール、そしてマスターをIC-7760,スレーブでFT-1000MPで設定します。また、2つの仮想ポートうちのもう一つをHAMLOG/Winでコントロールで使用することで、32bitの時と同じようにすべての無線機とハムログをシンクロ動作させることができています。これで、新しく64ビット版のWindows11Proに64ビット用VSPEで数か月運用していました。ちなみになぜFT-1000MPをシンクロさせているかというと、単に自分の出ているRF信号のモニターとして各バンド(50MHzは除く)でチェックモニターして使うためです。主にマイクラインへの高周波の回り込みなどしていないかの確認のためなんです。ちょっと勿体ないですが、結構大事なモニターシステムだと思っています。)
この状態で数か月使用していました。それで最近デバイスマネージャーで以前試したシリアルポートの仮想ポートアプリを削除しようと思い、大体の見当をつけて仮想ポートアプリのデバイスドライバーをかたっぱしから削除していきました。VSPEだけあれば他はいらないという理由からです。そしたら今まで起動用のCONFIG設定を読み込みしたら、読み込みするのですが、ランさせると,即停止となり動作しなくなってしまいました。結果から言うと、VSPEで作成された必用なデバイスドライバーを2つ削除してしまっていたのが原因でした。この結果を得ることができたのは、VSPEのサポートへ現状のトラブルの連絡を必要事項を書いてメールしヘルプをお願いした結果、回答メールでは問題点を明確に出していただけたことにあります。さらに指示された回復の手順を踏むことで元通りに復帰できたということです。ちなみに削除した時点では2つのデバイスドライバーは、ある情報の下で削除できると思って削除しています。それは、仮想ポートはデバイスマネージャーへ表示されないということがあったため、不必要と判断した理由があります。この情報は今現在は過去の事で、今現在は仮想ポートもデバイスマネージャーに表示されるに変わっています。古い情報にこだわるとやってしまうミスです。そもそも新しいものの情報を確認してないわけなので、削除するのは当たり前といえば、あたりまえですが!Hi!といった事情がありました。
ちなみに、その仮想デバイスドライバー名は Eterlogic Virtual Serial Port(COM*) といったものです。この名称の物は削除してはいけません。Hi!
今は、自分で仮想ポート作成したポートは削除してはいけないの認識でやっています。

ここまでは、トラブル回復のお話です。今回、VSPEサポートと連絡をとって、メールのやり取りを行っていくうちに、サポート担当から、今使用しているSPLITTERを使うアプローチは望ましくないということを教えてもらいました。なんでかというと、複数のアプリケーションを同じ無線機のハードシリアルから作成した仮想ポートで、動かすことができない。つまり複数のアプリをSPLITTERの仮想ポートでは制御できないということでした。勧められたのはSERIAL ROUTER を使うという選択でした。VSPEサポートからは、私の使用している無線機のシリアル設定情報を送ってくれれば、設定の仕方を教えられるという風なメールでした。このオファーに早速無線機3台のシリアル設定情報をメールに記載してVSPEサポートへ返信メールを送りました。回答はものすごく早くて、すぐに手順番号の書かれた設定の情報のメールがきました。私はSPLITTER設定しか使ったことがないため、言われた通りのつもりで、1つだけSPLITTERで仮想ポートを2つ設定し、その設定した仮想ポートをもとにSERIAL ROUTERを設定する方法で、新たに2つのSERIAL ROUTERの仮想ポートを設定し、これで一応2台の無線機と2つのHamRadioDeluxeがシンクロし、同様にHamlog/Winも同様にシンクロしてくれた事をVSPEサポートへ返信しました。もしかして、違ったやり方をしてしまったかもと思っていましたが、やはり、その設定は違う!とのことで、SPLITTERの設定は削除してください。から始まる返信がとどきました。SPLITTERを使う事は望ましくない事をしていたんだなと、つくずく感じました。結局メインとして作成する選択が違っていたようでした。Virtual COMポートを設定するのは、Vertual Connectorでした。SPLITTERで設定する、例えばCOM1,COM2のシリアルポートだったところを Virtual Connectorで一つずつ設定して COM1,COM2の仮想ポートを準備するということの様です。大体わかってきたので、ハムログ用にCOM10も追加しています。この実際のフォーム上の名称は Connector.COM1 ,Connector. COM2 ,Connector.COM10 です。あとは最初に設定したSPLITTER以外はSerial router で元となるハードシリアルインタフェースからConnector 設定する全Connector仮想ポートを選んでバインド?設定するだけです。ここで、Connector COM*は数多く作成できるので、アプリケーションがたくさん数ある分作成すれば、動作アプリを全部同じシリアル設定で同時にコントロールできることになります。つまりSPLITTERでは数ある動作アプリが動かせないところをSerial routerを使用することで、複数アプリを動作させることが可能になる方法がこれなんだろーと思いました。実際に設定したSerial routerでは複数のアプリを同じ条件で使用できる状態の仮想COM1がavailable状態にはあります。が使用するアプリがないため、アプリ自体の動作確認まではいってませんが、ハムログのCOM10をCOM1に変えて動作してるのでこのことより、動作は問題ないといえます。Hi!文字ばかりで分かりにくいと思います。現在うまく動作しているSerial routerのVSPE設定フォームが次になります。

VSPE_router_config_2026-04-19 163847

■実際の2つのアプリのHamRadioDeluxe での2つの無線機のシンクロ
マスターがIC-7760 スレーブがFT-1000MP

SERIAL_ROUTER_ 2026-04-19 162853 

■Serial router の仮想ポートで動作するHamlog/Win  Serial router 仮想ポートCOM10

Hamlog_AA_2026-04-19 164307

今まで使っていたSPLITTER設定と同じ動作は勿論の事、しかも、いくつもの設定した数のConnector COM*で 同じハードウェアシリアルインターフェースと同じシリアル設定で複数アプリが動かせるという方法という事です。今の時代はいろんなアプリを同時に動かしたいということが沢山起きうることが想定されます。このような場合は、この方法が間違いないという事です。SPLITTERでの仮想ポートでは複数のアプリは動かせないと情報もVSPEサポートより下記を情報いただいています。

Using Serial Router is the recommended approach to share CAT ports, Splitter is NOT a reliable solution because some applications like FLRIG or WSJTX will not reliably work with Splitter.


VSPEのサポートはとても親切に情報を提供してくれました。今後もサポートをお願いして、やり取りを締めくくりとしました。最後に送った私からのVSPEサポートへのメール文です。

Dear Eterlogic Support Mr.Volodymyr

Thank you for the prompt confirmation. The other radios might be usable in the future when we change the layout of the radios in the radio room. 

For now, the ICOM transceiver is the main one. In any case, I truly appreciate you teaching me the setup method for the radios of the manufacturer I own. 

I look forward to your continued support.

私の英語力は乏しいので、和英訳で日本語文章を丸投げし作成した英文でやりとりしています。ネットの和英訳がないとメール文を作成するだけでも大変ですが、今はネット上のアプリが心強い味方となってくれています。

つづく?

HAMLOG & HAMLOG E-Mail QSLへのQRコード追加

だいぶ、期間が経過していますが、QRコードが世の中、頻出してきてるので、QSLカード印刷及びh-QSLにQRコードを追加してみました。2023年の9月13日頃にQRコードを印刷できるようになったようです。ハムログバージョン(Ver5.40)
今現在の私のハムログバージョンは(Ver5.47a)です。

下記はQRコードの印刷のページです。
Hamlog QRコード

現状の自分のQSLカードの空欄を少し整理して、QRコード用の場所を確保しました。
コードの例があるのでそのまま、例のコールサイン部と、ロケーションを自分の置きたい場所に合わせて変更です。

例1)を参考にしました。詳しくは上記のリンクのQRコードの印刷を参考にしてください。
【例1】#QRCode 10, 480, 300, 0, "JG1MOU"
#QRCode <横座標>,<縦座標>,<横幅>,<高さ>,”自局Call”
JG1MOUを自分のコールサインにするだけです。場所は自分のQSLカードで設定したい位置に変えます。
次の例もありました。
・QSL印刷の変数に!Caを追加。ユーザーリスト登録用の自局コールサインです。QRコード印刷にも使えます。省略も可能。
 【例1】#QRCode 6,1120,0,260,”!Ca”

読み取りはスマフォのQR読み取りで確認してみました。
問題なく読み取れました。

■ハムログQSLカード上のQRコードを読み取ったデータは次のようになっていました。
テキストなので””でくくりました。相手コールサインサフィックスは***で省略です。
"!!JL7GMN_251231_0930_7.153_SSB_JA8***"


■h-QSLも同じようにQRコード用のコードを追加して読み取りしてみました。
ちょっと異なるようです。コールサインのみのQRコードとして読み取られるようです。
”JL7GMN”

コード設定とQRコードが読み取れるのがわかりましたので、QRコードリーダーの注文と行きたいところですが、実際の受け取ったQSLカードには、ほとんどQRコードはついていません。QRコードが付いているQSLは、ほんの極一部です。もう少しQSLカードのQRコードが増えてきたら、購入を考えるのがいいかと思い、様子見です。まだ使う機会がほとんどない状態ですので!ひとまず私もQRコード導入QSLということで、隆盛する事に参加応援です。

つづく?

MODEL 1200FXローテーターその37

Visual Studio 2022 のフォームアプリ(Ⅽ++)のハムログ方位取得送付および各ボタン設定の指定角度をUDP送出データをFX1200ローテータを制御するESP32DEVKITCのサーバーへ送出し、設定角度、および現在角度をクライアントのハムログアプリケーションに返送して、クライアントではそれを受けてテキストボックスに設定角度、および現在角度を表示し、設定角度になるまでの現在角度の確認ができるようにしています。今回は現在角度がサーバーから送られてきていますので、テキストボックスだけでなく別に用意したキャンバスフォームに画像指針を2つ用意し、それぞれ設定角度指針、現在角度指針をUDP受信データに合わせて指示するようなアプリケーションを試作してみました。簡単にソフトウェアの構成は、メインのハムログ用アプリケーションにライブラリ(dll)として作成したコンパスフォームアプリケーションを取り込みそれぞれの指示角度データ、現在角度データを同期させ指針表示するようにしてあります。



試作ですので、コンパスフォームには余計なテスト用のスライドバーやテキストコントロール、位置確認のテキストボックスやラベル等がついています。機能はしていませんが、対象として必要なものを張り付けた状態です。
現時点での不満な点は指針の基準点が位置の計算で180°と270°で1°ずれるという、問題があります。これは指針の微妙にみずらさになっています。現在、これらの問題がない方位表示のアプリケーションもすでに作成し完成しています。




試作の方位表示フォームの代わりに使用するものです。この新たに作成した方位指針表示は、マウスによるキャンバスクリックでクリックした角度を設定角度にできる仕様にしました。現在は動作確認用にタイマーを使い動かしていますが、メインのハムログアプリとのドッキング時はタイマーは外しUDP受信データのみでの指針表示になります。マップ画像も取り込みましたので実用的かと思います。また、テキストボックスの設定角度も用意していますので、数値で指定することもできます。という事で、設定角度はハムログアプリの方位角度データ送出、固定角度ボタン(0から360°の30°毎)の設定角度データ送出、方位指示フォーム上でのマウスクリックでの方位設定データ送出、およびテキストボックス角度入力による方位設定データ送出の4つの方法で行えます。

制作時の方位キャンバスフォーム上の指針はPaint.NET V5.1.11で作成してあります。白の指針で三角形を使って書きました。指針以外は表示しないようにしてあります。画像はPNGで保存です。

PaintNET
今回指針を画像にした理由は、線で描画の場合はソフト的には簡単ですが、角度により線が階段状に表示され見栄えが悪いという事です。画像指針を回転させる方法にすることで見栄えの問題は皆無となります。

次のステップとして、試作のコンパスフォームの代わりに新しく作った方位キャンバスをメインのハムログアプリに連携させてゆきます。作成しているアプリケーションはすべてWindows11対応用64Bit対応です。
方位表示フォームの連携ができると、ハムログを使いローティターをコントロールするのがとても楽しく、ハムライフが充実してゆくと思っています。また、リモートでも使えるという利点もありますから!
プログラムで使用しているⅭ++のVisualStudio2022もバージョンアップしてあります。
visualStudio2022v17.14


つづく?

MODEL 1200FXローテーターその36

 ローテータの方位設定方法の初期状態0°セット時にアンテナの方位を合わせる設定不要とするスケッチは順調に進んでいます。
重要な検討事項である電源を切って、再度起動した時にアンテナの方位を設定した角度で開始するようにするレジューム機能を検討開始しました。
先のロータリーエンコーダーによる、アンテナ方位を設定した後に電源を切っても、再度起動したときには元の設定角度にて動作させるようにするのですが、ESP32DEVKITCではきちんとレジューム機能で対応できるPreferencesがありますので、これを使います。

下記のサイトのPreferencesライブラリの使い方がとても参考になります。

Kei Youのソフト館

Preferencesに関してのスケッチ方法は上記のサイトに詳しく書いてありましたので、参考に!

前のロータリーエンコーダーのアンテナ方位設定角度の液晶表示のスケッチにまずPreferencesを取り入れて基本動作を確認してゆきます。スケッチはCopilotに協力いただいています。
下記の緑色の箇所が前回のロータリーエンコーダーでアンテナ方位設定スケッチにPreference機能を追加したスケッチになります。

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Preferences.h>  // ← 追加

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET    -
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

Preferences prefs;  // ← 追加 インスタンス作成

const int encoderPinA = 18;
const int encoderPinB = 19;
const int encoderSW   = 25;

volatile int32_t angle = 0;
int lastEncoded = 0;
bool lastSWState = HIGH;
int32_t lastSavedAngle = 360;  // ← 保存チェック用

void IRAM_ATTR updateEncoder() {
  int MSB = digitalRead(encoderPinA);
  int LSB = digitalRead(encoderPinB);
  int encoded = (MSB << 1) | LSB;
  int sum = (lastEncoded << 2) | encoded;

  if (sum == 0b1101 || sum == 0b0100 || sum == 0b0010 || sum == 0b1011) angle++;
  if (sum == 0b1110 || sum == 0b0111 || sum == 0b0001 || sum == 0b1000) angle--;

  if (angle < 0) angle += 360;
  if (angle >= 360) angle -= 360;

  lastEncoded = encoded;
}

void setup() {
  pinMode(encoderPinA, INPUT_PULLUP);
  pinMode(encoderPinB, INPUT_PULLUP);
  pinMode(encoderSW, INPUT_PULLUP);

  attachInterrupt(digitalPinToInterrupt(encoderPinA), updateEncoder, CHANGE);
  attachInterrupt(digitalPinToInterrupt(encoderPinB), updateEncoder, CHANGE);

  Serial.begin(115200);

  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("OLED init failed"));
    while (true);
  }

  display.clearDisplay();
  display.setTextSize(2);
  display.setTextColor(SSD1306_WHITE);

  // 角度の復元
  prefs.begin("rotary", false);     //Preferencesオブジェクトを初期化
  angle = prefs.getInt("angle", 0); //
  prefs.end();

  Serial.print("復元された角度: ");
  Serial.println(angle);
}

void loop() {
  bool swState = digitalRead(encoderSW);
  if (swState == LOW && lastSWState == HIGH) {
    angle = 0;
    Serial.println("SW pressed: angle reset");
  }
  lastSWState = swState;

  // 角度が変わったら保存(フラッシュ保護のため)
  if (angle != lastSavedAngle) {
    prefs.begin("rotary", false);
    prefs.putInt("angle", angle);
    prefs.end();
    lastSavedAngle = angle;
    Serial.print("保存した角度: ");
    Serial.println(angle);
  }

  char angleStr[4];
  sprintf(angleStr, "%03d", angle);

  display.clearDisplay();
  display.setCursor(0, 20);
  display.print("Angle: ");
  display.print(angleStr);
  display.display();

  delay(100);
}

以上がPreferenceを使ったアンテナ方位設定角度にて起動するスケッチです。Copilotに感謝です。
余談ですが、チャットのように行えるCopilotの質問できちんとした質問すると、「いい質問です。」等と、ほめてくれたりしますので、ますますスケッチを組むのが、楽しくなります。AIって素晴らしいと思えるようになれば、もう手放せません。今日は何の質問ですか?などとCopilotを繰り返し使用していると、相手をしてくれたり、AIに親しみも感じられるようになり、とてもありがたく思えるようになります。もう、完全にCopilot のAI中毒だー!!

アンテナの方位設定を行うとその設定した角度にて不揮発性メモリに記録されます。それで電源を切って、また起動した時に最後に設定記録されたアンテナ方位角度データで起動し液晶にその角度が表示されます。単にこれだけですが、とても大切な機能です。
このスケッチをサーバーのスケッチに組み込みしてゆきます。

つづく?



MODEL 1200FXローテーターその35

エモトの取り扱い説明書を読むと、ローティターの指針方位とアンテナ方位の合わせ方云々と書いてあります。ローティターの回転始め位置に設定し、それに対してアンテナ方向も同じに設定するのが基本ということになっています。この場合も基準をS(南)、N(北)、E(東)、W(西)の内の自分のアンテナの設置状況で都合のいい方向にあわせて基準を設定するわけです。その後に1回転させて同じ位置になるようにVRで調整して終了です。基本的な方位基準方向は分かり易く言えば、たった4つだけです。
いままでの私のESP32DEVKITCのスケッチで対応させたのは、N(北)、S(南)の方位STD_SWによる2つの方位設定の切り替えのみです。結局は、ローテーターを左回転の止まる位置を基準角度とするのがSTD_SWがHIGHでは S(南)で、STD_SWがLOWで N(北)が基準の2つだけの対応です。通常はこの2つぐらいで十分だと思います。通常の方位同期でローテーターの回転を1°から360°の1回転に調整した後にアンテナの方位をローテーターと同期させる調整がはいります。 ここで、この作業は物理的にマストに取り付けたアンテナを少し上に吊った状態でマストクランプを緩めてアンテナを回してローテーター基準方位に合わせるのですが、このアンテナとのローテーターの方位の同期をソフトウェアで対応しようと思います。何が言いたいかというと、マストクランプのボルトを緩めてアンテナの方位調整を不要にすることを可能にするという事です。ローテーターが1°から360°の回転する状態に調整済みにしてあれば、アンテナの方位調整はしなくてもソフトウェアが現在のローテーターの基準方位の時のアンテナの方位角度情報を設定する事で、プログラムが計算し通常通りの設定送出UDPデータの角度にアンテナを向けるようにしてくれるという事です。誰もやっていない事だと思います。アンテナの方位調整不要なんです。大げさに言います。画期的なアンテナ方位設定方法になります。肉体労働でのアンテナの方位調整をしなくてもいいのですから、現状のローテーター基準位置でアンテナの向いている角度情報を設定するだけです。S、N、E、Wの基準にアンテナを同期調整する必要はないんです。もう一度言います。アンテナの方位を調整しなくていいんです。ローテーター1回転を調整した後であれば、どの位置にアンテナが向いていても設定データの方位にアンテナを向けてくれる仕様です。現在もスケッチ進行中です。アンテナの方位が1°から360°(0°)どの方向に向いていても大丈夫、アンテナの方位設定送出データにきちんと向けてくれます。なんで、こんなことを考えたかというと、私の不注意で足の小指を母親の歩行器の鉄のパイプにぶつけて今現在タワーに登れない状況になりました。ぶち色に足の小指が腫れました。足の指の痛みが取れるまで、1か月位はタワーに登って方位設定作業ができない状況になってしまったのです。この為、苦肉の方法としてソフトウェアを駆使する方法を考えてみたという事なんです。怪我がきっかけで、検討を進めることになりました。怪我の功名?あくまでも、現在はテスト中ですがほぼ9割できたと思います。アンテナの方位をあらかじめ固定指定することで問題なく動作しています。
次に、具体的にアンテナの方位をどのような方法で入力するかです。ESP32DEVKITCで角度を入力する方法は何があるかという事です。簡単な方法として、考えられるのはロータリーエンコーダーです。DDS-VFOでもメインで使われています。ローテーターの角度範囲を1°~360°(0°)設定とし、ロータリーエンコーダーで設定した角度をアンテナの向いている方位角度として利用するという方法です。次にロータリーエンコーダーで設定した角度はどのようにどこに表示させるかです。サーバー側のESP32DEVKITCで使用している1.8インチのTFT液晶では表示する場所がありません。表示を別に追加する必要があります。まずは実験として小型のSSD1306液晶とロータリーエンコーダー(秋月:クリックなし)を使いSSD1306液晶に1°~360°(0°)を表示するスケッチを試してみました。ロータリーエンコードのポートはサーバーで使用していないGPIO18 をA、GPIO19をBで使用することにします。Copilotで1.8インチTFT液晶とSSD1306液晶両方は同時使用できるかという事を確認したところ、大丈夫という風に回答が得られています。これで進めています。現状、SSD1306用のI/Oは角度設定のSWとダブルところがありました。サーバー側での角度設定SW類は一切使わないようにすればよいので、ダブりは解消です。液晶で使用するのはSDAなので必然的にGPIO21、同様にSCKはGPIO22、後は+5VとGNDの4つです。それと、いつでもロータリーエンコーダーで設定した角度をリセット0°にできるSWも用意しました。これはアンテナ方位をローテーター基準に合わせることができた時の設定方位 N(0°)360°に使えます。もう一つクリアする必要があるのが、電源をリセットしたときの角度のリセットがされないようにメモリする機能(レジューム機能)も考えておかなければなりません。これはこれから検討です。現状のロータリーエンコーダとSSD1306への表示スケッチを下記します。このスケッチもCopilotのAIを使用して作成しています。これをサーバーに組み入れてゆくことになります。Hi!

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET    -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

// ピン定義
const int encoderPinA = 18;
const int encoderPinB = 19;
const int encoderSW   = 25;

volatile int32_t angle = 0;
int lastEncoded = 0;
bool lastSWState = HIGH;

void IRAM_ATTR updateEncoder() {
  int MSB = digitalRead(encoderPinA);
  int LSB = digitalRead(encoderPinB);
  int encoded = (MSB << 1) | LSB;
  int sum = (lastEncoded << 2) | encoded;

  if (sum == 0b1101 || sum == 0b0100 || sum == 0b0010 || sum == 0b1011) angle++;
  if (sum == 0b1110 || sum == 0b0111 || sum == 0b0001 || sum == 0b1000) angle--;

  if (angle < 0) angle += 360;
  if (angle >= 360) angle -= 360;

  lastEncoded = encoded;
}

void setup() {
  pinMode(encoderPinA, INPUT_PULLUP);
  pinMode(encoderPinB, INPUT_PULLUP);
  pinMode(encoderSW, INPUT_PULLUP);

  attachInterrupt(digitalPinToInterrupt(encoderPinA), updateEncoder, CHANGE);
  attachInterrupt(digitalPinToInterrupt(encoderPinB), updateEncoder, CHANGE);

  Serial.begin(115200);

  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("OLED init failed"));
    while (true);
  }

  display.clearDisplay();
  display.setTextSize(2);
  display.setTextColor(SSD1306_WHITE);
}

void loop() {
  // SWピンの状態をチェック
  bool swState = digitalRead(encoderSW);
  if (swState == LOW && lastSWState == HIGH) {
    angle = 0;
    Serial.println("SW pressed: angle reset");
  }
  lastSWState = swState;

  // 3桁右詰め表示
  char angleStr[4];
  sprintf(angleStr, "%03d", angle);

  display.clearDisplay();
  display.setCursor(0, 20);
  display.print("Angle: ");
  display.print(angleStr); // ← 整形済み文字列を表示
  //display.println(" deg");
  display.display();

  delay(100);
}


ロータリーエンコーダーで設定した180°の角度
ROTARYENCODER1

ESP32DEVKITC とロータリーエンコーダーとSSD1306
ROTARYENCODER2

関係ありませんが、いたずらで液晶を2つ並列にしてみました。動作します。
ROTARYENCODER3

このスケッチをサーバーのスケッチに組み入れてうまく動作するかの確認が次のステップになります。また、レジューム機能の検討も並行して進めたいと思います。

サーバー、クライアントの2方位(N北、S南)仕様版はひとまず完成として、今回はいわば、応用編という感じでしょうか?ともかく、ハードルのあるトライアルではあります。

とにかく、問題が起き、解決方法を探すといった方向で進めてきてますが、アイデア、内容としては実用性も備えたある意味、画期的な方法のトライアルになっていると思います。

つづく?


アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード
アーカイブ
  • ライブドアブログ