- Sol Mate e-Paper Display คือโปรเจกต์ที่สร้างภาพประกอบซึ่งสะท้อนสภาพอากาศและสภาพแสงปัจจุบันของตำแหน่งที่กำหนด แล้วแสดงบนหน้าจอ Waveshare e-Paper ที่เชื่อมต่อกับ Raspberry Pi
- สคริปต์รับตำแหน่งเป็นอินพุต ดึงข้อมูลสภาพอากาศ และเรนเดอร์ภาพคุณภาพสูงโดยใช้พรอมป์ที่สร้างด้วย gpt-5-mini ร่วมกับ gpt-image-1-mini จึงต้องใช้โทเค็น OpenAI API
- สามารถป้อนได้ทั้งตำแหน่งจริง ตำแหน่งของเพื่อน หรือแม้แต่ สถานที่สมมติ โดยสำหรับสถานที่สมมติ GPT จะส่งละติจูด·ลองจิจูดของสถานที่บนโลกที่ใกล้เคียงที่สุดไปยังบริการสภาพอากาศ
- ฮาร์ดแวร์อ้างอิงคือ Raspberry Pi 5 และ Waveshare e-Paper 7.3" display หากใช้จอขนาดอื่นต้องแก้ไขโค้ด
control.py รองรับการแสดงผลบนหน้าจอ การพรีวิวในเครื่อง และการล้างหน้าจอ โดยควรพิจารณาทั้งคำแนะนำของ Waveshare ที่ไม่ให้แสดงภาพเดิมค้างไว้นานเกินไป และความเป็นไปได้ที่ค่าใช้จ่าย API จะเพิ่มขึ้น
Sol Mate e-Paper Display ทำอะไรได้บ้าง
- Sol Mate e-Paper Display คือชุดโค้ดสำหรับสร้างและแสดง ภาพรายงานสภาพอากาศ ด้วย Raspberry Pi และจอ Waveshare e-Paper
- ตอนแรกสร้างขึ้นด้วย ☀️ Sol Mate GPT และต่อมาผู้สร้างอยากรู้ว่ามันจะดูเป็นอย่างไรบนจอ e-Paper จึงเกิดโปรเจกต์นี้ขึ้น
- ตำแหน่งที่ป้อนสามารถเป็นได้ทั้งสถานที่จริง ตำแหน่งของเพื่อน และ สถานที่สมมติ
- หากฝนตก ภาพประกอบจะสะท้อนสภาพอากาศปัจจุบัน เช่น มีผู้คนถือร่มอยู่ในภาพ
- เมื่อป้อนสถานที่สมมติ GPT จะส่งละติจูด·ลองจิจูดของสถานที่บนโลกที่ GPT ประเมินว่าใกล้เคียงที่สุดไปยังบริการสภาพอากาศ
วิธีสร้างภาพ
- ภาพประกอบถูกเรนเดอร์ด้วยโมเดล gpt-image-1-mini
- พรอมป์สำหรับภาพสร้างโดย gpt-5-mini และใช้การตั้งค่าภาพคุณภาพสูง
- เนื่องจากขั้นตอนการสร้างภาพนี้ การรันจึงต้องใช้ โทเค็น OpenAI API
ฮาร์ดแวร์ที่ต้องใช้
การรันและวิธีใช้งาน
- โปรเจกต์นี้ตั้งใจให้รันบน Raspberry Pi
- การจัดการสภาพแวดล้อม Python ใช้ uv
- เนื่องจาก
uv จัดการ virtual environment ให้ จึงไม่ต้องเปิดใช้งานเองด้วยมือ
uv sync
- บนเครื่องพัฒนาที่ไม่ใช่ macOS หรือ Linux ไลบรารีฮาร์ดแวร์ของ Raspberry Pi จะถูกข้ามโดยค่าเริ่มต้น
- ต้องกำหนดตัวแปรสภาพแวดล้อม
OPENAI_API_KEY
- สามารถอ่านตัวแปรสภาพแวดล้อมจากไฟล์
.env ในไดเรกทอรีทำงานปัจจุบันได้
OPENAI_API_KEY=... uv run python control.py show Barcelona
- หากต้องการตรวจสอบอย่างรวดเร็วในเครื่อง สามารถรันคำสั่ง
preview ซึ่งใช้การแสดงภาพของ iTerm2 ได้
- โดยค่าเริ่มต้นจะบันทึกเป็น
sol-mate-preview-<timestamp>.png ในไดเรกทอรี temporary ของระบบ
OPENAI_API_KEY=... uv run python control.py preview "Barcelona"
การจัดการหน้าจอและการอัปเดตอัตโนมัติ
- Waveshare แนะนำ_Manual#Precautions)ว่าไม่ควรปล่อยให้ภาพเดิมค้างอยู่บนจอนานเกินไป
- หากต้องการล้างหน้าจอ ให้ใช้คำสั่ง
clear
uv run python control.py clear
- ตัวอย่างการตั้งค่าใช้
cron เพื่ออัปเดตภาพวันละสองครั้ง และล้างหน้าจอตอนเช้ามืด
- ต้องแก้เส้นทางให้ตรงกับสภาพแวดล้อมการติดตั้งของแต่ละคน
- การรันซ้ำๆ อาจมี ค่าใช้จ่ายไม่น้อย
0 8 * * * cd ~/src/sol-mate-eink && OPENAI_API_KEY=... uv run python control.py show Barcelona
0 18 * * * cd ~/src/sol-mate-eink && OPENAI_API_KEY=... uv run python control.py show Barcelona
0 2 * * * cd ~/src/sol-mate-eink && uv run python control.py clear
แบ็กเอนด์และข้อมูลอ้างอิง
- สามารถใช้ API ส่วนตัวเพื่อดึงข้อมูลสภาพอากาศได้ แต่มีเงื่อนไขว่าอย่าเรียกใช้งานมากเกินไป
- หากมีไอเดียใช้งานในปริมาณมาก แนะนำให้โฮสต์เอง
- ซอร์สโค้ดแบ็กเอนด์อยู่ที่ blixt/sol-mate
- รูปเพิ่มเติมและขั้นตอนการทำ:
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
กำลังใช้ Inkplate 6Color กับโปรเจกต์ที่คล้ายกันอยู่
มีคอนโทรลเลอร์ ESP32 ในตัว จึงไม่ต้องใช้ Pi และขับเคลื่อนด้วยแบตเตอรี่อย่างเดียวได้
ถ้าวางตาราง deep sleep/ปลุกเครื่องดี ๆ ชาร์จครั้งเดียวอยู่ได้หลายสัปดาห์
สิ่งที่ชอบที่สุดคือ ป้าย On Air สีแดงที่แขวนไว้หน้าประตูออฟฟิศ พอรัน Shortcuts จาก Mac ระหว่างประชุมหรืออัดวิดีโอ สถานะก็อัปเดตอัตโนมัติและอุปกรณ์ต่าง ๆ จะถูกปิดเสียง
มีตัวอย่างโอเพนซอร์สสำหรับแสดงสภาพอากาศ ข่าว และ Google Calendar ด้วย
https://soldered.com/product/inkplate-6color-color-e-paper-b...
โปรเจกต์ e-ink ราคาถูกนี่สนุกและมีประโยชน์จริง ๆ
จอ e-ink ที่ต่อกับ Pi Zero แสดงแค่ว่าภายใน 3 ชั่วโมงข้างหน้าฝนจะตกไหม เป็น Yes/No เท่านั้น
คิดอีกที อาจไม่จำเป็นต้องใช้จอ 7 สีก็ได้
จอที่ใช้คือ https://shop.pimoroni.com/products/inky-impression-7-3?varia... และดูเหมือนจะถูกกว่าด้วย
สนุกจนทำให้อยากติดหน้าจอแบบนี้ไว้ตามจุดต่าง ๆ ทั่วบ้าน
เพิ่งทำของที่เกือบเหมือนกันด้วย จอเดียวกัน แบบอิสระเมื่อหนึ่งสัปดาห์ก่อน
https://imgz.org/iBLADkCU.jpg
เป็นกรอบรูปที่ดึงสภาพอากาศปัจจุบันและเวลาของตำแหน่งหนึ่ง ๆ แล้วให้ AI สร้างภาพที่มีสถานที่นั้นอยู่ในภาพมาแสดง
น่าทึ่งที่เราทั้งคู่มาถึงจุดนี้ได้โดยไม่ได้เกี่ยวข้องกัน
คงเป็นกรณีการใช้งานที่ชัดเจนที่สุดนั่นแหละ
เป็นตัวอย่างที่ดีให้ผู้ก่อตั้งหน้าใหม่เห็นว่าไอเดียของตัวเองไม่ได้มีเพียงหนึ่งเดียว และในความเป็นจริง ไอเดียที่มีเพียงหนึ่งเดียวนั้นแทบไม่มี
สิ่งสำคัญคือการลงมือทำ
ให้ความรู้สึกเหมือน Uber กับ Lyft แห่งวงการกระดานพยากรณ์อากาศ e-ink และเคยแท็กสิ่งที่คล้ายกันไว้เพิ่มใน HN แล้ว
ถ้ามีเวลา ฉันก็ตั้งใจจะทำสักอันเหมือนกัน และทั้งหมดนี้ล้วนได้แรงบันดาลใจจากการพัฒนาด้วย ESP32 และระบบอัตโนมัติในบ้านแบบเสรีและโอเพนซอร์ส
โปรเจกต์ฮาร์ดแวร์และไอเดียนั้นเจ๋ง แต่การใช้ OpenAI API กับ อุปกรณ์ที่เปิดอยู่ตลอดเวลา เป็นสิ่งที่ไม่อยากยุ่งด้วยเลย
ถ้ามีโอกาสทำเล่น ๆ อาจทำเวอร์ชันที่ใช้ OpenStreetMap กับ Stable Diffusion ที่โฮสต์ใน LAN แทน เลยควรค่าแก่การบุ๊กมาร์กไว้
เห็นโปรเจกต์คล้าย ๆ กันแล้วซื้อจอแบบเดียวกันมาสองจอ
เดิมทีตั้งใจจะทำเป็นจอแสดงภาพถ่ายสีเหมือนสองตัวอย่างนั้น แต่การประยุกต์ใช้นี้ก็ดูดีเหมือนกัน
ขอให้แฮ็กได้สำเร็จ และหวังว่าจะได้เห็นโปรเจกต์ที่ทำเสร็จที่นี่เร็ว ๆ นี้
ในภาพ Barcelona แสดงเป็น 26°C และ 2°C
เคยไป Barcelona หลายครั้ง แต่จินตนาการยากว่าจะมีอุณหภูมิทั้งสองค่านี้ในวันเดียวกัน
สงสัยว่าข้อมูลสภาพอากาศเชื่อถือได้ไหม หรือทั้งหมดเป็นภาพหลอนและเราควรแค่เพลิดเพลินกับแอนิเมชัน
หรือไม่ก็ฉันอาจไม่รู้จักสภาพอากาศของ Barcelona ดีพอ และอุณหภูมิสูงสุด 26 องศากับต่ำสุด 2 องศาอาจเป็นไปได้
2°C เป็นแค่ภาพหลอนที่เกิดจาก 26°C
เพราะเป็นโปรเจกต์งานอดิเรก จึงให้ความสำคัญกับการที่ตัวอักษรดูไม่ซ้ำกันทุกครั้งและมักดูมีศิลปะมากกว่า แทนที่จะเรนเดอร์ข้อความด้วยวิธีดั้งเดิม
แต่ถ้าจะทำเป็นผลิตภัณฑ์จริงจัง โมเดลสร้างภาพยังไม่ดีพอสำหรับการใช้งานนี้
สงสัยว่าทำไมถึงบอกว่า “อย่าปล่อยให้ภาพเดิมค้างอยู่บนจอนานเกินไป”
เป็นปัญหาเฉพาะของ e-ink สี หรือเปล่า?
ในทางปฏิบัติคงไม่ได้เป็นปัญหาใหญ่มาก แต่ถ้าพิกเซลอยู่ในสถานะแอ็กทีฟนานเกินไปก็อาจมีความเสี่ยงที่จะค้างได้
[1]: https://www.waveshare.com/wiki/7.3inch_e-Paper_HAT_(F)_Manua...
สงสัยว่ามีความแตกต่างด้านวิธีแสดงผลอะไรที่ทำให้ต้องมีคำเตือนว่า อย่าปล่อยภาพเดิมไว้นาน ซึ่งต่างจาก e-ink ขาวดำทั่วไปหรือไม่
ถ้าจำไม่ผิด จอ e-ink ขาวดำมาตรฐานไม่มี burn-in
จะใส่ลิงก์เอกสารไว้ใน README เพื่อให้ผู้คนได้อ่านเพิ่มและตัดสินใจเอง
[1]: https://www.waveshare.com/wiki/7.3inch_e-Paper_HAT_(F)_Manua...
ผมสงสัยว่าทำไมโปรเจกต์แบบนี้ถึงมักเจาะจงใช้ คอมพิวเตอร์ขนาดเล็กและใช้พลังงานต่ำ อย่าง Raspberry Pi สำหรับขับจออยู่เสมอ
คอมพิวเตอร์ทั่วไปที่รัน Debian GNU/Linux ได้นั้นมีอยู่มากมายอยู่แล้ว
ถ้าอยากใช้โค้ดนี้กับคอมพิวเตอร์เครื่องหนึ่งในนั้นเพื่อขับจอกระดาษอิเล็กทรอนิกส์ผ่านสาย USB ทั่วไป มันทำไม่ได้หรือ?
ดูไม่เห็นมีเหตุผลว่าจำเป็นต้องใช้ของอย่าง Raspberry Pi เลย
ถ้าคอมพิวเตอร์เครื่องใหญ่สามารถใช้อุปกรณ์ต่อพ่วงแบบนั้นได้จากระบบปฏิบัติการ ก็ใช้ได้เหมือนกัน
ก่อนที่คอมพิวเตอร์ขนาดเล็กแบบนี้จะแพร่หลาย เราก็เคยใช้พอร์ตขนานกับโปรแกรมเล็ก ๆ เพื่อส่งสัญญาณระดับต่ำแบบเดียวกันและสื่อสารกับอุปกรณ์ต่อพ่วงโดยตรงได้
Raspberry Pi มีเอกสารและโค้ดสำหรับเริ่มต้นใช้งานเยอะ ทำให้คนที่เคยแตะ Linux มาบ้างเปิดเครื่อง ติดตั้งแพ็กเกจ แล้วทำอะไรต่อได้สะดวก
ถ้ามีเวลาและความรู้ ก็ใช้ ไมโครคอนโทรลเลอร์ ตัวเล็กมาก ๆ ทำได้เช่นกัน
ตัวจอเองไม่ได้มีอะไรเป็นเวทมนตร์ นอกจากบางครั้งต้องใช้แรงดันไฟเลี้ยงแปลก ๆ
ปัญหาที่พบบ่อยกว่าคือจอแบบนี้ไม่ได้สื่อสารผ่าน USB โดยตรง
ถ้าจะตั้งค่าพิกเซล มันรับ SPI หรืออินเทอร์เฟซดิจิทัลแบบขนาน ดังนั้นจึงต้องมีอินเทอร์เฟซตัวกลางและซอฟต์แวร์สำหรับวาดหน้าจอ
คนเลยมักต่อ Raspberry Pi เข้าไป แล้วคุยกับมันด้วยโปรโตคอลที่พบได้ทั่วไปกว่า
การเปิดคอมพิวเตอร์ทั่วไปทิ้งไว้ตลอดเพื่อจอเดียวนี้ถือว่าไม่มีประสิทธิภาพ
โปรเจกต์ที่ยอดเยี่ยมมักเป็นแบบนี้ คือช่วยให้ใครสักคนต่อยอดไปสู่การ ปรับแต่งเอง ได้
ไม่ใช่แค่คำแนะนำด้านฮาร์ดแวร์เท่านั้น แค่ดู epaper.py[1] เป็นตัวอย่างอ้างอิงก็ยังดี
[1]: https://github.com/blixt/sol-mate-eink/blob/main/epaper.py
ผมไม่ค่อยเข้าใจว่าทำไมต้องใช้ AI เพื่อดึงข้อมูลสภาพอากาศ
มี API สภาพอากาศฟรีที่เรียกใช้โดยตรงได้เป็นสิบ ๆ ตัว
การแปลงชื่อเรียกแบบภาษาพูดของย่านหนึ่งให้เป็นละติจูด·ลองจิจูดที่ถูกต้องนั้น API บางตัวก็ทำให้ได้ในระดับหนึ่ง แต่ผมไม่ค่อยรู้จัก API ฟรีที่แม่นเท่า GPT
แถมถ้าพิมพ์ “Hogwarts” หรือ “Tatooine” AI ก็ยังช่วยสร้างสภาพอากาศของที่นั่นออกมาอย่างขยันขันแข็งด้วย[1]
ที่สำคัญที่สุดคือมันช่วยเขียน พรอมป์สำหรับ Dall-E เพื่อสร้างภาพโดยสะท้อนสภาพอากาศจริง รวมถึงดวงอาทิตย์ ดวงจันทร์ ฯลฯ
[1]: https://x.com/blixt/status/1724099967361462714