บทความ › เครื่องมือและความปลอดภัย
จำลองวงจร ESP32 ใน เบราว์เซอร์ ด้วย Wokwi ก่อนต่อสายจริง
ลองโค้ดและวงจร ESP32 ใน Wokwi ก่อนหยิบสายจัมเปอร์ ชิปไหนจำลองได้แค่ไหน ต่อ Wi-Fi ยังไง ใช้ logic analyzer ดูสัญญาณ และรันใน VS Code ได้
- Wokwi จำลอง ESP32, S2, S3, C3, C6, H2 และรุ่นอื่น ๆ ได้ในเบราว์เซอร์ แต่ Bluetooth ยังจำลองไม่ได้ทุกชิป
- Wi-Fi จำลองใช้ SSID Wokwi-GUEST ไม่มีรหัส ผ่าน gateway สาธารณะที่ถูกมอนิเตอร์ ห้ามส่งข้อมูลส่วนตัว
- CPU จำลองถูกจำกัดราว 8 MHz โค้ดคำนวณหนักจะช้ากว่าบอร์ดจริง แต่จังหวะเวลาของ peripheral ยังถูก
- Logic analyzer 8 ช่อง ส่งออกเป็นไฟล์ VCD เปิดใน PulseView ได้ ใช้ไล่ I2C, PWM และสัญญาณ LED
Wokwi คือโปรแกรมจำลองวงจรอิเล็กทรอนิกส์ที่รันในเบราว์เซอร์ วาง ESP32 ต่อ LED ปุ่ม เซนเซอร์ แล้วรันเฟิร์มแวร์จริงได้เลยโดยยังไม่ต้องมีบอร์ด ใช้ลองไอเดีย หาบั๊กในโค้ด และเช็กว่าต่อขาถูกก่อนเสียบสายจริง ช่วยตัดรอบ “อัปโหลด เดา แก้ อัปโหลดใหม่” ได้มาก
บทนี้ใช้ข้อมูลจากเอกสาร Wokwi และหน้า Wokwi ในเอกสาร ESP-IDF ของ Espressif ณ ตุลาคม 2026 ถ้ายังไม่เคยต่อวงจรจริง เริ่มจากต่อ LED กับ ESP32 แล้วลองวงจรเดียวกันใน Wokwi เทียบดู
ชิปไหนจำลองได้แค่ไหน
Wokwi จำลอง ESP32, ESP32-C3, ESP32-S2, ESP32-S3, ESP32-C6, ESP32-C61 และ ESP32-H2 ส่วน ESP32-C5 กับ ESP32-S31 ยังเป็นรุ่น alpha และ ESP32-P4 เป็น beta ฟีเจอร์ที่รองรับต่างกันตามชิป ตารางนี้สรุปเฉพาะส่วนที่งานของเล่นใช้บ่อย
| ฟีเจอร์ | สถานะใน Wokwi |
|---|---|
| GPIO, UART, SPI, ADC, LEDC PWM, RMT, timer | รองรับทุกชิปในตาราง |
| Wi-Fi | รองรับ (P4 ผ่าน ESP-Hosted) |
| I2C | เฉพาะฝั่ง master ไม่รองรับ 10-bit address |
| I2S | บางส่วน เฉพาะ ESP32 รุ่นแรก |
| USB Serial/JTAG | Serial ได้ JTAG ไม่ได้ (S3, C3, C5, C6, P4) |
| PSRAM | ESP32, S3, C5, P4 |
| Bluetooth | ยังไม่ได้ |
แปลว่าของเล่นที่ใช้ปุ่ม ไฟ WS2812 (ผ่าน RMT) เซอร์โว (ผ่าน LEDC) และเซนเซอร์ I2C จำลองได้เกือบครบ แต่ของเล่นที่คุมผ่านมือถือด้วย BLE ต้องทดสอบบนบอร์ดจริง
ความเร็ว CPU: ทำไมโค้ดบางส่วนช้ากว่าจริง
ค่าตั้งต้น cpuFrequency คือ auto ซึ่งจำกัด CPU จำลองไว้ราว 8 MHz ตั้งเป็น max ได้แต่เอกสารไม่แนะนำเพราะจะทำให้การจำลองทั้งหมดช้าลง สิ่งสำคัญคือข้อจำกัดนี้มีผลกับความเร็วรันคำสั่งเท่านั้น จังหวะเวลาของ peripheral ยังถูก
ตัวอย่าง:
- ESP32-S3 จริงวิ่ง 240 MHz จำลองราว 8 MHz ต่างกัน 240 ÷ 8 = 30 เท่า สำหรับงานคำนวณล้วน
- ลูปคำนวณที่บอร์ดจริงใช้ 20 ms ใน Wokwi อาจใช้ราว 20 × 30 = 600 ms
- แต่
delay(500)ไฟกะพริบยังกะพริบทุก 500 ms และ PWM 50 Hz ของเซอร์โวยังเป็น 50 Hz เพราะเป็นเวลาของ peripheral
ถ้าแอนิเมชันไฟดูหน่วงใน Wokwi ให้สงสัยงานคำนวณในลูปก่อน อย่าเพิ่งสรุปว่าโค้ดผิด
Wi-Fi จำลอง
ESP32 จำลองเห็น access point ชื่อ Wokwi-GUEST ไม่มีรหัสผ่าน อยู่ช่อง 6 ใส่หมายเลขช่องตอนเชื่อมต่อจะข้ามการสแกน ประหยัดเวลาราว 4 วินาทีทุกครั้งที่รัน
// Arduino-ESP32 ใน Wokwi
WiFi.begin("Wokwi-GUEST", "", 6); // ช่อง 6
อินเทอร์เน็ตไปผ่าน IoT Gateway สองแบบ
| Public Gateway | Private Gateway | |
|---|---|---|
| ค่าใช้จ่าย | ฟรี เป็นค่าตั้งต้น | ผู้ใช้แบบเสียเงิน |
| ทราฟฟิกถูกมอนิเตอร์ | ใช่ | ไม่ |
| เข้าเครือข่ายในบ้าน | ไม่ได้ | ได้ |
| เปิดเว็บบน ESP32 จากเบราว์เซอร์ | ไม่ได้ | ได้ ผ่าน localhost:9080 |
| IP ของ ESP32 | 10.10.0.2 | 10.13.37.2 |
Gateway รองรับ TCP และ UDP แต่ไม่รองรับ ICMP เลย ping ไม่ได้ ถ้าโค้ดจำลองต้องคุยกับโปรแกรมบนเครื่องเรา (ผ่าน Private Gateway) ใช้ชื่อโฮสต์ host.wokwi.internal
Public Gateway ถูกมอนิเตอร์ อย่าใส่รหัส Wi-Fi บ้าน โทเคน API หรือข้อมูลส่วนตัวในโปรเจกต์ที่รันผ่านมัน
Logic analyzer: เห็นสัญญาณที่มองไม่เห็น
เพิ่มชิ้น “Logic Analyzer (8 channels)” มี 8 ช่อง D0–D7 ต่อขาที่อยากดู กดรัน พอหยุดการจำลองจะได้ไฟล์ wokwi-logic.vcd เปิดด้วย PulseView (Import Value Change Dump) หรือ GTKWave
ตัวอย่างไล่ปัญหา I2C ของเซนเซอร์ BME280
- ตัววิเคราะห์เก็บสัญญาณที่ 1 GHz เอกสารแนะนำตั้ง downsampling 50 ตอน import ได้ 1,000 ÷ 50 = 20 MHz
- I2C ความเร็วมาตรฐาน 100 kHz หนึ่งบิตยาว 1 ÷ 100,000 = 10 µs
- ที่ 20 MHz ได้ 20,000,000 × 0.00001 = 200 จุดต่อบิต พอให้ PulseView ถอดรหัส I2C อ่าน address และ ACK/NACK ได้สบาย
ถ้าเห็น NACK หลัง address แปลว่า address ในโค้ดไม่ตรงกับชิ้นที่ต่อ ไม่ต้องรื้อสายจริงเพื่อหา
รันใน VS Code และใน CI
ส่วนขยาย Wokwi for VS Code ให้จำลองเฟิร์มแวร์ที่ build ในเครื่อง ใช้ได้กับ PlatformIO, ESP-IDF, Arduino CLI, MicroPython, Rust, Zephyr และอื่น ๆ ขั้นตอน
- ติดตั้งส่วนขยาย กด
F1เลือก “Wokwi: Request a new License” แล้วล็อกอินบัญชี Wokwi - build เฟิร์มแวร์ตามปกติ
- สร้าง
wokwi.tomlบอกตำแหน่งไฟล์ และdiagram.jsonบอกชิ้นส่วนกับสาย - กด
F1→ “Wokwi: Start Simulator”
# wokwi.toml (ตัวอย่างโปรเจกต์ PlatformIO)
[wokwi]
version = 1
firmware = '.pio/build/esp32dev/firmware.bin'
elf = '.pio/build/esp32dev/firmware.elf'
ฝั่ง ESP-IDF 6.0 ขึ้นไป มีแพ็กเกจ idf-wokwi ติดตั้งด้วย pip install idf-wokwi ตั้งตัวแปร WOKWI_CLI_TOKEN แล้วสั่ง idf.py wokwi ระบบสร้างไฟล์ตั้งค่าให้เอง เวอร์ชันเก่ากว่าใช้ wokwi-cli แทน ใช้ใน GitHub Actions ได้ด้วย เช่น idf.py wokwi --timeout 30000 --expect-text "Tests passed" เก็บโทเคนใน secret ห้าม commit ลง repo
ข้อผิดพลาดที่เจอบ่อย
- ผ่านในจำลองแล้วข้ามการวัดจริง Wokwi ไม่รู้ว่าไฟเลี้ยงพอไหม ดูจ่ายไฟ ESP32 ให้ถูก
- ตั้ง
flashSizeเล็กกว่า partition table LittleFS หรือ SPIFFS จะ mount ไม่ขึ้น - ทดสอบ BLE ใน Wokwi ยังไม่รองรับ
- ตั้ง CPU เป็น
maxเพื่อให้เร็ว กลับทำให้การจำลองโดยรวมช้าลง - ใส่ข้อมูลลับในโปรเจกต์ที่ใช้ Public Gateway
แหล่งข้อมูล
คำถามที่พบบ่อย
ผ่านใน Wokwi แล้ว ต่อจริงจะทำงานแน่ไหม
ไม่แน่ Wokwi ตรวจตรรกะของโค้ดและการต่อขาได้ดี แต่ไม่จำลองไฟเลี้ยงตก กระแสเกิน สายหลวม หรือสัญญาณรบกวน ส่วนนี้ต้องวัดบนโต๊ะด้วยมัลติมิเตอร์
ใช้ Wokwi ใน VS Code ต้องจ่ายเงินไหม
การเปิดใช้งานต้องขอ license ผ่านบัญชี Wokwi ซึ่งสมัครฟรีได้ ฟีเจอร์บางอย่าง เช่น Private Gateway และ Wi-Fi access point แบบกำหนดเอง ต้องใช้แผนแบบเสียเงิน ดูเงื่อนไขล่าสุดที่เว็บ Wokwi
ทำไมเปิดเว็บเซิร์ฟเวอร์บน ESP32 จำลองแล้วเข้าจากเบราว์เซอร์ไม่ได้
Gateway สาธารณะออกอินเทอร์เน็ตได้แต่รับการเชื่อมต่อเข้าไม่ได้ ต้องใช้ Private Gateway แล้วเปิด http://localhost:9080/ ซึ่งจะส่งต่อไปพอร์ต 80 ของ ESP32 จำลอง
วงจรและโค้ดในบทความทดสอบกับบอร์ดตัวอย่าง บอร์ดต่างรุ่นอาจใช้ขาต่างกัน ตรวจ pinout ของบอร์ดที่ใช้ก่อนต่อไฟเสมอ