フリップドットディスプレイを入手からRaspi4で動かす
入手の話
フリップドットディスプレイという以下の写真みたいなディスプレイがあり
このようなディスプレイを動かしてみたいっと思っていろいろ調べてみてたけど
日本人でフリップドットディスプレイについて記事を書いている人がチラホラ見かけたので
その人を参考にALFA ZETA の Flip-Dot Boards XY5を購入してみました
ALFA ZETAさんはメールからの注文なのでなかなか手を出しにくいけど中古もどうかなって
とおもってメールで「Flip-Dot Boards XY5はいくらぐらいですか」って送ったら
値段表が来て「色々なサイズがあるよー」っていう感じでメールが届きましたね。
けど思ったよりも高くて、自分は28x7のもので我慢しましたがそれでも送料込みで
5万くらいでしたね (学生にはきつい)
まあそのあと色々とユーロで支払いやら住所と名前を送って届いたかんじですね。
もちろんRaspiで動かす用のHATとマニュアルも送ってもらったので良かったけど全部英語
なのでなんもわからんからグーグル先生に教えてもらいながらやりましたね。
そんで「pythonで動かすサンプルコードってある」っていう質問をしてみたら
「pyserialを使えば基本的には制御できるよー 制御プロトコルはこんな感じ」
と来てPDFで仕様書をもらいました
(だけどあんまりわからんかったから手探りで色々試した)
結果このような制御方法だとわかりました
(手探りだから完璧に合ってるとは言えないけど)
githubからでも見れるよー
Alfa Zeta Flip Dot Display XY5 28x7 操作説明
Alfa Zeta Flip Dot Display XY5 28x7を制御する方法制御コマンドは
シリアルインターフェースを介して送信され、特定のバイト構造で構成されます。
コマンド構造
ディスプレイを制御するためのコマンドは以下のように構成されています:
(データフレーム)
all_dark = bytearray([ #全部黒にするやつね
0x80, # ヘッダ
0x83, # 28バイトのリフレッシュ
0xFF, # アドレス
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, # 28バイトのデータ
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x8F # 伝送終了(EOT)
])
-
0x80: ヘッダバイト
-
0x83: 28バイト、リフレッシュ
-
0xFF: アドレスバイト
-
0x00 から0x7F: 28バイトのデータ
-
0x8F: 伝送終了(EOT)
バイトの説明
- 0x00から0x7F: これらのバイトは、7x28グリッドの28列を表します。各列は16進数の値で表され、最大値は0x7F(10進数で127)です。この値は、その列の7ビットのデータに対応し、各ビットはドットのオンまたはオフの状態を表します。
たとえば、2進数値の1111111は16進数値の0x7Fに変換され、1列の7つのドットがオンであることを示します。
7x28グリッドの表現
以下は、7x28グリッドの視覚的な表現です。各ドットはオン(*)またはオフ(.)の状態を示します。
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
1 . . * * * * * * * * * * * * * * * * * * * * * * * * * *
2 . . . * . * . * . * . * . * . * . * . * . * . * . * . *
3 . . . . * * . . * * . . * * . . * * . . * * . . * * . .
4 . . . . . . * * * * . . . . * * * * . . . . * * * * . .
5 . . . . . . . . . * * * * * * . . . . . * * * * * . . .
6 . . . . . . . . . . . . . * * * * . . . . . . * * * . .
7 . . . . . . . . . . . . . . . . * * * . . . . . * * . .
0x00 0x00 0x01 0x03 0x05 0x07 0x09 0x0B 0x0D 0x0F 0x11 0x13 0x15 0x17 0x19 0x1B 0x1D 0x1F 0x21 0x23 0x25 0x27 0x29 0x2B 0x2D 0x2F 0x31 0x33 0x35 0x37
この下の0x**になっているところに16進数を入れる感じ
簡単に言えば、表示させたい1列のドット表示を2進数として考えてそれを16進数へする
それが27個ある感じ
制御セットアップ
アドレスバイトの説明
- コード側では0xFFと今はなっているけど基本的にはここにはそのパネルの裏にある
- DIPスイッチと同じにする (写真の8ピンDIP側)
この写真だと0x01となっているからコード側でも0x01にしないといけない
基本的に後ろのDIPスイッチは2進数なのでそこだけ注意かな
demoを動かすのなら8ピンをオンすればOK
8ピンDIPの説明
1-6 | アドレスをバイナリコード(自然順)
7 | 磁化時間:OFF: 500μs(デフォルト)、ON: 450μs
8 | テストモード:ON/OFF。OFF = 通常運転
ボートレートの説明
ボーレート (3ピンDIP)
通信速度は以下のように設定できます。写真の設定に従うと、速度は9600になります。
3ピンDIPの説明
0 | ↓ ↓ ↓ | なし
1 | ↑ ↓ ↓ | なし
2 | ↓ ↑ ↓ | なし
3 | ↑ ↑ ↓ | 9600
4 | ↓ ↓ ↑ | 19200
5 | ↑ ↓ ↑ | 38400
6 | ↓ ↑ ↑ | 57600
7 | ↑ ↑ ↑ | 9600
オフ | |
追記 24V電源もいるからねー 詳しくはこの記事
Raspi4で動かしてみた
Raspiで動かすんだったらRS-485を変換するHATが要ります(USBに変換する物でもOK)
だけど自分はALFA ZETAさんからHATも貰ったのでそれを使いました
これでRS-485を変換してディスプレイに接続する感じ
接続を完了したら
シリアルポートを有効にしてシリアルコンソールを無効にする:
Raspberry Pi 構成ツールを開きます:
sudo raspi-config
-
「Interfacing Options」に移動して、「Serial」を選択します。
-
「ログインシェルをシリアル経由でアクセスできるようにしますか?」と尋ねられたら、「No」を選択します。
-
「シリアルポートハードウェアを有効にしますか?」と尋ねられたら、「Yes」を選択します。
-
構成ツールを終了し、Raspberry Pi を再起動します:
sudo reboot
flip
ディレクトリを作成してそこに移動します:
mkdir flip
cd flip
リポジトリを flip
ディレクトリにクローンします:
git clone https://github.com/mokuttii/Flip-Dot-Display
cd flip
仮想環境を作成します:
python3 -m venv env
仮想環境をアクティブにします:
. /env/bin/activate
必要な依存関係をインストールします:
pip install opencv-python pyserial
これで環境構築は終わりー
python3 demo.py
または
python3 start.py
で動くよー
(一応)仮想環境をアクティブにしないと動かないです
. /env/bin/activate
とりあえず フリップドットディスプレイで動画を再生したよ
bad apple
次はテトリスでも作ろうかな
引用 又 参考になった
購入元
購入に関する記事を書いている人
arduinoで制御している人たち
海外の人でraspiを使って制御している人