IOT

هد چاپ حرارتی برای سیستم مدیریت پارکینگ مبتنی بر Raspberry Pi pico و STONE TFT LCD

معرفی مختصر

چاپگرهای حرارتی در زندگی روزمره ما بسیار رایج هستند و نمونه هایی از چاپگرهای حرارتی در رستوران ها، پارکینگ ها و مراکز خرید وجود دارد. این مقاله به کاربرد پرینترهای حرارتی در سیستم های پارکینگ می پردازد.

Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.

مواد مورد استفاده

  • STONE STWI101WT-01
  • سر پرینتر حرارتی FTP
  • رزبری پیکو
    • دستگاه سکه ای
    عملکردعملکرد کنترل بر روی صفحه سریال نمایش داده می شود، رابط اصلی طبقه را انتخاب می کند، پس از ورود به رابط اصلی، فضای پارک را انتخاب می کند، در همان زمان شماره فضای پارک را در کادر متنی در بالا سمت راست نمایش می دهد، سپس گزینه را انتخاب می کند. زمان ماندن، دو انتخابگر متن پیمایشی است، سپس همان اطلاعات سفارش را در کادر متنی در سمت راست بالا، با توجه به قیمت واحد ثابت که با زمان اقامت ضرب می‌شود، نمایش می‌دهد تا قیمت کل به دست آید. سپس تنها زمانی که جای پارک و زمان اقامت انتخاب شده است می توانید به دکمه پرداخت مراجعه کنید در غیر این صورت نامعتبر است. پس از ورود به صفحه پرداخت، از پذیرنده سکه استفاده می شود. سپس روی صفحه نمایش تعداد سکه هایی که قرار است وارد شوند و تعداد سکه هایی که قبلاً وارد شده اند را نشان می دهد. پس از قرار دادن سکه ها، پیام موفقیت آمیز پرداخت نمایش داده می شود. سپس می توانید انتخاب کنید که یک بلیط کوچک برای چاپ شماره مکان و زمان روی کاغذ حرارتی چاپ کنید.فرآیند طراحیدر ابتدا می خواستم از آن استفاده کنم رزبری پیکو برای ساخت یک چاپگر کوچک سپس در فرآیند انتخاب اجزاء، من فکر می کنم چاپگر حرارتی برای دستیابی راحت تر است، پس از تعیین برنامه، شروع به خرید سخت افزار کردم. در واقع، در فرآیند خرید آنلاین متوجه شدم که پرینترهای حرارتی زیادی با مدارهای درایور خوب وجود دارد، اکثر آنها با استفاده از تراشه stm ساخته شده‌اند و با مجموعه دستورالعمل‌های خاص خود طراحی شده‌اند. به عنوان مثال، با استفاده از دستورالعمل های او به چاپگر اجازه می دهد کاراکترها را چاپ کند یا کاغذ برود، اما کاربردی بودن این چاپگر بسیار بالا است، اما هیچ ارزشی برای یادگیری وجود ندارد. برای ارسال دستورالعمل ها از طریق پورت سریال روی خط، می توانید چاپگر را دستکاری کنید. بنابراین فکر کردم که یک هد چاپ بخرم و خودم آن را توسعه دهم. سپس در مورد هد چاپ، هد چاپ حرارتی ftp را انتخاب کردم.سر چاپ حرارتی ftp
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • این سر چاپ باید در سطح بین المللی در دسترس باشد، اصول اولیه مشابه است. سمت چپ یک موتور پله ای است. سپس سر میانی 6 واحد گرمایش است. هر واحد گرمایش دارای 64 نقطه گرمایش است. بنابراین در مجموع 384 نقطه گرمایش. سپس در زیر یک چفت است. در زیر لچ یک شیفت رجیستر وجود دارد. در نهایت، یک سیگنال ساعت ارائه می شود. بنابراین کل اصل کار این است که یک سیگنال ساعت به هد چاپ ارائه شود و سپس یک داده در هر دوره ساعت ارسال شود، پس از ارسال 384 سیگنال ساعت و 384 داده، داده های موجود در شیفت رجیستر در لچ ذخیره می شود. سپس قفل روی سطح پایین تنظیم می شود. سپس 384 نقطه گرمایش با توجه به 0 یا 1 بودن هر داده گرم می شود یا گرم نمی شود. در همان زمان، اجازه دهید استپر موتور بچرخد تا کاغذ حرارتی را به حرکت درآورد تا کاراکتر مورد نظر طراحی شود. بعد از اینکه چاپ حرارتی را گرفتم head، من رفتم و دیتاشیت خواستم و کابل fpc 30 پین بود. بنابراین واضح است که اتصال مستقیم به پیکو با آن خیلی راحت نیست. بنابراین فکر کردم که بهتر است یک مدار backplane طراحی کنم صفحه نمایش سریال STONE منبع تغذیه 12 ولت است، و سپس به ولتاژ چاپ سر چاپ حرارتی یک مقدار مرجع 7.6 ولت نگاه می کنم، حداکثر مقدار آن 8 ولت است، سپس آن را با ولتاژ حدود 7.6 ولت ارائه می کنم. همچنین دارای ولتاژ منطقی 3.3 ولت است و سپس رزبری پای پیکو حداکثر منبع تغذیه 5 ولت را پشتیبانی می کند و ولتاژ خروجی آن 3.3 ولت است، سپس طراحی منبع تغذیه می تواند از دو dcdc، با منبع تغذیه 12 ولت، یک خروجی dcdc 7.6 ولت استفاده کند. برای تغذیه هد پرینت حرارتی، خروجی dcdc دیگر 5 ولت به پیکو است و سپس از 3.3 ولت پیکو برای تغذیه ولتاژ منطقی هد چاپ حرارتی استفاده کنید. سپس 12 ولت مستقیماً به صفحه سریال هدایت می شود.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • ضمناً، موتور پله ای برای آن هد چاپ حرارتی نیز باید راه اندازی شود. من یک ادغام کننده لوله دارلینگتون یکپارچه دارم. اما خیلی بزرگ است و یک پلاگین مستقیم است، بنابراین فقط یک تراشه درایور بخرید. سپس این جنبه از موتور درایو نیز خوب است. چاپ نیاز به طراحی یک فونت دارد، اساساً همه از spi flash برای ذخیره فونت استفاده می کنند که پروژه بزرگی است. فقط کد ascii بیش از 100 است، بنابراین باید یک فلش SPF دیگر خریداری کنید. سپس کل برنامه ریزی تقریباً به این صورت است.
    STONE Designer (نرم افزار طراحی رابط کاربری گرافیکی)از جانب:https://www.stoneitech.com/support/download/software
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • مدار را طراحی کنیدسپس موارد زیر شروع به طراحی مدار کردند. ابتدا منبع تغذیه را پیدا کنید، در واقع، در ابتدا از یک تنظیم کننده ولتاژ سه ترمینال استفاده کردم، زیرا مدار ساده است، پس از ساخته شدن، وضعیت گرمایش در هنگام اشکال زدایی جدی تر بود، در لمس بسیار داغ بود، بنابراین من تغییر به استفاده می دهم. دی سی دی سی برای انجام نمودار مدار، فقط برگه داده تراشه را مستقیماً دنبال کنید. من mt2492 را در اینجا انتخاب کردم، اما یک پارامتر مهم را نادیده گرفتم، جریان کاری هد چاپ است، حداکثر جریان خروجی این تراشه 2 آمپر است، اما جریان عملکرد هد چاپ 2.3 آمپر، اختلاف 0.3 آمپر، همچنین می توان از آن استفاده کرد. اما کارایی آن چندان بالا نیست، بعداً در مورد اثر خاص صحبت خواهیم کرد.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • بعد چیپ درایور موتوری که خریدم lv8548 هستش، دیتا شیت هد پرینت رو ببینید که با توجه به زمان بندیش نمودار زمانبندی درایو موتور پله ای داره تا سیگنال چهار طرفه pwm رو رویش قرار بدم.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • سپس تراشه فلش، با by25q32bs، ظرفیت 32 مگابیت بسیار بزرگ است، و به pico متصل است و منتظر است تا توسط pico فراخوانی شود.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • پس از آن، نمودار مدار کلی به این صورت است، گوشه بالا سمت چپ سوکت ارتباطی و سوکت منبع تغذیه است، در زیر یک زنگ هشدار وجود دارد (در واقع در مدار استفاده نمی شود)، یک دیود ساطع کننده نور در سمت راست وجود دارد، و گوشه پایین سمت راست یک fpc 30 پین برای اتصال هد چاپ است.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • پس از انجام و قابل استفاده مطابق شکل زیر، با گذاشتن یک محفظه هدر پین روی برد برای Raspberry Pi pico، می توانید مستقیماً به آن وصل کنید.
    Raspberry Pico
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • پاور رو روشن کنید، اول به پیکو و هد پرینت وصل نیست، ولتاژ خروجی dcdc رو اندازه بگیرید، در حالت عادی یکی حدود 7.5 ولت، دیگری حدود 5 ولت.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • سپس هد چاپ، سریال و پیکو را وصل کنید، ولتاژ منطقی را اندازه بگیرید حدود 3.3 ولت است، بعد از مشکلی نمی توانید برنامه را بنویسید.
    برنامهمن قصد دارم ابتدا موتور پله ای را تنظیم کنم، این قسمت به راحتی تنظیم می شود، به نمودار زمان بندی در برگه اطلاعات نگاه کنید، 8 دوره ساعت، هر دوره ساعت باید جداگانه به چهار پایه موتور یک سیگنال منطقی بدهد، پس از 8 دوره موتور خواهد شد روشن کنید و سپس سرعت را تنظیم کنید، اما در وسط باید یک تاخیر اضافه کنیم تا نسبت وظیفه را تنظیم کنیم در غیر این صورت خیلی سریع می چرخد، زمان تاخیری که من تنظیم کردم حدود 5 میلی ثانیه است و بعد از اینکه اجازه دادید بچرخد باید سطح را به کم است، در غیر این صورت به نظر نمی رسد که موتور بچرخد در واقع سیم پیچ داخلی هنوز روشن است، پس از مدت طولانی بوی سوختن را استشمام می کنید. سپس عملکرد را بنویسید، بدن را در یک حلقه قرار دهید، تعداد چرخه ها نشان دهنده طول چرخش موتور، عملکرد کمی طولانی به نظر می رسد، آن را در جای دیگری به تنهایی قرار دهید و منتظر تماس باشید.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • این تابع پس از چند تغییر، سرعت و مدت زمان در برنامه اصلی منتقل می شود. هنوز به بهینه سازی زیادی نیاز دارد. سپس نکته تنظیم هد چاپ است، این قسمت برای من سخت است، به سیگنال ساعت نیاز دارد، برگه داده حداکثر 8M نوشته شده است، فکر کردم به سیگنال حدود 8M نیاز دارد فرکانس، دشوار است، ابتدا فرکانس را با سطح io flip اندازه گرفتم، تفاوت خیلی زیاد است. و سپس می‌خواهم از pio استفاده کنم، و یک روز کامل تحقیق کردم، اما نتیجه خوب نیست، مهارت‌های شخصی من محدود است، احتمالاً باید کتابچه راهنمای تراشه rp2040 را عمیقا مطالعه کنم. سپس دوره‌های سطح 384 را ورق بزنید تا امتحان کنید، گردش کار به این صورت، ورودی داده را 1 پین، قفل 1 پین، سیگنال ساعت 1 پین، 6 پین واحد چاپ را مقداردهی اولیه کنید، و سپس علاوه بر لچ، بقیه را پایین بیاورید، و سپس یک داده را در یک دوره ساعت، پس از چرخه 384 ارسال کنید. بار برای تنظیم لچ روی 0، برای تنظیم واحد چاپ 6 روی 1، و سپس کدام نقطه دارای داده است که کدام نقطه گرم می شود. بعد از اجرای مجموعه، سطح را به عقب بکشید. سپس بعد از اینکه برنامه نوشته شد و شروع به آزمایش کرد، واقعاً کار نکرد، در واقع چون تعداد زیادی واحد چاپ کنترل شده بود اما جریان کافی نبود، سپس آن را تغییر دهید تا کمتر بدهد. دو واحد چاپ سطح بالا و دوباره تست کنید.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • این واقعا کار می کند! این یک خط افقی چاپ می کند. این بدان معناست که محدودیت کمتری در فرکانس ساعت وجود ندارد، سپس می توانید موتور پله را برای چاپ یک خط عمودی اجرا کنید. pico dual thread سپس اجازه دهید نخ دیگر به صورت همزمان موتور را اجرا کند، سپس برنامه را بنویسید و اجرا کنید. خط عمودی بیرون می آید.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • با خطوط افقی و عمودی، سپس یک خط مورب بگیرید، توجه کنید که یک واحد چاپ دارای 64 نقطه است، که طولی را تعریف می کند، مانند 32، و سپس چرخه 32 ضربدر 384 دوره، هر نقطه فقط 64 داده اول را روی 1 تنظیم می کند. و داده های 320 بعدی را روی 0 تنظیم کنید و سپس هر بار 32 بار فقط در واحد اول یک نقطه چاپ کنید و سپس چرخه افزایشی، همراه با سرعت موتور پله ای تنظیم کنید و در نهایت اندازه 64 * 32 را تنظیم کنید. خط مورب، همچنین می توانید ابتدا یک حرف Z را بنویسید.  
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • سپس طرح کلی برنامه وجود دارد، اگر می خواهید کلمه را چاپ کنید باید ابتدا فونت را انجام دهید. ابتدا یک حرف بزرگ A به اندازه 32*32 با لیستی از تعاریف انجام دهید، من قصد دارم در اینجا با pin.value () انجام دهم، بنابراین فونت را بسازید، سپس از 32 سطر و 32 ستون از مقادیر باینری استفاده کنید تا فراخوانی شود. خارج کنید تا یک shift انجام دهید و سپس به pin.value () منتقل کنید، بنابراین این روند پیاده سازی است.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • با 0 به عنوان پس زمینه و 1 به عنوان پیش زمینه، فرآیند پیاده سازی واقعی به این شکل به نظر می رسد.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • خارجی ترین چرخه بزرگ 32 نشان دهنده چرخه 32 خطی است، یعنی 32 خط چاپ می شود، و سپس 32 چرخه اول در داخل برای گرم کردن نیمی از اولین واحد گرمایش است، سپس 352 دوره باقیمانده روی 0 تنظیم می شود. سپس منهای 1 از 31 هر بار تا 0، می توانید اولین خط از نقاطی را که باید گرم شوند از چپ به راست بشمارید و سپس هر 384 دوره تکمیل شود، یک بار که لچ 0 و واحد گرمایش 1 را تنظیم می کند و سپس می توانید چاپ کنید، و سپس یک کلمه بعد از 32 بار حلقه زدن دوباره.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • هنوز هم پررنگ، این نوع کلمه ماتریس نقطه، ابزارهای آنلاین وجود دارد که می توان مستقیماً انجام داد، جلو به اضافه 0b و سپس یک کاما در پشت اضافه کنید، و سپس طبق ایده های خود بازی کنید، فونت در واقع در ابتدا در نظر گرفته شده است. ذخیره شده در تراشه فلش، اما من تنظیم یک مدت طولانی هنوز هم نمی تواند باز شود.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • نمی دونم مشکل از کجاست، بعد از وقت گذاشتن دوباره تنظیم می کنم، خوبیش اینه که خود پیکو فلش سایز 16 مگابیت داره، ذخیره یک کتابخانه ascii هنوز کافیه، پس من خیلی ذخیره شدم.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  • آن را با دیکشنری تعریف کنید، آن را در یک قطعه جداگانه قرار دهید و دوباره آن را در برنامه اصلی فراخوانی کنید. 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.
  • Thermal print head for a parking management system based on Raspberry Pi pico and STONE TFT LCD IOT PlatoBlockchain Data Intelligence. Vertical Search. 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()
  • منبع: اطلاعات افلاطون