Slide 1

Slide 1 text

CH32Vシリーズを楽しもう(74thの場合) Atsushi Morimoto (@74th) Suzuno32RV発売記念 スズの基板パーティ 2024-09-29

Slide 2

Slide 2 text

Atsushi Morimoto @74th ● 本職 データエンジニア・バックエンドアーキテクト ● ハードウェア、マイコン知識はアマチュア ● 著書 『改訂新版 Visual Studio Code実践ガイド』 ● 技術書典3-17 サークル参加 ○ 『USB完全に理解した』(技術書典16) ● M5Dialをトラックパッド化した 自作キーボードキットSparrowDial ○ HHKB Life で紹介 『ぺかそ&びあっこが厳選! 2024年最新クセ強自作キーボード』 ○ M5Stack Japan Creativity Contest 2024 商業アイデア賞

Slide 3

Slide 3 text

商業製品化おめでとうございます! 先日ch32v003funがCH32V203で動くことを確認 ただし、最新のgccではビルドエラーになるので注意

Slide 4

Slide 4 text

コンテンツ 1. CH32Vを触るに至ったきっかけから、私の感じ魅力 2. CH32Vシリーズの開発環境について 3. (時間あれば)今までのCH32Vシリーズを組み込んだ作品紹介

Slide 5

Slide 5 text

CH32Vシリーズとは ● WCH社が提供するRISC-Vマイコン ● STM32シリーズと同じピン配置、機能群がSTM32F1と同様っぽい ● とにかくお安い(WCH公式ストア) ○ CH32V203C8T6: 88円/pcs(購入単位20) ○ CH32X035G8U6: 54円/pcs(購入単位20) ○ CH32V003J4M6: 21円/pcs(購入単位50) ● Aliexpressに公式ショップがあって手に入りやすい ● 秋月でも買える! ● 安いわりに、それなりにちゃんと動く ● USBデバイス/ホスト機能を持つのもある ● USBデバイスのあるものは、 USB経由でプログラムを書き込めて、他のプログラマが不要

Slide 6

Slide 6 text

WCH社を知ったきっかけ ● WCH社を知ったのは、 秋田先生の同人誌(後商業化)がきっかけ ● CH552は、安価なUSB付きマイコンだが、 開発環境辛い、I2Cがないという話が ● CH32V203で開発環境がそこまで辛くない Rust(ch32-rs)が使えることで興味を持つ ● ブログ記事(2022/12/22) 『WCH の RISC-V MCU CH32V203 を Rust でLチカする』 https://techbookfest.org/product/5803512929714176 https://74th.hateblo.jp/entry/2022/12/22/223956

Slide 7

Slide 7 text

CH32V203 ProMicro型開発ボードを作る ● 自作キーボードから電子工作に入ったため、 ProMicroを親だと思っている ● 2023年1月にキットを、Boothにて販売 ● 2024年1月に完成品を、 Switch Scienceマーケットプレースにて販売 https://booth.pm/ja/items/4492691 https://www.switch-science.com/products/9478

Slide 8

Slide 8 text

自作キーボードモジュール用マイコンを探す ● 自作キーボードに ジョイスティックポインターを持ち込むために、 I2Cデバイスのモジュールを作ろうとしていた ● 候補 ○ ATTiny202: 半導体不足時ちょっと高い ○ STM32G030: 100円程度で許せる ● STM32G030を採用しようと進めていたところ、 『CH32V003』に出会う

Slide 9

Slide 9 text

CH32V003 ● RV32EC (E: レジスタが少ない命令セット) ● Flash: 16K、SRAM: 2K ● 10セントマイコンで、50個単位で買うと安い ○ SOP8 21円/pcs (秋月40円) ○ TSSOP20 30円/pcs (秋月50円) ● コンデンサ1個付けとけば動作する ● 書き込みに必要なピンが1つ ● ちょっと組み込むだけだったら結構十分 ● I2C、SPI、UART、ADCなど機能を持つ https://ja.aliexpress.com/item/ 1005005036714708.html

Slide 10

Slide 10 text

コミュニティでCH32V003の開発環境が登場 ● https://github.com/cnlohr/ch32v003fun ● レジスタを直接たたくことを基本とし、 使いやすくなるようマクロが組まれている、よってプログラムが小さくなる ● ユーザが多く、exampleが豊富でひとまず動くコードがからスタートできる 動くので、レジスタ操作も怖くない!! ● 利用ツール群は、パッケージマネージャ、Homebrewのgccを使い、 専用の環境構築がほぼ不要 ● 書き込みCLIツール minichlink をプロジェクト内で開発 ● プログラムビルド、書込、シリアルモニタまでのフローが makeコマンド一発で完結 ● WCH-LinkE経由で、printfのシリアルモニタが使える ● CH32V20xなどもサポート

Slide 11

Slide 11 text

CH32V003はやはり小さい ● Blink + SerialでのHello World ○ 公式SDK: 32% (5.2/16kB) https://github.com/74th/test-ch32v003/tree/main/20240127-usb_keyboard-rv003usb ○ Arduino(公式SDK使用): 59% (9.5/16kB) https://github.com/74th/test-ch32v003/tree/main/20240929-lchika-arduino ○ ch32v003fun: 4.3% (0.70/16kB) https://github.com/74th/test-ch32v003/tree/main/20240929-lchika-ch32003fun

Slide 12

Slide 12 text

CH32V003のextralibsも便利 ● GPIOデジタル操作 ch32v003_GPIO_branchless.h ○ GPIOの操作が簡単に。 ○ GPIO_port_enable(GPIO_port_C); ○ GPIO_pinMode( GPIOv_from_PORT_PIN(GPIO_port_C, 0), GPIO_pinMode_O_pushPull, GPIO_Speed_10MHz); ○ GPIO_digitalWrite( GPIOv_from_PORT_PIN(GPIO_port_C, 0), high);

Slide 13

Slide 13 text

I2Cスレーブデバイス作成も簡単 ● examples/i2c_slave/i2c_slave.h を使えば、 I2Cでレジスタを読み書きする実装は2行で完結できる。 ● volatile uint8_t i2c_registers[32] = {0x00}; ● SetupI2CSlave( 0x9, // I2Cアドレス i2c_registers, // レジスタアドレス sizeof(i2c_registers), // レジスタサイズ onWrite, // ホストから書き込み後コールバック NULL, // ホストから読み込まれ後コールバック false);

Slide 14

Slide 14 text

ch32v003funでの開発はブログ記事と同人誌に https://74th.hateblo.jp/entry/ using-ch32v003fun https://booth.pm/ja/items/5261331 (技術書典15 2023年11月)

Slide 15

Slide 15 text

CH32V003に出会ってからの74th ● CH32V003 ProMicro型開発ボードを作って、キットを頒布 ● プログラマWCH-LinkEが国内販売されていないので、 クローン品を販売 (現在は正規品が秋月で購入可) ● ちょっとした制御にCH32V003を組み込みまくる ○ 既に4つの電子工作キットに組み込み済み https://74th.booth.pm/items/4645948 https://74th.booth.pm/items/5022813

Slide 16

Slide 16 text

CH32Vシリーズの開発で便利なもの① ● 公式SDKでの開発にはPlatformIOが便利 ○ パッケージがコミュニティで運用されている https://github.com/Community-PIO-CH32V/ platform-ch32v ○ EclipseベースのMounRiverStudioを 使わずに済む ● 公式SDKにはサンプルコードが多数あるが、 少し残念なコード(初期化だけして使ってないとか)もある ● 公式SDKや、マイコンの使い方はSTM32の解説書(右)が 便利 ● 私自身はch32v003funがメインになっていて、 公式SDKはあまり使い込んでいないが、 マイコン使う作法を→の本から吸収 https://www.amazon.co.jp/dp/ 4789849864

Slide 17

Slide 17 text

CH32Vシリーズの開発で便利なもの② ● Rust製のツールが活発 ○ wchisp: USB経由書込 ○ wlink: WCH-Link経由書込 ■ 現在は minichlink で用が足りることが多い ○ バイナリ1つで、CLIで使えるので、便利 ○ Windowsしかない公式ツールを使う必要はない

Slide 18

Slide 18 text

まとめ ● CH32Vシリーズはお安くて、組み込みやすい ● コミュニティ開発環境 ch32v003fun が便利に使える ● 「雑に」組み込んで楽しもう ● 最初の開発ボードとして、SuzunoRV32は良さそう!!!

Slide 19

Slide 19 text

時間があったら組み込んだ作品紹介

Slide 20

Slide 20 text

作品1 自作キーボードデバイス StickPointV ● I2Cデバイスとして動作、 既存I2Cトラックボールモジュールと同じプロトコルを採用 ● 自作キーボード用のファームウェアの設定を記述するだけ で、利用可能に ● firmware: https://github.com/74th/stickpoint-firmware ● 専用自作キーボードキット Sparrow60C を頒布中 RP2040 QMK Firmware CH32V 003 I2C ジョイ スティック 可変抵抗 ADC https://booth.pm/ja/items/5404009 https://booth.pm/ja/items/5525726 ※ QMK Firmware: 自作キーボード用の超機能の多くカスタマイズ可能な オープンソースファームウェア

Slide 21

Slide 21 text

作品2 リレーでのUSB切り替え機能をもつUSBHub ● スイッチによるリレー制御に使用 ● Grove I2Cによって、 リモートボタンを追加可能で、 リモートボタン側にも組み込み。 CH32V 003 リレー1 USB1 USB2 USB3 USB4 リレー2 リレー3 リレー4 USBハブ IC CH334 USB1 USB2 USB3 USB4 SW1-4 CH32V 003 SW1-4 ホスト側 デバイス側 Grove I2C https://74th.booth.pm/items/5080690 https://github.com/74th/relay-switch-usbhub

Slide 22

Slide 22 text

作品3 SparrowTV ● ESP32-C3採用のキーボードに IOエキスパンダ、ADCとして採用 ● kicad, firmware: https://github.com/74th/tv-side-keybo ard-SparrowTV ESP32-C3 CH32V 003 I2C スイッチマトリクス ジョイスティック (可変抵抗) https://booth.pm/ja/items/5309546 USBキーボード エミュレータ CH9329 UART PC

Slide 23

Slide 23 text

作品4 USBRebooter ● 1週間くらいでハングアップするIoT機器に 定期的に電源断をして、強制再起動する USBアダプタ ● スイッチ、タイマー制御として、 CH32V003を組み込み ● kicad, firmware: https://github.com/74th/usb-rebooter 電源スイッチIC CH217 CH32V 003 https://booth.pm/ja/items/5261267

Slide 24

Slide 24 text

作品5 USBスイッチアダプタ(未発売) ● スイッチを押すと、切断できるアダプタ ● MCUリセットだけではできない 完全なリセットに便利 ● 長押しによる遮断キープや、 過電流ポリヒューズ発動のLED表示に利用 ● kicad, firmware: https://github.com/74th/74th-oshw-projects/tree/ main/74TH-G053-usb_switch_adapter 電源スイッチIC CH217 CH32V 003 スイッチ

Slide 25

Slide 25 text

作品6 ESP32自動ダウンロード機能付きライター(未発売) ● MosFET(2N7002など)+キャパシタを 使った自動ダウンロード回路だと、 失敗が多い ● タイミング制御の問題なので、その制御専 用のMCUとして使う ● kicad, firmware: https://github.com/74th/esp32-dev-boards/tree /main/ESP32-Writer-CH9102F CH32V 003 UBSシリアル 変換IC CH9102F EPS32 RST,GPIO0 DTR

Slide 26

Slide 26 text

作品7 2.5次元配列自作キーボード(作成中) ● 列ごとに高さ・角度を変えて、指によりそう3Dキーボード ● 各列の基板に組み込んで、I2CのIOエキスパンダとして使う CH32V 003 スイッチ1-6 PR2040 CH32V 003 スイッチ1-6 CH32V 003 スイッチ1-6 I2C