0%

基于ESP32设计的3D打印机主板安装Marlin固件

ESP32是一块性价比极高的开发芯片,一块板子里面集成了Wifi,蓝牙等无线连接,而且价格才三四十元左右就可以买到,性价比极高。最近Marlin 2.0.x发布,Marlin宣布开始支持ESP32系列的3D打印机主板,抱着一颗好奇的心,试验一下用ESP32来控制一下我的3D打印机。

开发工具

我推荐使用VS Code + PlatformIO IDE作为开发和编译的工具,虽然Arduino也能进行编译和上传。VS Code更友好的界面和Platform IO的各种构建任务,令我瞬间爱上这款开发工具。以下的开发环境都会根据VS Code + PlatformIO IDE介绍。

(VS Code和PlatformIO的安装我会在另一篇文章介绍,本文专注Marlin编译)

ESP32串口驱动程序

要上传代码的话,要先安装ESP32的驱动程序

这个要根据自己设计的电路板或者开发板安装,常使用的有cp2102和ch340

https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers

http://www.wch.cn/products/CH340.html

根据自己的系统类型去下载对应的驱动安装即可

检查以下PlatformIO的PIO Home->Devices->Refresh一下就能看到ESP32通过USB连上了。

image-1580129320273.png

源代码获取

由于Marlin的ESP 32支持还算是在开发阶段,因为在最新的Marlin代码中,即使你编译都完了,但是用不了最新但ESP3D Web界面的。因此,Git Clone完Marlin代码时要把代码改成 bugfix-2.0.x分支。

1
git clone -b bugfix-2.0.x https://github.com/MarlinFirmware/Marlin.git

如果将来bugfix都改好来,相信这些代码会汇入主干。
打开VS Code后,要检查左下角的branch是否已经指向bugfix-2.0.x
file

修改环境参数来构建ESP32版Marlin

1.在platformio.ini,修改default_envs变成esp32

1
2
3
4
[platformio]
src_dir = Marlin
boards_dir = buildroot/share/PlatformIO/boards
default_envs = esp32

2.修改 Configuration.h, 把MOTHERBOARD改成ESP32

1
2
3
4
#ifndef MOTHERBOARD
// #define MOTHERBOARD BOARD_MKS_BASE
#define MOTHERBOARD BOARD_ESPRESSIF_ESP32
#endif

3.把LCD相关的地方注释,位置在Configuration.h

1
// #define REPRAP_DISCOUNT_SMART_CONTROLLER

4.把Configuration_adv.h中TX_BUFFER_SIZE设成64

1
#define TX_BUFFER_SIZE 64

5.把Configuration_adv.h中的ESP3D_WIFISUPPORT去除注释,WIFI_SUPPORT保持注释,然后填入要接入的wifi SSID和密码

1
2
3
4
5
6
7
8
9
//#define WIFISUPPORT
#define ESP3D_WIFISUPPORT
#if EITHER(WIFISUPPORT, ESP3D_WIFISUPPORT)
#define WIFI_SSID "WIFI_SSID"
#define WIFI_PWD "PASSWORD"
#define WEBSUPPORT // Start a webserver (which may include auto-discovery)
#define OTASUPPORT // Support over-the-air firmware updates
#define WIFI_CUSTOM_COMMAND // Accept feature config commands (e.g., WiFi ESP3D) from the host
#endif

6.为了在未接打印机传感器时启动编译,我先把Configuration.h的extruder变成0,TEMP_SENSOR_BED变成0,如果接线了就应该变会相应设置

1
#define EXTRUDERS 0

1
#define TEMP_SENSOR_BED 0

7.为了在未接打印机传感器时启动编译,我把Marlin的SD卡功能屏蔽,要把Configuration.h的SDSUPPORT变成0。

1
#define SDSUPPORT

编译和上传

PlatformIO底部提供了快捷的Build和Upload快捷键,如果只是编译代码是问题不大的,但要Upload的话,我建议使用Project Tasks的Upload and Monitor,可以通过点击左侧外星人头像进入,因为上传完通常需要马上检查输出,才直到是否正常连上wifi。
file
file

启动ESP32和上传ESP3D的网页界面

编译完成后,如果wifi也正常连上了,可以在路由器找到esp32的IP,在浏览器直接打开。
file
等网页时提示index.html.gz缺失,需要从ESP3D下载再上传。
下载地址:

https://github.com/luc-github/ESP3D-WEBUI/raw/660d09fdde2a72b52db191d6adea2e29636a1fcd/index.html.gz

然后就可以打开ESP3D的界面

file
ESP3D支持打印机控制,Gcode打印,Wifi相关设置,也支持AP Mode的设置,麻雀虽小,五脏俱全。

ESP32 Pin连线

关于ESP32 Pin的接线,可以在Marlin\src\pins\esp32\pins_ESP32.h文件中找到定义,但发现Pin部分大于100的Pin,应该是不正确的。因为ESP32 pin口只有42个,再看看文件最后修改日期是半年前,那应该不准确了。于是,我参考主板MRR ESPA,进行重新定义,列出来给大家参考。
file

转载自https://makeronsite.com/install_marlin_on_esp32.html