ラズベリーパイでのPythonプログラミングの練習として、CWビーコン送出プログラムを作って見ました。
左のウインドウが、Python2(IDLE)2.7.9 Shell
ラズパイとのインターフェースは、ベースに1kΩを入れた2SC1815をオープンコレクタとして使いました。
アルゴリズムは、CQ誌2014年3〜5月後に掲載された7J3AOZ局の記事を参考にさせていただきました。
簡単に説明しますと、モールス符号の短点を0、長点を1で表し、ストップビットを1とします。
Aは、トツーつまり、・ーですので、最下位ビットから順に0。1そして次にストップビット1をセットして、110とします。
同じようにして、Bは、ー・・・なので、1001となります。これをモールス符号の内部コードとします。
内部コードを10進数で表すと。A,B,C,D,E,F・・・=6,17,21,9,2,20・・・
内部コードを最下位ビットから順に送出します。内部コードを右にシフトして、ストップビットだけになったら(内部コードが1になったら)1文字送信終了です。
ハード面では、基本的には、Lチカと同じで、GPIO25を出力に使い、GPIOがHIGHの時に送信になります。
メッセージの文字に対応したモールス符号の内部コードをとりだし、最下位ビットから0なら短点、1なら長点を送出します。
モールス信号の規則に従い、長点は、短点の3倍の長さ、短点と短点、短点と長点の間は、短点と同じ時間、文字と文字の間は、短点の3倍、文と文の間は、短点の7倍とします。
テストプログラムですので、送信速度は固定で、短点を0.1秒としています。(約12WPM)
Pythonでの自分で作った初めてのプログラムです。これで一応動きました。
--------------------------------------------------------------------------------
import RPi.GPIO as GPIO
from time import sleep
from time import sleep
GPIO.setmode(GPIO.BCM)
GPIO.setup(25,GPIO.OUT)
GPIO.setup(25,GPIO.OUT)
Morse_Code =[63,62,60,56,48,32,33,35,39,47,1,1,1,1,1,1,1,6,17,21,9,2,20,11,16,4,30,13,18,7,5,15,22,27,10,8,3,12,24,14,25,29,19]
message='VVV VVV DE JH7UBC JH7UBC PM97WR'
message='VVV VVV DE JH7UBC JH7UBC PM97WR'
message_len=len(message)
def dot():
GPIO.output(25,GPIO.HIGH)
sleep(0.1)
GPIO.output(25,GPIO.LOW)
def dash():
GPIO.output(25,GPIO.HIGH)
sleep(0.3)
GPIO.output(25,GPIO.LOW)
GPIO.output(25,GPIO.HIGH)
sleep(0.1)
GPIO.output(25,GPIO.LOW)
def dash():
GPIO.output(25,GPIO.HIGH)
sleep(0.3)
GPIO.output(25,GPIO.LOW)
def space():
sleep(0.6)
sleep(0.6)
try:
while True:
for i in range(message_len):
char_code = ord(message[i])
if char_code == 0x20:#space code
space()
else:
Mcode = Morse_Code[char_code - 48]
while Mcode != 1:
mark = Mcode & 1
if mark == 0:
dot()
else:
dash()
sleep(0.1)
Mcode >>=1
sleep(0.3)
sleep(0.7)
except KeyboardInterrupt:
pass
GPIO.cleanup()
while True:
for i in range(message_len):
char_code = ord(message[i])
if char_code == 0x20:#space code
space()
else:
Mcode = Morse_Code[char_code - 48]
while Mcode != 1:
mark = Mcode & 1
if mark == 0:
dot()
else:
dash()
sleep(0.1)
Mcode >>=1
sleep(0.3)
sleep(0.7)
except KeyboardInterrupt:
pass
GPIO.cleanup()
-----------------------------------------------------------------------
ラズパイでの実際のプログラミングの様子です。予約語や関数などは、色が付き、分かりやすくなっています。
Image may be NSFW.
Clik here to view.
Clik here to view.

右のウインドウが、エディタです。
このGUIが使えるようになって、コマンドラインからの操作より、ずっと便利になりまし。(実は、2015年にPythonの勉強をしようとしましたが、中断してしまいました。)
送信機の代わりに、モールス練習機を接続して、動作を確認しました。
Image may be NSFW.
Clik here to view.![イメージ 2]()
Clik here to view.
ラズパイとのインターフェースは、ベースに1kΩを入れた2SC1815をオープンコレクタとして使いました。
フォトカプラを使っても良いと思います。
少し、Pythonでのプログラミングの仕方が分かってきました。