Bluetoothシャッターでモールス符号を打つ
はじめに
はじめまして、Staff Roiです。今回は100均で売っているBluetoothシャッターの入力をPythonで受け取り、モールス符号に変換するプログラムを作っていきます。このプログラムを使えば、遠隔でシャッターを打つだけで文字入力ができるようになります。
用意
順番に見ていきましょう。
環境
・ラズベリーパイ3B (linux)
基本的にPython3がインストールされていればどの環境でも大丈夫なはずです。
Bluetoothシャッター
ダイソーで売っていたものを使います。
二つ種類があるそうですが、今回は上の写真のものを使います。
必要なパッケージ
・evdev 1.6.1 (キーやマウスのイベントを取得します)
・PyMorse (符号を文字列に変換、文字列を符号に変換します。)
上のPyMorseは筆者が作ったものです。「.」と「-」で符号を表します。
pip install git+https://github.com/roistaff/PyMorse
でインストールします。符号を辞書に合わせて変換し、意味不明な符号の場合は「*」で置き換えている関数があるだけで、必要なら自分で作ってもらっても構いません。
はじめていく
早速はじめていきましょう。
ペアリング
シャッターをペアリングします。windowsやmacの方は従来の方法で、ラズベリーパイでもGUIからペアリングできます。
Bluetoothのアイコンをクリックし、「デバイスを追加」でペアリングします。基本的に問題なくペアリングされるはずです。
event番号を調べる
evdevから扱うためにデバイスのevent番号を調べます。(event番号とは「event5」のようなものです)
シャッターの電源を切り、ペアリングを解除します。そうしたらターミナルで以下のコマンドを入力:
ls /dev/input/
そしたらこのようなリストが返ってきます。
by-id by-path event0 event1 event2 event3 event4 event5 mice mouse0
さらに、もう一度シャッターをペアリングして先ほどのコマンドを実行すると
by-id event0 event2 event4 event6 mice
by-path event 1 event3 event 5 event 7 mouse0
のように、event6とevent7が増えていることがわかります。今回はevent6を使います。
コードを書く
いよいよpythonコードを書いていきます。
ここに載せるのはあくまでも基本的なところで、実用的な面?はほとんどありません。
import evdev
import pymorse
import time
global spacetime
spacetime = 1.5
device =evdev.InputDevice("/dev/input/event6")
text = ""
end = 3000000000
while True:
try:
print(device)
print("OUTPUT:")
for event in device.read_loop():
if event.type == evdev.ecodes.EV_KEY:
outime = time.time()
outtime = outime-end
if outtime > spacetime:
space = 1
else:
space = 0
if event.value ==1:
start = time.time()
if event.value ==0:
end = time.time()
t = end - start
if t > 0.5:
m = "-"
else:
m = "."
if space == 1:
text +="_"
else:
pass
text +=m
if '_' in text:
tt = pymorse.code_to_string(text)
print(text,tt,end='\r')
else:
print(text, end='\r')
except KeyboardInterrupt:
break
except:
print("retry...", end='\r')
time.sleep(1)
変数deviceの"/dev/input/event6"のところは各自の環境に合わせて変えてください。
動作確認
今回はターミナルで実行します。
シャッターボタンの長押し(2秒以上)することで「-(ツー)」、短く押すことで「.(トン)」、空白で文字を区別するには1.5秒以上何もしないで待ちます。
ちゃんとSOS、と救難信号を送信し、国際救助隊のサンダーバードが来てくれました(笑)
Blue-Morse
今回紹介したのは、私が今作っているBlue-Morseというアプリのアルファ版です。
私が作っているBlue-Morseはインストールするだけで簡単にモールス符号で文字列を入力することができ、色々な機能もいれています。
宣伝ですが、
sudo pip install git+https://github.com/roistaff/Blue-Morse
でインストールできます。
詳しくは
まとめ
コードを改造すれば、モールス符号で入力するだけではなく、opencvで写真を撮ったり、何かのスイッチにすることもできます。
是非ともbluetoothシャッターを活用してみてください。
参考
Discussion