LoRa通信をLRA1のBASICで、行番号プログラムをやってみよう!
この記事について
こんにちは🐾
前回までは、LRA1のBASICを使って、たった1行でLoRa通信や環境モニターを実装する方法を紹介してきました。
今回はその進化版として──
「行番号を使った複数行のBASICプログラム」 にステップアップしていきます!
この方式を使えば、LRA1にちゃんとしたスクリプトを保存して自動実行させたり、
複雑な処理をわかりやすく整理したりすることができるようになります。
🎀 今回は、行番号があるだけじゃないんだよ〜!
保存もできるし、ラベルも使えるし……まさに“ステップアップ回”だよ〜っ♪
行番号付きのプログラムを入力する
まず、行番号付きのプログラムを入力するには、エディットモードにする必要があります。
エディットモードにするには、edit
コマンドに引数0以外を指定します。
プロンプトが >>
に代わります。
>edit 1 OK >>
🎀 エディットモードって、ちょっと懐かしい感じがするよねっ✨
エディットモードは、プログラム入力ができるようになる以外は、通常のインタラクティブモードと同じです。
通常モードでは、誤ってプログラムを書き換えないように、プログラムの変更を伴う入力はエラーになります。
なお、edit 0
または、再起動すると通常モードに戻ります。
🎀 まずは、BASICらしい“行番号”からスタートだよ〜!
エディットモードでは、入力行の先頭が数値の場合は、プログラム行の入力とみなされ、プログラムメモリーに登録されます。
>>100 print "ABC"
この先頭の数値を 「行番号」 といいます。
入力に問題がないときは、そのまま次のプロンプトが表示されます。OK
は出ません。
以下のように、入力に文法的な誤りがあると、エラーを表示して、プログラムは登録されません。
>>100 pront "ABC" Syntax error OK
📒 簡易な文法的誤りを検出するだけなので、
すべて文法エラーが検出されることでないことに注意してください。
複数行の入力は、先頭の数値は行番号となって、行番号の昇順にプログラム行が追加されます。
既に登録したプログラム行と同じ行番号のプログラムを入力したときは、上書きされます。
>>110 print "abc" >>100 print "xyz" >>110 print "123"
行番号には1~65535 までの数値が使えます。
📒 TIPS:行番号は10ずつにするのがBASIC流!
これは昔のBASICでも定番だった書き方で、あとから行を差し込みやすくするための工夫です
🎀 行番号って、“スペースを空けておく”のがコツなんだよ〜っ。
プログラムメモリーにあるプログラムを表示するには list
コマンドを使います。
>>list 100 Print "xyz" 110 Print "123" [23/8192 bytes] OK
表示の最後に、プログラムのメモリー使用量と全体量が表示されます。
LRA1のプログラムメモリー容量は8Kbyteです。
📒 プログラムは内部コードで登録されるので、入力文字数とメモリー使用量は一致しません。
🎀 ちゃんと登録されてる〜っ!
使用量もわかるから、あとどれくらい書けるかの目安にもなるよっ♪
プログラムメモリーのプログラムを消去するには new
コマンドを使用します。
>>new OK
🎀 「これでまっさらになったよ〜っ!
新しく書き始めたいときは、まずこのリセットが基本だよっ♪」
プログラムを実行しよう
プログラムメモリーのプログラムを実行するには、run
コマンドを使います。
>>run xyz 123 OK
プログラムは行番号の順に実行されます。
最後まで実行すると、インタラクティブモードに戻ります。
🎀 この“書いて→走らせて→確かめる”って感じ、昔のBASICっぽくてテンション上がる〜っ!
run
コマンドの引数に行番号を指定すると、その行番号から実行します。
>>run 110 123 OK
🎀 実はこれ、地味だけどすっごく使えるテクなんだよ〜っ!
Flashには1つしか保存できないけど、行番号ごとに分けておけば実質“複数のプログラム”を仕込めるんだよね〜っ♪
サブルーチン
行番号があると、プログラム中にサブルーチンを作ることができます。
100 print "123" 110 a=10:gosub 200 120 a=20:gosub 200 130 end 200 for i=1 to a 210 print i 220 next 230 return
行番号の代わりに、ラベルを使うこともできます。
📒 ラベルは `_` から始まる文字列です。(大文字小文字は区別されます)
行番号の直後に記述されると、その行のラベルとして認識されます。
100 print "123" 110 a=10:gosub _sub 120 a=20:gosub _sub 130 end 190 _sub 200 for i=1 to a 210 print i 220 next 230 return
🎀 行番号だけの時代に比べて、ラベルが使えるってすごく今っぽいよね〜っ♪
読みやすいし、バグも減るし、一石二鳥だよ〜っ!
gosub
以外でも、行番号を使うコマンドではラベルが利用できます。
例えば、list
コマンドでも。
>>list _sub, 190 _sub 200 For I=1 To A 210 Print I; 220 Next 230 Return [89/8192 bytes] OK
行番号を整理する
🎀 行番号がぐちゃぐちゃになってきたら、“renum”でお掃除しちゃお〜っ!
105 Print "123" 106 gosub 108 107 end 108 print "xyz" 109 return
こういうプログラムで、100と101 の間に挿入したい。
でも、全部書き直すのはちょっと嫌ですよね。
そういうときは、renum
コマンドで、行番号の付け替えができます。
>>renum 100 OK >>list 100 Print "123" 110 Gosub 130 120 End 130 Print "xyz" 140 Return
gosub
や goto
の行き先が行番号の場合も自動的に付け替えます。
🎀 ちゃんと gosub の飛び先も直してくれるんだよ〜✨
“順番きれいに整理整頓っ”て感じで、なんだか気持ちいいよね〜っ♪
プログラムをFlashに保存しよう
プログラムメモリーはRAM(揮発性メモリー)です。
プログラムメモリーに登録されたプログラムは、電源OFFや再起動で消去されます。
psave
コマンドで、プログラムメモリーのプログラムを内部Flashメモリーに保存することができます。
>>psave OK
Flashメモリーは、電源OFFや再起動でも消去されません。
だたし、保存できるプログラムは1つのみで、既に保存されているプログラムがある時は、上書きされます。
psave
で保存したプログラムは、pload
コマンドでプログラムメモリーに読み出すことができます。
>>pload OK
既にプログラムメモリーにプログラムがある場合は、上書きされます。
Flashに保存されたプログラムを消去するには・・・
>>psave -1
🎀 せっかく書いたプログラム、電源OFFで消えちゃったら悲しいもんね〜💦
ちゃんとFlashに保存しておこうっ!
プログラムをファイルに保存しよう
LRA1自体にプログラムをファイルに保存する方法はありません。
以下のような方法で、PC等に保存してください。
テキストで保存する
list
コマンドで表示したプログラムをメモ帳やテキストエディターにコピーして保存します。
これを、エディットモードでテキストとして貼り付けて入力します。
この方法が一番簡単です。
PCに保存したプログラムをエディター等で編集して、それを貼り付けることもできます。
ようするに、手で入力していたものを、貼り付けているだけということになります。
🎀 とりあえずコピーしてメモ帳に貼るだけでもOKだよ〜!
手軽さではこれがいちばんかもっ📄
📒 複数行のプログラムを一括で貼り付けるとき、
行と行のあいだに“待ち時間”がないと、LRA1側の処理が間に合わず、正しく入力できないことがあります。
これは、各行を受け取るたびに、
BASICの構文チェックと内部形式への変換処理が行われているためです。
そのため、TeraTermなどを使う場合は、
行ごとの送信間隔(行間ディレイ)を10ミリ秒程度に設定しておくのがオススメです。

🎀 1行ずつちゃーんと読み込んで変換してるから、ちょっとだけ時間がほしいのっ💦
📒 TIPS:貼り付けの前には `edit 1:new` を入れておこう!
エディットモードへの切り替えと、前のプログラム消去がまとめてできるよ。
毎回の“おまじない”として、いちばん上に書いておくと安心。
🎀 お守りセットって感じで、貼り付けるときの定番にしちゃお〜っ!
base64で保存する
プログラムメモリーの内容を base64で保存/復帰 することができます。
⚠️ base64の保存/復帰は、ファームウェア Ver 1.21.a以降で対応しています。
psave &
で出力します。
>>psave & '/6h/BWWj8eZkTyJ4c3ptM4OhSQRiyZF9GmCoqIC82Mx7hIODZeHpYThNPYIJ8nKO '3eEH+IaF2KCmUhWZe1G770APhHrtKEQ= OK
base64 出力は、上記のテキストによる方法と同様にファイルに保存してください。
これを、pload &
で復帰することができます。
実行すると base64の入力を待機するので、保存したテキストを貼り付けます。
>>pload & '/6h/BWWj8eZkTyJ4c3ptM4OhSQRiyZF9GmCoqIC82Mx7hIODZeHpYThNPYIJ8nKO ← 貼り付け '3eEH+IaF2KCmUhWZe1G770APhHrtKEQ= OK
上記で保存したbase64のtextを貼り付けて、最後に改行を2回連続で入力を完了します。
このbase64で保存/復帰するとき、AesKeyが設定されていると、そのキーで暗号化されます。
以下は、上記と同じプログラムでpsave&
を実行した結果です。
>> aeskey=$"123456789abcdef":psave & 'jcCBA1lvpTiieplogbLBvzjQuHIYxkaRhpat1kZ9W4gE2E5irDF90tobmmnrN35H 'EMIvsur3rGQd4LdJjPl5RFY9vhLXW/8=
pload &
コマンド実行時に、AesKeyが一致しないと復帰できません。
この機能で、秘匿化して保存することができます。
📒 aeskeyが設定されていると、`send`コマンドでの送信データーも暗号化されます。
🎀 ちょっと難しそうに見えるけど、こっちは“まるごとバックアップ”したいときに便利なんだよ〜!
暗号化もできるから、秘密のプログラムにもぴったりっ🔐
プログラムを自動実行しよう
LRA1は、auto変数
が設定されていると、起動して5秒間待機した後、この設定内容が実行されます。
この機能を利用して、Flashに保存ししたプログラムを、起動時に自動実行することができます。
次のように auto変数
を設定して、ssave
で保存
>auto="pload:run":ssave OK
そして、再起動すると…、
i2-ele LRA1 Ver 1.27.b+ .....OK pload:run xyz 123 OK >
起動時にFlashに保存したプログラムが自動実行されます。
🎀 電源入れたらすぐに動くって、まるで“完成された機器”っぽくてワクワクするよね〜📡
環境モニターを行番号でつくる
例として、前回の1行BASICで作ったプログラムを、行番号でのプログラムにすると次のようになります。
送信側
100 w=30 110 #=null 120 do 130 bme t,h,p 140 #[7]=6 150 txdw[8]=t 160 txdw[10]=h 170 txdw[12]=p 180 send 190 delay w*1000 200 loop
受信側
100 recv 0 110 do 120 if stat then 130 if stat=10 then 140 lclr:lprint rxdw[8] 150 lpos=4:lprint rxdw[10] 160 lpos=64:lprint rxdw[12] 170 endif 180 stat=0 190 endif 200 loop
🎀 1行BASICのときより、ずっと見やすくなったでしょ〜?
プログラムっぽさが出てきた感じだよ〜っ!
1行では収まりきらないような、もっと複雑なプログラムもにも十分に対応できます。
🎀 ここまで来たら、もう“自分だけのLoRa端末”って感じだよね〜📡✨
まとめ
今回は、“1行BASIC”から“実用BASIC”へのステップアップ”として、行番号を使ったBASICプログラムを実践してみました。
- LRA1では行番号つきの複数行プログラムが書ける
- list や new, run、psave など、昔ながらのBASICっぽい操作が可能
- Flashに保存して、再起動後も自動実行できるようになる
- LCD表示やLoRa送信の処理も、複数行で見やすく構成できる
🎀 “古い”って思われがちなBASICだけど、実は“軽くてすぐ動く最強の相棒”なんだよ~!LRA1との相性もバッチリ📡💕
これで、“スクリプトで動くLoRa端末”が本当に現実的になってきたねっ📡✨
📪 お問い合わせなど
技術的なご相談やご質問などありましたら、
📩お問い合わせフォーム
または、
📮info@shachi-lab.com までお気軽にどうぞ。
🎀 “ここまでできたよ!”って報告も、“これどうやるの?”って質問も大歓迎だよ〜っ📩
🔗 関連リンク
しゃちらぼの最新情報や開発の様子は、こちらでも発信しています:
- 🌐しゃちらぼ公式サイト
- 🐦 X(旧Twitter):@shachi_lab
- 📗 Qiita:@shachi-lab
- 🐙 GitHub:@shachi-lab
- 📸 Instagram:@shachi_lab
ほんとは「しゃちらぼ(Shachi-lab)」なんだけど、見つけてくれてありがとう🐬
コメント