กลับไปหน้ารวมไฟล์
octoprint-printing-monitor-ce1575.md

ชื่อโปรเจกต์: OctoPrint Printing Monitor

เฮ้ยน้อง พี่ว่าโปรเจกต์นี้โคตรมีประโยชน์สำหรับคนที่ใช้ OctoPrint เลยว่ะ มันคือจอ Monitor ที่มีไฟ Backlight สีสวยๆ คอยบอกสถานะการพิมพ์ของเรา โดยมันจะไปดึงข้อมูลผ่าน OctoPrint API มาโชว์แบบ Real-time เลย หลักการคือเราจะใช้ Python script บน Raspberry Pi เชื่อมต่อกับ Arduino Leonardo (จริงๆ จะใช้บอร์ดไหนก็ได้ที่มี USB port นะ แต่พอดีพี่มี Leo เหลืออยู่เลยหยิบมาใช้) เพื่อส่งข้อมูลไปแสดงผล แถมเรายังสั่งงานเครื่องพิมพ์ผ่านไอ้จอนี้ได้ด้วยนะ อย่างเจ๋ง!

Step 1: ไปเอา OctoPrint API Key มาซะ

อันดับแรกน้องต้องมี API Key ก่อนนะ ก๊อปมันเก็บไว้ให้ดีล่ะ

Step 2: เซ็ตอัพ Raspberry Pi ให้รัน Python Script

เริ่มแรกน้องต้องเชื่อมต่อเข้า Raspberry Pi ผ่าน SSH ก่อนนะ

พอล็อกอินเสร็จแล้ว ฟาดคำสั่งนี้ลงไปเลย:

sudo apt-get install python3-pip

เสร็จแล้วต้องลง Python Package เพิ่มเติมหน่อย:

sudo pip3 install pyserial

ลงทุกอย่างเสร็จแล้ว ก็ไปโหลด Python script มาจากหน้า Github (ลองหาดูใน repository นะน้อง)

จากนั้นพิมพ์ในหน้า SSH Terminal ว่า sudo nano port.py แล้วก๊อปโค้ดทั้งหมดจากไฟล์ octoprint-monitor.py มาวางลงไป ตรง Variable ที่ชื่อ API ให้น้องใส่ API Key ของ OctoPrint ที่เซฟไว้ตอนแรก (คลิกขวาที่เมาส์เพื่อวางได้เลย) เสร็จแล้วกด Ctrl + X, พิมพ์ "y" แล้วกด Enter เพื่อ Save

ต่อมาสร้างไฟล์ logMaster.py ด้วยคำสั่ง sudo nano logMaster.py แล้วก๊อปโค้ดมาวางเหมือนเดิม เสร็จแล้วกด Ctrl + X, พิมพ์ "y" แล้ว Enter

คราวนี้ลองรันด้วยคำสั่ง: sudo python3 port.py

ถ้าขึ้น Error อะไรมาล่ะก็ กลับไปเช็คขั้นตอนก่อนหน้าให้ดีนะน้อง แต่ถ้ามันขึ้นว่า:

Connecting...
Connected.
ใน Terminal แบบนี้แสดงว่าผ่านฉลุย! กด Ctrl+C ออกมาได้เลย

Step 3: ปริ้นเคสใส่จอ LCD

พี่ใช้จอ LCD 20x4 นะ

น้องไปหาไฟล์ 3D สำหรับปริ้นเคสมาจัดการให้เรียบร้อย (ในเว็บ Thingiverse มีแจกอยู่ ลองหาดูนะ)

Step 4: ต่อสายทุกอย่างเข้า Arduino

ดูตาม Wiring Diagram นี้เลย จัดการต่อจอ [LCD](https://s.shopee.co.th/6AfsSPcAnb) เข้ากับบอร์ด [Arduino](https://s.shopee.co.th/7fUgFAWSki) ซะ
  • ต่อ Buzzer เข้าที่ Pin 9
  • Button 1 เข้า Pin 7
  • Button 2 เข้า Pin 8
  • Button 3 เข้า Pin 10
  • Button 4 เข้า Pin 13
  • Temperature Sensor เข้า Pin 0
  • LED strip เข้า Pin 6

เสร็จแล้วเอาไปติดตั้งข้างเครื่องพิมพ์ เอากาวติดจอ LCD กับปุ่มเข้ากับเคสที่ปริ้นมา แล้วยึดเคสด้วยเทปกาวสองหน้าให้แน่น

เสียบสาย USB เชื่อม Arduino เข้ากับ Raspberry Pi

สุดท้ายต่อ Power Supply ให้ Arduino กับ LED strip ตามรูป ห้ามช็อตนะตัวนี้ เดี๋ยวงานงอก!

Step 5: อัปโหลด Sketch ลง Arduino

น้องไปโหลดไฟล์ octoprint-monitor.ino มา แล้วจัดการ Upload ลง Arduino เลย

แต่อย่าลืมลง Library พวกนี้ด้วยนะ:

  • Adafruit NeoPixel
  • Liquid Crystal (ตัวนี้ปกติมีมาให้ใน Arduino IDE อยู่แล้ว)
  • Troyka DHT library

เสร็จแล้วก็เสียบ Arduino เข้ากับ Raspberry Pi ไว้เลย

Step 6: เช็คความเรียบร้อย

UPDATE: พี่เพิ่มระบบ Auto port detection ให้แล้วนะ! ทีนี้ไม่ต้องมานั่งหาแล้วว่า Arduino ต่ออยู่ Port ไหน

ลองรันโค้ด Python ดู ถ้าเห็นข้อความว่า "Connected serial" ก็แสดงว่าหล่อเท่เลยงานนี้

Step 7: ตั้งค่าให้ Script รันเองตอนเปิดเครื่อง (Auto Start Up)

จะให้มันเจ๋งจริง มันต้องรันเองตอนเปิดเครื่อง Raspberry Pi ใช่ไหมล่ะ? ง่ายๆ พิมพ์คำสั่งนี้:

sudo crontab -e

แล้วเพิ่มบรรทัดนี้ลงไปที่ท้ายไฟล์:

@reboot /usr/bin/python3 /home/pi/port.py

แค่นี้แหละน้อง ลอง Reboot เครื่อง Raspberry Pi แล้วเช็คดูว่าทุกอย่างทำงานปกติไหม

Step 8: เสร็จงาน!

ขั้นตอนสุดท้ายแล้ว... เช็คทุกอย่างอีกรอบ ถ้ามีอะไรไม่เวิร์ก หรือติดตรงไหน พิมพ์คอมเมนต์ถามมาได้เลย

ขอบใจที่ตั้งใจฟัง สู้งานนะน้อง!


รายละเอียดทางเทคนิคเพิ่มเติม (TECHNICAL DETAILS)

ระบบ Monitor สถานะการผลิต (3D Production Telemetry)

โปรเจกต์นี้คือการทำ Hardware Dashboard เพื่อดูสถานะของเครื่องพิมพ์ 3D ที่คุมผ่าน OctoPrint ช่วยให้เราเช็คงานพิมพ์ที่ใช้เวลานานๆ ได้ง่ายๆ แค่เหลือบมอง

  • OctoPrint REST API Interface: บอร์ด (เช่น ESP8266/ESP32 หรือ Arduino) จะคุยกับ OctoPrint Server ผ่าน Network เพื่อส่ง API request ไปขอค่า "Job Progress (%)", "Tool Temperature" และ "Time Remaining" มาโชว์
  • การประมวลผล JSON Payload: ระบบจะแกะข้อมูล (Extract) ค่าตัวเลขต่างๆ จาก JSON response ที่ได้จาก OctoPrint แล้วเอามาอัปเดตบนจอ I2C OLED หรือ 20x4 LCD

ระบบความปลอดภัยและสัญญาณไฟ (Safety Cues)

  • Thermal Visualizer: มีการใช้ NeoPixel ring มาช่วยบอกสถานะด้วยสี เช่น สีฟ้า (Idle/ว่าง), สีส้ม (Heating/กำลังร้อน), สีเขียว (Finished/พิมพ์เสร็จแล้ว) ทำให้เราเห็นสถานะเครื่องได้จากระยะไกล เหมาะมากสำหรับคนทำ Farm เครื่องพิมพ์ 3D มืออาชีพเลยน้องเอ๊ย!

ข้อมูล Frontmatter ดั้งเดิม

title: "OctoPrint Printing Monitor"
description: "It's a screen with colorful backlight that shows you some information about printing progress."
author: "ralex2304"
category: "Sensors & Environment"
tags:
  - "lcd display"
  - "3d printing"
  - "usb"
  - "leonardo"
views: 14263
likes: 2
price: 1499
difficulty: "Intermediate"
components:
  - "1x Tape, Electrical Insulation"
  - "1x Wire Stripper, Reflex™ Premium T®-5 T®-Stripper"
  - "1x Raspberry Pi 3 Model B+"
  - "1x Barrel Jack Female Pigtail Lead 2.1 - 5.5mm"
  - "1x Buzzer"
  - "1x Troyka 4 button module"
  - "1x Tape, Double Sided"
  - "1x 3D Printer (generic)"
  - "1x Jumper wires (generic)"
  - "1x Alphanumeric LCD, 20 x 4"
  - "1x Breadboard (generic)"
  - "1x Adafruit NeoPixel Digital RGB LED Strip 144 LED, 1m White"
  - "1x USB-A to Micro-USB Cable"
  - "1x Soldering iron (generic)"
  - "1x Power supply 12v 3a"
  - "1x Solder Flux, Soldering"
  - "1x DHT21 temperature and humidity sensor"
  - "1x Arduino Leonardo"
tools: []
apps:
  - "1x Arduino IDE"
  - "1x Putty"
  - "1x Sublime Text 3"
  - "1x Octoprint"
downloadableFiles:
  - "https://github.com/amperka/TroykaDHT"
  - "https://github.com/ralex2304/Octoprint-printing-monitor"
  - "https://github.com/ralex2304/Octoprint-printing-monitor"
  - "https://github.com/adafruit/Adafruit_NeoPixel"
  - "https://github.com/amperka/TroykaDHT"
documentationLinks: []
passwordHash: "5e80b3dcb462f5a9580bb4a413e767c6f8b158c3cfd92524e476c7ac549ad0c5"
encryptedPayload: "U2FsdGVkX18pXHV65fZSitSfK/i37R46holL+hms5WZIFQp02KVauIQGQOlxm9+gD0iQ3jidoDJlHZV+ABHoOi8/X5q9Yv9GIGqGduYELpkx1JlwTP3J/SVifV6KFMhBM9maDrjetdIWkU0TehVGhFX84CYQdUFQM3m79yf5rZk="
seoDescription: "Build an OctoPrint Printing Monitor with a colorful backlight Screen to track 3D printing Progress."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/octoprint-printing-monitor-ce1575_cover.jpg"
lang: "th"