FlightGearのデータを外部表示させよう(6) | virt_flyのブログ

virt_flyのブログ

フライトシミュレーターソフトのFlightGearで仮想飛行を楽しむブログです。

Raspberry Pi Pico 4計器表示

↑基本4計器の同時表示が実現(画像を差し替えました 思えば長時間露光すれば同期を気にせず写真が撮れます)

 

できた!T字配列


●せめて基本4計器の同時表示を実現したくて

 

航空機の重要な計器の配置の姿からBASIC T(T亊配列)という言葉があります。真ん中に姿勢指示器、その左右に速度計と高度計、下に方位計の4つの計器からなります。

 

この間、フライトシミュレーターのFlightGearの飛行中のデータを、Raspberry Pi Picoを使って加工し、OLED画面に表示させようと取り組んできました。前回は、2つのOLEDにミニPFDと方位コンパスだけのHSI、あるいは速度計と高度計を表示させるところまで到達しました。ここまでくると、やはりT字配列の4つの計器くらいは、4つのOLEDを使って表示できるようにしたいものです。

 

●模索の末にPicoの2個使い

 

4つの計器の実現のためにOLEDを4枚使用するとなると、Picoの2つのI2CにOLED2つをぶら下げる形になるのが一般的かと思われます。

 

1つのI2CにOLEDを2枚つなげるには、0.96インチOLEDの2つのアドレスを切り替えて使う方法がありますが、前回もふれたようにハードの改造が必要になります。抵抗を付け替えるだけのこととはいえ、小さな部品をハンダ付けするのは、素人にはハードを壊すリスクがあります。

 

かわって、1つのI2Cを分岐させるI2C分配チップのTCA9548Aを使う方法もあるようですが、手元になくて購入の必要があるということで見送り。残すはI2Cをソフトで増やす方法を試すのみとなったものの、実現には至りませんでした。
 

ここまでくれば破れかぶれ、1個のPicoで2枚のOLEDが使えたのだから、同時に2個なら都合4枚のOLEDが使え、手っ取り早いと思うじゃないですか。もちろん、Pico2つで1つは受信専用、1つは表示専用として使うほどに、負荷を分散させて安定をはかるくらい繊細なPicoのことですから、Pico2つをパソコンにつなぐ際にUSBハブが必要になるとなれば、不安定さが気にもなります。どうもパソコンのUSBポートが経年劣化してき、不安定であることを思えばなおさらです。おそらく非推奨を覚悟していたのですが、ChatGPTに聞けばできるというので挑戦することにしました。


Raspberry Pi Picoで4計器表示

↑安物のブレッドボードのせいでジャンパー線だらけ。見てくれは悪いですが、私のFlightGearに新たな楽しみ方が一つ増えました

 

●方法

 

Pico用コードは、従前のものがそのまま使用可能です。ただし、扱うFlightGearデータの数の違い、すなわち速度や高度だけからピッチやロール機首方位までなどの数の違いから起きるエラーは、Pico側のコードで対処でき、その1行であるif len(s) >= 〇:の〇部分の数字を、一番多いデータ数に変えるだけで回避ができます。したがって、扱うデータを指定するxmlファイルも複数設ける必要はなく、一つで済ませられるのも助かります。

 

実質変更が必要なのは、パソコン側PCブリッジのコードでUDPを2か所に送るように設定(PicoのCOMポートに注意)、FlightGear側も起動オプションでUDPを2つ出すようにするだけ。ピン配置もいじらなくてよく、これなら楽です。

 

・パソコン側PCブリッジの改良

 

import socket
import serial

ser1 = serial.Serial("COM3",115200)  ←COMポートは例 Picoのcomポートに合わせます
ser2 = serial.Serial("COM4",115200)  ←COMポートは例 もう一つのPicoのcomポートに合わせます

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(("127.0.0.1",5501))

print("Bridge start")

while True:
    data, addr = sock.recvfrom(1024)

    ser1.write(data)
    ser2.write(data)

 

・FlightGear起動オプション

 

 --generic=socket,out,30,127.0.0.1,5501,udp,fgdata
 --generic=socket,out,30,127.0.0.1,5502,udp,fgdata

 

ここでfgdataは/Protocolフォルダに置いた扱うデータ指定用のxmlファイル名

 

●私のFlightGearの楽しみ方が1つ増えました

 

無事、速度計、水平儀、高度計、方位コンパスの4つを、それぞれ4つのOLEDに表示させることができました。各計器ともFlightGaerの画面表示に遅れることなく順調に動いています。さすがに0.96インチでは画面があまりに小さくて、目盛の文字に比べても計器が小さく、見づらいものになっていて、もう少しサイズの大きいディスプレイが欲しいところです。

 

安物のブレッドボードを使ったせいで、直接ジャンパー線でつながないと動かない憂目にあい、写真のように配線がうざいことになっています。せめてパネルで覆うことぐらいはしたらよいのですが。なお、目的がコクピットの実体化ではなかったので、今回の連載もこれくらいでおしまいとします。

 

もし、自分のコクピットを作ろうというのであれば、やはり計器は最低6つ、そしてスロットルレバーくらいは欲しいですね。