2 คะแนน โดย GN⁺ 2024-06-09 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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 ความคิดเห็น

 
GN⁺ 2024-06-09
ความคิดเห็นจาก 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 แทน เลยควรค่าแก่การบุ๊กมาร์กไว้

    • สงสัยว่าทำไมการจับคู่ OpenAI API กับอุปกรณ์ที่เปิดอยู่ตลอดเวลาถึงเป็นปัญหา
  • เห็นโปรเจกต์คล้าย ๆ กันแล้วซื้อจอแบบเดียวกันมาสองจอ

    • "A WiFi color eInk picture frame" https://news.ycombinator.com/item?id=35689706
    • "Color E-Ink Display Photo Frame Pranks [Mom]" https://news.ycombinator.com/item?id=26977747
      เดิมทีตั้งใจจะทำเป็นจอแสดงภาพถ่ายสีเหมือนสองตัวอย่างนั้น แต่การประยุกต์ใช้นี้ก็ดูดีเหมือนกัน
    • ชอบที่โพสต์ที่สองมี ภาพโคลสอัปด้วยกล้องจุลทรรศน์ ระหว่างที่หน้าจอกำลังเปลี่ยนด้วย
      ขอให้แฮ็กได้สำเร็จ และหวังว่าจะได้เห็นโปรเจกต์ที่ทำเสร็จที่นี่เร็ว ๆ นี้
  • ในภาพ Barcelona แสดงเป็น 26°C และ 2°C
    เคยไป Barcelona หลายครั้ง แต่จินตนาการยากว่าจะมีอุณหภูมิทั้งสองค่านี้ในวันเดียวกัน
    สงสัยว่าข้อมูลสภาพอากาศเชื่อถือได้ไหม หรือทั้งหมดเป็นภาพหลอนและเราควรแค่เพลิดเพลินกับแอนิเมชัน
    หรือไม่ก็ฉันอาจไม่รู้จักสภาพอากาศของ Barcelona ดีพอ และอุณหภูมิสูงสุด 26 องศากับต่ำสุด 2 องศาอาจเป็นไปได้

    • นี่เป็นกรณีที่ Dall-E เขียนตัวอักษรให้เรียบร้อยไม่ได้
      2°C เป็นแค่ภาพหลอนที่เกิดจาก 26°C
      เพราะเป็นโปรเจกต์งานอดิเรก จึงให้ความสำคัญกับการที่ตัวอักษรดูไม่ซ้ำกันทุกครั้งและมักดูมีศิลปะมากกว่า แทนที่จะเรนเดอร์ข้อความด้วยวิธีดั้งเดิม
      แต่ถ้าจะทำเป็นผลิตภัณฑ์จริงจัง โมเดลสร้างภาพยังไม่ดีพอสำหรับการใช้งานนี้
  • สงสัยว่าทำไมถึงบอกว่า “อย่าปล่อยให้ภาพเดิมค้างอยู่บนจอนานเกินไป”
    เป็นปัญหาเฉพาะของ e-ink สี หรือเปล่า?

    • คำแนะนำของ Waveshare คือ “รีเฟรชอย่างน้อยทุก 24 ชั่วโมงหนึ่งครั้ง”[1]
      ในทางปฏิบัติคงไม่ได้เป็นปัญหาใหญ่มาก แต่ถ้าพิกเซลอยู่ในสถานะแอ็กทีฟนานเกินไปก็อาจมีความเสี่ยงที่จะค้างได้
      [1]: https://www.waveshare.com/wiki/7.3inch_e-Paper_HAT_(F)_Manua...
    • สงสัยว่าเป็นเพราะ burn-in หรือเพราะสีซีดกันแน่
  • สงสัยว่ามีความแตกต่างด้านวิธีแสดงผลอะไรที่ทำให้ต้องมีคำเตือนว่า อย่าปล่อยภาพเดิมไว้นาน ซึ่งต่างจาก e-ink ขาวดำทั่วไปหรือไม่
    ถ้าจำไม่ผิด จอ e-ink ขาวดำมาตรฐานไม่มี burn-in

    • แค่ยกคำแนะนำของ Waveshare[1] มาตรง ๆ และคิดว่าคงไม่ได้เป็นปัญหาใหญ่มาก
      จะใส่ลิงก์เอกสารไว้ใน README เพื่อให้ผู้คนได้อ่านเพิ่มและตัดสินใจเอง
      [1]: https://www.waveshare.com/wiki/7.3inch_e-Paper_HAT_(F)_Manua...
  • ผมสงสัยว่าทำไมโปรเจกต์แบบนี้ถึงมักเจาะจงใช้ คอมพิวเตอร์ขนาดเล็กและใช้พลังงานต่ำ อย่าง Raspberry Pi สำหรับขับจออยู่เสมอ
    คอมพิวเตอร์ทั่วไปที่รัน Debian GNU/Linux ได้นั้นมีอยู่มากมายอยู่แล้ว
    ถ้าอยากใช้โค้ดนี้กับคอมพิวเตอร์เครื่องหนึ่งในนั้นเพื่อขับจอกระดาษอิเล็กทรอนิกส์ผ่านสาย USB ทั่วไป มันทำไม่ได้หรือ?
    ดูไม่เห็นมีเหตุผลว่าจำเป็นต้องใช้ของอย่าง Raspberry Pi เลย

    • คอมพิวเตอร์ขนาดเล็กอย่าง Raspberry Pi เข้าถึง GPIO และอุปกรณ์ต่อพ่วงระดับต่ำอย่าง SPI ที่หน้าจอเล็ก ๆ นี้ใช้ได้ง่าย
      ถ้าคอมพิวเตอร์เครื่องใหญ่สามารถใช้อุปกรณ์ต่อพ่วงแบบนั้นได้จากระบบปฏิบัติการ ก็ใช้ได้เหมือนกัน
      ก่อนที่คอมพิวเตอร์ขนาดเล็กแบบนี้จะแพร่หลาย เราก็เคยใช้พอร์ตขนานกับโปรแกรมเล็ก ๆ เพื่อส่งสัญญาณระดับต่ำแบบเดียวกันและสื่อสารกับอุปกรณ์ต่อพ่วงโดยตรงได้
    • ไม่จำเป็นเลยสักนิด
      Raspberry Pi มีเอกสารและโค้ดสำหรับเริ่มต้นใช้งานเยอะ ทำให้คนที่เคยแตะ Linux มาบ้างเปิดเครื่อง ติดตั้งแพ็กเกจ แล้วทำอะไรต่อได้สะดวก
      ถ้ามีเวลาและความรู้ ก็ใช้ ไมโครคอนโทรลเลอร์ ตัวเล็กมาก ๆ ทำได้เช่นกัน
      ตัวจอเองไม่ได้มีอะไรเป็นเวทมนตร์ นอกจากบางครั้งต้องใช้แรงดันไฟเลี้ยงแปลก ๆ
      ปัญหาที่พบบ่อยกว่าคือจอแบบนี้ไม่ได้สื่อสารผ่าน USB โดยตรง
      ถ้าจะตั้งค่าพิกเซล มันรับ SPI หรืออินเทอร์เฟซดิจิทัลแบบขนาน ดังนั้นจึงต้องมีอินเทอร์เฟซตัวกลางและซอฟต์แวร์สำหรับวาดหน้าจอ
      คนเลยมักต่อ Raspberry Pi เข้าไป แล้วคุยกับมันด้วยโปรโตคอลที่พบได้ทั่วไปกว่า
    • เพราะมันถูกและอยู่ได้นานด้วยแบตเตอรี่
      การเปิดคอมพิวเตอร์ทั่วไปทิ้งไว้ตลอดเพื่อจอเดียวนี้ถือว่าไม่มีประสิทธิภาพ
  • โปรเจกต์ที่ยอดเยี่ยมมักเป็นแบบนี้ คือช่วยให้ใครสักคนต่อยอดไปสู่การ ปรับแต่งเอง ได้
    ไม่ใช่แค่คำแนะนำด้านฮาร์ดแวร์เท่านั้น แค่ดู epaper.py[1] เป็นตัวอย่างอ้างอิงก็ยังดี
    [1]: https://github.com/blixt/sol-mate-eink/blob/main/epaper.py

  • ผมไม่ค่อยเข้าใจว่าทำไมต้องใช้ AI เพื่อดึงข้อมูลสภาพอากาศ
    มี API สภาพอากาศฟรีที่เรียกใช้โดยตรงได้เป็นสิบ ๆ ตัว

    • ใช้ AI กับบางเรื่องที่ทำด้วย API ฟรีได้ยาก
      การแปลงชื่อเรียกแบบภาษาพูดของย่านหนึ่งให้เป็นละติจูด·ลองจิจูดที่ถูกต้องนั้น API บางตัวก็ทำให้ได้ในระดับหนึ่ง แต่ผมไม่ค่อยรู้จัก API ฟรีที่แม่นเท่า GPT
      แถมถ้าพิมพ์ “Hogwarts” หรือ “Tatooine” AI ก็ยังช่วยสร้างสภาพอากาศของที่นั่นออกมาอย่างขยันขันแข็งด้วย[1]
      ที่สำคัญที่สุดคือมันช่วยเขียน พรอมป์สำหรับ Dall-E เพื่อสร้างภาพโดยสะท้อนสภาพอากาศจริง รวมถึงดวงอาทิตย์ ดวงจันทร์ ฯลฯ
      [1]: https://x.com/blixt/status/1724099967361462714
    • กลายเป็นหนึ่งบรรทัดที่ใส่ในเรซูเม่ได้ดีมาก
    • แค่มองออกไปนอกหน้าต่างก็ได้