IOT

Lämpötulostuspää pysäköinninhallintajärjestelmään, joka perustuu Raspberry Pi pico- ja STONE TFT LCD -näytöille

Lyhyt johdanto

Lämpötulostimet ovat hyvin yleisiä jokapäiväisessä elämässämme, ja esimerkkejä lämpötulostimista on ravintoloissa, parkkipaikoilla ja ostoksilla. Tämä artikkeli keskittyy lämpötulostimien käyttöön pysäköintijärjestelmissä.

Lämpötulostuspää pysäköinninhallintajärjestelmään, joka perustuu Raspberry Pi pico- ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence -teknologiaan. Pystysuuntainen haku. Ai.

Käytettävät materiaalit

  • STONE STWI101WT-01
  • FTP lämpötulostinpää
  • Raspberry Pi pico
    • Kolikkokäyttöinen kone
    ToimintoOhjaustoiminto näytetään sarjanäytöllä, pääliittymä valitsee kerroksen, pääliittymään sisääntulon jälkeen valitsee parkkipaikan, samalla näyttää parkkipaikan numeron oikeassa yläkulmassa olevassa tekstikentässä ja valitsee sitten oleskeluaika, se on kaksi vierivää tekstivalitsinta, niin myös sama näyttää tilaustiedot oikeassa yläkulmassa olevassa tekstikentässä kiinteän yksikköhinnan mukaan, joka kerrotaan oleskeluajalla kokonaishinnan saamiseksi. Sitten vasta kun pysäköintipaikka ja oleskeluaika on valittu, voit siirtyä maksupainikkeeseen, muuten se ei kelpaa. Maksunäyttöön tullessasi käytetään kolikon hyväksyjää. Sen jälkeen näytöllä näkyy syötettävien kolikoiden määrä ja jo asetettujen kolikoiden määrä. Kun kolikot on asetettu, näkyviin tulee maksun onnistumisesta kertova viesti. Sitten voit tulostaa pienen lipun paikkanumeron ja ajan tulostamiseksi lämpöpaperille.SuunnitteluprosessiAluksi halusin käyttää Raspberry Pi pico tehdä pieni tulostin. Sitten komponenttien valintaprosessissa mielestäni lämpötulostin on helpompi saavuttaa, ohjelman määrittämisen jälkeen aloin ostaa laitteistoa. Itse asiassa verkkohankintaprosessissa huomasin, että lämpötulostimia, joissa on hyvät ajuripiirit, on monia, joista suurin osa on valmistettu stm:n sirulla ja ne on suunniteltu omilla ohjeilla. Esimerkiksi käyttämällä hänen ohjeitaan antaa tulostimen tulostaa merkkejä tai mennä paperille, mutta tämä tulostin käytännöllisyys on erittäin korkea, mutta oppimisen arvoa ei ole. Se on lähettää ohjeet linjan sarjaportin kautta, voit käsitellä tulostinta. Joten ajattelin ostaa tulostuspään ja kehittää sitä itse. Sitten tulostuspäästä valitsin ftp-lämpötulostuspään.ftp lämpötulostuspää
  • Lämpötulostuspää pysäköinninhallintajärjestelmään, joka perustuu Raspberry Pi pico- ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence -teknologiaan. Pystysuuntainen haku. Ai.
  • Tämän tulostuspään pitäisi olla saatavilla kansainvälisesti, perusperiaatteet ovat samanlaiset. Vasen puoli on askelmoottori. Sitten keskipää on 6 lämmitysyksikköä. Jokaisessa lämpöyksikössä on 64 lämpöpistettä. Yhteensä siis 384 lämpöpistettä. Sitten alla on salpa. Salvan alla on siirtorekisteri. Lopuksi on annettava kellosignaali. Joten koko toimintaperiaate on antaa kellosignaali tulostuspäälle ja lähettää sitten data joka kellojakso, 384 kellosignaalin ja 384 datan lähettämisen jälkeen siirtorekisterin tiedot tallennetaan salpaan. Sitten salpa asetetaan matalalle tasolle. Sitten 384 lämpöpistettä valitsevat lämmittävätkö vai eivät sen mukaan, ovatko kukin data 0 vai 1. Anna samalla askelmoottorin pyöriä lämpöpaperin ohjaamiseksi halutun luonteen suunnittelemiseksi. Kun sain lämpötulosteen pää, menin eteenpäin ja pyysin datalehteä, ja se oli 30-pinninen fpc-kaapeli. Joten ei tietenkään ole kovin kätevää muodostaa yhteyttä pikoon suoraan sillä. Joten ajattelin, että minun on parempi suunnitella taustalevypiiri. Minulla on a STONE-sarjan näyttö on 12v virtalähde, ja sitten katson lämpötulostuspään tulostusjännitteen, jonka viitearvo on 7.6 V, maksimiarvo on 8 V, ja anna sen jälkeen noin 7.6 V:n jännite. Siinä on myös logiikkajännite 3.3 V, ja sitten Raspberry Pi picon maksimituki 5 V virtalähdettä ja sen lähtöjännite on 3.3 V, sitten virtalähteen suunnittelussa voidaan käyttää kahta dcdc:tä, 12 V virtalähteellä, yksi dcdc-lähtö 7.6 V antaa virran lämpötulostuspäälle, toinen dcdc-lähtö 5v picoon ja käyttää sitten picon 3.3v jännitettä lämpötulostuspään logiikkajännitteen tehostamiseen. Sitten 12v johtaa suoraan sarjanäytölle.
  • Lämpötulostuspää pysäköinninhallintajärjestelmään, joka perustuu Raspberry Pi pico- ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence -teknologiaan. Pystysuuntainen haku. Ai.
  • Muuten, sen lämpötulostuspään askelmoottoria on myös käytettävä. Minulla on integroitu Darlington-putkiintegraattori. Mutta se on liian iso ja se on suora plug-in, joten osta vain ohjainsiru. Sitten tämä käyttömoottorin puoli on myös OK. Tulostaminen vaatii fontin suunnittelua, periaatteessa kaikki käyttävät spi flashia fonttien tallentamiseen, mikä on valtava projekti. Vain ascii-koodi on yli 100, joten sinun on ostettava toinen SPF-salama. Sitten koko suunnittelu on melkein tällaista.
    STONE Designer (GUI Designer -ohjelmisto)Lähettäjä:https://www.stoneitech.com/support/download/software
  • Lämpötulostuspää pysäköinninhallintajärjestelmään, joka perustuu Raspberry Pi pico- ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence -teknologiaan. Pystysuuntainen haku. Ai.
  • Lämpötulostuspää pysäköinninhallintajärjestelmään, joka perustuu Raspberry Pi pico- ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence -teknologiaan. Pystysuuntainen haku. Ai.
  • Suunnittele piiriSitten seuraavat alkoivat suunnitella piiriä. Etsi ensin virtalähde, itse asiassa aluksi käytin kolminapaista jännitteensäädintä, koska piiri on yksinkertainen, valmistuksen jälkeen lämmitystilanne oli vakavampi virheenkorjauksen aikana, erittäin kuuma koskettaa, joten vaihdan käyttämään dcdc. Seuraa vain sirun tietolehteä suoraan tehdäksesi piirikaavio. Valitsin tähän mt2492, mutta jätin huomioimatta tärkeän parametrin on tulostuspään käyttövirta, tämän sirun suurin lähtövirta on 2A, mutta tulostuspään käyttövirta 2.3A, ero 0.3A, sitä voidaan myös käyttää, mutta tehokkuus ei ole niin korkea, puhumme erityisestä vaikutuksesta myöhemmin.
  • Lämpötulostuspää pysäköinninhallintajärjestelmään, joka perustuu Raspberry Pi pico- ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence -teknologiaan. Pystysuuntainen haku. Ai.
  • Sitten ostamani moottoriohjainsiru on lv8548, katso tulostuspään tietolehti, jossa on askelmoottorin ajoituskaavio sen ajoituksen mukaan, jotta se saa nelisuuntaisen pwm-signaalin.
  • Lämpötulostuspää pysäköinninhallintajärjestelmään, joka perustuu Raspberry Pi pico- ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence -teknologiaan. Pystysuuntainen haku. Ai.
  • Sitten on flash-siru, jossa by25q32bs, 32Mbit:n kapasiteetti on melko suuri ja kytketty picoon, odottaa picon kutsumista.
  • Lämpötulostuspää pysäköinninhallintajärjestelmään, joka perustuu Raspberry Pi pico- ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence -teknologiaan. Pystysuuntainen haku. Ai.
  • Sen jälkeen kokonaispiirikaavio on tällainen, vasemmassa yläkulmassa on tietoliikennepistoke ja virtalähde, alla on summeri (ei varsinaisesti käytössä piirissä), oikealla on valodiodi ja oikeassa alakulmassa on 30-pinninen fpc tulostuspään liittämistä varten.
  • Lämpötulostuspää pysäköinninhallintajärjestelmään, joka perustuu Raspberry Pi pico- ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence -teknologiaan. Pystysuuntainen haku. Ai.
  • Kun se on valmis ja sitä voidaan käyttää, on alla kuvatulla tavalla, jättäen taululle tapin otsikkoliittimen Raspberry Pi picolle, voit kytkeä sen suoraan siihen.
    Raspberry Pi pico
  • Lämpötulostuspää pysäköinninhallintajärjestelmään, joka perustuu Raspberry Pi pico- ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence -teknologiaan. Pystysuuntainen haku. Ai.
  • Kytke virta päälle, ensin ei ole kytketty pico- ja tulostuspäähän, mittaa dcdc:n lähtöjännite, normaalissa tapauksessa toinen on noin 7.5v, toinen noin 5v.
  • Lämpötulostuspää pysäköinninhallintajärjestelmään, joka perustuu Raspberry Pi pico- ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence -teknologiaan. Pystysuuntainen haku. Ai.
  • Lämpötulostuspää pysäköinninhallintajärjestelmään, joka perustuu Raspberry Pi pico- ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence -teknologiaan. Pystysuuntainen haku. Ai.
  • Lämpötulostuspää pysäköinninhallintajärjestelmään, joka perustuu Raspberry Pi pico- ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence -teknologiaan. Pystysuuntainen haku. Ai.
  • Liitä sitten tulostuspää, sarjanäyttö ja pico, mittaa logiikkajännite noin 3.3 V, kun ongelmaa ei ole, voit kirjoittaa ohjelman.
    OhjelmaAion ensin säätää askelmoottorin, tämä osa on helppo säätää, katso datalehdestä ajoituskaavio, 8 kellojaksoa, jokaisen kellojakson tulisi erikseen antaa moottorin neljälle nastalle logiikkasignaali, 8 jakson jälkeen moottori käännä ylös ja säädä sitten nopeutta, mutta väliin pitää lisätä viive tehosuhteen säätämiseksi muuten se kääntyy liian nopeasti, asettamani viiveaika on noin 5ms ja sitten kun annat sen kääntyä, pitää antaa taso alhainen, muuten moottori ei näytä pyörivän, itse asiassa sisäinen kela on edelleen päällä, pitkän ajan kuluttua voit haistaa palavan hajun. Kirjoita sitten funktio, laita runko silmukkaan, jaksojen lukumäärä edustaa Moottorin pyörimispituus, toiminto näyttää hieman pitkältä, laita se muualle yksin ja odota puhelua.
  • Lämpötulostuspää pysäköinninhallintajärjestelmään, joka perustuu Raspberry Pi pico- ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence -teknologiaan. Pystysuuntainen haku. Ai.
  • Lämpötulostuspää pysäköinninhallintajärjestelmään, joka perustuu Raspberry Pi pico- ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence -teknologiaan. Pystysuuntainen haku. Ai.
  • Tämä on toiminto muutaman muutoksen jälkeen, nopeus ja kesto lähetetään pääohjelmassa. Se vaatii vielä paljon optimointia. Sitten on tulostuspään säätö, tämä osa on minulle vaikea, se tarvitsee kellosignaalin, tietolehti on kirjoitettu enintään 8M, luulin, että se tarvitsi signaalin noin 8M taajuus, se on vaikeaa, ensin mittasin taajuuden io flip-tasolla, ero on liian suuri. Ja sitten haluan käyttää pioa, ja tutkin koko päivän, mutta tulos ei ole hyvä, henkilökohtaiset taitoni ovat rajalliset, luultavasti minun on tutkittava syvällisesti rp2040-sirun käsikirjaa. Sitten käännä taso 384 jaksoja kokeillaksesi, se on näin työnkulku, alusta tiedonsyöttö 1 nasta, salpa 1 nasta, kellosignaali 1 nasta, 6 tulostusyksikön nastaa ja sitten salvan lisäksi kaikki muut vedä alhaalla ja lähetä sitten yksi data yhden kellojakson aikana, pyöräilyn jälkeen 384 kertaa asettaaksesi salvan arvoon 0, asettaaksesi 6 tulostusyksikön arvoon 1 ja sitten missä kohdassa on tiedot, mikä piste lämmitetään. Sarjan toteutuksen jälkeen vedä tasoa taaksepäin. Sitten kun ohjelma oli kirjoitettu ja testaus aloitettu, se ei todellakaan toiminut, itse asiassa koska liian monta tulostusyksikköä ohjattiin, mutta virta ei riittänyt, muuta se sitten antamaan vähemmän kaksi tulostusyksikköä korkealla tasolla ja testaa uudelleen.
  • Lämpötulostuspää pysäköinninhallintajärjestelmään, joka perustuu Raspberry Pi pico- ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence -teknologiaan. Pystysuuntainen haku. Ai.
  • Se todella toimii! Se tulostaa vaakasuuntaisen viivan. Se tarkoittaa, että kellotaajuudella ei ole alarajaa, joten voit käyttää askelmoottoria pystysuoran viivan tulostamiseksi. pico-kaksoissäike, anna toisen säikeen ajaa moottoria synkronisesti, kirjoita sitten ohjelma ja suorita. Pystyviiva tulee ulos.
  • Lämpötulostuspää pysäköinninhallintajärjestelmään, joka perustuu Raspberry Pi pico- ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence -teknologiaan. Pystysuuntainen haku. Ai.
  • Kun vaaka- ja pystyviivat, hanki sitten vinoviiva, kiinnitä huomiota siihen, että yksi tulostusyksikkö on 64 pistettä, joka määrittää pituuden, kuten 32, ja kierrä sitten 32 kertaa 384 jaksoa, jokainen jakso aseta vain ensimmäiset 64 dataa 1:ksi. ja aseta seuraavat 320 dataa arvoon 0 ja sen jälkeen 32 kertaa joka kerta vain ensimmäisessä yksikössä tulostaaksesi pisteen ja sitten syklin inkrementaalisesti, yhdistettynä askelmoottorin nopeuden säätämiseen ja lopuksi säädettävä 64 * 32 kokoa vinoviiva, voit myös kirjoittaa ensin Z-kirjaimen.  
  • Lämpötulostuspää pysäköinninhallintajärjestelmään, joka perustuu Raspberry Pi pico- ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence -teknologiaan. Pystysuuntainen haku. Ai.
  • Sitten ohjelman ääriviivat ovat siellä, jos haluat tulostaa sanan, sinun on ensin tehtävä fontti. Tee ensin iso kirjain A, koko 32 * 32, luettelo määritelmistä, aion tehdä tässä pin.value:lla (), joten tee fontti ja käytä sitten kutsuttavia binääriarvoja 32 riviä ja 32 saraketta, ota pois tehdäksesi vaihdon ja siirrä sitten pin.value (), joten tämä on toteutusprosessi.
  • Lämpötulostuspää pysäköinninhallintajärjestelmään, joka perustuu Raspberry Pi pico- ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence -teknologiaan. Pystysuuntainen haku. Ai.
  • Kun 0 on taustalla ja 1 etualalla, varsinainen toteutusprosessi näyttää sitten tältä.
  • Lämpötulostuspää pysäköinninhallintajärjestelmään, joka perustuu Raspberry Pi pico- ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence -teknologiaan. Pystysuuntainen haku. Ai.
  • Ulkoisin suuri jakso 32 edustaa 32 rivin jaksoa, eli tulosta 32 riviä, ja sitten ensimmäiset 32 ​​jaksoa sisällä lämmittävät puolet ensimmäisestä lämmitysyksiköstä, sitten loput 352 jaksoa asetetaan nollaan ja sitten miinus 0 arvosta 1 aina 31:aan asti, voit laskea ensimmäisen rivin pisteistä, jotka on lämmitettävä vasemmalta oikealle, ja sitten joka 0 jakso, joka suoritetaan loppuun, kun salpa on asetettu 384 ja lämmitysyksikkö 0 ja sitten voit tulostaa ja sitten yhden sanan silmukan jälkeen 1 kertaa uudelleen.
  • Lämpötulostuspää pysäköinninhallintajärjestelmään, joka perustuu Raspberry Pi pico- ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence -teknologiaan. Pystysuuntainen haku. Ai.
  • Edelleen rohkea, tällainen pistematriisi sana, on työkaluja verkossa voidaan tehdä suoraan, edessä plus 0b ja sitten lisää pilkku taakse, ja sitten pelaat omien ideoiden mukaan, fontti on itse asiassa alun perin tarkoitettu tallennettu flash-siru, mutta säädän pitkään sitä ei silti voi avata.
  • Lämpötulostuspää pysäköinninhallintajärjestelmään, joka perustuu Raspberry Pi pico- ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence -teknologiaan. Pystysuuntainen haku. Ai.
  • En tiedä missä vika on, kun on aikaa, säädän taas, hyvä asia on, että picossa itsellään on 16mbit kokoinen flash, tallentaa ascii-kirjastoa vielä riittää, sitten olen niin tallessa.
  • Lämpötulostuspää pysäköinninhallintajärjestelmään, joka perustuu Raspberry Pi pico- ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence -teknologiaan. Pystysuuntainen haku. Ai.
  • Määrittele se sanakirjalla, laita se erilliseksi kappaleeksi ja kutsu se takaisin pääohjelmassa. Then after debugging, the available version looks like this.from machine import Pinfrom time import sleepimport _threadimport rp2from array import arrayimport ascii_kuimport speed_motor#import sysdelaytime = 0.0000001 # Printer clock delaymotor = speed_motor.motor_control(2, 3, 4, 5) # Initialize the printer’s internal stepper motor pins, corresponding to the a+/a-/b+/b- of the stepper motormov_bit = 0PRINTER_DIN = Pin(20, Pin.OUT)PRINTER_CLK = Pin(19, Pin.OUT)PRINTER_LAT = Pin(18, Pin.OUT, Pin.PULL_UP)STB1 = Pin(6, Pin.OUT, Pin.PULL_DOWN)STB2 = Pin(7, Pin.OUT, Pin.PULL_DOWN)STB3 = Pin(8, Pin.OUT, Pin.PULL_DOWN)STB4 = Pin(9, Pin.OUT, Pin.PULL_DOWN)STB5 = Pin(14, Pin.OUT, Pin.PULL_DOWN)STB6 = Pin(15, Pin.OUT, Pin.PULL_DOWN)lock = _thread.allocate_lock()ascii_code = ascii_ku.ascii_code() # Importing an ascii character libraryshuru = input(“Please enter text:”)line_word = []for item in range(len(shuru)):    line_word.append(shuru[item])# line_num = len(shuru)# bottom_line_num = len(shuru)%# global motor_speed = 0# global line = 0# if len(shuru) > 12:#     motor_speed = len(shuru) % 6#     if (len(shuru) % 6) == 0:#         motor_speed = 12# else:#     motor_speed = len(shuru)# print(motor_speed)motor_speed = len(shuru)line = (len(shuru) // 12) + 1if (len(shuru) % 12) == 0:    line -= 1lins = 0supper = 0slower = 0# _thread.start_new_thread(motor.run_stop, (0.005*motor_speed, 26*line))_thread.start_new_thread(motor.run_stop, (motor_speed, 1))# _thread.start_new_thread(motor.run_stop, (0.03, 56))def last_word_size32 (word_line, linss, lins, supper, slower):    for mov_bit in range((supper*32)+(slower*24)):        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(0)        PRINTER_CLK.value(1)        sleep(delaytime)    for mov_bit in range(31, -1, -1):        word_bit = (word_line[linss] >> mov_bit)&0b00000000000000000000000000000001        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(word_bit)        PRINTER_CLK.value(1)        sleep(delaytime)    for mov_bit in range(352-((supper*32)+(slower*24))):        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(0)        PRINTER_CLK.value(1)        sleep(delaytime)    if (supper*32)+(slower*24) < 192:        PRINTER_LAT.value(0)        STB1.value(1)        STB2.value(1)        STB3.value(1)        sleep(0.005)        STB1.value(0)        STB2.value(0)        STB3.value(0)        PRINTER_LAT.value(1)    else:        PRINTER_LAT.value(0)        STB4.value(1)        STB5.value(1)        STB6.value(1)        sleep(0.005)        STB4.value(0)        STB5.value(0)        STB6.value(0)        PRINTER_LAT.value(1)def word_size24 (word_line, linss, lins, supper, slower):    for mov_bit in range((supper*32)+(slower*24)):        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(0)        PRINTER_CLK.value(1)        sleep(delaytime)    for mov_bit in range(23, -1, -1):        word_bit = (word_line[linss] >> mov_bit)&0b000000000000000000000001        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(word_bit)        PRINTER_CLK.value(1)        sleep(delaytime)    for mov_bit in range(360-((supper*32)+(slower*24))):        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(0)        PRINTER_CLK.value(1)        sleep(delaytime)    if (supper*32)+(slower*24) < 192:        PRINTER_LAT.value(0)        STB1.value(1)        STB2.value(1)        STB3.value(1)        sleep(0.005)        STB1.value(0)        STB2.value(0)        STB3.value(0)        PRINTER_LAT.value(1)    else:        PRINTER_LAT.value(0)        STB4.value(1)        STB5.value(1)        STB6.value(1)        sleep(0.005)        STB4.value(0)        STB5.value(0)        STB6.value(0)        PRINTER_LAT.value(1)for linss in range(32):    supper=slower=0    if linss < 32:        for lins in range(len(line_word)):#             if lins//12:#                 break            if (line_word[lins].isupper() or line_word[lins].isdigit() or line_word[lins].isspace()):                last_word_size32 (ascii_code.code.get(line_word[lins]), linss%32, lins%12, supper, slower)                supper += 1            elif (line_word[lins].islower()):                word_size24 (ascii_code.code.get(line_word[lins]), linss%32, lins%12, supper, slower)                slower += 1    else:        if linss == 32:            sleep(5.8)        for lins in range(motor_speed):            if (line_word[lins].isupper()):                last_word_size32 (ascii_code.code.get(line_word[12]), linss%32, lins%12, len(line_word))#     elif:#         _thread.start_new_thread(motor.run_stop, (motor_speed, line))#     for linss in range(32):#         for lins in range(len(line_word)):#             if (line_word[lins].isupper()):#                 last_word_size32 (ascii_code.code.get(line_word[lins]), linss, lins, len(line_word))line_word.clear()I am separate control printing unit, because the current is not enough so like this, but in order to print clear, making my printing speed becomes particularly slow, the more words the slower, and then the lowercase letters is 24 * 32 dot matrix, that it is less print points to use, but can not give it to leave 32 heating points of space then the character spacing is large, so the capital letters and lowercase letters are separated, the numbers are still 32 * 32.
  • Lämpötulostuspää pysäköinninhallintajärjestelmään, joka perustuu Raspberry Pi pico- ja STONE TFT LCD IOT PlatoBlockchain Data Intelligence -teknologiaan. Pystysuuntainen haku. Ai.
  • Finally, the whole program is attached.from machine import UART,Pinfrom time import sleepimport _threadimport rp2from array import arrayimport ascii_kuimport speed_motorfrom os import uname#import sysuart1 = UART(0, baudrate = 115200, tx =Pin(0), rx = Pin(1))floor1 = [‘f’, ‘l’, ‘o’, ‘o’, ‘r’,’1′]floor2 = [‘f’, ‘l’, ‘o’, ‘o’, ‘r’,’2′]floor3 = [‘f’, ‘l’, ‘o’, ‘o’, ‘r’,’3′]button_cmd = [16,1]selector_cmd = [16,129]print(uname()[0])delaytime = 0.0000001 # Printer clock delaycoin = Pin(22, Pin.IN,Pin.PULL_UP)coin_num = 0motor = speed_motor.motor_control(2, 3, 4, 5) # Initialize the printer’s internal stepper motor pins, corresponding to the a+/a-/b+/b- of the stepper motormov_bit = 0PRINTER_DIN = Pin(20, Pin.OUT)PRINTER_CLK = Pin(19, Pin.OUT)PRINTER_LAT = Pin(18, Pin.OUT, Pin.PULL_UP)STB1 = Pin(6, Pin.OUT, Pin.PULL_DOWN)STB2 = Pin(7, Pin.OUT, Pin.PULL_DOWN)STB3 = Pin(8, Pin.OUT, Pin.PULL_DOWN)STB4 = Pin(9, Pin.OUT, Pin.PULL_DOWN)STB5 = Pin(14, Pin.OUT, Pin.PULL_DOWN)STB6 = Pin(15, Pin.OUT, Pin.PULL_DOWN)lock = _thread.allocate_lock()ascii_code = ascii_ku.ascii_code() # Importing an ascii character library# shuru = ‘aa’# line_word = []# for item in range(len(shuru)):#     line_word.append(shuru[item])# line_num = len(shuru)# bottom_line_num = len(shuru)%# global motor_speed = 0# global line = 0# if len(shuru) > 6:#     motor_speed = len(shuru) % 6#     if (len(shuru) % 6) == 0:#         motor_speed = 12# else:#     motor_speed = len(shuru)# # print(motor_speed)# # line = (len(shuru) // 12) + 1# if (len(shuru) % 12) == 0:#     line -= 1lins = 0supper = 0slower = 0danjia = 0# _thread.start_new_thread(motor.run_stop, (0.005*motor_speed, 26*line))# _thread.start_new_thread(motor.run_stop, (motor_speed, line))# _thread.start_new_thread(motor.run_stop, (0.03, 56))def pay(pay):    global coin_num    line_word = {‘line_word1’:[‘s’,’i’,’t’,’e’,’:’,’F’,’1′,’-‘,’0′],’line_word2’:[‘0′,’d’,’a’,’y’,’2′,’h’,’o’,’u’,’r’],’line_word3′:[‘t’,’o’,’t’,’a’,’l’,’:’,’4′,’.’,’0′],’line_word4′:[‘T’,’o’,’t’,’a’,’l’,’:’,’4′,’.’,’0′]}    line_wors = {‘line_word1’:[‘U’,’n’,’i’,’t’,’:’,’2′,’.’,’0′,’0′],’line_word2′:[‘T’,’o’,’t’,’a’,’l’,’:’,’4′,’.’,’0′],                 ‘line_word3’:[‘U’,’n’,’i’,’t’,’:’,’2′,’.’,’0′,’0′],’line_word4′:[‘T’,’o’,’t’,’a’,’l’,’:’,’5′,’.’,’0′]}#     line_word1 = [‘S’,’i’,’t’,’e’,’:’,’F’,’1′,’-‘,’0’]#     line_word2 = [‘1′,’D’,’a’,’y’,’1′,’H’,’o’,’u’,’r’]#     line_word3 = [‘U’,’n’,’i’,’t’,’:’,’2′,’.’,’0′,’0′]#     line_word4 = [‘T’,’o’,’t’,’a’,’l’,’:’,’5′,’.’,’0′]#     line_word1[8]=str(pay[0])#     line_word2[0]=str(pay[1])#     line_word2[4]=str(pay[2])#     line_word4[6]=str(pay[3])    (line_word[‘line_word1’])[8]=str(pay[0])#     (line_word[‘line_word2’])[0]=str(pay[1])#     (line_word[‘line_word2’])[4]=str(pay[2])#     (line_word[‘line_word4’])[6]=str(pay[3])    sleep(1)    uart1.write(‘ST<{“cmd_code”:”set_value”,”type”:”image_value”,”widget”:”image_value4″,”value”:’+str(pay[3])+’}>ET’)#     sleep(2)#     print(line_word.get(‘line_word’+str(1))[0])#     print(‘zfdszfz’,line_word)#     sleep(2)#     uart1.write(‘ST<{“cmd_code”:”set_text”,”type”:”edit”,”widget”:”message5″,”text”:”F1 – ‘+pay[0]+'”}>ET’)#     uart1.sendbreak()#     sleep(1)#     uart1.write(‘ST<{“cmd_code”:”set_text”,”type”:”edit”,”widget”:”message6″,”text”:”‘+str(pay[1])+'”}>ET’)#     uart1.sendbreak()#     sleep(1)# #     uart1.write(‘ST<{“cmd_code”:”set_text”,”type”:”edit”,”widget”:”message22″,”text”:”‘+str(pay[2])+'”}>ET’)#     uart1.write(‘ST<{“cmd_code”:”set_text”,”type”:”edit”,”widget”:”message8″,”text”:”‘+str(pay[3])+'”}>ET’)    while True:        if coin.value()==0:            coin_num += 1            print(“Number of coins deposited:”,coin_num)            sleep(0.1)            uart1.write(‘ST<{“cmd_code”:”set_value”,”type”:”image_value”,”widget”:”image_value2″,”value”:’+str(coin_num)+’}>ET’)            if coin_num == pay[3]:                uart1.write(‘ST<{“cmd_code”:”set_visible”,”type”:”widget”,”widget”:”image37″,”visible”:true}>ET’)                     if uart1.any()>1:            rx2 = []            data_name2 = ”            bin_data = uart1.read(40)            uart1.sendbreak()            rx1 = list(bin_data)            for item in rx1:                rx2.append(chr(item))            print(rx2)            if rx1[3:5:1] == button_cmd:                data_name_len = rx1[6] – 1                data_name = rx2[7:data_name_len+6:1]                data_name2 = ”.join(data_name)                print(data_name2)                if data_name2 == ‘back’:                    break                elif data_name2 == ‘print’ and coin_num == pay[3] and rx1[13] == 2:                    data_name2=”                    _thread.start_new_thread(motor.run_stop, (9, 4))                    for iii in range(1,3):                        for linss in range(32):                            supper=slower=0                            for lins in range(9):#                                 temp_list=ascii_code.code.get((‘line_word’+str(iii))[lins])#                                 print(temp_list,type(temp_list))                                if (line_word.get(‘line_word’+str(iii))[lins]).islower():                                    word_size24 (ascii_code.code.get(line_word.get(‘line_word’+str(iii))[lins]), linss%32, lins%12, supper, slower)                                    slower += 1                                else:                                    last_word_size32 (ascii_code.code.get(line_word.get(‘line_word’+str(iii))[lins]), linss%32, lins%12, supper, slower)                                    supper +=                         sleep(6)#                     for iii in range(1,2):#                         for linss in range(32):#                             supper=slower=0#                             for lins in range(9):# #                                 temp_list=ascii_code.code.get((‘line_word’+str(iii))[lins])# #                                 print(temp_list,type(temp_list))#                                 if (line_wors.get(‘line_word’+str(iii))[lins]).islower():#                                     word_size24 (ascii_code.code.get(line_wors.get(‘line_word’+str(iii))[lins]), linss%32, lins%12, supper, slower)#                                     slower += 1#                                 else:#                                     last_word_size32 (ascii_code.code.get(line_wors.get(‘line_word’+str(iii))[lins]), linss%32, lins%12, supper, slower)#                                     supper += 1#                     sleep(6)#                     for iii in range(1,2):#                         for linss in range(32):#                             supper=slower=0#                             for lins in range(9):# #                                 temp_list=ascii_code.code.get((‘line_word’+str(iii))[lins])# #                                 print(temp_list,type(temp_list))#                                 if (line_wors.get(‘line_word’+str(iii))[lins]).islower():#                                     word_size24 (ascii_code.code.get(line_wors.get(‘line_word’+str(iii))[lins]), linss%32, lins%12, supper, slower)#                                     slower += 1#                                 else:#                                     last_word_size32 (ascii_code.code.get(line_wors.get(‘line_word’+str(iii))[lins]), linss%32, lins%12, supper, slower)#                                     supper += 1def floor1def():    day_jia = 0    hour_jia = 0    day_flag = False    hour_flag = False    price_flag = False    posltion = False    zongjia = 0    pay1 = [0,0,0,0]    print(“floor1 now”)#     uart1.write(‘ST<{“cmd_code”:”set_text”,”type”:”edit”,”widget”:”message3″,”text”:”2.00$/H”}>ET’)    uart1.sendbreak()    while True:        if uart1.any()>1:            rx2 = []            data_name2 = ”            bin_data = uart1.read(40)            uart1.sendbreak()            rx1 = list(bin_data)            for item in rx1:                rx2.append(chr(item))            print(rx2)            if rx1[3:5:1] == button_cmd:                data_name_len = rx1[6] – 1                data_name = rx2[7:data_name_len+6:1]                data_name2 = ”.join(data_name)                print(data_name2)                if data_name2 == ‘back’:                    break                elif data_name2 == ‘position’:                    posltion = True                    pay1[0]=rx2[15]                    write1(rx2[15])                elif data_name2 == ‘pay’ and posltion and price_flag:                    uart1.write(‘ST<{“cmd_code”:”open_win”,”type”:”window”,”widget”:”window7″}>ET’)                    pay(pay1)#                 if data_name2 == ‘pay’ and posltion = True and (day_flag or hour_flag):#                     posltion = True#                     uart1.write(‘ST<{“cmd_code”:”open_win”,”type”:”window”,”widget”:”window7″}>ET’)            if rx1[3:5:1] == selector_cmd:                data_name_len = rx1[6] – 4                data_name = rx2[7:data_name_len+7:1]                data_name2 = ”.join(data_name)                print(data_name2)                if data_name2 == ‘time_day1’:                    pay1[1]=rx2[19]                    write2(ord(rx2[19]))                    day_jia = ord(rx2[19])                    day_flag = True                elif data_name2 == ‘time_hour1’:                    pay1[2]=rx2[20]                    write3(ord(rx2[20]))                    hour_jia = ord(rx2[20])                    hour_flag = True            if hour_flag or day_flag:                price_flag = True                zongjia = (day_jia*48) + (hour_jia*2)                pay1[3]=zongjia                print(str(zongjia))                uart1.write(‘ST<{“cmd_code”:”set_text”,”type”:”edit”,”widget”:”message4″,”text”:”‘+str(zongjia)+'”}>ET’)                hour_flag = day_flag = Falsedef floor2def():    passdef floor3def():    passdef write1(num):    #print(ss)    for item in range(49,55):        uart1.write(‘ST<{“cmd_code”:”set_image”,”type”:”image”,”widget”:”image1_’+chr(item)+'”,”image”:”nocar_bg”}>ET’)    uart1.write(‘ST<{“cmd_code”:”set_image”,”type”:”image”,”widget”:”image1_’+num+'”,”image”:”selectedcar_bg2″}>ET’)    uart1.write(‘ST<{“cmd_code”:”set_text”,”type”:”edit”,”widget”:”message1″,”text”:”F1 – ‘+num+'”}>ET’)def write2(num):#     danjia = 1    uart1.write(‘ST<{“cmd_code”:”set_text”,”type”:”edit”,”widget”:”message2″,”text”:”‘+str(num)+'”}>ET’)#     if danjia == 1:#         uart1.write(‘ST<{“cmd_code”:”set_text”,”type”:”edit”,”widget”:”message3″,”text”:”2.00$/H”}>ET’)def write3(num):#     danjia = 1    uart1.write(‘ST<{“cmd_code”:”set_text”,”type”:”edit”,”widget”:”message22″,”text”:”‘+str(num)+'”}>ET’)#     if danjia == 1:#         uart1.write(‘ST<{“cmd_code”:”set_text”,”type”:”edit”,”widget”:”message3″,”text”:”2.00$/H”}>ET’)def last_word_size32 (word_line, linss, lins, supper, slower):    for mov_bit in range((supper*32)+(slower*24)):        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(0)        PRINTER_CLK.value(1)        sleep(delaytime)    for mov_bit in range(31, -1, -1):        word_bit = (word_line[linss] >> mov_bit)&0b00000000000000000000000000000001        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(word_bit)        PRINTER_CLK.value(1)        sleep(delaytime)    for mov_bit in range(352-((supper*32)+(slower*24))):        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(0)        PRINTER_CLK.value(1)        sleep(delaytime)    if (supper*32)+(slower*24) < 192:        PRINTER_LAT.value(0)        STB1.value(1)        STB2.value(1)        STB3.value(1)        STB4.value(1)        sleep(0.005)        STB1.value(0)        STB2.value(0)        STB3.value(0)        STB4.value(0)        PRINTER_LAT.value(1)    else:        PRINTER_LAT.value(0)        STB4.value(1)        STB5.value(1)        STB6.value(1)        sleep(0.005)        STB4.value(0)        STB5.value(0)        STB6.value(0)        PRINTER_LAT.value(1)#         PRINTER_LAT.value(0)#         STB1.value(1)#         STB2.value(1)#         STB3.value(1)#         STB4.value(1)#         STB5.value(1)#         STB6.value(1)#         sleep(0.005)#         STB1.value(0)#         STB2.value(0)#         STB3.value(0)#         STB4.value(0)#         STB5.value(0)#         STB6.value(0)#         PRINTER_LAT.value(1)   def word_size24 (word_line, linss, lins, supper, slower):    for mov_bit in range((supper*32)+(slower*24)):        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(0)        PRINTER_CLK.value(1)        sleep(delaytime)    for mov_bit in range(23, -1, -1):        word_bit = (word_line[linss] >> mov_bit)&0b000000000000000000000001        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(word_bit)        PRINTER_CLK.value(1)        sleep(delaytime)    for mov_bit in range(360-((supper*32)+(slower*24))):        PRINTER_CLK.value(0)        sleep(delaytime)        PRINTER_DIN.value(0)        PRINTER_CLK.value(1)        sleep(delaytime)    if (supper*32)+(slower*24) < 192:        PRINTER_LAT.value(0)        STB1.value(1)        STB2.value(1)        STB3.value(1)        sleep(0.005)        STB1.value(0)        STB2.value(0)        STB3.value(0)        PRINTER_LAT.value(1)    else:        PRINTER_LAT.value(0)        STB4.value(1)        STB5.value(1)        STB6.value(1)        sleep(0.005)        STB4.value(0)        STB5.value(0)        STB6.value(0)        PRINTER_LAT.value(1)#         PRINTER_LAT.value(0)#         STB1.value(1)#         STB2.value(1)#         STB3.value(1)#         STB4.value(1)#         STB5.value(1)#         STB6.value(1)#         sleep(0.005)#         STB1.value(0)#         STB2.value(0)#         STB3.value(0)#         STB4.value(0)#         STB5.value(0)#         STB6.value(0)#         PRINTER_LAT.value(1)while True:    if uart1.any()>1:        rx2 = []        data_name2 = ”        bin_data = uart1.read(40)        uart1.sendbreak()        rx1 = list(bin_data)        for item in rx1:            rx2.append(chr(item))        print(rx2)        if rx2[7:13:1] == floor1:            floor1def()        elif rx2[7:13:1] == floor2:            floor2def()        elif rx2[7:13:1] == floor3:            floor3def()for linss in range(32):    supper=slower=0    if linss < 32:        for lins in range(len(line_word)):#             if lins//12:#                 break            if (line_word[lins].isupper() or line_word[lins].isdigit() or line_word[lins].isspace()):                last_word_size32 (ascii_code.code.get(line_word[lins]), linss%32, lins%12, supper, slower)                supper += 1            elif (line_word[lins].islower()):                word_size24 (ascii_code.code.get(line_word[lins]), linss%32, lins%12, supper, slower)                slower += 1    else:        if linss == 32:            sleep(5.8)        for lins in range(motor_speed):            if (line_word[lins].isupper()):                last_word_size32 (ascii_code.code.get(line_word[12]), linss%32, lins%12, len(line_word))#     elif:#         _thread.start_new_thread(motor.run_stop, (motor_speed, line))#     for linss in range(32):#         for lins in range(len(line_word)):#             if (line_word[lins].isupper()):#                 last_word_size32 (ascii_code.code.get(line_word[lins]), linss, lins, len(line_word)line_word.clear()
  • Lähde: Platon Data Intelligence