Outils pour utilisateurs

Outils du site


jules_verne

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
jules_verne [2016/02/18 22:38]
guiaum créée
jules_verne [2016/02/18 23:13]
guiaum
Ligne 9: Ligne 9:
 /​usr/​bin/​python /​home/​pi/​git/​py-thermal-printer/​codex.py /​usr/​bin/​python /​home/​pi/​git/​py-thermal-printer/​codex.py
  
--> le script python:+**-> le script python:**
  
--> dans le clavier en kapla, un arduino Leonardo:+#​!/​usr/​bin/​env python  
 +#​coding=utf-8 
 + 
 +import serial, struct, time 
 + 
 +# to read key on unix 
 +import os 
 +import sys 
 +import termios 
 +import tty 
 + 
 +# to print, ... ha ha ha 
 +import Image, ImageDraw 
 + 
 +import os.path 
 + 
 +#​===========================================================#​ 
 +# RASPBERRY PI (tested with Raspbian Jan 2012): 
 +# - Ensure that ttyAMA0 is not used for serial console access: 
 +# edit /​boot/​cmdline.txt (remove all name-value pairs containing  
 +# ttyAMA0) and comment out last line in /​etc/​inittab. 
 +# - Fix user permissions with "sudo usermod -a -G dialout pi" 
 +# - Reboot 
 +# - Ensure that the SERIALPORT setting is correct below 
 +
 +# BEAGLE BONE:  
 +# Mux settings (Ängström 2012.05, also work on ubuntu 12.04): 
 +# echo 1 > /​sys/​kernel/​debug/​omap_mux/​spi0_sclk 
 +# echo 1 > /​sys/​kernel/​debug/​omap_mux/​spi0_d0  
 +#​===========================================================#​ 
 + 
 +print "​Première ligne du script"​ 
 +     
 +class ThermalPrinter(object):​ 
 +    """​  
 +         
 +        Thermal printing library that controls the "micro panel thermal printer"​ sold in 
 +        shops like Adafruit and Sparkfun (e.g. http://​www.adafruit.com/​products/​597).  
 +        Mostly ported from Ladyada'​s Arduino library  
 +        (https://​github.com/​adafruit/​Adafruit-Thermal-Printer-Library) to run on 
 +        BeagleBone and Raspberry Pi. 
 + 
 +        Currently handles printing image data and text, but the rest of the 
 +        built-in functionality like underlining and barcodes are trivial 
 +        to port to Python when needed. 
 + 
 +        If on BeagleBone or similar device, remember to set the mux settings 
 +        or change the UART you are using. See the beginning of this file for 
 +        default setup. 
 + 
 +        Thanks to Matt Richardson for the initial pointers on controlling the 
 +        device via Python. 
 + 
 +        @author: Lauri Kainulainen  
 + 
 +    """​ 
 + 
 +    # default serial port for the Beagle Bone 
 +    #SERIALPORT = '/​dev/​ttyO2'​ 
 +    # this might work better on a Raspberry Pi 
 +    SERIALPORT = '/​dev/​ttyAMA0'​ 
 + 
 +    BAUDRATE = 19200 
 +    TIMEOUT = 10 
 + 
 +    # pixels with more color value (average for multiple channels) are counted as white 
 +    # tweak this if your images appear too black or too white 
 +    black_threshold = 64 
 +    # pixels with less alpha than this are counted as white 
 +    alpha_threshold = 127 
 + 
 +    printer = None 
 + 
 +    _ESC = chr(27) 
 + 
 +    # These values (including printDensity and printBreaktime) are taken from  
 +    # lazyatom'​s Adafruit-Thermal-Library branch and seem to work nicely with bitmap  
 +    # images. Changes here can cause symptoms like images printing out as random text.  
 +    # Play freely, but remember the working values. 
 +    # https://​github.com/​adafruit/​Adafruit-Thermal-Printer-Library/​blob/​0cc508a9566240e5e5bac0fa28714722875cae69/​Thermal.cpp 
 +     
 +    # Set "max heating dots", "​heating time", "​heating interval"​ 
 +    # n1 = 0-255 Max printing dots, Unit (8dots), Default: 7 (64 dots) 
 +    # n2 = 3-255 Heating time, Unit (10us), Default: 80 (800us) 
 +    # n3 = 0-255 Heating interval, Unit (10us), Default: 2 (20us) 
 +    # The more max heating dots, the more peak current will cost 
 +    # when printing, the faster printing speed. The max heating 
 +    # dots is 8*(n1+1). The more heating time, the more density, 
 +    # but the slower printing speed. If heating time is too short, 
 +    # blank page may occur. The more heating interval, the more 
 +    # clear, but the slower printing speed. 
 +     
 +    def __init__(self,​ heatTime=80,​ heatInterval=2,​ heatingDots=7,​ serialport=SERIALPORT):​ 
 +        print "Init Started"​ 
 + self.printer = serial.Serial(serialport,​ self.BAUDRATE,​ timeout=self.TIMEOUT) 
 +        self.printer.write(self._ESC) # ESC - command 
 +        self.printer.write(chr(64)) # @   - initialize 
 +        self.printer.write(self._ESC) # ESC - command 
 +        self.printer.write(chr(55)) # 7   - print settings 
 +        self.printer.write(chr(heatingDots)) ​ # Heating dots (20=balance of darkness vs no jams) default = 20 
 +        self.printer.write(chr(heatTime)) # heatTime Library default = 255 (max) 
 +        self.printer.write(chr(heatInterval)) # Heat interval (500 uS = slower, but darker) default = 250 
 + 
 +        # Description of print density from page 23 of the manual: 
 +        # DC2 # n Set printing density 
 +        # Decimal: 18 35 n 
 +        # D4..D0 of n is used to set the printing density. Density is 50% + 5% * n(D4-D0) printing density. 
 +        # D7..D5 of n is used to set the printing break time. Break time is n(D7-D5)*250us. 
 +        printDensity = 15 # 120% (? can go higher, text is darker but fuzzy) 
 +        printBreakTime = 15 # 500 uS 
 +        self.printer.write(chr(18)) 
 +        self.printer.write(chr(35)) 
 +        self.printer.write(chr((printDensity << 4) | printBreakTime)) 
 + 
 +    def offline(self):​ 
 +        # Take the printer offline. Print commands sent after this will be 
 +        # ignored until '​online'​ is called. 
 +        self.printer.write(self._ESC) 
 +        self.printer.write(chr(61)) 
 +        self.printer.write(chr(0)) 
 + 
 +    def online(self):​ 
 +        # Take the printer back online. Subsequent print commands will be obeyed. 
 +        self.printer.write(self._ESC) 
 +        self.printer.write(chr(61)) 
 +        self.printer.write(chr(1)) 
 + 
 +    def sleep(self):​ 
 +        # Put the printer into a low-energy state immediately. 
 +        self.sleep_after(1) ​ # Can't be 0, that means '​don'​t sleep'​ 
 + 
 +    def sleep_after(self,​ seconds): 
 +        # Put the printer into a low-energy state after the given number 
 +        # of seconds. 
 +        if seconds: 
 +            time.sleep(seconds) 
 +            self.printer.write(self._ESC) 
 +            self.printer.write(chr(56)) 
 +            self.printer.write(chr(seconds)) 
 +            self.printer.write(chr(seconds >> 8)) 
 + 
 +    def wake(self):​ 
 +        # Wake the printer from a low-energy state. 
 +        self.printer.write(chr(255)) 
 +        time.sleep(0.05) 
 +        self.printer.write(self._ESC) 
 +        self.printer.write(chr(56)) 
 +        self.printer.write(chr(0)) 
 +        self.printer.write(chr(0)) 
 + 
 +    def has_paper(self):​ 
 +        # Check the status of the paper using the printer'​s self reporting 
 +        # ability. SerialTX _must_ be connected! 
 +        self.printer.write(self._ESC) 
 +        self.printer.write(chr(118)) 
 +        self.printer.write(chr(0)) 
 +        status = -1 
 +        if self.printer.inWaiting() > 0: 
 +            ret = self.printer.read() 
 +            if ret: 
 +                status = struct.unpack('​b',​ ret)[0] 
 +        return bool(status & 0b00000100) 
 + 
 +    def reset(self):​ 
 +        self.printer.write(self._ESC) 
 +        self.printer.write(chr(64)) 
 + 
 +    def linefeed(self):​ 
 +        self.printer.write(chr(10)) 
 + 
 +    def justify(self,​ align="​L"​):​ 
 +        pos = 0 
 +        if align == "​L":​ 
 +            pos = 0 
 +        elif align == "​C":​ 
 +            pos = 1 
 +        elif align == "​R":​ 
 +            pos = 2 
 +        self.printer.write(self._ESC) 
 +        self.printer.write(chr(97)) 
 +        self.printer.write(chr(pos)) 
 + 
 +    def bold_off(self):​ 
 +        self.printer.write(self._ESC) 
 +        self.printer.write(chr(69)) 
 +        self.printer.write(chr(0)) 
 + 
 +    def bold_on(self):​ 
 +        self.printer.write(self._ESC) 
 +        self.printer.write(chr(69)) 
 +        self.printer.write(chr(1)) 
 + 
 +    def font_b_off(self):​ 
 +        self.printer.write(self._ESC) 
 +        self.printer.write(chr(33)) 
 +        self.printer.write(chr(0)) 
 + 
 +    def font_b_on(self):​ 
 +        self.printer.write(self._ESC) 
 +        self.printer.write(chr(33)) 
 +        self.printer.write(chr(1)) 
 + 
 +    def underline_off(self):​ 
 +        self.printer.write(self._ESC) 
 +        self.printer.write(chr(45)) 
 +        self.printer.write(chr(0)) 
 + 
 +    def underline_on(self):​ 
 +        self.printer.write(self._ESC) 
 +        self.printer.write(chr(45)) 
 +        self.printer.write(chr(1)) 
 + 
 +    def inverse_off(self):​ 
 +        self.printer.write(chr(29)) 
 +        self.printer.write(chr(66)) 
 +        self.printer.write(chr(0)) 
 + 
 +    def inverse_on(self):​ 
 +        self.printer.write(chr(29)) 
 +        self.printer.write(chr(66)) 
 +        self.printer.write(chr(1)) 
 + 
 +    def upsidedown_off(self):​ 
 +        self.printer.write(self._ESC) 
 +        self.printer.write(chr(123)) 
 +        self.printer.write(chr(0)) 
 + 
 +    def upsidedown_on(self):​ 
 +        self.printer.write(self._ESC) 
 +        self.printer.write(chr(123)) 
 +        self.printer.write(chr(1)) 
 +         
 +    def barcode_chr(self,​ msg): 
 +        self.printer.write(chr(29)) # Leave 
 +        self.printer.write(chr(72)) # Leave 
 +        self.printer.write(msg) ​    # Print barcode # 1:​Abovebarcode 2:Below 3:Both 0:Not printed 
 +         
 +    def barcode_height(self,​ msg): 
 +        self.printer.write(chr(29)) ​ # Leave 
 +        self.printer.write(chr(104)) # Leave 
 +        self.printer.write(msg) ​     # Value 1-255 Default 50 
 +         
 +    def barcode_height(self):​ 
 +        self.printer.write(chr(29)) ​ # Leave 
 +        self.printer.write(chr(119)) # Leave 
 +        self.printer.write(chr(2)) ​  # Value 2,3 Default 2 
 +         
 +    def barcode(self,​ msg): 
 +        """​ Please read http://​www.adafruit.com/​datasheets/​A2-user%20manual.pdf 
 +            for information on how to use barcodes. """​ 
 +        # CODE SYSTEM, NUMBER OF CHARACTERS ​        
 +        # 65=UPC-A ​   11,12    #​71=CODEBAR ​   >1 
 +        # 66=UPC-E ​   11,12    #​72=CODE93 ​   >1 
 +        # 67=EAN13 ​   12,13    #​73=CODE128 ​   >1 
 +        # 68=EAN8 ​   7,8    #​74=CODE11 ​   >1 
 +        # 69=CODE39 ​   >1    #​75=MSI ​       >1 
 +        # 70=I25 ​       >1 EVEN NUMBER ​           
 +        self.printer.write(chr(29)) ​ # LEAVE 
 +        self.printer.write(chr(107)) # LEAVE 
 +        self.printer.write(chr(65)) ​ # USE ABOVE CHART 
 +        self.printer.write(chr(12)) ​ # USE CHART NUMBER OF CHAR  
 +        self.printer.write(msg) 
 +         
 +    def print_text(self,​ msg, chars_per_line=None):​ 
 +        """​ Print some text defined by msg. If chars_per_line is defined,  
 +            inserts newlines after the given amount. Use normal '​\n'​ line breaks for  
 +            empty lines. """​  
 +        if chars_per_line == None: 
 +            self.printer.write(msg) 
 +        else: 
 +            l = list(msg) 
 +            le = len(msg) 
 +            for i in xrange(chars_per_line + 1, le, chars_per_line + 1): 
 +                l.insert(i, '​\n'​) 
 +            self.printer.write(""​.join(l)) 
 +            print ""​.join(l) 
 + 
 +    def print_markup(self,​ markup): 
 +        """​ Print text with markup for styling. 
 + 
 +        Keyword arguments:​ 
 +        markup -- text with a left column of markup as follows: 
 +        first character denotes style (n=normal, b=bold, u=underline,​ i=inverse, f=font B) 
 +        second character denotes justification (l=left, c=centre, r=right) 
 +        third character must be a space, followed by the text of the line. 
 +        """​ 
 +        lines = markup.splitlines(True) 
 +        for l in lines: 
 +            style = l[0] 
 +            justification = l[1].upper() 
 +            text = l[3:] 
 + 
 +            if style == '​b':​ 
 +                self.bold_on() 
 +            elif style == '​u':​ 
 +               ​self.underline_on() 
 +            elif style == '​i':​ 
 +               ​self.inverse_on() 
 +            elif style == '​f':​ 
 +                self.font_b_on() 
 + 
 +            self.justify(justification) 
 +            self.print_text(text) 
 +            if justification != '​L':​ 
 +                self.justify() 
 + 
 +            if style == '​b':​ 
 +                self.bold_off() 
 +            elif style == '​u':​ 
 +               ​self.underline_off() 
 +            elif style == '​i':​ 
 +               ​self.inverse_off() 
 +            elif style == '​f':​ 
 +                self.font_b_off() 
 + 
 +    def convert_pixel_array_to_binary(self,​ pixels, w, h): 
 +        """​ Convert the pixel array into a black and white plain list of 1's and 0's 
 +            width is enforced to 384 and padded with white if needed. """​ 
 +        black_and_white_pixels = [1] * 384 * h 
 +        if w > 384: 
 +            print "​Bitmap width too large: %s. Needs to be under 384" % w 
 +            return False 
 +        elif w < 384: 
 +            print "​Bitmap under 384 (%s), padding the rest with white" % w 
 + 
 +        print "​Bitmap size", w 
 + 
 +        if type(pixels[0]) == int: # single channel 
 +            print " => single channel"​ 
 +            for i, p in enumerate(pixels):​ 
 +                if p < self.black_threshold:​ 
 +                    black_and_white_pixels[i % w + i / w * 384] = 0 
 +                else: 
 +                    black_and_white_pixels[i % w + i / w * 384] = 1 
 +        elif type(pixels[0]) in (list, tuple) and len(pixels[0]) == 3: # RGB 
 +            print " => RGB channel"​ 
 +            for i, p in enumerate(pixels):​ 
 +                if sum(p[0:2]) / 3.0 < self.black_threshold:​ 
 +                    black_and_white_pixels[i % w + i / w * 384] = 0 
 +                else: 
 +                    black_and_white_pixels[i % w + i / w * 384] = 1 
 +        elif type(pixels[0]) in (list, tuple) and len(pixels[0]) == 4: # RGBA 
 +            print " => RGBA channel"​ 
 +            for i, p in enumerate(pixels):​ 
 +                if sum(p[0:2]) / 3.0 < self.black_threshold and p[3] > self.alpha_threshold:​ 
 +                    black_and_white_pixels[i % w + i / w * 384] = 0 
 +                else: 
 +                    black_and_white_pixels[i % w + i / w * 384] = 1 
 +        else: 
 +            print "​Unsupported pixels array type. Please send plain list (single channel, RGB or RGBA)"​ 
 +            print "Type pixels[0]",​ type(pixels[0]),​ "​haz",​ pixels[0] 
 +            return False 
 + 
 +        return black_and_white_pixels 
 + 
 + 
 +    def print_bitmap(self,​ pixels, w, h, output_png=False):​ 
 +        """​ Best to use images that have a pixel width of 384 as this corresponds 
 +            to the printer row width.  
 +             
 +            pixels = a pixel array. RGBA, RGB, or one channel plain list of values (ranging from 0-255). 
 +            w = width of image 
 +            h = height of image 
 +            if "​output_png"​ is set, prints an "​print_bitmap_output.png"​ in the same folder using the same 
 +            thresholds as the actual printing commands. Useful for seeing if there are problems with the  
 +            original image (this requires PIL). 
 + 
 +            Example code with PIL: 
 +                import Image, ImageDraw 
 +                i = Image.open("​lammas_grayscale-bw.png"​) 
 +                data = list(i.getdata()) 
 +                w, h = i.size 
 +                p.print_bitmap(data,​ w, h) 
 +        """​ 
 +        counter = 0 
 +        if output_png:​ 
 +            import Image, ImageDraw 
 +            test_img = Image.new('​RGB',​ (384, h)) 
 +            draw = ImageDraw.Draw(test_img) 
 + 
 +        self.linefeed() 
 +         
 +        black_and_white_pixels = self.convert_pixel_array_to_binary(pixels,​ w, h)         
 +        print_bytes = [] 
 + 
 +        # read the bytes into an array 
 +        for rowStart in xrange(0, h, 256): 
 +            chunkHeight = 255 if (h - rowStart) > 255 else h - rowStart 
 +            print_bytes += (18, 42, chunkHeight,​ 48) 
 +             
 +            for i in xrange(0, 48 * chunkHeight,​ 1): 
 +                # read one byte in 
 +                byt = 0 
 +                for xx in xrange(8):​ 
 +                    pixel_value = black_and_white_pixels[counter] 
 +                    counter += 1 
 +                    # check if this is black 
 +                    if pixel_value == 0: 
 +                        byt += 1 << (7 - xx) 
 +                        if output_png: draw.point((counter % 384, round(counter / 384)), fill=(0, 0, 0)) 
 +                    # it's white 
 +                    else: 
 +                        if output_png: draw.point((counter % 384, round(counter / 384)), fill=(255, 255, 255)) 
 +                 
 +                print_bytes.append(byt) 
 +         
 +        # output the array all at once to the printer 
 +        # might be better to send while printing when dealing with  
 +        # very large arrays... 
 +        for b in print_bytes:​ 
 +            self.printer.write(chr(b)) ​   
 +         
 +        if output_png:​ 
 +            test_print = open('​print-output.png',​ '​wb'​) 
 +            test_img.save(test_print,​ '​PNG'​) 
 +            print "​output saved to %s" % test_print.name 
 +            test_print.close() ​           
 + 
 + 
 + 
 + 
 +def getKey(): 
 +   fd = sys.stdin.fileno() 
 +   old = termios.tcgetattr(fd) 
 +   new = termios.tcgetattr(fd) 
 +   ​new[3] = new[3] & ~termios.ICANON & ~termios.ECHO 
 +   ​new[6][termios.VMIN] = 1 
 +   ​new[6][termios.VTIME] = 0 
 +   ​termios.tcsetattr(fd,​ termios.TCSANOW,​ new) 
 +   key = None 
 +   ​try:​ 
 +      key = os.read(fd, 3) 
 +   ​finally:​ 
 +      termios.tcsetattr(fd,​ termios.TCSAFLUSH,​ old) 
 +   ​return key 
 + 
 +def PrintImage( ImageName) : 
 +    i = Image.open( ImageName) 
 +    data = list(i.getdata()) 
 +    w, h = i.size 
 +    p.print_bitmap(data,​ w, h, False) 
 +    p.linefeed() 
 +    p.linefeed() 
 +    p.linefeed() 
 + 
 +if __name__ == '​__main__':​ 
 +    import sys, os 
 +  
 +     
 +  
 +    if len(sys.argv) == 2: 
 +        serialport = sys.argv[1] 
 + print "point d'​arrêt n°1"​ 
 +    else: 
 +        serialport = ThermalPrinter.SERIALPORT 
 + print "point d'​arrêt n°2"​ 
 +    if not os.path.exists(serialport):​ 
 +        sys.exit("​ERROR:​ Serial port not found at: %s" % serialport) 
 + 
 +    print "​Testing printer on port %s" % serialport 
 +     
 +    p = ThermalPrinter(serialport=serialport) 
 +     
 +    p.print_text("​\nLes Voyages typo-graphiques\n"​) 
 +    p.print_text("​\nde Jules Verne\n"​) 
 +     
 +    # runtime dependency on Python Imaging Library 
 + 
 +    ImgArrays = {   '​A':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_A.png'​ 
 +                  , '​B':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_B.png'​ 
 +                  , '​C':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_C.png'​ 
 +                  , '​D':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_D.png'​ 
 +                  , '​E':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_E.png'​ 
 +                  , '​F':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_F.png'​ 
 +                  , '​G':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_G.png'​ 
 +                  , '​H':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_H.png'​ 
 +                  , '​I':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_I.png'​ 
 +                  , '​J':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_J.png'​ 
 +                  , '​K':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_K.png'​ 
 +                  , '​L':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_L.png'​ 
 +                  , '​M':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_M.png'​ 
 +                  , '​N':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_N.png'​ 
 +                  , '​O':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_O.png'​ 
 +                  , '​P':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_P.png'​ 
 +                  , '​Q':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_Q.png'​ 
 +                  , '​R':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_R.png'​ 
 +                  , '​S':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_S.png'​ 
 +                  , '​T':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_T.png'​ 
 +                  , '​U':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_U.png'​ 
 +                  , '​V':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_V.png'​ 
 +                  , '​W':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_W.png'​ 
 +                  , '​X':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_X.png'​ 
 +                  , '​Y':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_Y.png'​ 
 +                  , '​Z':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_Z.png'​ 
 +                  , '​0':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_0.png'​ 
 +                  , '​1':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_1.png'​ 
 +                  , '​2':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_2.png'​ 
 +                  , '​3':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_3.png'​ 
 +                  , '​4':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_4.png'​ 
 +                  , '​5':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_5.png'​ 
 +                  , '​6':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_6.png'​ 
 +                  , '​7':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_7.png'​ 
 +                  , '​8':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_8.png'​ 
 +                  , '​9':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_9.png'​ 
 +                  , ' ':'/​home/​pi/​git/​py-thermal-printer/​pics/​VT_Codex_Thermique_00_Espace.png'​ 
 +                  } 
 + 
 +    ch=''​ 
 +    Cnt=0; 
 +    while ch != '&':​ 
 + 
 +        ch = getKey() 
 +        if(('​\n'​ == ch) or ('​\r'​ == ch)): 
 +            Cnt = 0 
 +            # return char won't print 
 +        elif(0 == Cnt): 
 +            Cnt = 1 
 +            # will print, next will not 
 +        else: 
 +            Cnt = 0 
 +            ch = '​\n'​ 
 +            # won't print next will print 
 +        if ch in ImgArrays : 
 +            ImageName = ImgArrays[ch] 
 +            if os.path.isfile(ImageName):​ 
 +                # print('​for %s printing %s' % (ch, ImageName)) 
 +                 ​PrintImage( ImageName);​ 
 +       # ​    else : 
 +               # print('​for %s do not find %s' % (ch, ImageName)) 
 +       # else : 
 +           # print('​ no pics defined for %s ... sniff'​% ch) 
 +        
 + 
 +     
 +** 
 + 
 +-> dans le clavier en kapla, un arduino Leonardo:**
  
  
jules_verne.txt · Dernière modification: 2016/03/04 08:08 (modification externe)