WindowsのCOMポートを区別しやすくする

マイコン開発をやってるとCOMポート番号がどんどん増えていき、同時に接続したときにどれがどれか分からなくなる問題の対策。

バイスマネージャで確認

まず基本から。デバイスマネージャ(Win+X, M)で確認。「表示」→「非表示のデバイスの表示」で、いま接続されていないデバイスも表示できる。もう使わなくなったデバイスはここでアンインストールして整理するのも一手。
f:id:licheng:20220211233520p:plain:w423

分かりやすい名前を付ける

バイスマネージャに表示されるCOMポートの表示名は「Arduino Uno (COM9)」のような分かりやすい場合もあるが、「USB シリアル デバイス (COM3)」のように一般的すぎて分かりにくい場合もある。

そのような場合、レジストリを編集して分かりやすい名前( Friendly Name )を付ける。手順は以下の通り。レジストリの編集は自己責任で。

【FTDIのUSBシリアル】
コンピューター\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FTDIBUS

【その他のUSBシリアル】
コンピューター\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB

【Bluetoothシリアル】
コンピューター\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\BTHENUM
  • 例えばCOM3の表示名を変更したい場合は、F3で「COM3」を検索
  • FriendlyName という名前のレジストリが見つかるので、適当な名前に編集する

f:id:licheng:20220212084651p:plain:w421

  • バイスマネージャで確認すると名前が変わっている

f:id:licheng:20220212094925p:plain:w423

Tera Termでの名前の確認

Tera Termでは、「ファイル」→「新しい接続」では Friendly Name が表示される。
f:id:licheng:20220212110514p:plain:w400

「設定」→「シリアルポート」ではプルダウンメニューにはポート番号しか表示されないが、下の方の欄に Friendly Name が表示される。
f:id:licheng:20220212113616p:plain:w400

接続先ごとに設定を保存してショートカットを作成

Tera Termの設定は、「設定」→「設定の保存」で名前を付けてINIファイルに保存でき、「設定」→「設定の読み込み」で読み込むことができる。

しかし、同時に複数のシリアルポートを開いて作業するときにこの操作は少し面倒である。そこでショートカットを作成しておく。手順は以下の通り。

  • 検索ボックスでTera Termを検索し、「ファイルの場所を開く」をクリック

f:id:licheng:20220212122001p:plain:w500

  • そこにTera Termのショートカットがあるので、適当な場所にコピーしてから適当な名前に変える
  • コピーしたショートカットのプロパティを開き、「リンク先」の末尾に /F オプションでINIファイルを指定する。

f:id:licheng:20220212125930p:plain:w401

【例】
"C:\Program Files (x86)\teraterm\ttermpro.exe" /F=GR-ROSE.INI

Bluetoothシリアルポートの方向の確認

Bluetoothシリアル(SPP)のポートは1デバイスに対して2つ(着信と発信)できるので、デバイスマネージャではどっちがどっちか分からない。その場合は次の手順で確認する。

Windowsの「設定」>「デバイス」>「Bluetoothとその他のデバイス」の画面の右端にある「その他の Bluetooth オプション」を開く。
f:id:licheng:20220219155045p:plain:w640

Bluetooth 設定」の画面が出るので「COMポート」タブを開く。
f:id:licheng:20220219154728p:plain

「発信」か「着信」かを確認できる。PCからデバイスに接続しに行くのが「発信」であり、デバイスからPCに接続しに来るのが「着信」である。PCとマイコンを接続する場合は「発信」のほうを使うことが多い。

Arduino IDE や IDE for GR のビルド出力先を固定する

Arduino IDEIDE for GR のビルド出力先を固定したい場合、設定ファイル( preferences.txt )で build.path を指定する。

build.path=C:\tool\temp

Windowsの場合、Arduino IDE の preferences.txt は下記のフォルダにある。

%LOCALAPPDATA%\Arduino15\
(通常は C:\Users\ユーザー名\AppData\Local\Arduino15)

同様にWindowsの場合、IDE for GR の preferences.txt は下記のフォルダにある。

%APPDATA%\Arduino15\
(通常は C:\Users\ユーザー名\AppData\Roaming\Arduino15)

※ preferences.txt を編集する前に必ずIDEを閉じておくこと!

GR-SAKURA等のUSBストレージ方式のプログラム書き込みができるがじぇるねボードの場合、IDE for GR でビルド出力先を固定して、出力された bin ファイルを保存しておけば、IDE for GR無しでプログラムの書き込みができる。

参考


ちなみに

inoファイルを開くときにArduino IDEIDE for GR を選択して開きたい場合、コンテキストメニューの「送る」に Arduino IDEIDE for GR を追加しておくと便利である。「送る」への追加は、Win+R から「shell:sendto」を実行して SendTo フォルダを開き、ここにアプリのショートカットを追加する。

メモ:ステッピングモータ 24BYJ48, 28BYJ48

  • 安価で小型のステッピングモータ 24BYJ48, 28BYJ48
  • 2相ユニポーラ
  • 2つのセンタータップどうしが内部で接続されている
  • 24BYJ48は本体円筒部分の直径が24mm、28BYJ48は28mm
  • 各々、5Vタイプと12Vタイプがあるので要注意
  • ステップ角 = 5.625° , ギア比 = 1/64
  • 結線図 (ケーブル色は製品によって異なる可能性あり)

  f:id:licheng:20220207125100p:plain:w240
  A1:桃(2) , A2:橙(4) , B1:黄(5) , B2:青(1), COM:赤(3)

バイポーラ駆動したい場合

24BYJ48, 28BYJ48はユニポーラのステッピングモータであり、しかもセンタータップどうしが結線されているので、本来はバイポーラ駆動では使えません。しかし、センタータップどうしの結線をパターンカットすればバイポーラ駆動できます。その場合、センタータップ(赤)は未接続にします。このような改造例の記事は日本語でも数多く見られます。(「28BYJ48 バイポーラ化」でググってください。)

では、無改造の24BYJ48をバイポーラ駆動したらどうなるでしょうか? じつは、無改造でも回転しちゃうのです。(たしかに理想的にはセンタータップどうしが結線されてても大丈夫な気もしますが、現実にはよく分からないので推奨はしません。)

入手先

ローソンのコピー機でPDFを原寸印刷

今時はコンビニのコピー機でPDF等の印刷ができますが、デフォルトではやや縮小されて印刷されます。正しい寸法で原寸印刷(等倍印刷)したい場合、ローソンのコピー機の場合は次のようにします。

「用紙にあわせる」を「しない」に設定します。
f:id:licheng:20220202204338j:plain:w300

次のような警告が出ますが「OK」します。
f:id:licheng:20220202204937j:plain:w360

以上で原寸印刷できます。ただし、警告にあるようにローソンのコピー機は縁無し印刷はできず、上下左右に5mmほどの余白を取る必要があります。

I2Cのクロックストレッチ

I2Cバスは、通常はマスターがSCLラインを制御することで通信を主導し、スレーブはマスターのタイミングに従います。しかし、スレーブ側の処理が間に合わないとき、スレーブはSCLラインをLowに保持することでマスターを待たせることができます。これを「クロックストレッチ」といいます。

例えばBOSCH社の9軸センサBNO055はしばしばクロックストレッチでACKビットを100μsec以上待たせます。

上: SCL, 下: SDA, 横軸: 50μsec/DIV
f:id:licheng:20220123102901p:plain:w480

ところが、Raspberry Pi PicoのArduino環境 (本家版ではなくEarle Philhower版のほう) では、I2Cのクロックストレッチ待ちは100μsecでタイムアウトしてしまいます。このため、AdafruitのBNO055ライブラリが正しく動作しなくなります。タイムアウト時間が100μsecというのはいささか短いように思われます。

f:id:licheng:20220123103125j:plain:w480

そこで、I2Cドライバのソース( Wire.cpp ) の_clockStretch関数を下記のように修正します。

static bool _clockStretch(pin_size_t pin) {
//  auto end = time_us_64() + 100;  // 100usecでタイムアウト
    auto end = time_us_64() + 1000; // 1000usecでタイムアウト
    while ((time_us_64() < end) && (!digitalRead(pin))) { /* noop */ }
    return digitalRead(pin);
}

Wire.cppは、Windowsインストーラ版であれば下記のディレクトリにあります。

%LOCALAPPDATA%\Arduino15\packages\rp2040\hardware\rp2040\x.x.x\libraries\Wire\
(x.x.x はバージョン番号)

メモ:ビザンツ史

ビザンツ帝国の領土の変遷


五大総主教座

主要な王朝と皇帝

■レオ朝 (457 - 518)
ゼノン:西方に介入。ゲルマン人オドアケルテオドリックにイタリア統治を委任(建前)。
ユスティニアヌス朝 (518 - 602)
ユスティニアヌス大帝(笑):イタリアと北アフリカを再征服。ササン朝のホスロー1世とも戦う。『ローマ法大全』を編纂。
ヘラクレイオス朝 (610 - 711)
ラクレイオス:ササン朝に勝利するもイスラムの侵攻を受けシリアを失う。公用語ラテン語からギリシャ語に。

イサウリア朝 (717 - 802)
レオーン3世:イスラムの侵攻を退ける。聖像禁止令を出す。
マケドニア朝 (867 - 1057)
バシレイオス1世:マケドニアアルメニア系農民から皇帝に成り上がる。
バシレイオス2世:第一次ブルガリア帝国を滅ぼし、バルカン半島全土の支配を回復。通称「ブルガリア人殺し」。

コムネノス朝 (1081 - 1185)
アレクシオス1世:ローマ教皇ウルバヌス2世に援軍を要請し、第1回十字軍を招いてしまう。
アンゲロス朝 (1185 - 1204)
全員無能。第4回十字軍に帝都を奪われ滅亡。
パレオロゴス朝 (1261 - 1453)
ミカエル8世:帝都を奪回して帝国を再興。
コンスタンティノス11世:オスマン朝のメフメト2世により帝都陥落。帝国滅亡。

M5StickCのSpeaker Hatの不具合対策

M5StickCのSpeaker HatはD級アンプIC PAM8303 (3W、モノラル)を内蔵しています。

安くて小さいので、分解してPAM8303モジュール基板として利用するのもアリかなと思います。
(右は比較のため、ユニバーサル基板に386で組んだアンプ)

f:id:licheng:20220109094603j:plain:w480

しかし! このSpeaker Hat、やたらノイズが大きく音質が悪い、ケーブルで延長したりすると音が鳴らない、異常発熱するなどの不具合がTwitter上で散見されます。私もM5Stamp Picoにつないでみて同様の不具合に悩まされました。

困っていたところ、Twitterで重大な情報を得ました。

驚いて調べてみたところ、たしかにベタGND(水色)に離れ小島(緑色)ができてつながっていません!

f:id:licheng:20220108233909j:plain:w480

そこで私もC3とC4をジャンパでGNDに接続する修正をほどこしたところ、見事に問題解決しました!

f:id:licheng:20220108233935j:plain:w480

しかし、なぜこのような不具合が生じたのか疑問です。人為的なミスでビアを打ち忘れたとしても、ふつうはCADのチェックでエラーになるはずです。また、このレベルの不具合が見過ごされて広く世に出ているというのが意外です。