コンテンツにスキップ

制約事項

セキュリティ

この機械には、接続してくる相手を制限する仕組みがありません。 ネットワーク機能は 家庭内で使う趣味の機械を想定して作っており、届く範囲にいる人は誰でも使ってよい、という 前提で動いています。

遠隔画面 認証がありません。同じネットワークにいれば誰でもアドレスを開いて、画面を見て、キーボードとマウスの操作を送れます。つまり機械をそのまま操作できます
BLE のコンソールとデバッグ機能 ペアリングも暗号化も行いません (Windows の Web Bluetooth がペアリングで動かなくなるため、意図的に無効にしています)。電波の届く範囲にいれば誰でもファイルの読み書き、ログの閲覧、アプリの起動と停止ができます
TCP の遠隔デバッガ 認証がありません。すべての接続元を受け付けます
WiFi の接続情報 端末上の /etc/wifi.toml に平文で保存されます
アプリ 持ってきたアプリも、他のアプリと同じ権限で動きます。アプリどうしやファイルとの間に隔離はありません

信頼できる環境でのみ、自己責任でご利用ください。インターネット側から届くように ルータで転送するのはやめてください。WiFi は Config の wifi_auto_start で、Retro の BLE は ble_auto_start で、それぞれ起動時に立ち上げないようにできます。Modern の BLE は 常に起動し、動作中に止める手段はありません。

R2P2との違い

Family mrubyは、PicoRubyのコアの部分のみをベースとしており、PicoRuby本家のR2P2で利用されているgemを独自に書き換えている部分があります。 そのため利用できるクラスやメソッドの挙動に違いがある場合があります。

PicoRuby と CRuby の違い

PicoRubyはmrubyをベースとしており、CRubyで標準的に使えるメソッドが使えないことがあります。

ヒープのサイズ

Family mruby の各アプリは独立した Ruby VM として動作し、それぞれが PSRAM 上に 独自のヒープとスタック を持ちます。

項目 目安・上限
標準アプリのヒープ 500 KB
large_memory = 1 指定時のヒープ 1000 KB
アプリ同時起動数 3

ヒープの使用状況はモニターアプリで確認できます。

言語ごとの対応状況

言語 状況
Ruby (PicoRuby) 中心となる言語。この文書に書かれているものが全部使えます
BASIC 2.0 で機能実装完了。Family BASIC (V3) との既知の差は全件が整理されています。BASIC と MicroPython を参照
MicroPython 使えますが制限があります。Python アプリは同時に 1 本、import は組み込みのみ、open() は使えない、ヒープ 256KB。BASIC と MicroPython を参照
Lua コンセプト実装。本格的なアプリを書くのには適していません

アプリの中で待つとき

Machine.delay_ms を使ってください。中身は FreeRTOS の vTaskDelay です。

Machine.delay_ms(500)

さらに良いのは、そもそも止めないことです。on_update の戻り値で「次に呼んでほしいまでの ミリ秒」を返し、待つのはメッセージ処理に任せます。止まっている間、そのアプリはイベントを 処理できません。

2.0 より前はもっと厳しい制約でした

1.0 では、PicoRuby のタスク切り替えに使う tick を止めていました。VM の外から呼ぶと VM のスタックが壊れたためです。これは修正済みです。tick は信号源が数えておき、 スケジューラの 1 か所でまとめて適用する形になり、Task 機能も動きます。上の Machine.delay_ms の話は「止めないこと」についてであって、この壊れ方の話ではありません。

(EditorやShellではTask機能を利用してます)

ファイルシステムの制限

項目 内容
1 ファイルの最大サイズ LittleFS の制限内(数 MB 程度推奨)
パスの最大長 FmrbConst::MAX_PATH_LEN
ファイル名 ASCII 推奨。日本語や記号は避ける
Dir#seek / Dir#tell 未対応(ENOSYS)。rewind してから数え直す

アプリ間メッセージのサイズ制限

Pub/Subpublish / send_message のペイロードは MessagePack 後で 176 バイト までです。それを超える場合はファイル経由にする、複数メッセージに分けるなどの工夫が必要です。

機種ごとの制約

ほとんどの制約は両機種に共通ですが、以下は違います。

Modern (M5Stack Tab5)

microSD 差込口はまだファームウェアから使えません。内蔵フラッシュのみです
映像出力 出力は内蔵の液晶だけです。コンポジット出力はありません
GROVE 2 つではなく 1 つです
電池で動く時計 あります (RX8130)。ただし最初に Set Clock で合わせてください

Retro (narya-board)

WiFi と BLE 無線が 1 系統で、同時には使えません。BLE のコンソールを動かすと WiFi は起動せず、逆も同じです
タッチ タッチ画面はありません。ポインタは USB マウスです
遠隔画面 ありません
ファームウェア 書き込むチップが 2 つあり、両方を同じ版に揃えないと起動しません