Skip to content
MCU Atlas
ESP32ESP32-S3

ESP32 USB-to-AirPrint: give an old USB printer AirPrint and scanning with an ESP32-S3

Firmware that plugs an ESP32-S3 dev board into a USB-only Canon PIXMA so iPhones, Macs and Android phones can print to it, and any browser can scan from it, over Wi-Fi.

Difficulty:Intermediate

What it is

An ESP32-S3 that sits on an old USB printer's port and makes it show up as an AirPrint printer and network scanner on your Wi-Fi.

What you need

How hard

Intermediate. Build and flash with PlatformIO after putting your Wi-Fi details in .env; you may need to bridge a solder jumper. Canon PIXMA printers only, and only the MG2550S is validated.

Key Facts

  • Print from iPhone, iPad, Mac (AirPrint), Android (Mopria) and Linux; scan from a browser, Mac Image Capture or the board button
  • Canon PIXMA only for now: MG2550S validated on real hardware, about 16 more series expected to work but untested
  • One ESP32-S3 dev board with two USB-C ports; build targets ESP32-S3-DevKitC-1 N16R8 (16 MB flash, 8 MB PSRAM)
  • You may need to bridge the board's USB-OTG solder jumper so the printer sees 5 V
  • Optional SSD1315 128x64 I2C OLED status screen and extra buttons
  • ESP-IDF firmware built and flashed with PlatformIO; Wi-Fi details go in a local .env file
  • License: MIT

About This Project

ESP32 USB-to-AirPrint, by Xuan-Son Nguyen (ngxson), turns a USB-only printer into a wireless printer and scanner with one ESP32-S3 dev board. The board plugs into the printer's USB port, joins your Wi-Fi and presents the printer as an AirPrint printer for iPhone, iPad and Mac, a Mopria printer for Android, and an IPP printer for Linux, with no drivers or apps. Scanning works from any browser, from Image Capture or Preview on a Mac (eSCL), or with the BOOT button on the board (press to scan, press twice for a test page, hold 2 s to cancel). The firmware also serves a web app where you can print PDFs and pictures, scan, keep files in the browser and combine pages (rotate, crop, ID-card copies) into a PDF. The catch is printer support: right now the drivers are Canon PIXMA only. The MG2550S is the one model validated on a real printer; about 16 more Canon series (MG2400, MG2500, MG2900, MG3000, E460/E470, E3100, TS3100, MP230, MP250-MP280, MP490-MP495, MX340-MX420, plus iP2700, iP2800 and P200 without scanners) are listed as expected to work but untested, and the author is asking printer owners to contribute and test drivers. Hardware is an ESP32-S3 dev board with two USB-C ports; the build targets the ESP32-S3-DevKitC-1 with the N16R8 module (16 MB flash, 8 MB PSRAM). Plug the board's COM port into your computer, build once with PlatformIO to create a .env file, put your Wi-Fi name and password, printer name and hostname in it, and flash with pio run -t upload. Then plug the printer into the port labelled USB; you may need to bridge the board's USB-OTG solder jumper so it supplies 5 V, because the printer uses that line to sense the cable. MODE=debug in .env allows later updates over Wi-Fi. An SSD1315 128x64 I2C OLED (SCL GPIO41, SDA GPIO42) and extra buttons on GPIO4 and GPIO5 are optional, and the author shows a 3D-printed case. The protocols follow Gutenprint and SANE's pixma backend. MIT licensed.

Source & Attribution

Source: GitHub
License: MIT
Last verified: 10/27/2026
ESP32 USB-to-AirPrint: give an old USB printer AirPrint and scanning with an ESP32-S3

Illustration

How to Build It
Flash the firmware onto a dual-USB-C ESP32-S3 board with your Wi-Fi details, plug it into a supported Canon PIXMA's USB port, and print or scan from your phone.

Parts Needed

  • ESP32-S3 dev board with two USB-C ports (ESP32-S3-DevKitC-1 N16R8)
  • USB-C data cable
  • Optional: SSD1315 128x64 I2C OLED

Steps

  1. 1

    Check your printer

    Find your model in the repo's supported list. Only Canon PIXMA series are supported, and only the MG2550S has been tested on a real printer.

  2. 2

    Connect the board

    Plug the ESP32-S3's COM port (not the one labelled USB) into your computer.

  3. 3

    Set Wi-Fi details

    Build once with PlatformIO (pio run) to create .env, then fill in WIFI_SSID, WIFI_PASSWORD, PRINTER_NAME, HOSTNAME and MODE. The file stays on your machine.

  4. 4

    Flash

    Run pio run -t upload. MODE=debug lets you update the board over Wi-Fi later.

  5. 5

    Plug in the printer

    Connect the printer's USB cable to the board's port labelled USB. If the printer doesn't notice it, bridge the board's USB-OTG solder jumper so it supplies 5 V.

  6. 6

    Print and scan

    Pick the printer from Share, then Print on an iPhone, add it in Printers & Scanners on a Mac, or open http://<hostname>.local/ for the web app and scanning.

Bill of Materials

Parts list

3 parts · 3 linked

Heads up: some Buy links are affiliate links. If you buy through one, MCU Atlas may earn a small commission at no extra cost to you. It never changes which parts we list. How this works

Not included: A supported USB Canon PIXMA printer and its USB cable, A computer with PlatformIO for the first flash, Optional 3D-printed case and push buttons

Download CSV

Related Projects

Watchy: open-source ESP32 e-ink smartwatch
Illustration
ESP32
An open-source smartwatch with a 1.54in e-paper screen and ESP32, hackable watch faces in Arduino.
Beginner·Code
2 parts listed
Low-power ESP32 e-paper weather display (7.5in)
Illustration
ESP32
A wall-mounted 7.5in e-paper weather display on an ESP32 that runs for months on one battery charge.
Intermediate·Code
5 parts listed
OpenEPaperLink: reuse e-ink shelf labels with an ESP32 access point
Illustration
ESP32ESP32-S3
Turns cheap second-hand electronic shelf labels into a Wi-Fi-managed e-ink display fleet via an ESP32 access point.
Advanced·Code
6 parts listed