قام المحفل

رأس الطباعة الحرارية لنظام إدارة مواقف السيارات على أساس 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.

المواد التي سيتم استخدامها

  • حجر 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. وفي نفس الوقت، دع المحرك السائر يدور لدفع الورق الحراري لتصميم الحرف المطلوب. بعد أن حصلت على الطباعة الحرارية يا رأس، لقد تقدمت بطلب ورقة بيانات وكان عبارة عن كبل FPC ذو 30 سنًا. لذلك من الواضح أنه ليس من المناسب جدًا الاتصال بالبيكو مباشرة به. لذلك اعتقدت أنه من الأفضل أن أصمم دائرة لوحة الكترونية معززة شاشة STONE التسلسلية هو مصدر طاقة بجهد 12 فولت ، ثم أنظر إلى فولطية طباعة رأس الطباعة الحرارية بقيمة مرجعية 7.6 فولت ، والقيمة القصوى هي 8 فولت ، ثم زودها بجهد يبلغ حوالي 7.6 فولت. كما أن لديها جهدًا منطقيًا يبلغ 3.3 فولت ، ثم مزود طاقة Raspberry Pi pico بجهد 5 فولت ولديه جهد إخراج 3.3 فولت ، ثم يمكن لتصميم مصدر الطاقة استخدام اثنين من dcdc ، مع مصدر طاقة 12 فولت ، وإخراج dcdc واحد 7.6 فولت لتشغيل رأس الطباعة الحرارية ، خرج dcdc الآخر 5 فولت إلى بيكو ، ثم استخدم 3.3 فولت من بيكو لتشغيل جهد منطق رأس الطباعة الحراري. ثم يقود 12v الطريق مباشرة إلى الشاشة التسلسلية.
  • 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 آخر. ثم التخطيط كله تقريبا مثل هذا.
    مصمم الحجر ، برنامج مصمم واجهة المستخدم الرسومية)من عند: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 هنا ، لكنني تجاهلت معلمة مهمة هي تيار تشغيل رأس الطباعة ، الحد الأقصى لتيار الإخراج لهذه الشريحة هو 2A ، لكن تيار تشغيل رأس الطباعة 2.3A ، بفارق 0.3A ، يمكن استخدامه أيضًا ، لكن الكفاءة ليست عالية جدًا ، سنتحدث عن التأثير المحدد لاحقًا.
  • 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.
  • بعد ذلك ، يكون الرسم التخطيطي العام للدائرة على هذا النحو ، الزاوية اليسرى العلوية هي مقبس الاتصال ومقبس مصدر الطاقة ، يوجد أسفله صفارة (غير مستخدمة بالفعل في الدائرة) ، يوجد الصمام الثنائي الباعث للضوء على اليمين ، و الزاوية اليمنى السفلية عبارة عن 30 سنًا fpc لتوصيل رأس الطباعة.
  • 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 ، يمكنك توصيله مباشرة به.
    راسبيري باي بيكو
  • 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 ورأس الطباعة ، قم بقياس جهد خرج 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.
  • هذه هي الوظيفة بعد بعض التغييرات، سيتم نقل السرعة والمدة في البرنامج الرئيسي. لا يزال يحتاج إلى الكثير من التحسين. إذًا الهدف هو ضبط رأس الطباعة، هذا الجزء صعب بالنسبة لي، فهو يحتاج إلى إشارة على مدار الساعة، ورقة البيانات مكتوبة بحد أقصى 8 ميجا، اعتقدت أنها تحتاج إلى إشارة حوالي 8 ميجا. التردد، إنه صعب، أولاً قمت بقياس التردد بمستوى io flip، والفرق كبير جدًا. وبعد ذلك أريد استخدام بيو، وقد بحثت يومًا كاملاً ولكن النتيجة ليست جيدة، ومهاراتي الشخصية محدودة، وربما أحتاج إلى دراسة دليل شريحة 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.
  • انها تعمل حقا! لقد طبع خطًا أفقيًا. وهذا يعني أنه لا يوجد حد أدنى لتردد الساعة، ثم يمكنك تشغيل محرك السائر لطباعة خط عمودي. بيكو خيط مزدوج، ثم دع الخيط الآخر يقوم بتشغيل المحرك بشكل متزامن، ثم اكتب البرنامج وقم بتشغيله. الخط العمودي يخرج.
  • 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 عمودًا من القيم الثنائية ليتم استدعاؤها ، اخرج لإجراء تحول ثم قم بالتمرير إلى 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.
  • لا تزال جريئة ، هذا النوع من كلمة المصفوفة النقطية ، هناك أدوات على الإنترنت يمكن إجراؤها مباشرةً ، فالأمام بالإضافة إلى 0 ب ثم إضافة فاصلة في الخلف ، ثم تلعب وفقًا لأفكارك الخاصة ، فالخط يُقصد به في البداية أن يكون مخزنة في شريحة الفلاش ، لكنني أقوم بضبطها لفترة طويلة لا يزال يتعذر فتحها.
  • 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 ميغا بايت ، وتخزين مكتبة أسكي لا تزال كافية ، ثم أنا مخزنة.
  • 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()
  • المصدر: معلومات أفلاطون