ESP32 điều khiển máy CNC, máy laser với FluidNC: Wi-Fi, file cấu hình và giao diện web

Dùng ESP32 DevKit V1 chạy FluidNC điều khiển máy khắc laser 2 trục: sơ đồ nối hai A4988, cài firmware từ trình duyệt, file config.yaml mẫu giải thích từng dòng, lệnh hay dùng, Wi-Fi.

FluidNC là firmware điều khiển máy CNC mã nguồn mở chạy trên ESP32, phát triển tiếp từ dự án GRBL cho ESP32. FluidNC nói chuyện giống GRBL nên LaserGRBL, LightBurn, Candle, Universal Gcode Sender vẫn dùng được, nhưng có thêm những thứ Arduino không làm được: cấu hình bằng một file văn bản config.yaml thay vì biên dịch lại, điều khiển qua Wi-Fi bằng trình duyệt, chạy file G-code từ bộ nhớ trong hoặc thẻ nhớ, tới 6 trục.

Bài này hướng dẫn dùng một ESP32 DevKit V1 và hai driver A4988 để điều khiển máy khắc laser 2 trục bằng FluidNC: sơ đồ nối, cách cài firmware từ trình duyệt, file cấu hình mẫu giải thích từng dòng, các lệnh hay dùng và lỗi thường gặp.

1. FluidNC khác GRBL trên Arduino thế nào

Bảng so sánh GRBL trên Arduino Uno Nano với FluidNC trên ESP32 về vi điều khiển, số trục, cách cấu hình, kết nối, chạy file G-code, driver hỗ trợ, mức logic và phần mềm dùng được
So sánh GRBL trên Arduino và FluidNC trên ESP32 (hình tự vẽ).
  • Cấu hình bằng file: chân nào làm gì, steps/mm, tốc độ, kiểu driver, laser hay spindle đều khai báo trong config.yaml. Sửa file, tải lên, khởi động lại là xong.
  • Wi-Fi: ESP32 tự phát Wi-Fi hoặc nối vào Wi-Fi nhà; mở giao diện web trên điện thoại, máy tính để điều khiển máy, tải file G-code lên và chạy.
  • Mức logic 3,3 V: A4988, DRV8825, TMC2209 nhận được 3,3 V ở chân STEP, DIR, EN. Một số module laser hoặc driver rời cần 5 V thì phải có mạch chuyển mức.

2. Linh kiện cần chuẩn bị

3. Sơ đồ nối

Sơ đồ nối ESP32 DevKit V1: D13 EN chung hai driver, D26 STEP X, RX2 GPIO16 DIR X, D27 STEP Y, TX2 GPIO17 DIR Y, D21 công tắc X, D22 công tắc Y, D25 PWM laser, GND chung
Nối ESP32 với hai driver, hai công tắc và module laser (hình tự vẽ).
Chân ESP32 (nhãn in trên mạch)GPIONối tới
D1313EN của cả hai A4988
D2626STEP driver X
RX216DIR driver X
D2727STEP driver Y
TX217DIR driver Y
D2121công tắc X (chân NO), COM về GND
D2222công tắc Y (chân NO), COM về GND
D2525PWM (TTL) của module laser
GND–GND driver, GND nguồn 24 V, GND laser
  • Các chân trên tránh GPIO 0, 2, 5, 12, 15 (chân quyết định chế độ khởi động của ESP32) để mạch nối ngoài không làm ESP32 không khởi động được.
  • A4988: RST nối SLP, VDD lấy 3V3 của ESP32, VMOT lấy 12–24 V có tụ lọc, chỉnh VREF trước khi chạy (bài 7 của loạt).
  • Không cấp 12–24 V vào chân của ESP32. Chỉ nối GND chung.

4. Cài FluidNC lên ESP32

Năm bước cài FluidNC: mở trình cài đặt web trên Chrome hoặc Edge, cắm ESP32 và chọn cổng COM, chọn bản có Wi-Fi và cài, nối Wi-Fi tên FluidNC và mở 192.168.0.1, tải file config.yaml lên rồi khởi động lại
Cài FluidNC từ trình duyệt (hình tự vẽ).
  1. Trên máy tính, mở trình cài đặt web của FluidNC (tìm theo tên "FluidNC Web Installer" trên trang dự án FluidNC) bằng Chrome hoặc Edge; các trình duyệt này cho phép trang web nạp firmware qua cổng USB.
  2. Cắm ESP32, bấm nút kết nối và chọn cổng COM của ESP32. Không thấy cổng thì cài driver cho chip USB (CP2102 hoặc CH340) của mạch.
  3. Chọn bản firmware có Wi-Fi rồi cài. Việc cài xóa chương trình đang có trên ESP32.
  4. Cài xong, ESP32 phát Wi-Fi tên FluidNC. Nối điện thoại hoặc máy tính vào Wi-Fi này và mở địa chỉ 192.168.0.1. Mật khẩu và địa chỉ mặc định có thể khác giữa các phiên bản: mở Serial Monitor 115200 baud để đọc thông báo khi ESP32 khởi động.
  5. Trong giao diện web, tải file config.yaml ở mục 5 lên bộ nhớ trong của ESP32, rồi khởi động lại (lệnh $Bye).

5. File cấu hình config.yaml

# PYWORLD.VN - File cau hinh FluidNC cho may khac laser 2 truc dung ESP32 DevKit V1 va 2 driver A4988
# Day dai GT2, puly 20 rang, vi buoc 1/16: 80 buoc/mm. Cong tac ve goc o dau am cua X va Y (thuong mo, noi ve GND).
# Ten khoa theo file cau hinh mau cua FluidNC; doi chieu lai voi tai lieu cua phien ban dang dung.

name: "PYWORLD laser 2 truc ESP32"
board: "ESP32 DevKit V1 + 2 A4988"

stepping:
  engine: RMT
  idle_ms: 250
  pulse_us: 4
  dir_delay_us: 1
  disable_delay_us: 0

axes:
  shared_stepper_disable_pin: gpio.13:high

  x:
    steps_per_mm: 80.000
    max_rate_mm_per_min: 6000.000
    acceleration_mm_per_sec2: 500.000
    max_travel_mm: 400.000
    homing:
      cycle: 1
      positive_direction: false
      mpos_mm: 0.000
      feed_mm_per_min: 100.000
      seek_mm_per_min: 2000.000
    motor0:
      limit_neg_pin: gpio.21:low:pu
      pulloff_mm: 2.000
      stepstick:
        step_pin: gpio.26
        direction_pin: gpio.16

  y:
    steps_per_mm: 80.000
    max_rate_mm_per_min: 6000.000
    acceleration_mm_per_sec2: 500.000
    max_travel_mm: 300.000
    homing:
      cycle: 1
      positive_direction: false
      mpos_mm: 0.000
      feed_mm_per_min: 100.000
      seek_mm_per_min: 2000.000
    motor0:
      limit_neg_pin: gpio.22:low:pu
      pulloff_mm: 2.000
      stepstick:
        step_pin: gpio.27
        direction_pin: gpio.17

Laser:
  pwm_hz: 5000
  output_pin: gpio.25
  enable_pin: NO_PIN
  disable_with_s0: false
  s0_with_disable: true
  tool_num: 0
  speed_map: 0=0.000% 1000=100.000%
Cấu trúc file config.yaml: name và board, khối stepping, khối axes có shared_stepper_disable_pin, trục x với homing, motor0 có limit_neg_pin và stepstick, khối Laser với pwm_hz, output_pin, speed_map
Các khối chính của file cấu hình (hình tự vẽ).
  • Thụt lề bằng dấu cách, không dùng phím Tab; mỗi cấp thụt 2 dấu cách. Sai thụt lề là lỗi hay gặp nhất.
  • gpio.13:high: chân EN chung ở mức cao thì tắt driver (đúng với A4988). Driver nào ngược lại thì đổi thành :low.
  • gpio.21:low:pu: công tắc nối về GND nên chạm là mức thấp (:low), bật điện trở kéo lên trong ESP32 (:pu). Dùng công tắc thường đóng thì bỏ :low.
  • steps_per_mm: 80: dây đai GT2, puly 20 răng, vi bước 1/16 (bài 8). Trục chạy ngược chiều mong muốn thì viết direction_pin: gpio.16:low.
  • homing: về gốc ở đầu âm (positive_direction: false), tốc độ tìm 2000 mm/phút, tốc độ dò 100 mm/phút. Máy không có công tắc thì xóa khối homing và dòng limit_neg_pin.
  • Laser: PWM 5 kHz ở GPIO25; speed_map: 0=0.000% 1000=100.000% nghĩa là lệnh S1000 cho 100 % công suất, khớp với cài đặt mặc định của LaserGRBL, LightBurn. Một số module laser cần tần số PWM thấp hơn: xem tài liệu module.

Tên các khóa trong file đối chiếu theo file cấu hình mẫu chính thức của FluidNC cho máy dùng driver StepStick và máy laser. FluidNC còn phát triển: khi cài phiên bản mới, xem lại tài liệu cấu hình của phiên bản đó.

6. Các lệnh hay dùng

Bảng lệnh FluidNC: dollar SS xem thông báo khởi động, dollar CD in cấu hình đang chạy, dollar Config Filename chọn file, dollar Sta SSID và Password để nối Wi-Fi nhà, dollar WiFi Mode, dollar Bye khởi động lại, dollar H, dollar X, dấu hỏi giống GRBL
Các lệnh FluidNC hay dùng (hình tự vẽ).
  • Gõ lệnh trong Serial Monitor (115200 baud) hoặc ô lệnh của giao diện web.
  • Nối vào Wi-Fi nhà: gửi $Sta/SSID=TEN_WIFI, $Sta/Password=MAT_KHAU_WIFI (thay bằng tên và mật khẩu Wi-Fi thật), $WiFi/Mode=STA>AP, rồi $Bye. ESP32 sẽ nối Wi-Fi nhà; không nối được thì tự phát lại Wi-Fi FluidNC. Địa chỉ IP mới hiện trong thông báo khởi động ($SS).
  • Các lệnh GRBL quen thuộc như $H (về gốc), $X (mở khóa), ? (trạng thái) vẫn dùng như cũ.

7. Dùng với LaserGRBL, LightBurn

  • Qua USB: chọn cổng COM của ESP32, tốc độ 115200, kiểu thiết bị GRBL. Dùng như một máy GRBL bình thường.
  • Qua Wi-Fi: một số phần mềm kết nối được qua mạng (telnet hoặc WebSocket). Cách khác là tải file G-code lên ESP32 qua giao diện web rồi bấm chạy, không cần máy tính bên cạnh máy.
  • Trong phần mềm, đặt S max = 1000 cho khớp với speed_map.

8. Lỗi thường gặp

Bảng lỗi thường gặp với FluidNC: báo lỗi cấu hình khi khởi động do sai thụt lề hoặc tên khóa, động cơ không giữ trục do sai cực tính EN, trục chạy ngược, báo chạm công tắc liên tục, laser không sáng, không thấy Wi-Fi FluidNC
Lỗi thường gặp và cách xử lý (hình tự vẽ).

Cách tìm lỗi nhanh nhất là mở Serial Monitor 115200 baud, nhấn nút EN trên ESP32 để khởi động lại và đọc các dòng thông báo: FluidNC báo rõ dòng nào trong file cấu hình bị sai.

9. Xem thêm


Tin tức liên quan

Hướng dẫn ESP32 điều khiển module relay 4 kênh an toàn
Hướng dẫn ESP32 điều khiển module relay 4 kênh an toàn

Hướng dẫn ESP32 điều khiển relay 4 kênh: chọn GPIO an toàn, cấp nguồn 5 V phù hợp, xác định active LOW và lưu ý khi đóng cắt tải.

Tự làm tay điều khiển flycam bằng ESP32 và ESP-NOW, bộ thu xuất PPM, SBUS cho mạch điều khiển bay
Tự làm tay điều khiển flycam bằng ESP32 và ESP-NOW, bộ thu xuất PPM, SBUS cho mạch điều khiển bay

Tự làm tay điều khiển flycam bằng ESP32: hai joystick, hai công tắc, gửi 8 kênh qua ESP-NOW; bộ thu ESP32 xuất PPM bằng RMT và SBUS bằng UART, có failsafe, dùng với Betaflight.

Hướng dẫn dùng mạch tạo trễ NE555 có relay: đấu dây và chỉnh thời gian trễ
Hướng dẫn dùng mạch tạo trễ NE555 có relay: đấu dây và chỉnh thời gian trễ

Hướng dẫn dùng mạch tạo trễ NE555 có relay bản 5 V và 12 V: nguyên lý tạo trễ, ý nghĩa các cọc VCC, GND, COM, CK, CB, cách chỉnh thời gian trễ, sơ đồ đấu dây và xử lý lỗi thường gặp.

Hướng dẫn ESP32 làm web server điều khiển relay 4 kênh qua WiFi
Hướng dẫn ESP32 làm web server điều khiển relay 4 kênh qua WiFi

Hướng dẫn dùng ESP32 DevKit V1 làm web server trong mạng WiFi nội bộ, mở trang trên điện thoại để bật, tắt module relay 4 kênh; có sơ đồ nối dây, code Arduino IDE và lưu ý an toàn.

Hướng dẫn giao tiếp I2C trên ESP32: quét địa chỉ, đổi chân SDA/SCL và nối nhiều thiết bị
Hướng dẫn giao tiếp I2C trên ESP32: quét địa chỉ, đổi chân SDA/SCL và nối nhiều thiết bị

Hướng dẫn dùng bus I2C trên ESP32 với Arduino IDE: quét địa chỉ thiết bị, đổi chân SDA và SCL, nối màn hình OLED và ADS1115 chung một bus, xử lý khi hai thiết bị trùng địa chỉ.

Hướng dẫn dùng ngắt GPIO trên ESP32: đọc nút nhấn, chống dội và đếm xung
Hướng dẫn dùng ngắt GPIO trên ESP32: đọc nút nhấn, chống dội và đếm xung

Hướng dẫn dùng ngắt GPIO trên ESP32 với Arduino IDE: attachInterrupt, các kiểu kích ngắt, chống dội nút nhấn, đếm xung đo tần số và quy tắc viết hàm ngắt an toàn.

Hướng dẫn lưu dữ liệu vào bộ nhớ flash của ESP32 bằng thư viện Preferences
Hướng dẫn lưu dữ liệu vào bộ nhớ flash của ESP32 bằng thư viện Preferences

Hướng dẫn dùng thư viện Preferences trên ESP32 với Arduino IDE để lưu số đếm, trạng thái relay và thông số cài đặt vào bộ nhớ flash, không mất khi tắt nguồn.

Hướng dẫn dùng PWM trên ESP32: điều chỉnh độ sáng LED bằng analogWrite và LEDC
Hướng dẫn dùng PWM trên ESP32: điều chỉnh độ sáng LED bằng analogWrite và LEDC

Hướng dẫn tạo PWM trên ESP32 bằng Arduino IDE: analogWrite, ledcAttach và ledcWrite của gói esp32 3.x, chỉnh độ sáng LED bằng biến trở, chọn tần số và độ phân giải.


Bình luận
Đã thêm vào giỏ hàng