ESP32RET: Firmware ที่เปลี่ยน ESP32 ให้กลายเป็นเครื่องมือวิเคราะห์ CAN Bus ระดับจริงจัง

เราอาจจะเคยเห็นตัวอย่างการโปรแกรม ESP32 ให้อ่านค่า CAN Bus ด้วย ซึ่งมักจะใช้ Arduino IDE และอ่านผ่าน Serial Monitor แต่จริงๆแล้ว ESP32 สามารถใช้เป็นเครื่องมือช่วยวิเคราะห์ CAN Bus แบบจริงจังได้ ด้วย Firmware ESP32RET ที่ทำงานร่วมกับโปรแกรม Savvy CAN ซึ่งการใช้งาน Savvy CAN เบื้องต้นสามารถอ่านได้ที่นี้

บทความนี้จะพาไปรู้จัก ESP32RET แบบค่อยเป็นค่อยไป ตั้งแต่

  • มันคืออะไร
  • ใช้กับบอร์ดไหนได้
  • ต้องเตรียมอะไรบ้าง
  • compile ยังไง
  • default มันตั้งค่าอะไรไว้ให้
  • และถ้าอยากปรับเอง ต้องไปแก้ตรงไหนในโค้ด

1. ESP32RET คืออะไร?

ESP32RET คือ firmware ที่เปลี่ยน ESP32 ให้กลายเป็น

🔧 CAN bus Reverse Engineering Tool

พูดง่าย ๆ คือ:

  • ESP32 อ่าน/ส่ง CAN frame ได้
  • ส่งข้อมูลออกไปให้ SavvyCAN ผ่าน USB หรือ Wi-Fi

จุดเด่นคือ โค้ดเดียว ใช้ได้หลายบอร์ด

บอร์ดที่ ESP32RET รองรับหลัก ๆ

🔹 บอร์ด EVTV ESP32 และบอร์ด Macchina A0 ซึ่งทั้งคู่เป็นบอร์ที่ใช้ ESP32 สำหรับงานวินิจฉัยด้านยานยนต์ และยังสามารถใช้ได้กับ ESP32 Dev module ที่นิยมใช้ในงาน IoT


2. Prerequired Libraries

ก่อน compile ต้องเตรียม library เหล่านี้ให้ครบ ไม่งั้น error แน่นอน 😅

  • esp32_can
    → สำหรับใช้งาน CAN controller ภายใน ESP32
  • esp32_mcp2517fd
    → สำหรับ CAN-FD หรือ CAN controller ภายนอก
  • can_common
    → ตัวแปรและ ฟังก์ชันที่เกี่ยวข้องสำหรับใช้งาน CAN Bus
  • FastLED
    → ใช้แสดงสถานะผ่าน LED (สำคัญมากบน Macchina)

โดย 3 Library แรกจะอยู่ที่ https://github.com/collin80/ ส่วน FastLED สามารถติดตั้งผ่าน Library Manager ได้เลย


3. จัดโครงสร้างไฟล์ให้ Arduino IDE รู้จัก

ESP32RET เดิมเขียนเป็น C++ project เต็มรูปแบบ แต่ถ้าจะใช้กับ Arduino IDE ต้องจัดนิดนึง

สิ่งที่ต้องทำคือ:

  1. เปลี่ยนชื่อไฟล์ ESP32RET.cpp → ESP32RET.ino
  2. สร้าง folder ชื่อ ESP32RET/
  3. copy ทุกไฟล์ (.h, .cpp) ใส่ไว้ใน folder เดียวกัน

Arduino IDE จะมองว่า folder นี้คือ “sketch” หนึ่งชุด


4. ต้อง Compile เป็น Minimum SPIFFS

จุดนี้หลายคนพลาด ❗

Binary file ที่ได้จากการ compile จะมีขนาดประมาณ 1.3 MB ซึ่งโดยปกติจะไม่สามารถเขียนลงใน Flash memory ได้พอ จำเป็นต้องปรับการตั้งค่า Partition ของ Flash memory โดยไปที่ Tools -> Partition scheme และเลือก Mininum SPIFFS (1.9 MB App with OTA/190 kB SPIFFS)


5. ค่า Default ที่ ESP32RET ตั้งมาให้

ESP32RET ตั้งค่า default หลายอย่างไว้แล้ว เพื่อให้ “แฟลชแล้วใช้ได้เลย”

🔌 Serial

  • Baud rate: 500 kbps

📡 Wi-Fi

  • SSID: สร้างจากชื่อ device ตามด้วยคำว่า “SSID”
  • Password: aBigSecret

📍 Tx / Rx

  • ค่าเริ่มต้นใช้ Rx เป็นขา 27 และ Tx เป็นขา 26

6. ภาพรวมโค้ด: 3 ฟังก์ชันหลักที่ต้องเข้าใจ

ถ้าดูโค้ดทั้งไฟล์แล้วงง ให้โฟกัสแค่ 3 ฟังก์ชันนี้พอ

1️⃣ loadSettings()

หัวใจของความ “รองรับหลายบอร์ด”

หน้าที่:

  • อ่านค่า config ของบอร์ด
  • ตรวจว่าเป็น system type ไหน
  • map CAN, LED, pin, Wi-Fi, OTA ให้ตรงกับฮาร์ดแวร์

เช่น:

  • Macchina A0 → systemType = 0 -> ESP32 Dev Module ที่ใช้งานทั่วไปจะเป็น Type นี้
  • EVTV ESP32 → systemType = 1
  • ESP32-S3 → systemType = 3

โค้ดเดียว แต่บุคลิกเปลี่ยนตามบอร์ด


2️⃣ setup()

เตรียมระบบก่อนออกสนาม

  • เปิด Serial
  • เรียก loadSettings()
  • setup CAN
  • เปิด Wi-Fi / Bluetooth / ELM327

ไม่มี delay ยาว ๆ → boot เร็ว เหมาะกับงานจริง


3️⃣ loop()

วงจรชีวิตของ ESP32RET

ใน loop จะ:

  • อ่าน CAN frame
  • ส่ง CAN ไป USB / Wi-Fi
  • รับคำสั่งจาก SavvyCAN
  • emulate ELM327
  • จัดการ buffer

ทุกอย่างทำแบบ non-blocking
นี่คือเหตุผลที่มัน “ลื่น” มากแม้ข้อมูลเยอะ


7. ถ้าอยากปรับค่าเอง ต้องแก้ตรงไหน?

🔧 CAN Baud rate

แก้ไขในส่วนท้ายๆ ของ Function loadSetting() ในบรรทัดที่ 263 ซึ่งเป็นการตั้งค่า CAN Buad rate

🔧 SSID / Password

แก้ไขชื่อ SSID ในส่วน Function loadSetting() ในบรรทัดที่ 243, 244 เป็นการตั้งค่า SSID ให้เท่ากับ ชื่อ device ตามด้วยคำว่า “SSID”

แก้ไข Password ในส่วน Function loadSetting() ในบรรทัดที่ 250 เป็นการตั้งค่า SSID ให้เท่ากับ aBigSecret


สรุป

ESP32RET ไม่ใช่แค่โค้ดตัวอย่าง แต่มันคือ firmware ระดับ production ที่ ช่วยให้ ESP32 ทำงานร่วมกับโปรแกรม Savvy CAN:

  • ใช้อ่าน CAN Message ได้
  • ใช้ reverse engineering รถจริงได้
  • เอาไปต่อยอดทำ EV project ได้
  • และที่สำคัญ… ฟรี 😄

ถ้าคุณเข้าใจโครงสร้างมัน
ESP32RET จะกลายเป็น “เครื่องมือคู่ใจ” สำหรับงาน CAN ไปอีกนาน

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *