บทความ: CH32V003 ไมโครคอนโทรลเลอร์ RISC-V ราคา $0.10 ฉบับเริ่มต้นใช้งาน

เรียนรู้เกี่ยวกับ CH32V003 ไมโครคอนโทรลเลอร์ RISC-V ราคาเพียง $0.10 จาก WCH พร้อมวิธีการเริ่มต้นใช้งาน ตั้งแต่การติดตั้งไปจนถึงการเขียนโปรแกรมแรก อุปกรณ์ที่เหมาะสำหรับโปรเจกต์ IoT ราคาประหยัด

📅 22 มีนาคม 2026⏱️ 15 นาที🎯 Beginner
CH32V003RISC-VWCHMicrocontrollerIoT

คำนำ

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
    }
}

เปรียบเทียบกับบอร์ดอื่น

FeatureCH32V003Arduino UnoESP32
ArchitectureRISC-V 32-bitAVR 8-bitXtensa 32-bit
Speed48MHz16MHz240MHz
Flash16KB32KB520KB
RAM2KB2KB520KB
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

บทความที่เกี่ยวข้อง