JH1LHVの雑記帳

和文電信好きなアマチュア無線家の雑記帳

スポンサーリンク

MicroPython で morse

Maker Faire Tokyo 2015」に触発されて購入していた「pyboard v1.0」ですが、昨夜になってやっと触ったので、その記録です。

pyboard は MicroPython(マイコンに最適化された Python3 が実装)が動くマイコンボードです。

f:id:JH1LHV:20150920104112j:plain

f:id:JH1LHV:20150920104150j:plain

こんなに小さい。

pyboard をパソコンに接続すると USB フラッシュドライブとして認識するので、実行したいスクリプトがあれば、ファイル名を「main.py」にしてこの中に保存します。
あとはリセットするだけで勝手にスクリプトは起動してくれます。

必要なのは「マイクロ USB ケーブル」1本だけです。 

 

Firmware をアップデート

購入してからしばらく経過しているので、まずは Firmware のアップデートからです。

おお!
なんと 2015-11-07(今日)のアップデートファイルがあります。 

pybv10-2015-11-07-v1.5-94-gae58035.dfu

 

micropython.org

 

f:id:JH1LHV:20151107010312j:plain

わたしは一番上の最新の dfu ファイルを選択しました。

pyboard に Firmware の dfu を書き込むためのツール「DfuSe」もダウンロードしておきます。 
 

 

f:id:JH1LHV:20151107010408j:plain

DfuSe は、ウェブ画面下の「Download」ボタンからダウンロードできます。

それでは、pyboard を dfu モードで起動して新しい Firmware を書き込むことにします。

f:id:JH1LHV:20151107155836j:plain

dfu モードで起動するためには、この画像のように2か所のピンをジャンパしてパソコンと接続する必要があります。 
 

f:id:JH1LHV:20151107002436j:plain

画像が暗くて見えにくいけど・・・こんな感じに接続します。

あとは、書き込みツールの DfuSe を起動するだけです。

f:id:JH1LHV:20151107010248j:plain

①の「Choose...」ボタンで Firmware の「pybv10-2015-11-07-v1.5-94-gae58035.dfu」を選択します。

②の「Upgrade」ボタンで書き込みます。

 

それでは動作試験です

何時も L チカばかりじゃつまらないので、今日はモールスを鳴らしてみます。

 

f:id:JH1LHV:20151107151610j:plain

Y2 ピンに圧電ブザーを一つ取り付けました。

 

f:id:JH1LHV:20151107160253j:plain

スクリプトは「main.py」の名で保存します。

# by JH1LHV
from pyb import Pin, Timer

dot_speed = 60 
tone_freq = 740 

msg = "JH1LHV JH1LHV JH1LHV" 

p2 = Pin("Y2") 
tim = Timer(8, freq=3000) 
ch = tim.channel(2, Timer.PWM, pin=p2)

morsetab = {
    'A': '.-', 
    'B': '-...', 
    'C': '-.-.', 
    'D': '-..', 
    'E': '.', 
    'F': '..-.', 
    'G': '--.', 
    'H': '....', 
    'I': '..', 
    'J': '.---', 
    'K': '-.-', 
    'L': '.-..', 
    'M': '--', 
    'N': '-.', 
    'O': '---', 
    'P': '.--.', 
    'Q': '--.-', 
    'R': '.-.', 
    'S': '...', 
    'T': '-', 
    'U': '..-', 
    'V': '...-', 
    'W': '.--', 
    'X': '-..-', 
    'Y': '-.--', 
    'Z': '--..', 
    '0': '-----', 
    '1': '.----', 
    '2': '..---', 
    '3': '...--', 
    '4': '....-', 
    '5': '.....', 
    '6': '-....', 
    '7': '--...', 
    '8': '---..', 
    '9': '----.', 
    ' ': '       ', 
    '?': '..--..', 
    ';': '-.-.-.', 
    ':': '---...', 
    '-': '-....-', 
    '/': '-..-.', 
    '(': '-.--.', 
    ')': '-.--.-', 
    '_': '..--.-',
} 

def dot(): 
    tim.freq(tone_freq) 
    ch.pulse_width_percent(30) 
    pyb.delay(dot_speed) 
    ch.pulse_width_percent(0) 

def dash(): 
    tim.freq(tone_freq) 
    ch.pulse_width_percent(30) 
    pyb.delay(dot_speed * 3) 
    ch.pulse_width_percent(0) 

for m in msg.upper(): 
    for c in morsetab[m]: 
        if c == '.': 
            dot() 
        elif c == '-': 
            dash() 

        pyb.delay(dot_speed)

    pyb.delay(dot_speed * 3) 

当局のコールサイン「JH1LHV」を3回鳴らしてみました。 

 

youtu.be

 

python で記述できるマイコンボードの pyboard 。
昔の BASIC を思い出す手軽さでプログラムが書けるので開発意欲も湧いてきます。

これから寒くなる季節ですし・・・
皆さんもお一つ如何でしょうか。

 

------- 2017/10/11 追記 ------- 

● MicroPython クイックリファレンス 

Quick reference for the pyboard — MicroPython 1.9.2 documentation

●チュートリアル

MicroPython tutorial for the pyboard — MicroPython 1.9.2 documentation