UIAPduino Pro Micro CH32V003 V1.4General Availability
概要
- 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
を追記します。
// 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つの方法があります。
- 書き込み後にリセットボタンを押す。
- リセットボタンを押さずにUSBポートへ接続する。
- 市販のUSB充電器(ACアダプタ)へ接続する。
どれか1つの手順でボード中央のオレンジ色ダイオードが1秒ごとに点灯/消灯を繰り返していれば正常動作です。再度プログラムを書き込むには、ボードをUSBポートから外して、リセットボタンを押しながらUSBポートへ再接続する必要があります。
USBポートへの挿し直しをせずに動作モードを切り替え(シームレススイッチ)する方法もあります。
Linux
Windowsと同様に操作し、UIAPduinoボードをインストールしたあとに以下コマンドを実行してください。なお、Arch Linuxからの書き込みは不安定です。
# 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
を置き換えてください。
ドキュメント
ピン配置図
Arduino IDEでのポート名称の定義についてはvariant_CH32V003F4.hとvariant_CH32V003F4.cppを参照してください。
ノート
工場出荷時設定Draft
cnlohr/rv003usbをベースとしたカスタムブートローダ(ソースコード/バイナリファイル)が書き込まれています。これはタイムアウト調整とシームレススイッチ対応と製品区別のためです。また、ボード中央のオレンジ色ダイオードが ろうそく のように点灯するユーザプログラムが書き込まれています。
シームレススイッチDraft
書き込み待機モードとプログラム実行モードとをUSBポートへの挿し直しをせずに切り替え(シームレススイッチ)します。
リセットボタンで
スケッチのsetup()
に3行のコードを追記すると、リセットボタンの機能が「リセット」から「シームレススイッチ」に切り替わります。
// 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はジャンプパッドをカットすることで消灯できます。
機能 | 色 | 回路図 | ジャンプ パッド | 備考 |
---|---|---|---|---|
電源オン | 青 | LED1 | CUT1 | |
USB信号 | オレンジ | LED2 | CUT2 | カットしても書き込み可能なままになります。 |
内蔵LED | オレンジ | LED3 | CUT3 | カットするとハイインピーダンスになります。 |
アプリケーション例
WS2812Bを光らせる
DS18x20で温度センシング
- https://github.com/invariablyafk/CH32V-OneWire-Temperature-Example
- https://github.com/cnlohr/rv003usb/tree/master/testing/cdc_exp
温度を感知しながら同時にメッセージを送信できるようにコードをカスタマイズする必要があります。
Arduinoライブラリ使用
動作したArduinoライブラリとその時のスケッチです。
SevSeg
Show Arduino Sketch
#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
- 32-bit general-purpose RISC-V MCU-CH32V003 - NanjingQinhengMicroelectronics
- GitHub - openwch/ch32v003: CH32V003 is an ultra-cheap RISC-V MCU with 2KB SRAM, 16KB flash, and up to 18 GPIOs that sells for under $0.10
Tips
- 20円マイコン RISC-V CH32V003とは #RISC-V - Qiita
- WCH社のRISC-V搭載CH32シリーズまとめ | Lang-ship
- CH32V003 - fab-wiki
- CH32V003 – inajobのいろいろレビュー
- #29- How to RESET CH32V003 if PD1 is Occupied? - YouTube
- CH32V003J4M6 PD1 SWIO ピン共用問題 Flash eraseでの解決方法 - 宅配おもちゃ病院
- CH32V003 warning - Don't leave SWIO/PD1 floating!
- Help: Reset to bootloader by software or hardware button · Issue #52 · cnlohr/rv003usb
DIY
- Arduino IDE で安価なRISC-VマイコンCH32V003のデジタル出力を試してみた | P.T.A.55
- CH32V003で、UARTで書き込みできるブートローダを書き込んで利用する - @74thの制作ログ
- 40円マイコンCH32V003で、Auto-wakeup(AWU)を使って省電力な動かし方をしてみる #組込み - Qiita
- GitHub - shippoiincho/ch32v003examples: CH32V003 test programs
開発スタック
USBで
Arduino IDEで
- GitHub - openwch/arduino_core_ch32: Core library for CH32duino
- 40円RISC-Vマイコン(CH32V003)をArduino IDEでLチカをしてみました | きょうのかんぱぱ
- 激安RISC-VチップCH32V003を動かす | ELSPINA VEINZ TECH BLOG
- Arduino環境でnanoCH32V003開発ボードを使う | たまねぎブログ
- Arduino環境でBTE32-15(CH32V003)開発ボードを使う | たまねぎブログ
- Clock selection using Arduino IDE menu · Issue #27 · openwch/arduino_core_ch32
- Arduinoでコードからリセットをする方法
Rustで
Pro Micro
- Pro Microとそのバリエーション
- Arduino互換ボード「Pro Micro」の情報まとめ #Arduino - Qiita
- Pro Micro - 5V/16MHz - DEV-12640 - SparkFun Electronics
- SparkFun Qwiic Pro Micro - USB-C (ATmega32U4) - DEV-15795 - SparkFun Electronics
- Qwiic Connect System - SparkFun Electronics
USB
- Document Library | USB-IF
- USB Cheat Sheet
- はじめてのUSB [USB発展の歴史と基礎知識] | テクニカルスクエア | 丸文株式会社
- パケットのフォーマットからプロトコルの詳細まで
- USBの通信プロトコル
- USB Type-C コネクタに必要な終端抵抗 – Community Translated (JA... - Infineon Developer Community
- Replacing Standard USB 3.0/2.0 Connector with Type... - Infineon Developer Community
- pcb - How to connect USB Connector shield? - Electrical Engineering Stack Exchange
- 01signal: Resetting a USB device on Linux (and maybe control its power supply)
以前のバージョン
謝辞
レビュー
- Yutaro Hiyoshi
- Masashi Yokota
- Yuta Suzuki
提案
- Masashi Sasaki
- Kojo Kimura
- Tomoyuki Dansako