IOT

หัวพิมพ์ความร้อนสำหรับระบบจัดการที่จอดรถที่ใช้ Raspberry Pi pico และ STONE TFT LCD

แนะนำสั้น ๆ

เครื่องพิมพ์เทอร์มอลเป็นเรื่องธรรมดาในชีวิตประจำวันของเรา และมีตัวอย่างเครื่องพิมพ์เทอร์มอลในร้านอาหาร ที่จอดรถ และแหล่งช้อปปิ้ง บทความนี้จะเน้นที่การใช้เครื่องพิมพ์เทอร์มอลในระบบที่จอดรถ

หัวพิมพ์ความร้อนสำหรับระบบจัดการที่จอดรถที่ใช้ Raspberry Pi pico และ STONE TFT LCD IOT PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.

วัสดุที่ใช้

  • สโตน STWI101WT-01
  • หัวเครื่องพิมพ์ความร้อน FTP
  • ราสเบอร์รี่ Pi pico
    • เครื่องหยอดเหรียญ
    ฟังก์ชันฟังก์ชั่นการควบคุมแสดงขึ้นบนหน้าจอซีเรียล อินเทอร์เฟซหลักจะเลือกพื้น หลังจากเข้าสู่อินเทอร์เฟซหลักจะเลือกพื้นที่จอดรถ ในเวลาเดียวกันก็จะแสดงหมายเลขพื้นที่จอดรถในกล่องข้อความที่ด้านบนขวา จากนั้นเลือก เวลาพัก มันคือตัวเลือกข้อความแบบเลื่อนสองตัว จากนั้นจะแสดงข้อมูลคำสั่งซื้อในกล่องข้อความที่ด้านบนขวาตามราคาต่อหน่วยคงที่ซึ่งคูณด้วยเวลาเข้าพักเพื่อรับราคารวม จากนั้นเมื่อเลือกพื้นที่จอดรถและเวลาเข้าพักเท่านั้นคุณสามารถไปที่ปุ่มชำระเงินมิฉะนั้นจะไม่ถูกต้อง หลังจากเข้าสู่หน้าจอการชำระเงินแล้ว ระบบจะใช้ตัวรับเหรียญ จากนั้นหน้าจอจะแสดงจำนวนเหรียญที่จะใส่และจำนวนเหรียญที่ใส่เข้าไปแล้ว หลังจากใส่เหรียญแล้ว ข้อความแสดงความสำเร็จในการชำระเงินจะปรากฏขึ้น จากนั้นคุณสามารถเลือกพิมพ์ตั๋วขนาดเล็กเพื่อพิมพ์หมายเลขสถานที่และเวลาบนกระดาษความร้อนได้ขั้นตอนการออกแบบตอนแรกฉันต้องการใช้ ราสเบอร์รี่ Pi pico เพื่อสร้างเครื่องพิมพ์ขนาดเล็ก ในกระบวนการเลือกส่วนประกอบ ฉันคิดว่าเครื่องพิมพ์เทอร์มอลสะดวกกว่าที่จะทำสำเร็จ หลังจากพิจารณาโปรแกรมแล้ว ฉันก็เริ่มซื้อฮาร์ดแวร์ อันที่จริง ในกระบวนการจัดซื้อออนไลน์ ฉันพบว่ามีเครื่องพิมพ์เทอร์มอลจำนวนมากที่มีวงจรขับที่ดี ส่วนใหญ่ผลิตโดยใช้ชิปของ stm และได้รับการออกแบบด้วยชุดคำสั่งของตนเอง ตัวอย่างเช่นโดยใช้คำแนะนำของเขาเพื่อให้เครื่องพิมพ์พิมพ์ตัวอักษรหรือกระดาษ แต่การใช้งานจริงของเครื่องพิมพ์นี้สูงมาก แต่ไม่มีค่าของการเรียนรู้ มันคือการส่งคำสั่งผ่านพอร์ตอนุกรมในบรรทัดคุณสามารถจัดการเครื่องพิมพ์ เลยคิดว่าจะซื้อหัวพิมพ์มาพัฒนาเอง เกี่ยวกับหัวพิมพ์ ฉันเลือกหัวพิมพ์ความร้อน ftpหัวพิมพ์ความร้อน ftp
  • หัวพิมพ์ความร้อนสำหรับระบบจัดการที่จอดรถที่ใช้ Raspberry Pi pico และ STONE TFT LCD IOT PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.
  • หัวพิมพ์นี้ควรจะมีจำหน่ายในระดับสากล หลักการพื้นฐานจะคล้ายคลึงกัน ด้านซ้ายเป็นสเต็ปเปอร์มอเตอร์ จากนั้นหัวตรงกลางคือ 6 หน่วยทำความร้อน หน่วยทำความร้อนแต่ละหน่วยมีจุดความร้อน 64 จุด ดังนั้นจุดความร้อนทั้งหมด 384 จุด จากนั้นด้านล่างเป็นสลัก ด้านล่างสลักเป็น shift register ในที่สุดก็มีสัญญาณนาฬิกาให้ ดังนั้นหลักการทำงานทั้งหมดคือการให้สัญญาณนาฬิกากับหัวพิมพ์แล้วส่งข้อมูลทุกช่วงเวลาสัญญาณนาฬิกา หลังจากส่งสัญญาณนาฬิกา 384 และข้อมูล 384 ข้อมูลใน shift register จะถูกเก็บไว้ในสลัก จากนั้นสลักถูกตั้งไว้ที่ระดับต่ำ จากนั้นจุดความร้อน 384 จุดจะเลือกให้ความร้อนหรือไม่ให้ความร้อนตามแต่ละข้อมูลเป็น 0 หรือ 1 ในขณะเดียวกันให้สเต็ปเปอร์มอเตอร์หมุนเพื่อขับเคลื่อนกระดาษความร้อนเพื่อออกแบบตัวละครที่ต้องการ หลังจากที่ผมได้พิมพ์ความร้อน ฉันไปข้างหน้าและขอแผ่นข้อมูลและเป็นสายเคเบิล 30pin fpc ดังนั้นจึงไม่สะดวกที่จะเชื่อมต่อกับ pico โดยตรงด้วย เลยคิดว่าออกแบบวงจรแบ็คเพลนดีกว่า ฉันมี หน้าจออนุกรม STONE เป็นแหล่งจ่ายไฟ 12v จากนั้นฉันดูที่แรงดันการพิมพ์หัวพิมพ์ความร้อนของค่าอ้างอิงคือ 7.6v ค่าสูงสุดคือ 8v จากนั้นให้แรงดันไฟฟ้าประมาณ 7.6v นอกจากนี้ยังมีแรงดันลอจิก 3.3v จากนั้น Raspberry Pi pico รองรับแหล่งจ่ายไฟ 5v สูงสุดและมีแรงดันเอาต์พุต 3.3v จากนั้นการออกแบบแหล่งจ่ายไฟสามารถใช้สอง dcdc พร้อมแหล่งจ่ายไฟ 12v หนึ่งเอาต์พุต dcdc 7.6v เพื่อจ่ายไฟให้กับหัวพิมพ์แบบใช้ความร้อน เอาต์พุต dcdc อื่นๆ 5v ไปยัง pico จากนั้นใช้ 3.3v จาก pico เพื่อจ่ายไฟให้กับแรงดันลอจิกของหัวพิมพ์แบบใช้ความร้อน จากนั้น 12v นำไปสู่หน้าจอซีเรียลโดยตรง
  • หัวพิมพ์ความร้อนสำหรับระบบจัดการที่จอดรถที่ใช้ Raspberry Pi pico และ STONE TFT LCD IOT PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.
  • ยังไงก็ตาม สเต็ปเปอร์มอเตอร์สำหรับหัวพิมพ์แบบใช้ความร้อนนั้นยังต้องถูกขับเคลื่อนด้วย ฉันมีตัวรวมหลอดดาร์ลิงตันในตัว แต่มันใหญ่เกินไป และเป็นปลั๊กอินแบบตรง ดังนั้นเพียงแค่ซื้อชิปไดรเวอร์ ส่วนนี้ของมอเตอร์ขับเคลื่อนก็ใช้ได้เช่นกัน การพิมพ์ต้องมีการออกแบบฟอนต์ โดยพื้นฐานแล้ว ทุกคนใช้ spi flash สำหรับการจัดเก็บฟอนต์ ซึ่งเป็นโปรเจ็กต์ขนาดใหญ่ มีเพียงรหัส ascii ที่มากกว่า 100 ดังนั้นคุณต้องซื้อแฟลช SPF อื่น จากนั้นการวางแผนทั้งหมดก็เกือบจะเป็นแบบนี้
    STONE Designer (ซอฟต์แวร์ออกแบบ GUI)เดส์เด:https://www.stoneitech.com/support/download/software
  • หัวพิมพ์ความร้อนสำหรับระบบจัดการที่จอดรถที่ใช้ Raspberry Pi pico และ STONE TFT LCD IOT PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.
  • หัวพิมพ์ความร้อนสำหรับระบบจัดการที่จอดรถที่ใช้ Raspberry Pi pico และ STONE TFT LCD IOT PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.
  • ออกแบบวงจรต่อไปนี้ก็เริ่มออกแบบวงจร แรกพบแหล่งจ่ายไฟในความเป็นจริงที่จุดเริ่มต้นฉันใช้ตัวควบคุมแรงดันไฟฟ้าสามขั้วเพราะวงจรง่ายหลังจากถูกสร้างขึ้นสถานการณ์ความร้อนก็ร้ายแรงมากขึ้นในระหว่างการดีบักร้อนมากที่จะสัมผัสดังนั้นฉันเปลี่ยนไปใช้ ดีซี เพียงทำตามแผ่นข้อมูลชิปโดยตรงเพื่อทำแผนภาพวงจร ฉันเลือก mt2492 ที่นี่ แต่ฉันไม่สนใจพารามิเตอร์ที่สำคัญคือกระแสไฟทำงานของหัวพิมพ์ กระแสไฟขาออกสูงสุดของชิปนี้คือ 2A แต่กระแสไฟของหัวพิมพ์ 2.3A ความแตกต่าง 0.3A ยังสามารถใช้ได้ แต่ประสิทธิภาพไม่สูงนัก เราจะพูดถึงผลกระทบเฉพาะในภายหลัง
  • หัวพิมพ์ความร้อนสำหรับระบบจัดการที่จอดรถที่ใช้ Raspberry Pi pico และ STONE TFT LCD IOT PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.
  • จากนั้นชิปไดรเวอร์มอเตอร์ที่ฉันซื้อคือ lv8548 ดูแผ่นข้อมูลหัวพิมพ์ซึ่งมีไดอะแกรมกำหนดเวลาไดรฟ์สเต็ปเปอร์มอเตอร์ตามเวลาเพื่อให้สัญญาณ pwm สี่ทางบนนั้น
  • หัวพิมพ์ความร้อนสำหรับระบบจัดการที่จอดรถที่ใช้ Raspberry Pi pico และ STONE TFT LCD IOT PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.
  • จากนั้นเป็นชิปแฟลชที่มีขนาด 25q32bs ความจุ 32Mbit ค่อนข้างใหญ่และเชื่อมต่อกับ pico รอให้ pico เรียก
  • หัวพิมพ์ความร้อนสำหรับระบบจัดการที่จอดรถที่ใช้ Raspberry Pi pico และ STONE TFT LCD IOT PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.
  • หลังจากนั้นแผนภาพวงจรโดยรวมเป็นแบบนี้ มุมบนซ้ายเป็นซ็อกเก็ตการสื่อสารและซ็อกเก็ตแหล่งจ่ายไฟ ด้านล่างมีออด (ไม่ได้ใช้จริงในวงจร) มีไดโอดเปล่งแสงทางด้านขวา และ มุมล่างขวาคือ 30pin fpc สำหรับเชื่อมต่อหัวพิมพ์
  • หัวพิมพ์ความร้อนสำหรับระบบจัดการที่จอดรถที่ใช้ Raspberry Pi pico และ STONE TFT LCD IOT PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.
  • หลังจากทำเสร็จแล้วและสามารถใช้งานได้ดังแสดงด้านล่าง โดยทิ้งช่องเสียบส่วนหัวของพินไว้บนบอร์ดสำหรับ Raspberry Pi pico คุณสามารถเสียบปลั๊กได้โดยตรง
    ราสเบอร์รี่ Pi pico
  • หัวพิมพ์ความร้อนสำหรับระบบจัดการที่จอดรถที่ใช้ Raspberry Pi pico และ STONE TFT LCD IOT PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.
  • เปิดเครื่องก่อนไม่ได้เชื่อมต่อกับ pico และหัวพิมพ์ วัดแรงดันไฟขาออกของ dcdc ในกรณีปกติอันหนึ่งคือ 7.5v อีกอันหนึ่งประมาณ 5v
  • หัวพิมพ์ความร้อนสำหรับระบบจัดการที่จอดรถที่ใช้ Raspberry Pi pico และ STONE TFT LCD IOT PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.
  • หัวพิมพ์ความร้อนสำหรับระบบจัดการที่จอดรถที่ใช้ Raspberry Pi pico และ STONE TFT LCD IOT PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.
  • หัวพิมพ์ความร้อนสำหรับระบบจัดการที่จอดรถที่ใช้ Raspberry Pi pico และ STONE TFT LCD IOT PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.
  • จากนั้นเชื่อมต่อหัวพิมพ์ หน้าจออนุกรม และปิโก วัดแรงดันลอจิกประมาณ 3.3v หลังจากไม่มีปัญหา คุณสามารถเขียนโปรแกรมได้
    โครงการฉันตั้งใจจะปรับสเต็ปเปอร์มอเตอร์ก่อน ส่วนนี้ง่ายต่อการปรับ ดูแผนภาพเวลาในแผ่นข้อมูล 8 ช่วงเวลานาฬิกา ทุกช่วงเวลานาฬิกาควรแยกสัญญาณลอจิกสี่พินของมอเตอร์ หลังจาก 8 ช่วงเวลา มอเตอร์จะ เปิดขึ้นแล้วปรับความเร็ว แต่ตรงกลางเราต้องเพิ่มการหน่วงเวลาเพื่อปรับอัตราส่วนหน้าที่มิฉะนั้นจะเร็วเกินไปเวลาหน่วงที่ฉันตั้งไว้ประมาณ 5ms แล้วหลังจากปล่อยให้มันหมุนคุณต้องให้ระดับ ต่ำมิฉะนั้นมอเตอร์ดูเหมือนจะไม่หมุนในความเป็นจริงขดลวดภายในยังคงอยู่หลังจากผ่านไปนานคุณสามารถได้กลิ่นเหม็นไหม้จากนั้นเขียนฟังก์ชันใส่ร่างกายในวงจำนวนรอบหมายถึง ความยาวของการหมุนของมอเตอร์ ฟังก์ชันดูยาวไปหน่อย วางไว้ที่อื่นคนเดียวแล้วรอรับสาย
  • หัวพิมพ์ความร้อนสำหรับระบบจัดการที่จอดรถที่ใช้ Raspberry Pi pico และ STONE TFT LCD IOT PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.
  • หัวพิมพ์ความร้อนสำหรับระบบจัดการที่จอดรถที่ใช้ Raspberry Pi pico และ STONE TFT LCD IOT PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.
  • นี่คือฟังก์ชันหลังจากการเปลี่ยนแปลงเล็กน้อย ความเร็วและระยะเวลาจะถูกส่งไปยังโปรแกรมหลัก มันยังต้องการการปรับให้เหมาะสมอีกมาก จากนั้นเป็นจุดของการปรับหัวพิมพ์ ส่วนนี้ยากสำหรับฉัน มันต้องการสัญญาณนาฬิกา แผ่นข้อมูลเขียนสูงสุด 8M ฉันคิดว่ามันต้องการสัญญาณประมาณ 8M ความถี่ มันยาก ก่อนอื่นฉันวัดความถี่ด้วยระดับการพลิก io ความแตกต่างมากเกินไป แล้วฉันต้องการใช้ pio และฉันก็ค้นคว้ามาทั้งวันแต่ผลลัพธ์ไม่ดี ทักษะส่วนตัวของฉันมีจำกัด บางทีฉันอาจต้องศึกษาคู่มือการใช้ชิป rp2040 อย่างลึกซึ้ง จากนั้นพลิกระดับ 384 ช่วงเพื่อลอง มันคือ เวิร์กโฟลว์เช่นนี้ เริ่มต้นการป้อนข้อมูล 1 พิน สลัก 1 พิน สัญญาณนาฬิกา 1 พิน พินหน่วยการพิมพ์ 6 อัน จากนั้นจึงทำการดึงข้อมูลอื่นๆ ทั้งหมดด้วยแรงต่ำ จากนั้นจึงส่งข้อมูลหนึ่งรายการภายในระยะเวลาหนึ่งนาฬิกา หลังจากวนรอบ 384 ครั้งเพื่อตั้งค่าสลักเป็น 0 เพื่อตั้งค่าหน่วยการพิมพ์ 6 เป็น 1 จากนั้นจุดใดจะมีข้อมูลว่าจุดใดจะถูกทำให้ร้อน หลังจากใช้งานชุดแล้วดึงระดับกลับ จากนั้นเขียนโปรแกรมและเริ่มทดสอบแล้วใช้งานไม่ได้จริง ๆ เพราะมีการควบคุมหน่วยการพิมพ์มากเกินไป แต่กระแสไม่เพียงพอจึงเปลี่ยนให้น้อยลง สองหน่วยการพิมพ์ระดับสูงและทดสอบอีกครั้ง
  • หัวพิมพ์ความร้อนสำหรับระบบจัดการที่จอดรถที่ใช้ Raspberry Pi pico และ STONE TFT LCD IOT PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.
  • มันใช้งานได้จริง! มันพิมพ์เส้นแนวนอน นั่นหมายความว่าไม่มีขีดจำกัดล่างของความถี่สัญญาณนาฬิกา จากนั้นคุณสามารถเรียกใช้สเต็ปเปอร์มอเตอร์เพื่อพิมพ์เส้นแนวตั้งได้ pico dual thread จากนั้นให้เธรดอื่นทำงานแบบซิงโครนัสมอเตอร์ จากนั้นเขียนโปรแกรมและรัน เส้นแนวตั้งออกมา
  • หัวพิมพ์ความร้อนสำหรับระบบจัดการที่จอดรถที่ใช้ Raspberry Pi pico และ STONE TFT LCD IOT PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.
  • ด้วยเส้นแนวนอนและแนวตั้งแล้วจึงได้เส้นทแยงมุมมาสนใจหน่วยพิมพ์หนึ่งมี 64 จุด ที่กำหนดความยาว เช่น 32 แล้ววนรอบ 32 ครั้ง 384 งวด แต่ละช่วงกำหนดเฉพาะ 64 ข้อมูลแรกเป็น 1 และตั้งค่าข้อมูล 320 ถัดไปเป็น 0 จากนั้นครั้งละ 32 ครั้งเท่านั้นในหน่วยแรกเพื่อพิมพ์จุดแล้ววนเพิ่มขึ้นรวมกับความเร็วของสเต็ปเปอร์มอเตอร์เพื่อปรับและในที่สุดก็ปรับขนาด 64 * 32 ของ เส้นทแยงมุม คุณสามารถสะกดด้วยตัวอักษร Z ก่อน  
  • หัวพิมพ์ความร้อนสำหรับระบบจัดการที่จอดรถที่ใช้ Raspberry Pi pico และ STONE TFT LCD IOT PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.
  • แล้วเค้าร่างของโปรแกรมก็อยู่ที่นั่น ถ้าคุณต้องการพิมพ์คำ คุณต้องทำแบบอักษรก่อน ขั้นแรกให้ทำอักษรตัวใหญ่ A ขนาด 32 * 32 พร้อมรายการคำจำกัดความ ฉันกำลังวางแผนที่จะทำที่นี่ด้วย pin.value () ดังนั้นให้สร้างแบบอักษร จากนั้นใช้ 32 แถวและ 32 คอลัมน์ของค่าไบนารีที่จะเรียก ออกไปทำกะแล้วส่งต่อไปยัง pin.value () ดังนั้นนี่คือกระบวนการของการดำเนินการ
  • หัวพิมพ์ความร้อนสำหรับระบบจัดการที่จอดรถที่ใช้ Raspberry Pi pico และ STONE TFT LCD IOT PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.
  • โดยที่ 0 เป็นพื้นหลังและ 1 เป็นพื้นหน้า กระบวนการใช้งานจริงจะมีลักษณะดังนี้
  • หัวพิมพ์ความร้อนสำหรับระบบจัดการที่จอดรถที่ใช้ Raspberry Pi pico และ STONE TFT LCD IOT PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.
  • รอบใหญ่ภายนอกส่วนใหญ่ 32 แสดงถึงรอบ 32 บรรทัด นั่นคือ พิมพ์ 32 บรรทัด จากนั้น 32 รอบแรกภายในคือให้ความร้อนครึ่งหนึ่งของชุดทำความร้อนชุดแรก จากนั้น 352 ช่วงที่เหลือจะถูกตั้งค่าเป็น 0 และ จากนั้นลบ 1 จาก 31 ในแต่ละครั้งจนถึง 0 คุณสามารถนับบรรทัดแรกของจุดที่จำเป็นต้องอุ่นจากซ้ายไปขวาจากนั้นทุก ๆ 384 รอบจะเสร็จสมบูรณ์เมื่อสลักตั้ง 0 และหน่วยทำความร้อนชุดที่ 1 แล้ว คุณสามารถพิมพ์ แล้วตามด้วยคำ A หนึ่งคำหลังจากวนซ้ำ 32 ครั้งอีกครั้ง
  • หัวพิมพ์ความร้อนสำหรับระบบจัดการที่จอดรถที่ใช้ Raspberry Pi pico และ STONE TFT LCD IOT PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.
  • ยังคงหนา ดอทเมทริกซ์คำแบบนี้ มีเครื่องมือออนไลน์ที่สามารถทำได้โดยตรง ด้านหน้าบวก 0b แล้วเพิ่มเครื่องหมายจุลภาคที่ด้านหลัง และจากนั้น คุณเล่นตามความคิดของคุณเอง จริง ๆ แล้วฟอนต์ตั้งใจให้เป็น เก็บไว้ในแฟลชชิปแต่ปรับนานยังเปิดไม่ได้
  • หัวพิมพ์ความร้อนสำหรับระบบจัดการที่จอดรถที่ใช้ Raspberry Pi pico และ STONE TFT LCD IOT PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.
  • ฉันไม่รู้ว่าปัญหาอยู่ที่ไหน หลังจากมีเวลา ฉันจะปรับอีกครั้ง สิ่งที่ดีคือ pico เองมีแฟลชขนาด 16mbit จัดเก็บไลบรารี ascii ไว้เพียงพอ จากนั้นฉันก็เก็บไว้
  • หัวพิมพ์ความร้อนสำหรับระบบจัดการที่จอดรถที่ใช้ Raspberry Pi pico และ STONE TFT LCD IOT PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง 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.
  • หัวพิมพ์ความร้อนสำหรับระบบจัดการที่จอดรถที่ใช้ Raspberry Pi pico และ STONE TFT LCD IOT PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง 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()
  • ที่มา: Plato Data Intelliigence