autokanban/WIRING.md
2025-11-13 14:01:20 +01:00

6.2 KiB

Thermal Printer Wiring Guide for Raspberry Pi 4

Connection Diagram

Thermal Printer (58mm)                    Raspberry Pi 4
┌──────────────────┐                      ┌─────────────────────┐
│                  │                      │                     │
│  Red (VCC/5V)    ├─────────────────────►│ Pin 4 (5V)          │ ⚠️ May need external PSU
│                  │                      │                     │
│  Black (GND)     ├─────────────────────►│ Pin 6 (GND)         │
│                  │                      │                     │
│  Green (RX)      ├─────────────────────►│ Pin 8 (GPIO14/TXD)  │ Pi sends data
│                  │                      │                     │
│  Yellow (TX)     ├─────────────────────►│ Pin 10 (GPIO15/RXD) │ Pi receives (optional)
│                  │                      │                     │
│  Yellow/Green    ├─────────────────────►│ Pin 6 (GND)         │ Shield/extra ground
│                  │                      │                     │
└──────────────────┘                      └─────────────────────┘

Pin Layout (GPIO Header View)

Raspberry Pi 4 GPIO Header (looking down at the board)
┌─────────────────────────────────────────┐
│  3V3  [ 1] [ 2]  5V   ← Connect Red here (or use external PSU)
│ GPIO2 [ 3] [ 4]  5V
│ GPIO3 [ 5] [ 6]  GND  ← Connect Black + Yellow/Green here
│ GPIO4 [ 7] [ 8]  GPIO14 (TXD) ← Connect Green here
│   GND [ 9] [10]  GPIO15 (RXD) ← Connect Yellow here
│GPIO17 [11] [12]  GPIO18
│GPIO27 [13] [14]  GND
│GPIO22 [15] [16]  GPIO23
│  3V3  [17] [18]  GPIO24
│GPIO10 [19] [20]  GND
│ GPIO9 [21] [22]  GPIO25
│GPIO11 [23] [24]  GPIO8
│   GND [25] [26]  GPIO7
│   ... (pins 27-40 not shown)
└─────────────────────────────────────────┘

Quick Connection Summary

Printer Wire Pi Pin Number Pi Pin Name Function
Red 4 5V Power Power supply (⚠️ high current)
Black 6 Ground Common ground
Green 8 GPIO 14 (TXD) Serial transmit (Pi → Printer)
Yellow 10 GPIO 15 (RXD) Serial receive (Printer → Pi, optional)
Yellow/Green 6 Ground Shield/secondary ground

Testing Steps

1. Enable Serial Port on Raspberry Pi

# Open configuration
sudo raspi-config

# Navigate to:
# 3 Interface Options → I6 Serial Port
# "Login shell over serial?" → No
# "Serial port hardware enabled?" → Yes
# Finish and reboot

sudo reboot

2. Verify Serial Device

# Check serial device
ls -l /dev/serial0
ls -l /dev/ttyAMA0

# Both should exist and point to UART

3. Install Test Tools

sudo apt update
sudo apt install python3 python3-pip python3-venv

# Create test environment
python3 -m venv test_env
source test_env/bin/activate
pip install python-escpos pyserial

4. Test Print Script

Create test_printer.py:

#!/usr/bin/env python3
from escpos.printer import Serial

# Try different device paths if needed
# Common: /dev/serial0, /dev/ttyAMA0, /dev/ttyS0
try:
    printer = Serial(
        devfile='/dev/serial0',  # or /dev/ttyAMA0
        baudrate=19200,
        timeout=1
    )
    
    print("Printer initialized successfully!")
    printer.text("Hello from Raspberry Pi!\n")
    printer.text("AutoKanban Test Print\n")
    printer.text("=" * 32 + "\n")
    printer.cut()
    print("Print sent successfully!")
    
except Exception as e:
    print(f"Error: {e}")
    print("\nTroubleshooting:")
    print("1. Check wiring connections")
    print("2. Verify serial port is enabled: sudo raspi-config")
    print("3. Check user is in dialout group: groups")
    print("4. Try different baudrates: 9600, 19200, 115200")
    print("5. List available devices: ls -l /dev/tty*")

5. Run Test

# Make sure user is in dialout group
sudo usermod -a -G dialout $USER
# Log out and back in, or:
newgrp dialout

# Run test
python3 test_printer.py

⚠️ Power Considerations

Important: Thermal printers can draw 1-2A during printing. The Pi's 5V pins can provide limited current.

If the printer doesn't work or the Pi reboots during printing:

  1. Use an external 5V power supply (2A or higher):

    External 5V PSU
    ┌────────────┐
    │  5V   GND  │
    │  │     │   │
    └──┼─────┼───┘
       │     │
       │     └──────────┬─► Pi Pin 6 (GND)
       │                └─► Printer Black wire
       │
       └────────────────────► Printer Red wire
    
  2. Common ground is critical - connect:

    • External PSU GND → Printer Black
    • External PSU GND → Pi GND (Pin 6)
    • This ensures both devices share the same ground reference

Troubleshooting

No output from printer

  • Check all connections are secure
  • Verify serial port is enabled: sudo raspi-config
  • Check device path: ls -l /dev/serial*
  • Try different baudrates: 9600, 19200, 115200
  • Check user permissions: groups (should include dialout)

Printer prints garbage

  • Wrong baudrate - try 9600 or 19200
  • Wrong wiring - swap TX/RX if needed

Pi reboots when printing

  • Power supply insufficient - use external 5V PSU for printer

Permission denied

sudo usermod -a -G dialout $USER
# Log out and back in

Next Steps

Once the test print works:

  1. Note the working device path (/dev/serial0 or /dev/ttyAMA0)
  2. Note the working baudrate (likely 19200)
  3. Update these in your AutoKanban app/main.py
  4. Set DEBUG_PRINT_TO_IMAGE = False for real printing