--:--

RP2350240x320TOUCHLUA 5.4

PICO
-OS_

Raspberry Pi Pico 2 W で動く、自作のタッチGUI OS。

240×320のちいさな画面に、ホーム画面と20あまりのアプリ、Luaで書けるアプリ、ゲームボーイまで。 ウィジェットも合成も描画も、すべてマイコンの上で自前で動いています。 実機とおなじコードをWebAssemblyにして、ブラウザでもそのまま動かせます。

pico-osのホーム画面。アプリのアイコンが2列に並んでいる
PICO 2 WHOME 1/7
01

SCREENS

PC BUILD --SHOT
1/8
02

APPS

C++ / LUA
MarkdownHTTP/HTTPSで文書を取って表示
時計デジタル・アナログ・アラーム
電卓関数・グラフ・進数・履歴
ファイルSDカードの中身を見る・動かす
テキストかな漢字変換つきエディタ
メモ#タグ・全文検索
辞書英和・和英
読書青空文庫をしおりつきで
ゲームボーイ音と途中保存つきのエミュ
ミュージックMMLのチップチューン・WAV
動画独自形式 .pvid の再生
録音I2SマイクでWAVに
カレンダーiCalendarを読む
チャット自前のチャットサーバへ
TODOTodoistと同期
メールIMAPで受信(Outlook.comも)
SSHマイコンからサーバへ
ストア作者の署名つきのLuaアプリ配布

ほかに、テトリス・マインスイーパー・リバーシ・ブロック崩し・ペイント・天気・ニュース・QRコード・Spotifyリモコンなどの Luaアプリ。ホーム画面はフォルダでまとめられ、使わない内蔵アプリはビルド時に外せます。

03

INSIDE

520KB SRAM

WIDGETS

ウィジェット・シーン・ダイアログ・キーボード3種まで、GUIフレームワークを自前で実装。書き換わった所だけを合成して液晶へ送ります。

NO HEAP STRINGS

文字列はヒープを使わない固定長。部品はオブジェクトプールで使い回し、小さなRAMで断片化を起こさない作りに。

DUAL CORE

1コア目が画面と入力、2コア目は音声だけを担当。チップチューン・ゲームボーイの音・マイク録音をI2Sで。イヤホンを差すとスピーカーから自動で切り替わります。

JAPANESE

日本語の表示とかな漢字変換を内蔵。オンスクリーンキーボードのほか、CardKB2などの物理キーボードもつながります。

NETWORK

Wi-Fi・HTTPS・SSH・IMAP。Wi-Fiの設定はスマホからも送れ、picoos.local の名前で見つかります。認証情報は端末ごとの鍵で暗号化して保存。ファームウェアの更新もSDやWi-Fiから。

SAME CODE

実機とおなじソースを、PC(SDL)とブラウザ(WebAssembly)でも動かせます。差し替えるのはハードの窓口だけ。画面の大きさや載せる部品もビルド時に選べます。

04

LUA

PICO.*
  • SDカードの /lua/apps/<名前>/main.lua に置くだけで、ホーム画面にアプリが増えます。
  • pico.* でウィジェット・描画・タッチ・音・SD・ネットワークを扱えます。
  • ゲーム用の pico.game、2.5Dエンジン pico.iso も。
  • 暴走しても止まる実行時間の上限と、アプリごとの権限つき。
  • PCビルドでは保存するたびに読み直すホットリロードと、テストランナーで手早く試せます。
LUA API リファレンスを読む
/lua/apps/はじめて/main.luaLUA
-- 画面を開いたときに1回だけ実行される
local label = pico.create("Label")
pico.set(label, "text", "Hello, pico-os!")

local back = pico.create("Button")
pico.set(back, "text", "戻る")
pico.on(back, "press_start", function()
    pico.pop()
end)

function loop(dt)
    -- 毎フレーム。dtはミリ秒
end
05

SPEC

RPIPICO2W
本体Raspberry Pi Pico 2 W(RP2350・Wi-Fi)
画面240×320 TFT 液晶(SPI 75MHz)・バックライトはPWMで調光。320×480など大きさと液晶の種類はビルド時に選べる
タッチXPT2046(抵抗膜)
ストレージmicroSDカード(専用のSPI)
音声MAX98357A(I2Sアンプ)・PCM5102A(イヤホン、任意)・SPH0645(I2Sマイク)。音声・マイク・電池は外したビルドも作れる
入力Wiiクラシックコントローラー・CardKB2(I2C)・USBシリアル
開発PlatformIO + Arduino(C++)・LovyanGFX・Lua 5.4.7

16 COLORS

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

画面は16色のパレットで描きます。番号ごと色を差し替えるとダークテーマに。このページも同じパレットで塗っています(右上で切り替え)。