< IchigoJam BASIC RPi/RPi+

IchigoJam BASIC RPi+1.2 ドキュメント

[2024/07/02]

English Edition(英語版) >

IchigoJam BASIC RPi+ は IchigoJam BASIC RPi の機能強化版であり、
Sense Hat と Touchscreen Display に対応した専用コマンドを備えています。
I-O DATA から発売のプリインストール microSDカードや入門キットを購入することにより利用できます。
IchigoJam BASIC RPi(フリー版)については、IchigoJam BASIC RPi1.2 ドキュメントをご覧ください。

1. 利用条件

利用規約に同意の上、ご利用ください。第三者への配布には別途契約が必要となります。

2. 対応機種

下記の機種で動作確認を行っております。

※ Raspberry Pi 4 以降には対応していません。

※ Zero系 と Model A+系 については 一部のキーボードで、入力の反応がよくない現象が報告されていますが、
それ以外は Model B/B+系 と同様にご利用いただけます。

また、Sense Hat および Touchscreen Display については、
こちらで動作確認済の機種は下記です。

3. 入手方法

I-O DATA から発売の下記の製品をご購入ください。

アップデート

最新版への更新は下記の手順で行います。

※ ver1.2.5でEEPROMに対応するためSAVE,LOADコマンドの仕様を変更したため、アップデート時にfiles ディレクトリ内のファイル名の調整が必要になる場合があります。詳しくは 「SAVE/LOADの出力先」 をご覧ください。

  • パソコンなどを使い、microSDメモリーカード内のファイルを、任意の場所にコピーします。(バックアップ)
  • パッケージに記載のURLから、IchigoJam BASIC RPi+ の最新版をダウンロード・展開します。
  • microSDメモリーカード内のファイルを、ダウンロード・展開して生成されたファイルで上書きします。
  • filesディレクトリ, config.txt, keymap.txt をバックアップからmicroSDメモリーカードにコピー(復元)します。

4. 使い方

起動時のキーボード設定

microSDメモリーカード内の keymap.txt で起動時のキーボードの種類を設定できます。

keymap.txt に記入するテキスト キーボードの種類
us USキーボード
jp JPキーボード

※ キーボードの種類は起動後にKBDコマンドでも変更できます。(下記参照)

チュートリアル

I. IchigoJam BASIC を起動する

  • Raspberry Pi に microSDメモリーカードを挿入します。
  • モニターとキーボードを接続します。
  • USBケーブルなどを接続し、電源を入れます。

画面に左記のように表示されたら成功です!

II. 本体のLEDを点灯する

キーボードから LED1 と入力し [Enter]キーを押します。

Raspberry Pi 本体の Activity LED (緑色) が点灯したら成功です!

III. 本体のLEDを消灯する

キーボードから LED0 と入力し [Enter]キーを押します。

Raspberry Pi 本体の Activity LED (緑色) が消灯したら成功です!

IV. LEDをチカチカさせる

  • キーボードから 10 LED1: WAIT30 と入力し [Enter]キーを押します。
  • キーボードから 20 LED0: WAIT30 と入力し [Enter]キーを押します。
  • キーボードから 30 GOTO10 と入力し [Enter]キーを押します。
  • キーボードから RUN と入力し [Enter]キーを押します。

Raspberry Pi 本体の Activity LED (緑色)がチカチカしたら成功です!
停止させるときは [Esc]キーを押します。

5. オリジナル版との相違点

IchigoJam BASIC RPi は オリジナル版(LPC1114版)の 1.2.4(1.2b56)(※) を元に移植されています。
操作方法や利用可能なコマンドは基本的にオリジナル版と同じですが、下記の点が異なります。
オリジナル版のドキュメントはこちらです。 https://ichigojam.net/IchigoJam-1.2.html

※ ver1.2.5以降。ver1.2.4以前はLPC1114版の1.2.3をベースに移植。

未実装のキー操作

下記のキー操作はRPi版には実装されていません

キー オリジナル版の動作
[Ctrl] + [Shift] カナ入力モード切り替え([カタカナ]と同じ)
[Ctrl] + [Alt] 挿入モード切り替え([Insert]と同じ)

RPi版専用のキー操作

下記のキー操作はRPi版にだけ実装されています

キー RPi版の動作
[Ctrl] + [Shift] + [K] カナ入力モード切り替え([カタカナ]と同じ)
[Ctrl] + [Alt] + [I] 挿入モード切り替え([Insert]と同じ)

未実装のコマンド

下記のコマンドはRPi版には実装されていません

コマンド オリジナル版の動作 RPi版の動作
SWITCH ディスプレイの切り替え なにもしない
SLEEP システムの休止(ボタン押下でLRUN0を実行して復帰) なにもしない
ANA 外部入力の電圧を数値で返す 常に0を返す

RPi版専用のコマンド

下記のコマンドはRPi版にだけ実装されています(※1)

コマンド RPi版の動作 使用例
KBD キーボードのキーマップの切り替え KBD 0 'USキーボードに切り替え
KBD 1 'JPキーボードに切り替え
IoT.IN sakura.io から I2C で数値を受信する
  • すべてのチャンネルから受信します
  • 送信データ型に関わらず、下位2バイトを符号つき16bit整数として扱います
?IoT.IN() '受信した数値を表示
IoT.OUT sakura.io に I2C で数値を送信する
  • チャンネル0で送信します
  • データ型は符号なし64bit整数(L, 0x4c)です
IoT.OUT 111 '111を送信

※1 IoT.INとIoT.OUTは、β版でLPC1114版にも実装されています。

※2 ver1.2.5以降、KBDコマンドで keymap.txt にも設定が保存されます。

※ LANG が返す数値とKBDで設定する数値は違うものです。
LANG は使用中のIchigoJamでカナ入力を有効にしたとき表示されるフォントの言語の番号を返します。
(LPC1114版 1:日本語, 2:モンゴル語, 3:ベトナム語)

SAVE/LOADの入出力先

SAVE, LOAD コマンドによるプログラムの保存先は下記のようになります。
ver1.2.5で EEPROMに対応するため仕様を変更しました。
ver1.2.4以前からver1.2.5以降にアップデートするとき、
作成済みのプログラムを引き継ぐには microSDメモリーカードの files ディレクトリ内のファイル名を調整してください。

microSDメモリーカード(filesディレクトリ内) EEPROM
ver1.2.4以前 0 ~ 3, 100 ~ 227 (*.bin) なし
ver1.2.5以降 0 ~ 99 (*.bin) 100 ~ 227

その他

その他、下記の相違点があります。

  • キーボードを接続せずに電源投入すると、FILE0 を自動実行(LRUN0)します
  • PWM は PWM3 と PWM4 のみが使えます
  • IN3(OUT10)も OUT10,-2 でプルアップ入力になります
  • LED と OUT7 は連動しません
  • WAIT の省電力モードには対応していません
  • パラメータなしの FILES コマンドで FILES20 相当の動作をします(ver1.2.5以降)
  • VIDEO0 のクロックダウンには対応していません(ver1.2.5以降)
  • USR コマンドは、Pi/Pi Zero系 では Thumb命令セット、Pi 2/Pi 3系では Thumb2命令セットに対応しています。(ver1.2.5以降)

6. IO系コマンドと物理PINの対応

IN/OUT/PWM

IN/OUT/PWM コマンドで実際に電流が入出力される物理PINは下記のようになります。

物理PIN 入力 出力 PWM 初期状態
15 IN1 (OUT8) 入力(プルアップ)
13 IN2 (OUT9) 入力(オープン)
11 IN3 (OUT10) 入力(オープン)
7 IN4 (OUT11) 入力(プルアップ)
35 IN9 入力(オープン,固定)
37 (IN5) OUT1 出力
36 (IN6) OUT2 出力
33 (IN7) OUT3 PWM3 出力
32 (IN8) OUT4 PWM4 出力
38 (IN10) OUT5 出力
40 (IN11) OUT6 出力
26 OUT7 出力(固定)

I2C

I2CW/I2CR コマンドで実際に電気信号が入出力される物理PINは下記のようになります。

物理PIN 機能
3 SDA
5 SCL

UART

UART接続時に実際に電気信号が入出力される物理PINは下記のようになります。

物理PIN 機能
8 TXD
10 RXD

BEEP/PLAY

BEEP/PLAY コマンドで実際に電気信号が入出力される物理PINは下記のようになります。

物理PIN 機能
29 SND

ピン説明図

7. 既知の課題と対応予定

既知の課題

  • [issue 1005] Zero系 と Model A+系 で一部のキーボードの反応がよくない
  • [issue 1008] 存在しないアドレスへのアクセスなど、I2CWが非ゼロ(失敗)を返すべきところでゼロ(成功)を返すことがある

今後の対応予定

  • キー入力処理の改善(issue 1005 に関連)

解決済みの課題

  • [issue 1009] Raspberry Pi 3 Model B+ で LED コマンドが動作しない
  • [issue 1007] カーソルが点滅しない
  • [issue 1006] TICKの値と画面のリフレッシュ回数が同期していない
  • [issue 1004] CLS,SCROLL,POKE,COPY,CLP による画面の変更が次のPRINT処理まで反映されない
  • [issue 1003] 一部のキーボードでオートリピートが効かない
  • [issue 1002] 一部のキーボードでShift,Ctrl,Altが効かない
  • [issue 1001] 一部のキーボードでテンキーのHome,End,PageUp,PageDown,Insが効かない

更新履歴

[2018/12/06] ver1.2.6-fw-12e0bf8
  • ファームウエアを Raspberry Pi 3 Model A+ に対応したものに更新しました
[2018/06/07] ver1.2.6
  • [issue 1009] を解決しました
[2018/06/01] ver1.2.5
  • sakura.io に対応(IoT.IN, IoT.OUTコマンド)
  • ディスプレイ関連の機能に対応(VIDEOコマンド)
  • サウンド関連の機能に対応(BEEP, PLAY, TEMPO, SOUNDコマンド)
  • マシン語関連の機能に対応(USRコマンド)
  • EEPROMに対応し、プログラムの保存先を変更(SAVE, LOADコマンド)
  • パラメータなしの FILESコマンドの動作を変更(FILES3相当からFILES20相当に)
  • KBDコマンドで keymap.txt にも設定を保存するように変更
  • フォントのアンチエイリアスを無効化(config.txt に scaling_kernel=8 を追加)
  • LPC1114版の1.2.4(1.2b56)での仕様変更を取り込み
    • FILES0,0でファイル0のみ表示するように変更
    • エラーメッセージの抑制をOK0からOK2に変更
    • コマンドの空白を完全に無視するように変更
    • BPSの第二パラメータで I2C の通信速度を設定可能に ex)BPS0,100 '100kHzに設定
    • [右Alt] + [K] によるカナ入力切り替えを廃止
    • [無変換], [左Alt], [右Alt] の動作を統一
    • [Alt] + [W] で [Alt] + [0] と同じ動作をするように変更
    • [Alt] + [X] で [Alt] + [1] と同じ動作をするように変更
    • [Alt] + [Y] で [Alt] + [2] と同じ動作をするように変更
    • [Alt] + [Z] で [Alt] + [3] と同じ動作をするように変更
  • Sense HATのセンサーに追加対応
    • ジャイロセンサー
    • 磁気センサー
    • 気圧センサー(気圧,温度)
    • 湿度センサー(湿度,温度)
  • Touchscreen Display の接続方法を簡素化(SDAとSCLの接続が不要に)
[2017/12/25] ver1.2.4
  • [issue 1007] を解決しました
  • [issue 1006] を解決しました
  • 画面描画処理を改善しました(issue 1006, 1007 に関連)
[2017/12/09] ver1.2.3
  • [issue 1004] を解決しました
ver1.2.2
  • [issue 1003] を解決しました
  • [issue 1002] を解決しました
  • [issue 1001] を解決しました

8. よくある質問と回答

質問. 「Raspberry Pi 公式 7インチ Touchscreen Display」を使用時、画面が上下反転します。
回答. config.txt に lcd_rotate=2 を追加することにより、反転させることができます。Raspbianと同じ仕様です。
質問. 本体にボタンがありませんが、電源投入時にプログラムを自動起動するにはどうしますか。
回答. キーボードを接続せずに起動するとFILE0を実行(LRUN0)します。
質問. ディスプレイの出力に、コンポジットビデオ(RCA端子)は使用できますか。
回答. 使用できます。Raspbian 同様、3.5mm ジャックから信号が出力されます。音は物理PIN29(SND)から出力します。
質問. 日本語キーボードを使用したいです。
回答. KBDコマンドで切り替えることができます。KBD 1 をお試しください。
質問. USキーボードを使用したいです。
回答. KBDコマンドで切り替えることができます。KBD 0 をお試しください。
質問. アナログ入力に対応していますか。
回答. 対応していません。I2Cなどを経由して利用できるADコンバータ等、外部モジュールをご利用ください。

9. サポート

技術的な情報の共有や質問等については下記のFacebookグループをご活用ください。
https://www.facebook.com/groups/ichigojam/

10. RPi+ 専用コマンド

IchigoJam BASIC RPi+ は Sense HAT および Touchscreen Display に対応した下記の専用コマンドを備えています。
これらのコマンドはIchigoJam BASIC RPi(フリー版)ではご利用になれません。

Sense HAT 対応コマンド

コマンド RPi+の動作 使用例
SH.CLS Sense HAT の LED を全て消灯する
SH.CLS
SH.CLS '全消灯
SH.PUT Sense HAT の LED の色を設定する
SH.PUT {横位置}, {縦位置}, {色:0-4095}
色の例(白:#FFF, 赤:#F00, 緑:#F0, 青:#F)
'左から4番目,上から4番目のLEDを緑に
SH.PUT 3, 3, #F0
SH.SCR Sense HAT の LED の色を取得する
SH.SCR({横位置}, {縦位置})
'左から4番目,上から4番目のLEDの色を表示
?SH.SCR(3, 3)
SH.SCROLL Sense HAT の LED をスクロールする
SH.SCROLL {方向}
方向の例(上:0, 右:1, 下:2, 左:3)
SH.SCROLL 0 '上方向にスクロール
SH.SCROLL 1 '右方向にスクロール
SH.AX
SH.AY
SH.AZ
加速度センサーから各軸方向の加速度を取得する
SH.AX()
SH.AY()
SH.AZ()
?SH.AX() 'X軸方向の加速度を表示
?SH.AY() 'Y軸方向の加速度を表示
?SH.AZ() 'Z軸方向の加速度を表示
SH.BTN ジョイスティックの状態を取得する
SH.BTN()
右から0bit: 下選択
右から1bit: 右選択
右から2bit: 上選択
右から3bit: 押下
右から4bit: 左選択
'ジョイスティックの状態を2進数でまとめて表示
?BIN$(SH.BTN(),5)
SH.BUP ジョイスティックの上選択状態を取得する
SH.BUP()
'ジョイスティックが上選択のとき1を表示
?SH.BUP()
SH.BDOWN ジョイスティックの下選択状態を取得する
SH.BDOWN()
'ジョイスティックが下選択のとき1を表示
?SH.BDOWN()
SH.BLEFT ジョイスティックの左選択状態を取得する
SH.BLEFT()
'ジョイスティックが左選択のとき1を表示
?SH.BLEFT()
SH.BRIGHT ジョイスティックの右選択状態を取得する
SH.BRIGHT()
'ジョイスティックが右選択のとき1を表示
?SH.BRIGHT()
SH.BPRESS ジョイスティックの押下状態を取得する
SH.BPRESS()
'ジョイスティックが押下のとき1を表示
?SH.BPRESS()
SH.GX
SH.GY
SH.GZ
(ver1.2.5以降)
ジャイロセンサーから各軸の角速度を取得する
SH.GX()
SH.GY()
SH.GZ()
?SH.GX() 'X軸の角速度を表示
?SH.GY() 'Y軸の角速度を表示
?SH.GZ() 'Z軸の角速度を表示
SH.MX
SH.MY
SH.MZ
(ver1.2.5以降)
磁気センサーから各軸方向の磁束密度を取得する
SH.MX()
SH.MY()
SH.MZ()
?SH.MX() 'X軸方向の磁束密度を表示
?SH.MY() 'Y軸方向の磁束密度を表示
?SH.MZ() 'Z軸方向の磁束密度を表示
SH.APRESS
(ver1.2.5以降)
気圧(ヘクトパスカル)の10倍の値を取得する
SH.APRESSS()
'ヘクトパスカル単位で気圧を表示
?SH.APRESS()/10
SH.HUMID
(ver1.2.5以降)
湿度(パーセント)の100倍の値を取得する
SH.HUMID()
'パーセント単位で湿度を表示
?SH.HUMID()/100
SH.TEMP
(ver1.2.5以降)
湿度センサーから気温(摂氏)の100倍の値を取得する
SH.TEMP(), SH.TEMP(1)

気圧センサーから気温(摂氏)の100倍の値を取得する
SH.TEMP(2)
'摂氏で気温を表示
?SH.TEMP()/100

Touchscreen Display 対応コマンド

コマンド RPi+の動作 使用例
TS.X
TS.Y
Touchscreen の タッチされている場所を取得する
TS.X() 横位置 (0-799, タッチされていない:-1)
TS.Y() 縦位置 (0-479, タッチされていない:-1)
?TS.X() '横位置を表示
?TS.Y() '縦位置を表示
TS.GET Touchscreen の タッチされている場所を取得する
TS.GET()
上位8bit: 横位置 (0-199, タッチされていない:0)
下位8bit: 縦位置 (0-119, タッチされていない:0)
'タッチされている場所を繰り返し表示
10 P=TS.GET()
20 ?(P>>8);" ";(P&#FF)
30 WAIT10: GOTO10

ver1.2.5 で Touchscreen Display の接続方法を簡素化するために仕様を変更しました。
各バージョンでの接続方法と、各コマンドで取得される座標の原点の定義は下記のようになります。

接続方法 座標の原点
ver1.2.5以降 リボンケーブルと電源を接続
※ 詳細は IchigoJam BASIC RPi+ での Touchscreen Display 使用方法 2.0.0 を参照
左上原点
ver1.2.4以前 下記を接続
  • リボンケーブル
  • 電源
  • Raspberry Pi の 物理ピン3(SDA) と Touchscreen Display の SDA
  • Raspberry Pi の 物理ピン5(SCL) と Touchscreen Display の SCL
※ 詳細は IchigoJam BASIC RPi+ での Touchscreen Display 使用方法 1.0.1 を参照
右下原点