📑 เนื้อหาในบทความ
คำนำ
CH32V003 เป็นไมโครคอนโทรลเลอร์ RISC-V 32-bit รุ่นแรกที่มีราคาเพียง $0.10 (ประมาณ 3-4 บาท) ทำให้เป็นตัวเลือกที่น่าสนใจอย่างยิ่งสำหรับผู้ที่ต้องการเรียนรู้สถาปัตยกรรม RISC-V หรือสร้างโปรเจกต์ IoT ที่มีงบประมาณจำกัด บอร์ดนี้ผลิตโดย WCH (WinChipHead) บริษัทจีนที่มีชื่อเสียงด้านชิป USB ราคาถูก
แม้ว่า CH32V003 จะมีราคาถูกมาก แต่ก็มาพร้อมกับคุณสมบัติที่น่าประทับใจ เช่น หน่วยความจำ Flash 16KB, RAM 2KB, ความเร็วสัญญาณนาฬิกาสูงสุด 48MHz, USB, และ GPIO หลายพอร์ต ทำให้สามารถใช้งานได้จริงในหลากหลายโปรเจกต์
💡 ทำไมต้อง CH32V003? นี่คือไมโครคอนโทรลเลอร์ RISC-V ราคาถูกที่สุดในตลาด ทำให้เหมาะสำหรับการเรียนรู้ RISC-V architecture, สร้างโปรเจกต์ IoT จำนวนมาก, หรือทำผลิตภัณฑ์ที่ต้องการควบคุมต้นทุน
CH32V003 คืออะไร?
CH32V003 เป็นไมโครคอนโทรลเลอร์ 32-bit ที่ใช้สถาปัตยกรรม RISC-V (RV32EC) ซึ่งเป็นสถาปัตยกรรมโอเพนซอร์สที่กำลังได้รับความนิยม ชิปนี้ออกแบบมาเพื่อให้มีราคาถูกที่สุดเท่าที่จะทำได้ ในขณะที่ยังคงฟีเจอร์พื้นฐานที่จำเป็นสำหรับงาน IoT และ embedded systems
คุณสมบัติหลัก
- •CPU: QingKe RISC-V 32-bit (RV32EC) ที่ 48MHz
- •Memory: 16KB Flash, 2KB SRAM
- •I/O: 16 GPIO pins, SPI, I2C, UART
- •USB: USB 2.0 Device
- •Timers: 4 ตัวจับเวลา (Advanced, General, Basic)
- •ADC: 12-bit ADC พร้อมช่องสัญญาณหลายช่อง
- •Voltage: 2.7V - 5.5V (รองรับ 5V โดยตรง)
- •Price: ~$0.10 สำหรับชิปเดี่ยว (บอร์ดพร้อมใช้ ~$1-2)
คุณสมบัติเด่น
💰 ราคาถูกที่สุด
ด้วยราคาเพียง $0.10 ต่อชิป CH32V003 เป็นไมโครคอนโทรลเลอร์ราคาถูกที่สุดในตลาดที่ยังสามารถใช้งานได้จริง
🔓 RISC-V Architecture
เรียนรู้สถาปัตยกรรมโอเพนซอร์สที่กำลังเป็นที่นิยมและใช้งานได้จริง
⚡ 5V Native Support
รองรับแรงดัน 5V โดยตรง ไม่ต้องใช้ level shifter ทำให้ง่ายต่อการใช้งานกับ sensor ส่วนใหญ่
🔌 USB Built-in
มี USB 2.0 Device ในตัว สามารถใช้เป็น USB device ได้เลยโดยไม่ต้องมีอุปกรณ์เพิ่ม
อุปกรณ์ที่ต้องใช้
Hardware (อุปกรณ์ฮาร์ดแวร์)
- ✓CH32V003 Development Board: เลือกบอร์ดที่มี USB debugger ในตัว (~$1-3 บน AliExpress/Taobao)
- ✓Micro USB Cable: สายเชื่อมต่อคอมพิวเตอร์
- ✓Breadboard & Jumper Wires: สำหรับต่อวงจรทดลอง
- ✓LED: 1-2 ดวง สำหรับทดสอบ
- ✓Resistors: 220Ω หรือ 330Ω (สำหรับ LED)
Software (ซอฟต์แวร์)
- ✓MounRiver Studio IDE: IDE หลักสำหรับ CH32V003 (Windows)
- ✓PlatformIO (VSCode): ทางเลือกที่ดีสำหรับ cross-platform
- ✓WCH LinkE: Programmer/Debugger จาก WCH
💡 เคล็ดลับ: บอร์ด CH32V003 ส่วนใหญ่มี USB debugger ในตัวแล้ว แต่ถ้าบอร์ดของคุณไม่มี จะต้องซื้อ WCH LinkE แยก (~$2-3)
การติดตั้งซอฟต์แวร์
วิธีที่ 1: ใช้ MounRiver Studio (แนะนำสำหรับ Windows)
# 1. ดาวน์โหลด MounRiver Studio
# เข้าไปที่: https://www.mounriver.com/
# ดาวน์โหลดและติดตั้งเวอร์ชันล่าสุด
# 2. ติดตั้ง WCH LinkE Driver
# - MounRiver Studio จะมี driver มาให้ในตัว
# - ติดตั้ง driver ให้เรียบร้อย
# 3. เชื่อมต่อบอร์ด CH32V003
# - เสียบ USB cable เข้ากับบอร์ด
# - เปิด Device Manager ตรวจสอบว่าพอร์ต COM ถูกตรวจพบหรือไม่วิธีที่ 2: ใช้ PlatformIO (Cross-platform)
# 1. ติดตั้ง VSCode และ PlatformIO Extension
# ดาวน์โหลด: https://code.visualstudio.com/
# ติดตั้ง PlatformIO extension จาก VSCode marketplace
# 2. สร้างโปรเจกต์ใหม่
# - File -> New Project
# - Board: WCH CH32V003J4M6
# - Framework: WCH
# 3. ติดตั้ง toolchain
# PlatformIO จะดาวน์โหลด toolchain ให้อัตโนมัติโปรแกรมแรก: Blink LED
มาเริ่มต้นด้วยการทำให้ LED กระพริบกันเถอะ! นี่คือ "Hello World" ของ embedded systems
#include "ch32v00x.h"
// กำหนดขา LED (ขึ้นอยู่กับบอร์ด)
#define LED_PIN GPIO_Pin_5 // PC5 บนบอร์ดส่วนใหญ่
// ฟังก์ชันหน่วงเวลาแบบง่าย
void delay_ms(uint32_t ms) {
for(uint32_t i = 0; i < ms; i++) {
// หน่วงเวลา ~1ms ที่ 48MHz
for(uint32_t j = 0; j < 12000; j++) {
__NOP();
}
}
}
int main(void) {
// ตั้งค่า System Clock เป็น 48MHz
SystemCoreClockUpdate();
// เปิด clock สำหรับ GPIO Port C
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
// ตั้งค่า LED_PIN เป็น Output
GPIO_InitTypeDef GPIO_InitStructure = {0};
GPIO_InitStructure.GPIO_Pin = LED_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // Push-Pull Output
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
// Main loop
while(1) {
GPIO_WriteBit(GPIOC, LED_PIN, Bit_SET); // เปิด LED
delay_ms(1000); // รอ 1 วินาที
GPIO_WriteBit(GPIOC, LED_PIN, Bit_RESET); // ปิด LED
delay_ms(1000); // รอ 1 วินาที
}
}✅ คำอธิบาย: โค้ดนี้จะทำให้ LED กระพริบทุกๆ 1 วินาที ใช้ GPIO Port C Pin 5 ซึ่งเป็นขา LED บนบอร์ด CH32V003 ส่วนใหญ่
ตัวอย่างการใช้งาน GPIO เพิ่มเติม
อ่านค่าจาก Button
#include "ch32v00x.h"
#define BUTTON_PIN GPIO_Pin_4 // PC4
#define LED_PIN GPIO_Pin_5 // PC5
int main(void) {
SystemCoreClockUpdate();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
// ตั้งค่า LED เป็น Output
GPIO_InitTypeDef GPIO_InitStructure = {0};
GPIO_InitStructure.GPIO_Pin = LED_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
// ตั้งค่า Button เป็น Input พร้อม Pull-up
GPIO_InitStructure.GPIO_Pin = BUTTON_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // Input with Pull-up
GPIO_Init(GPIOC, &GPIO_InitStructure);
while(1) {
// อ่านค่าจาก button
if(GPIO_ReadInputDataBit(GPIOC, BUTTON_PIN) == Bit_RESET) {
// Button ถูกกด (active low)
GPIO_WriteBit(GPIOC, LED_PIN, Bit_SET); // เปิด LED
} else {
GPIO_WriteBit(GPIOC, LED_PIN, Bit_RESET); // ปิด LED
}
delay_ms(10); // Debounce delay
}
}เปรียบเทียบกับบอร์ดอื่น
| Feature | CH32V003 | Arduino Uno | ESP32 |
|---|---|---|---|
| Architecture | RISC-V 32-bit | AVR 8-bit | Xtensa 32-bit |
| Speed | 48MHz | 16MHz | 240MHz |
| Flash | 16KB | 32KB | 520KB |
| RAM | 2KB | 2KB | 520KB |
| Price | ~$0.10 | ~$3 | ~$3-5 |
| 5V Support | ✓ Native | ✓ Native | ✗ Level Shifter |
📊 สรุป: CH32V003 เหมาะสำหรับโปรเจกต์ที่ต้องการต้นทุนต่ำและเรียนรู้ RISC-V แต่ถ้าต้องการ WiFi/BLE หรือ memory มากกว่านี้ ควรเลือก ESP32 แทน
ไอเดียโปรเจกต์สำหรับ CH32V003
🌡️ เครื่องวัดอุณหภูมิ
ใช้ DHT11 หรือ DS18B20 วัดอุณหภูมิและแสดงผลบน 7-segment display
Beginner💡 ไฟกระพริบแบบหลากหลาย
สร้างรูปแบบการกระพริบที่หลากหลายด้วย PWM และ timing ที่แม่นยำ
Beginner🎮 USB Game Controller
ใช้ USB device mode สร้าง game controller แบบง่ายๆ
Intermediate🔌 Smart Switch
สร้างสวิตช์ไฟอัจฉริยะที่สามารถควบคุมผ่าน button หรือ timer
Intermediate📊 Data Logger
บันทึกข้อมูลจาก sensor ลงใน memory และอ่านผ่าน USB
Advanced🎵 Audio Generator
สร้างเสียงดนตรีง่ายๆ ด้วย PWM และ timer
Advancedการแก้ปัญหาที่พบบ่อย
ปัญหา: บอร์ดไม่ถูกตรวจพบ
อาการ: เสียบ USB แล้วแต่ไม่เห็นพอร์ต COM
สาเหตุ: Driver ไม่ได้ติดตั้งหรือใช้ cable ที่ไม่รองรับ data transfer
วิธีแก้: ติดตั้ง WCH LinkE driver ใหม่ หรือเปลี่ยน USB cable
ปัญหา: อัปโหลดโค้ดไม่ได้
อาการ: เกิด error ขณะ flash firmware
สาเหตุ: บอร์ดอยู่ในโหมดที่ไม่ใช่ programming mode
วิธีแก้: กดปุ่ม BOOT/RESET บนบอร์ดก่อนอัปโหลด
ปัญหา: LED ไม่กระพริบ
อาการ: โค้ดอัปโหลดสำเร็จแต่ LED ไม่ทำงาน
สาเหตุ: ใช้ขา GPIO ผิดหรือบอร์ดรุ่นต่างจากในตัวอย่าง
วิธีแก้: ตรวจสอบ pinout ของบอร์ดที่ใช้งานจริง
สรุป
CH32V003 เป็นตัวเลือกที่น่าสนใจอย่างยิ่งสำหรับผู้ที่ต้องการเรียนรู้ RISC-V architecture หรือสร้างโปรเจกต์ IoT ที่มีงบประมาณจำกัด ด้วยราคาเพียง $0.10 ต่อชิป ทำให้สามารถสร้างโปรเจกต์จำนวนมากได้โดยไม่ต้องกังวลเรื่องต้นทุน
แม้ว่าจะมีข้อจำกัดเรื่อง memory (16KB Flash, 2KB RAM) แต่ก็เพียงพอสำหรับโปรเจกต์ IoT ขนาดเล็กถึงกลาง การรองรับ 5V โดยตรงและ USB ในตัวก็ทำให้ง่ายต่อการใช้งาน
ขั้นตอนถัดไป
- →ลองสร้างโปรเจกต์จริง: เครื่องวัดอุณหภูมิ, smart switch, หรือ USB device
- →เรียนรู้ RISC-V architecture เพิ่มเติมจาก riscv.org
- →อ่านเอกสาร CH32V003 Reference Manual จาก WCH
- →ดูตัวอย่างโค้ดเพิ่มเติมบน GitHub และ WCH community