Sync Controller Light Version (1)
まだ開発途中の Sync Controller ですが、ロードマップに記したように、
現状の構成では中心となる部品 mBed LPC1768 の入手性があまりよくなく、性能の割には値段が高く、かつそろそろだいぶ古いのでもしかしたらディスコン!?となるかもしれないという恐怖があるために、別のプラットフォームを探していました。
M5Stackとは
で、見つけたのがこちらです。
一時期IoT用プロトタイプデバイスが出始めたころに、わりと最後発に近い感じで出てきたのですが、こんな感じの特徴があります。
- 筐体の大きさ(縦横)は決まっているが、高さに制限がなく、どんどん積み重ねていける
- もともと汎用のマイコン/SoC ESP32 をつかっていて、それらのソフトウェア資産もそのまま使える
- 開発にはScratchに似た簡単な言語と、Arduinoが使える
- 外部インターフェースが独自仕様でなく汎用(I2C、SPI) GPIOもそのまま出ている
- WiFiが標準、BluetoothやLoRaWANもある
- すでに多数の外部モジュールが発売されている
- ライブラリはM5用のもArduino用のも充実してきている
- お値段が安い
- 比較的入手性がよい (日本の代理店はスイッチサイエンス)
- 大手クラウドとパートナーシップを結んでおり、クラウドサービス用ライブラリも用意されている
じゃあなんで最初からこっちじゃなかったの?という声も聞こえますが(笑)、Sync Contollerの前身SMPTEタイムコードリーダーを企画・制作していたころにはまだ出てなかったんですね。なので、タイムコード用ライブラリもすでに(だいぶ貧弱ですが)あった mBed でまずは作ってみようとしたのでした。でもそこでいろいろ検証できたし、割とサクッと動いている現在のプロトタイプも、結局 mBed 版からコードを移植しているだけです。
じゃあ作ってみよう
すでにタイマー用クロックが80MHzということで、タイムコード生成に最適な12MHzの倍数ではないので、そのままではクロック精度が出せないことはわかっているのですが、まあそれはおいおい考えましょう。
- まず画面で29.97フレームのタイムコード表示が可能か
- NTPで秒以下の精度の時間を取得可能か
あたりを検証すれば、あとは何とかなるだろうと。
開発用にはGUIを使ったこういう環境(Scratchに似ている)と
昔ながらの笑 Arduinoが使えますが、当然後者を使います。だってC/C++で育ったんですもの。40年近く前ですけどねw
とりあえず動くっしょ?
結論から言えば、この2つは何とかなりました。画面表示は、一応更新すべき部分のみ区切って更新していますが、ちらつきもありません。このままタイムコードリーダーとしても使えそうです。
WiFi接続の実装も一瞬で特に迷うこともなく、また懸念のNTPライブラリですが、秒以下取れるものはあまりなくて、mBed では自分で改造したのですが、なんとあっさりと見つかってしまったのでこれを使います。
Unix標準のTime構造体で時間が返ってきますが、ms() でミリ秒を取ることが出来ます。
で、ここまでで実際に動かしてみたのはこちら。まだまだいろいろ決め打ちですが…
オリジナル版 Sync Controller (右下)は液晶の更新が遅いため表示が3フレーム単位なので、LTC出力を Ultrasync One というタイムコードリーダー・ジェネレーター(右上)でJamシンクし、そのタイムコードを表示させて比較しています。Jamシンクで1フレームずれるので(これは今後何とかしないと..)、左側のM5Stack版と同期しているのが分かると思います。
特に同期動作はしておらず、電源入れただけです
(これがSync Controllerの特徴)
開発タスク
ということで、基本的な機能検証はできたので、このプラットフォーム上で開発を進めてみます。
ハードウェア部分
- タイムコード生成用高精度クロック(たぶん12MHz TCXO)
- LTC出力用バッファ & 出力ジャック (3.5mmミニプラグ)
- フレームシンク用シンクセパレータ&同期信号入力コネクタ(DIN 1.0/2.3)
- 上記を乗っけるプリント基板設計
- M5Stackの下にがっちゃんこする筐体設計・プロト製作
ソフトウェア部分
- LTC出力
- RTC(リアルタイムクロック)
- フレーム同期
- フレーム数・ドロップ/ノンドロップ選択
- WiFi SSID/Key設定&保存(これがめんどくさい...) or WPS対応
特に最後のWiFi SSID設定などは結構めんどくさいので、スマホアプリからBluetoothで設定、とかできないかなと思っています。スマホアプリそのものがめんどくさいかな…。でもアプリからいろいろ設定ができると便利か。フレーム数など以外にも、ユーザーズビットなども設定できるかも。
まあこんな感じで。そこそこまだ工数かかりますが、筐体が小さいのでデジタル一眼などと組み合わせて使いやすくなるかなと思っています。というかせっかく買った Ultrasync One が要らなくなるやん…w