UIAPduino Pro Micro CH32V003で「自作パソコン」を作ってみよう(老後の暇つぶし企画)
わずか290円ほどで入手できる小さなRISC-Vマイコンボード「UIAPduino Pro Micro CH32V003」を使って、パソコンを作ることはできるのでしょうか?
結論から言えば、WindowsやLinuxを動かす一般的なパソコンを作ることはできません。しかし、処理速度が遅くてもよいのであれば、キーボードから文字を入力し、画面に表示し、計算し、プログラムを実行し、SDカードにデータを保存する「昔の8bitパソコンのようなコンピューター」を作ることは十分に挑戦できます。
しかも、この工作の面白いところは、単にマイコンを使った電子工作をするだけではありません。CPU、メモリ、入出力、画面表示、キーボード、ファイル保存、BASICなど、「コンピューターとは何なのか」を実際の機械で理解できることです。
この記事では、UIAPduino Pro Micro CH32V003を中心に、最終的に「CH32V003パソコン」を完成させるまでの構想を紹介します。

子供のころドキドキした8bitマイコンのようなレトロパソコンを自作しよう!
- 今回使用するコンピューターの心臓部
- 「パソコン」と呼ぶには何が必要なのか
- 目標は「昔の8bitパソコン」
- 最終的なシステム構成
- 第1段階はOLEDディスプレイ
- UIAPduinoのI²C端子を使う
- 最初の目標は「文字表示」
- 第2段階はキーボード
- CH32V003を「電卓」にする
- コンピューターらしくする「BASIC」
- BASICで何を作るか
- ゲームも作れる
- microSDカードを接続する
- SPI端子
- RAMが2KBしかない問題
- 外付けRAMを追加する構想
- 画面をもっと大きくする
- キーボードを本格化する
- ブザーを付ける
- ファイルシステムを作る
- テキストエディタを作る
- 最終的なコマンド画面
- 「OS」を作る
- Arduino IDEから始められる
- CH32V003の性能を逆手に取る
- 実際の開発手順
- 最初から全部作らないことが重要
- 実は「パソコン作り」そのものが教材になる
- UIAPduinoならではの面白さ
- 今回作る「CH32V003パソコン」の完成イメージ
- そして最終目標は「自分で作ったパソコン」
- この記事の次のステップ
- まとめ
- 参考資料
今回使用するコンピューターの心臓部
使用するのは、UIAPduino Pro Micro CH32V003 V1.4です。税込290円で販売されてます。
このボードにはWCHのCH32V003F4U6が搭載されています。CH32V003は32bit RISC-V QingKe V2Aコアを搭載し、最大48MHzで動作します。Flashは16KB、SRAMは2KBです。I²C、SPI、USART、ADC、タイマーなども搭載されています。
| 項目 | 仕様 |
|---|---|
| マイコン | CH32V003F4U6 |
| CPU | 32bit RISC-V QingKe V2A |
| 最大クロック | 48MHz |
| Flash | 16KB |
| SRAM | 2KB |
| GPIO | 最大18ポート(MCU仕様) |
| ADC | 10bit |
| UART | USART ×1 |
| I²C | ×1 |
| SPI | ×1 |
| USB | USB 2.0 Low-Speed |
| USB端子 | USB Type-C |
| 電源 | 3.3V / 5V選択式 |
つまり、スペックだけを見ると非常に小さなマイコンです。しかし、昔のパソコンと比較すると、意外なほど面白い実験ができます。
「パソコン」と呼ぶには何が必要なのか
一般的なパソコンには、少なくとも次のような機能があります。
- CPU
- メモリ
- 入力装置
- 表示装置
- 記憶装置
- プログラム
- 入出力を管理する仕組み
- ユーザーが操作する環境
これをCH32V003に置き換えると、次のようになります。
| 一般的なパソコン | CH32V003パソコン |
|---|---|
| CPU | CH32V003 |
| RAM | CH32V003内蔵SRAM |
| 画面 | OLED / LCD |
| キーボード | 4×4キーパッド、PS/2キーボードなど |
| ストレージ | microSDカード |
| サウンド | 圧電ブザー |
| OS | 自作の簡易OS |
| アプリケーション | BASIC、電卓、ゲーム、テキストエディタなど |
目標は「昔の8bitパソコン」
ここで重要なのは、最初から現代のWindowsパソコンを目指さないことです。
むしろ、1980年代の8bitパソコンのようなコンピューターを目標にします。
CH32V003 COMPUTER ----------------- Memory : OK Display: OK Keyboard: OK SD Card: OK CH32 BASIC READY >
そしてキーボードから、
> PRINT "HELLO WORLD" HELLO WORLD
さらに、
> PRINT 10+20 30
といった操作ができるようにします。
これなら、わずかなメモリしかないCH32V003でも、十分に「コンピューターを作った」と言えるでしょう。
最終的なシステム構成
最終的には、次のような構成を目指します。
┌───────────────────┐
│ CH32V003 │
│ 32bit RISC-V │
│ 48MHz │
└─────────┬─────────┘
│
┌────────────────┼────────────────┐
│ │ │
▼ ▼ ▼
┌─────────┐ ┌──────────┐ ┌──────────┐
│ OLED │ │ Keyboard │ │ microSD │
│ Display │ │ Input │ │ Storage │
└─────────┘ └──────────┘ └──────────┘
│ │ │
└────────────────┼────────────────┘
│
┌─────▼─────┐
│ BASIC │
│ Editor │
│ Games │
└───────────┘
第1段階はOLEDディスプレイ
最初に取り付けたいのが、SSD1306などの128×64ドットOLEDです。
これを使えば、非常に小さい画面ですが文字を表示できます。
┌──────────────────────────────┐ │ CH32V003 COMPUTER │ │ │ │ HELLO WORLD! │ │ │ │ SYSTEM READY │ │ │ │ > _ │ └──────────────────────────────┘
ここで初めて、CH32V003が「何かを表示するコンピューター」になります。
UIAPduinoのI²C端子を使う
UIAPduino Pro Micro CH32V003 V1.4には、Qwiic互換のI²C端子が用意されています。基板上のSDAはPC1、SCLはPC2です。citeturn0search1turn0search12
OLEDをI²C接続する場合は、基本的に次の4本を使用します。
| OLED | UIAPduino |
|---|---|
| VCC | 3.3V |
| GND | GND |
| SDA | SDA / PC1 / D3 |
| SCL | SCL / PC2 / D4 |
ただし、OLEDモジュールの電源電圧やI²Cプルアップの構成には違いがあるため、使用するOLEDの仕様を確認してから接続します。
最初の目標は「文字表示」
いきなりBASICを作る必要はありません。
まずはArduino IDEから、
- CH32V003を起動する
- I²Cを初期化する
- SSD1306を初期化する
- 文字を表示する
というところまで進めます。
表示できるようになったら、次に文字入力を作ります。
第2段階はキーボード
次に必要なのが入力装置です。
最初は、パソコン用キーボードを接続するよりも、4×4キーパッドを使用すると簡単です。
┌────┬────┬────┬────┐ │ 1 │ 2 │ 3 │ 4 │ ├────┼────┼────┼────┤ │ 5 │ 6 │ 7 │ 8 │ ├────┼────┼────┼────┤ │ 9 │ 0 │ + │ - │ ├────┼────┼────┼────┤ │ * │ / │ = │ ENT│ └────┴────┴────┴────┘
この段階では、数字と簡単な演算子だけで構いません。
CH32V003を「電卓」にする
キーボードとOLEDが動くようになったら、次は電卓を作ります。
> 10+20= 30 > 100/4= 25 > 123*45= 5535
この段階では、まだOSもBASICも必要ありません。
キーボードから入力された文字をCH32V003が読み取り、その文字列を解析して計算結果をOLEDに表示します。
コンピューターらしくする「BASIC」
電卓が完成したら、いよいよBASICです。
例えば次のプログラムを入力できるようにします。
10 PRINT "HELLO" 20 PRINT 10+20 30 GOTO 10
そして、
> RUN HELLO 30 HELLO 30 HELLO 30
と動くようにします。
これは単なる「Arduinoプログラム」ではありません。
自分で作ったプログラミング言語を、自分で作ったコンピューター上で動かすことになります。
BASICで何を作るか
BASICの命令は、最初から大量に実装する必要はありません。
まずは次の程度で十分です。
| 命令 | 用途 |
|---|---|
| 文字・数字を表示 | |
| INPUT | キーボードから入力 |
| LET | 変数に値を入れる |
| IF | 条件判断 |
| GOTO | 指定行へ移動 |
| FOR | 繰り返し |
| NEXT | 繰り返し終了 |
| END | プログラム終了 |
これだけでも、かなり多くのプログラムを作ることができます。
ゲームも作れる
OLEDとキーボードがあれば、簡単なゲームも作れます。
┌────────────────────────────┐ │ SCORE 120 │ │ │ │ * │ │ │ │ O │ │ │ │ <PLAYER> │ │ │ └────────────────────────────┘
例えば、
- 数字当てゲーム
- 迷路
- テトリス風ゲーム
- シューティング
- ブロック崩し
- 反射神経ゲーム
- 簡易RPG
などを作れます。
microSDカードを接続する
次の大きな課題がストレージです。
CH32V003のFlashは16KBしかありません。そのため、大量のプログラムやデータを保存するには外部ストレージが必要になります。CH32V003にはSPIが搭載されているため、microSDカードをSPI接続する構成が考えられます。
すると、例えば次のようなファイルを扱えるコンピューターにできます。
> DIR AUTO.BAS CALC.BAS GAME.BAS TEST.TXT 4 FILES
さらに、
> RUN GAME.BAS
と入力してゲームを起動できるようにします。
SPI端子
UIAPduino Pro Micro CH32V003では、SPI関係の端子として、SCK、MISO、MOSIが用意されています。資料ではSCKがPC5、MOSIがPC6、MISOがPC7として示されています。Arduino側ではD7、D8、D9に対応します。citeturn0search1turn0search12
| microSD | UIAPduino |
|---|---|
| VCC | モジュール仕様に合わせる |
| GND | GND |
| SCK | PC5 / D7 |
| MOSI | PC6 / D8 |
| MISO | PC7 / D9 |
| CS | 空いているGPIO |
SDカードモジュールには5V対応タイプと3.3V専用タイプがあるため、ここもモジュールの仕様確認が必要です。
RAMが2KBしかない問題
このプロジェクトで最大の問題になるのがRAMです。
CH32V003F4U6のSRAMは2KBです。
現代のパソコンから考えると、とんでもなく少ない容量です。
しかし、昔のコンピューターでは、現在から見ると非常に小さなメモリでプログラムを動かしていました。
そこで、このパソコンでは「少ないメモリを徹底的に使う」という設計にします。
2KB SRAM │ ├── システム領域 ├── キーボード入力バッファ ├── 画面バッファ ├── BASIC変数 ├── BASICプログラム └── 作業領域
大きなデータはmicroSDに保存し、必要な部分だけ読み込む方式にすれば、限られたRAMでも面白いコンピューターを作れます。
外付けRAMを追加する構想
さらに本格的なコンピューターにするなら、外付けRAMを追加する方法もあります。
ただし、CH32V003には2KBという制約があるため、外部メモリを追加する場合は、単純に「RAMをつなげれば全部解決」というわけではありません。
SPI RAMなどを利用して、
CH32V003
│
├── 内部RAM
│
└── SPI
│
▼
外部RAM
という構成にすることができます。
この方式なら、外部RAMを「メモリ拡張領域」として使う設計もできます。
画面をもっと大きくする
最初は128×64 OLEDで十分ですが、最終的には320×240程度のカラー液晶などに発展させることも考えられます。
ただし、ここでも2KB SRAMが大きな制約になります。
320×240のフルカラー画面をそのままRAMに保持するような方式は現実的ではありません。
そのため、
- 文字中心の画面にする
- 画面を部分的に更新する
- 外部RAMを利用する
- 液晶側の機能を利用する
といった工夫が必要になります。
キーボードを本格化する
4×4キーパッドで基本機能が完成したら、次にパソコン用キーボードを接続します。
CH32V003はUSB Low-Speedデバイスとして使用でき、USB HIDの用途にも対応できます。UIAPduinoもUSB HIDの動作例を持っています。citeturn0search1turn0search3
ただし、USBキーボードを「ホスト」として直接接続する場合と、USBデバイスとしてキーボード相当の機能を実装する場合は別の話です。
そのため、最初の自作パソコンでは、PS/2キーボードや外部USBホスト機器など、構成を単純化できる方法から始めるのがよいでしょう。
ブザーを付ける
パソコンらしさを出すなら、音も重要です。
圧電ブザーをGPIOまたはPWMに接続すれば、
起動音 ピッ! > PRINT 10+20 ピッ 30
というようなコンピューターにできます。
ゲームでは効果音も出せます。
ファイルシステムを作る
microSDが使えるようになったら、次はファイル管理です。
例えば、次のようなコマンドを作ります。
DIR TYPE LOAD SAVE RUN DELETE RENAME
すると、
> DIR CALC.BAS GAME.BAS MEMO.TXT > TYPE MEMO.TXT CH32V003 COMPUTER MY FIRST COMPUTER
という操作が可能になります。
テキストエディタを作る
ここまで来たら、簡単なテキストエディタを搭載します。
┌──────────────────────────────┐ │ MEMO.TXT │ ├──────────────────────────────┤ │ CH32V003でパソコンを作る │ │ │ │ CPU : RISC-V │ │ RAM : 2KB │ │ Flash: 16KB │ │ │ │ │ │ │ └──────────────────────────────┘
そして、
> EDIT MEMO.TXT
で編集画面を起動します。
最終的なコマンド画面
最終的には、こんな画面を目指します。
CH32V003 COMPUTER ================= CPU : CH32V003 ARCH : RISC-V CLOCK : 48MHz RAM : 2KB FLASH : 16KB SD CARD : OK DISPLAY : OK KEYBOARD: OK CH32 BASIC V1.0 READY >
ここから、
> HELP PRINT INPUT LET IF GOTO FOR NEXT LIST RUN SAVE LOAD DIR TYPE EDIT
という操作ができるようにします。
「OS」を作る
さらに発展させると、CH32V003専用の簡易OSを作ることができます。
構造としては、
┌─────────────────────────┐ │ アプリケーション │ │ BASIC / GAME / EDITOR │ ├─────────────────────────┤ │ コマンドインタプリタ │ ├─────────────────────────┤ │ ファイルシステム │ ├─────────────────────────┤ │ デバイスドライバ │ │ OLED / Keyboard / SD │ ├─────────────────────────┤ │ Kernel │ ├─────────────────────────┤ │ CH32V003 Hardware │ └─────────────────────────┘
という構成になります。
これは、現代のWindowsのような巨大なOSではありません。
「CH32V003を動かすためだけの小さなOS」です。
Arduino IDEから始められる
今回のプロジェクトの大きなメリットは、最初からアセンブラやRISC-Vの開発環境を完全に理解する必要がないことです。
UIAPduino Pro Micro CH32V003はArduino IDEで開発できます。公式資料でもArduino IDEを使った開発環境が案内されています。
まずArduinoでハードウェアを動かし、その後、
Arduino ↓ C/C++ ↓ レジスタ操作 ↓ RISC-V ↓ ブートローダ ↓ 簡易OS
という順番で低レベルへ進んでいけばよいでしょう。
CH32V003の性能を逆手に取る
「たった2KBのRAMで何ができるのか?」という制限こそ、このプロジェクトの面白いところです。
現代のパソコンでは、何MB、何GBというメモリを簡単に使います。
しかし、CH32V003では、
「本当に必要なデータは何なのか?」
「画面をどうやって効率よく表示するか?」
「どうすれば少ないRAMでプログラムを実行できるか?」
を考えなければなりません。
これは、コンピューターの仕組みを学ぶには非常に良い教材になります。
実際の開発手順
このプロジェクトは、次の順番で進めるのがおすすめです。
- CH32V003の書き込み環境を完成させる
- 内蔵LEDを点滅させる
- OLEDを接続する
- OLEDに文字を表示する
- 数字を表示する
- キーパッドを接続する
- キー入力を表示する
- 電卓を作る
- 文字列入力を作る
- BASICのPRINTを実装する
- 変数を実装する
- IFを実装する
- GOTOを実装する
- FOR/NEXTを実装する
- LISTを実装する
- SDカードを接続する
- SAVE/LOADを実装する
- DIR/TYPEを実装する
- 簡易テキストエディタを作る
- ゲームを作る
- 簡易OSとして統合する
最初から全部作らないことが重要
このプロジェクトでは、最初から「パソコン」を完成させようとすると失敗しやすくなります。
最初は、
CH32V003 ↓ LED点滅 ↓ OLED ↓ 文字表示 ↓ キーボード ↓ 電卓 ↓ BASIC ↓ SDカード ↓ ファイル ↓ ゲーム ↓ 簡易OS
と、一つずつ完成させます。
一つの機能が完成するたびに「自分のパソコン」が少しずつ成長していく形にします。
実は「パソコン作り」そのものが教材になる
このプロジェクトでは、単に電子部品を接続するだけではありません。
最終的には、次のような分野を一度に勉強できます。
- Arduino
- C/C++
- RISC-V
- マイコン
- GPIO
- I²C
- SPI
- UART
- USB
- メモリ
- CPU
- 割り込み
- タイマー
- ディスプレイ制御
- キーボード制御
- ファイルシステム
- プログラミング言語
- OSの基本
つまり、「小さなマイコンからコンピューターを理解する」という非常に良い教材になります。
UIAPduinoならではの面白さ
UIAPduino Pro Micro CH32V003はPro Micro系のサイズを採用しているため、ブレッドボードを利用した実験にも向いています。また、USB Type-C、リセットボタン、ユーザーLEDなども搭載されています。citeturn0search1turn0search3
さらに、V1.4ではRISC-Vマイコンを使ったデバッガとして利用するための仕組みも用意されています。公式資料では、別のCH32V003ボードをデバッガとして利用する「rvswdio programmer」についても説明されています。citeturn0search1turn0search2
つまり、単なるArduino互換ボードとして使うだけでなく、RISC-Vの世界に入るための実験基板としても利用できます。
今回作る「CH32V003パソコン」の完成イメージ
┌──────────────────────────────────┐ │ CH32V003 COMPUTER │ │ │ │ CPU : RISC-V 48MHz │ │ RAM : 2KB │ │ │ │ ┌────────────────────────────┐ │ │ │ READY │ │ │ │ │ │ │ │ > PRINT "HELLO" │ │ │ │ HELLO │ │ │ │ │ │ │ │ > 100+200 │ │ │ │ 300 │ │ │ │ │ │ │ │ > DIR │ │ │ │ GAME.BAS │ │ │ │ CALC.BAS │ │ │ │ MEMO.TXT │ │ │ │ │ │ │ │ > _ │ │ │ └────────────────────────────┘ │ │ │ │ CH32V003 BASIC │ └──────────────────────────────────┘
そして最終目標は「自分で作ったパソコン」
一般的なパソコンは、CPU、メモリ、OS、ディスプレイ、キーボードなどが高度に統合されているため、ユーザーは内部構造を意識することなく使えます。
しかし、このCH32V003パソコンでは、
「キーを押す」
↓
CH32V003が信号を読む
↓
文字コードに変換
↓
プログラムが処理
↓
OLEDへ送る
↓
画面に文字が出る
という一つ一つの処理を、自分で作っていきます。
最終的には、電源を入れると自分で作ったプログラムが起動し、
CH32V003 COMPUTER Booting... Display OK Keyboard OK SD Card OK CH32 BASIC READY >
と表示されるところまで持っていきます。
これなら「CH32V003でパソコンを作った」と胸を張って言えるでしょう。
この記事の次のステップ
まずは大きな計画を立てず、第1号機を最小構成で完成させることをおすすめします。
最初の構成は、
UIAPduino Pro Micro CH32V003
+
SSD1306
128×64 OLED
+
4×4キーパッド
+
ブザー
です。
これだけで、
文字表示 ↓ キー入力 ↓ 電卓 ↓ BASIC ↓ ゲーム
まで発展させることができます。
その後にmicroSD、外部RAM、より大きな液晶、パソコン用キーボードなどを追加していきます。
まとめ
UIAPduino Pro Micro CH32V003でパソコンを作ることは可能です。
もちろん、2KBのSRAMと16KBのFlashしかないため、Windows 11を動かすようなパソコンにはなりません。
しかし、処理速度が遅くてもよい、画面は小さくてよい、機能は自分で作るという条件なら、非常に面白いコンピューターを作ることができます。
むしろ重要なのは性能ではありません。
「CPUが動く」
「メモリを使う」
「キーボードから入力する」
「画面に表示する」
「プログラムを実行する」
「ファイルを保存する」
というコンピューターの基本機能を、一つずつ自分で作れることに価値があります。
しかも、そのCPUは32bit RISC-Vです。
290円程度の小さなボードから始めて、最終的に「自分で設計したコンピューター」を作る。
これはかなり面白いプロジェクトです。
参考資料
PC☆LIVE!「税込290円で購入できるArduino互換マイコンボード」
UIAP公式「UIAPduino Pro Micro CH32V003 V1.4」

