Skip to content

UIAPduino Pro Micro CH32V003 V1.4General Availability

V1.4-表V1.4-裏V1.4-電源ON

概要

  • 48MHzで動作するCH32V003を採用し、Arduino IDEでのコーディングをサポートします。
  • 1つのUSB Type-Cで電源供給とプログラムの書き込みを行えます。
  • USB 2.0 Low-speedデバイスとして動作し、HIDデバイスを作成できます
  • オンボードヒューズでUSBポートを強力に保護します。
  • 3.3Vまたは5Vから選択可能なマイクロコントローラ用電源を備えています。
  • CN2が未実装の場合は高さ2.0mm/ピッチ2.54mmのコンスルーⓇで接続できます。
  • 底面がフラットなので表面実装部品のように取り付けることができます。
  • オープンソースソフトウェアかつオープンソースハードウェアです。
  • RoHS準拠日本設計永久保証です。

はじめる

手順で示されるまでボードをUSBポートへ接続してはいけません。短絡リスクを低減するためです。

LEDを点滅させるプログラム(スケッチ)を書き込み、ボード上でLEDが点滅することを確認します。

動作確認済み環境

  • OS: Windows 10 / Windows 11 / Ubuntu 22.04 LTS / Ubuntu 24.04 LTS
  • USBホスト: USB 2.0 Type-A / USB 3.2 Type-C
  • Arduino IDE: 2.3.2 / 2.3.3 / 2.3.4

Windows

ボードの追加と書き込み

Arduino IDEを起動し、ファイル -> 基本設定 -> 追加のボードマネージャのURL にhttps://github.com/YuukiUmeta-UIAP/board_manager_files/raw/main/package_uiap.jp_index.jsonを追記します。ツール -> ボード -> ボードマネージャ でuiapと検索し、UIAPduinoをインストールします。

ツール -> ボード -> UIAPduino -> Pro Micro CH32V003を選択します。他の設定項目は全てデフォルトです。ファイル -> スケッチ例 -> 01.Basics -> Blink でLEDを点滅させるサンプルスケッチを開き、setup()の前に#define LED_BUILTIN 2を追記します。

cpp
// Define on board LED pin before setup()
#define LED_BUILTIN 2

// the setup function runs once when you press reset or power the board
void setup() {
...

ボードをリセットボタンを押しながらパソコンのUSBポートへ接続し、リセットボタンをすぐに離します。デバイスのセットアップ完了を待ったあと、Arduino IDEの書き込みボタンでスケッチを書き込みます。Image written.と表示されたら書き込み完了です。

同一のPCでも一部のUSBポートから書き込みできないことがあります。書き込みできない場合は使用するUSBポートを変えてください。また、給電専用のUSBケーブルでは書き込みも通信もできません。

動作確認

プログラムを実行するにはA、B、Cの3つの方法があります。

  1. 書き込み後にリセットボタンを押す。
  2. リセットボタンを押さずにUSBポートへ接続する。
  3. 市販のUSB充電器(ACアダプタ)へ接続する。

どれか1つの手順でボード中央のオレンジ色ダイオードが1秒ごとに点灯/消灯を繰り返していれば正常動作です。再度プログラムを書き込むには、ボードをUSBポートから外して、リセットボタンを押しながらUSBポートへ再接続する必要があります。

USBポートへの挿し直しをせずに動作モードを切り替え(シームレススイッチ)する方法もあります。

Linux

Windowsと同様に操作し、UIAPduinoボードをインストールしたあとに以下コマンドを実行してください。なお、Arch Linuxからの書き込みは不安定です。

bash
# Do this command after UIAPduino board was installed.
sudo ln -s ~/.arduino15/packages/UIAP/tools/minichlink-2982dfd/1.0.0/99-minichlink.rules /etc/udev/rules.d/99-minichlink.rules
# Reboot or do this command if needed.
sudo udevadm control --reload-rules

minichlinkが原因で書き込みできない場合は、環境に合わせてビルドして~/.arduino15/packages/UIAP/tools/minichlink-2982dfd/1.0.0/minichlinkを置き換えてください。

ドキュメント

Schematic of the PCBPCB LayoutEagle Projectをダウンロード

ピン配置図

Pinout Diagram

Arduino IDEでのポート名称の定義についてはvariant_CH32V003F4.hvariant_CH32V003F4.cppを参照してください。

ノート

工場出荷時設定Draft

cnlohr/rv003usbをベースとしたカスタムブートローダ(ソースコード/バイナリファイル)が書き込まれています。これはタイムアウト調整とシームレススイッチ対応と製品区別のためです。また、ボード中央のオレンジ色ダイオードが ろうそく のように点灯するユーザプログラムが書き込まれています。

シームレススイッチDraft

書き込み待機モードとプログラム実行モードとをUSBポートへの挿し直しをせずに切り替え(シームレススイッチ)します。

リセットボタンで

スケッチのsetup()に3行のコードを追記すると、リセットボタンの機能が「リセット」から「シームレススイッチ」に切り替わります。

cpp
// the setup function runs once when you press reset or power the board
void setup() {
  if (FLASH->STATR & (1<<14)) NVIC_SystemReset();
  SystemReset_StartMode(Start_Mode_BOOT);
  pinMode(PD4, OUTPUT);
...

眩しさ防止

夜間のベッドルームなどではLEDが眩しく感じます。ボード内のLEDはジャンプパッドをカットすることで消灯できます。

機能回路図ジャンプ
パッド
備考
電源オンLED1CUT1
USB信号オレンジLED2CUT2カットしても書き込み可能なままになります。
内蔵LEDオレンジLED3CUT3カットするとハイインピーダンスになります。

アプリケーション例

WS2812Bを光らせる

DS18x20で温度センシング

温度を感知しながら同時にメッセージを送信できるようにコードをカスタマイズする必要があります。

Arduinoライブラリ使用

動作したArduinoライブラリとその時のスケッチです。

SevSeg

Show Arduino Sketch
cpp
#include "SevSeg.h"
SevSeg sevseg; //Instantiate a seven segment object

void setup() {
  byte numDigits = 1;
  byte digitPins[] = {1};
  byte segmentPins[] = {3, 4, 2, 5, 9, 7, 8, 10};
  bool resistorsOnSegments = true; // 'false' means resistors are on digit pins
  byte hardwareConfig = COMMON_ANODE; // See README.md for options
  bool updateWithDelays = false; // Default 'false' is Recommended
  bool leadingZeros = false; // Use 'true' if you'd like to keep the leading zeros
  bool disableDecPoint = false; // Use 'true' if your decimal point doesn't exist or isn't connected. Then, you only need to specify 7 segmentPins[]

  sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros, disableDecPoint);
}

void loop() {
  sevseg.blank();
  sevseg.refreshDisplay();
  delay(1000);
  sevseg.setNumber(0, 0);  
  sevseg.refreshDisplay();
  delay(1000);
  sevseg.setNumber(1, 0);
  sevseg.refreshDisplay();
  delay(1000);
  sevseg.setNumber(2, 0);
  sevseg.refreshDisplay();
  delay(1000);
  sevseg.setNumber(3, 0);
  sevseg.refreshDisplay();
  delay(1000);
  sevseg.setNumber(4, 0);
  sevseg.refreshDisplay();
  delay(1000);
  sevseg.setNumber(5, 0);
  sevseg.refreshDisplay();
  delay(1000);
  sevseg.setNumber(6, 0);
  sevseg.refreshDisplay();
  delay(1000);
  sevseg.setNumber(7, 0);
  sevseg.refreshDisplay();
  delay(1000);
  sevseg.setNumber(8, 0);
  sevseg.refreshDisplay();
  delay(1000);
  sevseg.setNumber(9, 0);
  sevseg.refreshDisplay();
  delay(1000);
}

リファレンス

CH32V003

Tips

DIY

開発スタック

USBで

Arduino IDEで

Rustで

Pro Micro

USB

以前のバージョン

謝辞

レビュー

提案

  • Masashi Sasaki
  • Kojo Kimura
  • Tomoyuki Dansako
最終更新 2025/01/06