FD SAVIORの仕組み

FD SAVIORの動作について概要を説明します。

使い方は分かったけどそれって技術的にどうやってるの?みたいな興味がある人向けです。

構造

本体はRaspberry Piです。

その中でも
・USBでFDDを接続できる
・無線LANが使える
という理由によりRaspberry Pi 3 Model Bを使用しています。

Buy a Raspberry Pi 3 Model B – Raspberry Pi
Single-board computer with wireless LAN and Bluetooth connectivity

OSは標準のRaspbian(Debian GNU/Linuxベース)です。

Operating system images – Raspberry Pi
The Raspberry Pi is a tiny and affordable computer that you can use to learn programming through fun, practical projects. Join the global Raspberry Pi community...

つまり実態はLinuxのパソコンです。
FDDから内容を読み取ってコピーするだけのパソコンなのです。

そこに使いやすいようにボタンを繋いだり、LEDで現在の状態が分かるようにしています。

処理の流れ

ボタンの監視

Raspberry PiにはGPIOという汎用入出力ピンがあります。
ここにボタンを繋ぐことで「処理を実行したい」という信号を送ることができます。

本体側には「信号が来たら何をする」という、信号を受け取る側のプログラムが必要になります。(GPIO入力)
こちらはGPIOライブラリが充実しているPythonで実装しました。

また待機中実行中エラーのときにそれぞれLEDを点灯させるのも同じプログラムで制御しています。(GPIO出力)

プログラム本体部

実際にフロッピーやUSBのファイルをやりとりしたり、アップロードをするのはShellスクリプト(Bash)で実装しました。

Pythonは、ボタンを押されたらこれらのプログラムを呼び出すまでがお仕事です。
(なぜならPythonに慣れてないから作り方が分からない)

バックアップのフロー
  • フロッピーは接続されているか?
    • なければエラー
  • USBに保存できるか?
    • ダメならアップロード(curlによるPOST)
    • アップロードできた?
      • ダメならエラー
リストアのフロー
  • フロッピーは接続されているか?
  • USBにファイルはあるか?
    • なければエラー
  • フロッピーに書き込めたか?
    • ダメならエラー

とにかくシェルを使ってます。

コマンドでファイルの存在確認!コマンドでコピー!コマンドで圧縮!コマンドでアップロード!

アップロード

アップローダにはshimosyanさんのphpUploaderを使用させて頂いています。

shimosyan/phpUploader
簡易PHPアップローダーです. Contribute to shimosyan/phpUploader development by creating an account on GitHub.

PHP+SQLiteなので設置するだけでよい簡便さもさることながら、
通信の設計が分かりやすかったのでcurlコマンドからPOSTアップロードする実装が簡単でした。

ファイルの判別

どれが自分のアップロードしたファイルかを判別させる方法が思いつきませんでした。
「コレが俺のだ!」って情報を入力する手段があればいいんですが…。
今のところはアップロード時間を見て判断してください。(それかUSB持って行ってください)

思いつき

「どのFD SAVIORからアップロードしたか」くらいはコメントに記入できる気がする。
次回のアップデートで実装するかも?

終了後について

USBもFDDも、処理が完了した時点で抜いて大丈夫です。

安全な取り外しみたいなものは必要ありません。(処理の途中でアンマウントされています)

オンラインアップデート

FD SAVIOR内部のプログラムはオンラインアップデートに対応しています!

毎日18時に最新のプログラムを取得し、更新します。
その間は使用できません。(1分弱)

取得方法

https経由のGitで更新を取得しています。
Gitリポジトリはうちの自宅サーバーに立てています。

うちのサーバーはhttps経由でのプッシュに対応していませんが、
自分の開発環境からはsshでプッシュが可能なので、sshで更新した内容を各端末がhttpsでプルする形になります。

(正確にはフェッチ後にハードリセットをかけることで、強制的に最新で上書きするようにしています)

終わりに

概要に書いただけでも、

  • 電子工作
  • Linux
  • Python
  • Shellスクリプト
  • Git

などなど色んな技術が出てきますが、実は全部素人です。精通している技術は1つもありません。

Google先生に聞いた技術を見よう見まねで作っているのであんまり効率が良く無さそうなところもありますが、とりあえずやりたかったことは実現できるようになりました。

もしいずれかの技術に精通していて効率化・高機能化に興味がある方がいればお声掛けください。

コメント

タイトルとURLをコピーしました