diff --git a/README.md b/README.md index b970a72..d641b65 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,9 @@ To make this project work, you will need : ## Installation -Start by following the guide [here](https://learn.adafruit.com/networked-thermal-printer-using-cups-and-raspberry-pi) to install the CUPS software needed to print images. You can also get some information from [here](https://learn.adafruit.com/mini-thermal-receipt-printer) and [here](https://learn.adafruit.com/instant-camera-using-raspberry-pi-and-thermal-printer) if you're stuck. +Start by following the guide [here](https://learn.adafruit.com/networked-thermal-printer-using-cups-and-raspberry-pi) to install the CUPS software needed to print images. If you want, you can install it via the command line, [following this guide](https://help.ubuntu.com/lts/serverguide/cups.html). + +You can also get some information from [here](https://learn.adafruit.com/mini-thermal-receipt-printer) and [here](https://learn.adafruit.com/instant-camera-using-raspberry-pi-and-thermal-printer) if you're stuck. Then, setup the project : ``` @@ -43,6 +45,15 @@ If you liked this project, feel free to support my work ! [https://n07070.xyz/post/about-me/about-me/](Donations welcome :-]) +## Links + +- [A blog post about some CUPS configuration](http://scruss.com/blog/2015/07/12/thermal-printer-driver-for-cups-linux-and-raspberry-pi-zj-58/) +- [Github repo with CUPS drivers for the Adafruit Thermal Printer ( zj-58 )](https://github.com/klirichek/zj-58) +- [A link to buy one in Europe](https://rlx.sk/sk/various-boards/1829-mini-thermal-receipt-printer-adafruit-597.html) +- [Another link to buy one, direct from factory](https://www.cashinotech.com/csn-a2-58mm-mini-panel-thermal-receipt-printer_p11.html) +- + + ## Licence ``` diff --git a/littleprynter.py b/littleprynter.py index efd176a..35646aa 100644 --- a/littleprynter.py +++ b/littleprynter.py @@ -3,12 +3,37 @@ import os, random, sys, json from datetime import datetime from subprocess import call -from Adafruit_Thermal import * + +import serial from flask import Flask, render_template, jsonify, make_response, request, redirect, url_for, abort, session, flash from flask_limiter import Limiter from pprint import pprint from flask_limiter.util import get_remote_address +# Update to using the new Python 3 lib +import board +import busio + +import adafruit_thermal_printer + +ThermalPrinter = adafruit_thermal_printer.get_printer_class(2.69) + +RX = board.RX +TX = board.TX + +uart = serial.Serial("/dev/ttyAMA0", baudrate=19200, timeout=3000) +printer = ThermalPrinter(uart, auto_warm_up=False) + +# Initialize the printer. Note this will take a few seconds for the printer +# to warm up and be ready to accept commands (hence calling it explicitly vs. +# automatically in the initializer with the default auto_warm_up=True). +printer.warm_up() + +if printer.has_paper(): + print('Printer has paper!') +else: + print('Printer might be out of paper, or RX is disconnected!') + app = Flask(__name__) @@ -77,38 +102,31 @@ def logout(): flash('Tu est déconnecté', 'info') return redirect(url_for('login')) -@app.route('/print/image') -@limiter.limit("5 per minute", error_message=error_handler_limiter) -def print_image(): - if session.get('logged_in'): - img = random.choice(os.listdir("static/images/")) #change dir name to whatever - # call(["lp", "-o fit-to-page", "static/images/" + img]) - printer = Adafruit_Thermal(SERIAL_PORT, BAUDRATE, timeout=5) - printer.begin() - printer.feed(1) - printer.printImage("static/images/" + img, True) - printer.feed(2) - return redirect(url_for('display_index_page')) - else: - return redirect(url_for('login')) +# @app.route('/print/image') +# @limiter.limit("5 per minute", error_message=error_handler_limiter) +# def print_image(): +# if session.get('logged_in'): +# img = random.choice(os.listdir("static/images/")) #change dir name to whatever +# # call(["lp", "-o fit-to-page", "static/images/" + img]) +# printer = Adafruit_Thermal(SERIAL_PORT, BAUDRATE, timeout=5) +# printer.begin() +# printer.feed(1) +# printer.printImage("static/images/" + img, True) +# printer.feed(2) +# return redirect(url_for('display_index_page')) +# else: +# return redirect(url_for('login')) @app.route('/print/text', methods=['POST']) @limiter.limit("3: per minute", error_message=error_handler_limiter) def print_text(): if session.get('logged_in'): if len(request.form['message']) < 200: - printer = Adafruit_Thermal(SERIAL_PORT, BAUDRATE, timeout=5) - printer.begin() - printer.justify('L') - printer.println((request.form['message']).encode()) - printer.setSize('S') - printer.println(">> " + datetime.now().strftime("%Y-%m-%d %H:%M:%S") + " " + session.get('user')) - printer.justify('C') - printer.println("------------------------------") + printer.set_defaults() + printer.print((request.form['message'])) + printer.print("From" + session['user']) printer.feed(2) - printer.sleep() # Tell printer to sleep - printer.wake() # Call wake() before printing again, even if reset - printer.setDefault() # Restore printer to defaults + return redirect(url_for('display_index_page')) else: flash('Le text est trop long, 200 caractères au maximum stp !')