Print wirelessly from Cura, PrusaControl, or Slic3r PE to your 3D printer connected to an ESP8266 module.
UNDER DEVELOPMENT. See Issues. Pull requests welcome!
Printer SD card slot | OctoPrint | WirelessPrint |
---|---|---|
Instant | Booting can take minutes | Booting takes seconds |
Need to plug SD card into computer and then into printer for each print | Ethernet and wireless | Wireless |
No cost (comes with many printers) | High cost (Raspberry Pi, Power supply, SD card) | Inexpensive |
No clutter on desktop | Clutter on desktop (Raspberry Pi, cable) | No clutter (can be placed inside printer electronics box) |
No set-up needed | Set-up needed (full Linux operating system, hundreds of megabytes) | Only quick wireless network setup needed |
No maintenance needed (other than replacing broken SD card slots) | High maintenance needed (OS updates) | Low maintenance needed (Firmware updates for bugfixes and new features) |
No extra power consumption | 2.5 W power consumption | Under 1 W power consumption |
No webcam | Webcam can be attached | ESP32 module with built-in camera (may be supported in the future) |
No notifications | Notifications, e.g., "print ready" | Notifications possible (send pull requests) |
Cumbersome for print farms (sneakernet) | Suitable for print farms (can be managed centrally) | Suitable for print farms (can be managed centrally, OctoPrint compatible protocol subset) |
WEMOS D1 mini modules can be used. Also, ESP32 modules can be used (e.g., TTGO-T1 with built-in microSD card slot).
The WEMOS D1 mini module is connected with your 3D printer via the serial connection and to a SD card (acting as a cache during printing). You need to connect
mkfs.vfat
on Linux seems to work for me. If no SD card is connected, then the internal SPIFFS memory (3 MB) is used. For TTGO-T1, the built-in microSD card slot is used if a card is inserted.The esp8266/Arduino sketch ESP8266WirelessPrintAsync.ino
is uploaded to a ESP8266 module. See .travis.yml
for how this is compiled on Travis CI.
Pre-built binaries are available for download on GitHub Releases.
The following build procedure works on Linux:
# Get PlatformIO (the toolchain we use for compiling)
git clone https://github.com/probonopd/WirelessPrinting
cd WirelessPrinting
wget -c https://downloads.egenix.com/python/install-pyrun
bash install-pyrun --python=3.5 pyrun/
pyrun/bin/pip3 install -U platformio==4.2.1
# Build the firmware (it downloads the needed libraries)
pyrun/bin/platformio run
find . -name "*firmware.bin"
Can be flashed via USB or (subsequently) over the air. You can use PlatformIO to upload to either OTA and flash via any known flash method. See e.g., https://docs.platformio.org/en/latest/platforms/espressif8266.html#over-the-air-ota-update, https://docs.platformio.org/en/latest/platforms/espressif32.html#packages.
If you are not using PlatformIO (e.g., because you are just interested in uploading our pre-built firmware as quickly as possible) you may use the following instructions.
# USB
sudo chmod a+rwx /dev/ttyUSB0 ; /tmp/.mount_*/usr/bin/hardware/esp8266/esp8266/tools/esptool/esptool -vv -cd nodemcu -cb 921600 -cp /dev/ttyUSB0 -ca 0x00000 -cf ESP8266WirelessPrint*.bin
# Wireless
wget -c "https://raw.githubusercontent.com/esp8266/Arduino/master/tools/espota.py"
python espota.py -i 192.168.0.27 -p 8266 --auth= -f ESP8266WirelessPrint*.bin
# USB
sudo apt install python-serial
sudo chmod a+rwx /dev/ttyUSB0 ; python $HOME/.arduino15/packages/esp32/tools/esptool_py/2.6.0/esptool.py --chip esp32 --port /dev/ttyUSB0 write_flash 0x10000 ESP8266WirelessPrintAsync_esp32_*.bin
# Wireless
python $HOME/.arduino15/packages/esp32/hardware/esp32/1.0.1/tools/espota.py -i 192.168.0.16 -p 3232 --auth= -f ESP8266WirelessPrintAsync_esp32_*.bin
After the initial flashing, you can upload new versions of this firmware from the web interface without any further tools.
Following the instructions in https://github.com/alanswx/ESPAsyncWiFiManager/ :
The first time the sketch is uploaded the ESP will enter in Access Point mode, so you have to open the wifi manager of your system and connect to wifi "AutoConnectAP", then open your browser and type http://192.168.4.1/, there you will see a menu, select "Configure WiFi", press scan and wait until the device scans available networks and select yours, enter the the password and click save. It will try to connect to your network, if it's successfull you will see a message on your 3D printer (or in a serial monitor if conected to your computer) with the new device IP, write down this IP if you wish to connect via browser.
Cura 2.6 and later come with a bundled plugin which discovers OctoPrint instances using Zeroconf and enables printing directly to them. In newer versions of Cura, you need to install the Cura OctoPrint Plugin from the "Toolbox" menu. To use it,
Slic3r PE 1.36.0 discovers OctoPrint instances using Zeroconf and enables printing directly to them. No further software needs to be installed. To use it,
Later PrusaSlicer versions may require you to enter the IP address manually (bug?).
To print, just open http://the-ip-address/ and upload a G-Code file using the form:
Ycan also print from the command line using curl:
curl -F "file=@/path/to/some.gcode" -F "print=true" http://the-ip-address/print