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连上了。
源代码获取
由于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
修改环境参数来构建ESP32版Marlin
1.在platformio.ini,修改default_envs变成esp32
1 | [platformio] |
2.修改 Configuration.h, 把MOTHERBOARD改成ESP32
1 |
|
3.把LCD相关的地方注释,位置在Configuration.h
1 | // #define REPRAP_DISCOUNT_SMART_CONTROLLER |
4.把Configuration_adv.h中TX_BUFFER_SIZE设成64
1 |
5.把Configuration_adv.h中的ESP3D_WIFISUPPORT去除注释,WIFI_SUPPORT保持注释,然后填入要接入的wifi SSID和密码
1 | //#define WIFISUPPORT |
6.为了在未接打印机传感器时启动编译,我先把Configuration.h的extruder变成0,TEMP_SENSOR_BED变成0,如果接线了就应该变会相应设置
1 |
和
1 |
7.为了在未接打印机传感器时启动编译,我把Marlin的SD卡功能屏蔽,要把Configuration.h的SDSUPPORT变成0。
1 |
编译和上传
PlatformIO底部提供了快捷的Build和Upload快捷键,如果只是编译代码是问题不大的,但要Upload的话,我建议使用Project Tasks的Upload and Monitor,可以通过点击左侧外星人头像进入,因为上传完通常需要马上检查输出,才直到是否正常连上wifi。
启动ESP32和上传ESP3D的网页界面
编译完成后,如果wifi也正常连上了,可以在路由器找到esp32的IP,在浏览器直接打开。
等网页时提示index.html.gz缺失,需要从ESP3D下载再上传。
下载地址:
https://github.com/luc-github/ESP3D-WEBUI/raw/660d09fdde2a72b52db191d6adea2e29636a1fcd/index.html.gz
然后就可以打开ESP3D的界面
ESP3D支持打印机控制,Gcode打印,Wifi相关设置,也支持AP Mode的设置,麻雀虽小,五脏俱全。
ESP32 Pin连线
关于ESP32 Pin的接线,可以在Marlin\src\pins\esp32\pins_ESP32.h文件中找到定义,但发现Pin部分大于100的Pin,应该是不正确的。因为ESP32 pin口只有42个,再看看文件最后修改日期是半年前,那应该不准确了。于是,我参考主板MRR ESPA,进行重新定义,列出来给大家参考。