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

- ต่อ 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 มืออาชีพเลยน้องเอ๊ย!