- Sol Mate e-Paper Display là một dự án tạo minh họa phản ánh thời tiết hiện tại và điều kiện ánh sáng của vị trí được chỉ định, rồi hiển thị lên màn hình Waveshare e-Paper kết nối với Raspberry Pi
- Script nhận vị trí đầu vào để lấy dữ liệu thời tiết, rồi dùng prompt do gpt-5-mini tạo cùng với gpt-image-1-mini để render hình ảnh chất lượng cao, vì vậy cần có token OpenAI API
- Ngoài vị trí thực tế, bạn cũng có thể nhập vị trí của bạn bè hoặc địa điểm hư cấu; với địa điểm hư cấu, GPT sẽ gửi vĩ độ và kinh độ của nơi giống nhất trên Trái Đất tới dịch vụ thời tiết
- Phần cứng được xây dựng dựa trên Raspberry Pi 5 và màn hình Waveshare e-Paper 7.3", và nếu dùng màn hình kích thước khác thì cần chỉnh sửa mã
control.py hỗ trợ hiển thị lên màn hình, xem trước cục bộ và xóa màn hình; đồng thời cần cân nhắc cả khuyến nghị của Waveshare là không nên giữ cùng một hình quá lâu lẫn khả năng chi phí API tăng lên
Sol Mate e-Paper Display làm gì
- Sol Mate e-Paper Display là bộ mã dùng Raspberry Pi và màn hình Waveshare e-Paper để tạo và hiển thị ảnh báo cáo thời tiết
- Ban đầu nó được tạo bằng ☀️ Sol Mate GPT, và sau đó dự án này ra đời vì tác giả muốn xem nó sẽ trông như thế nào trên màn hình e-Paper
- Vị trí đầu vào có thể là địa điểm thực, vị trí của bạn bè, hoặc cả địa điểm hư cấu
- Ví dụ, nếu trời mưa thì minh họa sẽ phản ánh thời tiết hiện tại bằng cách đưa những người cầm ô vào trong hình
- Khi nhập địa điểm hư cấu, GPT sẽ chuyển vĩ độ và kinh độ của nơi trên Trái Đất mà nó cho là giống nhất tới dịch vụ thời tiết
Cách tạo ảnh
- Minh họa được render bằng mô hình gpt-image-1-mini
- Prompt hình ảnh do gpt-5-mini tạo ra, và sử dụng thiết lập chất lượng hình ảnh cao
- Vì luồng tạo này, quá trình chạy cần có token OpenAI API
Phần cứng cần thiết
Chạy và cách dùng
- Dự án được giả định là chạy trên Raspberry Pi
- Quản lý môi trường Python dùng uv
uv quản lý môi trường ảo nên không cần kích hoạt thủ công
uv sync
- Trên máy phát triển không phải macOS hay Linux, thư viện phần cứng Raspberry Pi sẽ được bỏ qua theo mặc định
- Cần đặt biến môi trường
OPENAI_API_KEY
- Có thể đọc biến môi trường từ file
.env trong thư mục làm việc hiện tại
OPENAI_API_KEY=... uv run python control.py show Barcelona
- Để kiểm tra nhanh trên máy cục bộ, có thể chạy lệnh
preview dùng hiển thị ảnh của iTerm2
- Mặc định ảnh sẽ được lưu thành
sol-mate-preview-<timestamp>.png trong thư mục tạm của hệ thống
OPENAI_API_KEY=... uv run python control.py preview "Barcelona"
Quản lý màn hình và cập nhật tự động
- Waveshare khuyến nghị_Manual#Precautions) không nên để cùng một hình trên màn hình quá lâu
- Để xóa màn hình, dùng lệnh
clear
uv run python control.py clear
- Cấu hình ví dụ dùng
cron để cập nhật ảnh hai lần mỗi ngày và xóa màn hình vào rạng sáng
- Cần chỉnh lại đường dẫn cho phù hợp với môi trường cài đặt của mỗi người
- Việc chạy lặp lại có thể phát sinh chi phí không nhỏ
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
Backend và tài liệu tham khảo
- Có thể dùng một API riêng tư để lấy dữ liệu thời tiết, nhưng kèm điều kiện là không được gọi quá mức
- Nếu có ý tưởng dùng ở quy mô lớn, nên tự host
- Mã nguồn backend có tại blixt/sol-mate
- Ảnh bổ sung và quá trình chế tạo:
1 bình luận
Ý kiến trên Hacker News
Đang dùng Inkplate 6Color cho một dự án tương tự
Có sẵn bộ điều khiển ESP32 nên không cần Pi, và cũng có thể chạy chỉ bằng pin
Nếu sắp lịch deep sleep/đánh thức hợp lý thì có thể dùng được tới vài tuần chỉ với một lần sạc
Thứ tôi thích nhất là biển On Air màu đỏ treo ở cửa văn phòng; khi chạy shortcut trên Mac lúc họp hoặc ghi hình thì trạng thái được cập nhật tự động và các thiết bị bị tắt tiếng
Cũng có các ví dụ mã nguồn mở cho hiển thị thời tiết, tin tức và Google Calendar
https://soldered.com/product/inkplate-6color-color-e-paper-b...
Các dự án e-ink giá rẻ thực sự rất vui và hữu ích
Màn hình e-ink nối với Pi Zero chỉ hiển thị Yes/No về việc có mưa trong 3 giờ tới hay không
Nghĩ lại thì có lẽ cũng chưa cần đến màn hình 7 màu
Màn hình tôi dùng là https://shop.pimoroni.com/products/inky-impression-7-3?varia... và có vẻ rẻ hơn
Nó thú vị đến mức khiến tôi muốn gắn những màn hình kiểu này khắp nhà
Một tuần trước tôi cũng tự làm gần như đúng thứ này bằng chính màn hình đó
https://imgz.org/iBLADkCU.jpg
Đó là một khung ảnh lấy thời tiết hiện tại và thời gian của một địa điểm cụ thể, rồi để AI tạo ảnh có chứa địa điểm đó và hiển thị lên
Thật lạ khi cả hai bên đều độc lập mà đi tới gần như cùng một kết quả
Có lẽ đây vốn là cách dùng hiển nhiên nhất
Là một ví dụ hay cho các startup founder mới rằng ý tưởng của mình không hề là duy nhất, và thực tế thì hầu như chẳng có ý tưởng nào là duy nhất
Điều quan trọng là năng lực thực thi
Cảm giác như Uber và Lyft của giới bảng thời tiết e-ink vậy; trước đây trên HN cũng từng gắn thẻ thêm nhiều thứ tương tự
Khi có thời gian tôi cũng định làm một cái, và tất cả những thứ này đều truyền cảm hứng cho việc phát triển ESP32 và tự do/hệ mã nguồn mở cho tự động hóa gia đình
Dự án phần cứng và ý tưởng thì rất hay, nhưng tôi tuyệt đối không muốn đụng tới việc dùng OpenAI API cho một thiết bị luôn bật
Nếu có lúc làm cho vui, tôi có thể làm một phiên bản dùng OpenStreetMap và Stable Diffusion tự host trong LAN, nên vẫn đáng để bookmark
Sau khi xem một dự án tương tự, tôi đã mua hai cái cùng loại màn hình
Ban đầu tôi định làm màn hình ảnh màu như hai ví dụ đó, nhưng ứng dụng này cũng có vẻ ổn
Chúc bạn hack vui vẻ, và hy vọng sớm được thấy dự án bạn làm ở đây
Trong ảnh, Barcelona được hiển thị là 26°C và 2°C
Tôi đã đến Barcelona vài lần, nhưng khó mà tưởng tượng một ngày có đủ cả hai mức nhiệt đó
Tôi tò mò liệu dữ liệu thời tiết có đáng tin hay không, hay tất cả chỉ là ảo giác và ta chỉ nên tận hưởng phần animation
Hoặc có thể là tôi hiểu chưa đúng về thời tiết Barcelona, và mức cao nhất 26 độ cùng thấp nhất 2 độ là chuyện có thể xảy ra
2°C chỉ là ảo giác phát sinh từ 26°C
Vì đây là dự án hobby nên thay vì render văn bản theo cách truyền thống, tôi ưu tiên việc văn bản trông độc đáo mỗi lần và thường mang tính nghệ thuật hơn
Nhưng nếu làm thành sản phẩm nghiêm túc thì mô hình tạo ảnh vẫn chưa đủ tốt cho mục đích này
Tôi tò mò vì sao lại có lưu ý “không nên để cùng một hình trên màn hình quá lâu”
Đây có phải là vấn đề riêng của e-ink màu không?
Trên thực tế chắc không phải vấn đề quá lớn, nhưng nếu pixel bị giữ ở trạng thái kích hoạt quá lâu thì có thể có nguy cơ bị lưu ảnh
[1]: https://www.waveshare.com/wiki/7.3inch_e-Paper_HAT_(F)_Manua...
Tôi muốn biết liệu có khác biệt nào trong cách hiển thị khiến không nên để cùng một hình quá lâu hay không, khác với e-ink đen trắng thông thường
Nếu tôi nhớ không nhầm thì màn hình e-ink đen trắng tiêu chuẩn không bị burn-in
Tôi sẽ thêm link tài liệu vào README để mọi người có thể biết thêm và tự đánh giá
[1]: https://www.waveshare.com/wiki/7.3inch_e-Paper_HAT_(F)_Manua...
Tôi thắc mắc vì sao các dự án kiểu này luôn nhắm đến việc dùng máy tính nhỏ, tiêu thụ điện năng thấp như Raspberry Pi để điều khiển màn hình
Đã có sẵn rất nhiều máy tính thông thường chạy Debian GNU/Linux
Nếu muốn dùng đoạn mã này trên một trong những máy đó để điều khiển màn hình giấy điện tử bằng cáp USB thông thường thì chẳng phải cũng làm được sao?
Có vẻ không có lý do gì bắt buộc phải dùng thứ như Raspberry Pi
Trên máy tính lớn hơn, nếu hệ điều hành cho phép dùng các thiết bị ngoại vi đó thì cũng có thể dùng y hệt
Trước khi những máy tính nhỏ này trở nên phổ biến, người ta cũng từng dùng cổng song song và các chương trình nhỏ để giao tiếp trực tiếp với thiết bị ngoại vi bằng những tín hiệu mức thấp tương tự
Raspberry Pi có rất nhiều tài liệu khởi động và mã mẫu, nên người chỉ cần biết chút ít về Linux cũng có thể bật lên, cài gói rồi làm gì đó khá dễ dàng
Nếu có thời gian và kiến thức thì làm bằng vi điều khiển rất nhỏ cũng được
Bản thân màn hình này không có gì thần kỳ, ngoài việc đôi khi cần các mức điện áp nguồn hơi lạ
Vấn đề phổ biến hơn là những màn hình kiểu này không giao tiếp trực tiếp qua USB
Để thiết lập pixel, nó nhận SPI hoặc giao diện số song song, nên cần một lớp giao tiếp trung gian và phần mềm vẽ lên màn hình
Vì thế mọi người thường chỉ gắn Raspberry Pi vào và giao tiếp với nó bằng một giao thức phổ biến hơn
Việc cứ để một máy tính thông thường bật chỉ để chạy mỗi cái màn hình này là không hiệu quả
Một dự án tuyệt vời, như mọi khi, sẽ mở đường để ai đó đi tiếp theo hướng tùy biến
Ngoài các gợi ý phần cứng, chỉ cần xem epaper.py[1] để tham khảo cũng rất đáng giá
[1]: https://github.com/blixt/sol-mate-eink/blob/main/epaper.py
Tôi không hiểu lắm vì sao phải dùng AI để lấy thời tiết
Có hàng chục API thời tiết miễn phí có thể gọi trực tiếp
Việc chuyển tên gọi dân dã của một khu phố thành kinh độ và vĩ độ chính xác có thể có vài API làm được phần nào, nhưng tôi không biết API miễn phí nào chính xác bằng GPT
Hơn nữa, nếu nhập “Hogwarts” hay “Tatooine” thì nhờ AI nó vẫn siêng năng bịa ra cả thời tiết ở đó[1]
Quan trọng nhất là nó viết prompt cho Dall-E để tạo hình ảnh phản ánh điều kiện thời tiết thực tế cùng mặt trời và mặt trăng
[1]: https://x.com/blixt/status/1724099967361462714