Dashboard hiển thị thống kê API usage từ OmniRoute trên màn hình TFT ST7789 240x320 với ESP32-C6.
- Header đẹp mắt: Logo "OmniRoute Dashboard" với màu sắc nổi bật
- 4 trang thống kê tự động xoay vòng mỗi 15 giây:
- Trang 1 - Total: Tổng quan requests, tokens, và chi phí
- Trang 2 - Provider: Thống kê theo nhà cung cấp (Kiro, OpenAI, etc.)
- Trang 3 - Account: Phân tích theo tài khoản
- Trang 4 - API Key: Chi tiết theo từng API key
- Màu sắc phân biệt: Mỗi loại dữ liệu có màu riêng để dễ nhìn
- Captive Portal: Tự động mở trang cấu hình khi kết nối WiFi
- Web Interface: Giao diện web responsive để cấu hình
- WiFi Scan: Quét và chọn mạng WiFi có sẵn
- Fallback Mode: Tự động chuyển sang AP mode nếu kết nối thất bại
- Auto-refresh: Tự động fetch dữ liệu mới mỗi 60 giây
- Real-time: Hiển thị dữ liệu cập nhật liên tục
- Error handling: Thông báo lỗi khi không kết nối được API
- Lưu cấu hình: WiFi credentials và API URL được lưu vào flash
- Web config: Thay đổi cấu hình qua trình duyệt
- Reset: Khôi phục về cài đặt gốc
- ESP32-C6 (hoặc ESP32-C3/S3 tương thích)
- ST7789 TFT Display 240x320 pixels
- Kết nối SPI
| TFT Pin | ESP32-C6 Pin | Chức năng |
|---|---|---|
| CS | GPIO 20 | Chip Select |
| DC | GPIO 19 | Data/Command |
| RST | GPIO 18 | Reset |
| MOSI | GPIO 7 | SPI Data |
| SCLK | GPIO 6 | SPI Clock |
| VCC | 3.3V | Nguồn |
| GND | GND | Đất |
Cài đặt các thư viện sau qua Arduino Library Manager:
- WiFi (built-in)
- HTTPClient (built-in)
- WebServer (built-in)
- DNSServer (built-in)
- Preferences (built-in)
- ArduinoJson (v6.x)
- Adafruit GFX Library
- Adafruit ST7735 and ST7789 Library
- Upload code lên ESP32-C6
- Màn hình hiển thị "SETUP MODE"
- Kết nối WiFi tên "ESP32-C6-Setup" (không cần mật khẩu)
- Trình duyệt tự động mở trang cấu hình (hoặc truy cập
192.168.4.1) - Nhập thông tin:
- SSID: Tên WiFi của bạn
- Password: Mật khẩu WiFi
- API URL: Địa chỉ API OmniRoute (ví dụ:
http://192.168.100.15:20128/api/usage/history)
- Nhấn "Lưu và Kết nối"
- ESP32 sẽ khởi động lại và kết nối WiFi
- Dashboard tự động hiển thị sau khi kết nối WiFi thành công
- 4 trang thống kê xoay vòng mỗi 15 giây
- Dữ liệu tự động cập nhật mỗi 60 giây
Khi đã kết nối WiFi, bạn có thể:
- Truy cập địa chỉ IP của ESP32 (hiển thị trên màn hình)
- Thay đổi:
- API URL: Cập nhật endpoint mới
- WiFi: Đổi sang mạng WiFi khác
- Reset: Xóa toàn bộ cấu hình và quay về AP mode
Dashboard yêu cầu API trả về JSON với cấu trúc:
{
"totalRequests": 1962,
"totalPromptTokens": 25988413,
"totalCompletionTokens": 37710,
"totalCost": 77.33,
"byProvider": {
"kiro": {
"requests": 1962,
"cost": 77.33
}
},
"byAccount": {
"Account #00d5c6": {
"requests": 1103,
"cost": 28.40
}
},
"byApiKey": {
"nanobot": {
"requests": 693,
"cost": 34.39
}
}
}Code sử dụng 3 task chạy song song:
- web_task (Core 0): Xử lý web server và DNS
- fetch_task (Core 1): Fetch dữ liệu từ API mỗi 60s
- display_task (Core 1): Chuyển trang hiển thị mỗi 15s
- Sử dụng
SemaphoreHandle_tđể bảo vệ truy cập màn hình TFT - Tránh xung đột khi nhiều task cùng vẽ lên màn hình
- DynamicJsonDocument: 16KB buffer cho JSON phức tạp
- Preferences: Lưu cấu hình vào NVS flash
- String handling: Giới hạn độ dài để tránh tràn bộ nhớ
- Biểu đồ: Hiển thị graph xu hướng chi phí theo thời gian
- Alert: Cảnh báo khi chi phí vượt ngưỡng
- Multi-API: Hỗ trợ nhiều API endpoint cùng lúc
- Export data: Xuất CSV qua web interface
- Dark/Light mode: Chuyển đổi theme màu sắc
- Touch screen: Tương tác chạm để chuyển trang thủ công
- MQTT: Publish metrics lên MQTT broker
- Home Assistant: Tích hợp với HA qua MQTT Discovery
- Telegram Bot: Nhận thông báo qua Telegram
- REST API: Cung cấp API để các thiết bị khác truy vấn
- Custom themes: Cho phép người dùng tùy chỉnh màu sắc
- Animations: Hiệu ứng chuyển trang mượt mà
- Icons: Thêm biểu tượng cho từng loại dữ liệu
- Progress bar: Hiển thị tiến trình fetch dữ liệu
- Partial refresh: Chỉ vẽ lại phần thay đổi thay vì toàn màn hình
- Cache: Lưu cache dữ liệu cũ khi API lỗi
- Compression: Hỗ trợ gzip response từ API
- OTA Update: Cập nhật firmware qua WiFi
- HTTPS: Hỗ trợ kết nối API qua HTTPS
- Authentication: Đăng nhập web interface
- API Key: Bảo vệ API endpoint với key
- Encryption: Mã hóa WiFi password trong flash
- Serial commands: Điều khiển qua Serial Monitor
- Debug mode: Hiển thị thông tin debug trên màn hình
- Log to SD: Ghi log ra thẻ SD
- Watchdog: Tự động reset khi bị treo
- Kiểm tra kết nối SPI
- Đảm bảo đúng chân GPIO
- Thử thay đổi
tft.setRotation()
- Kiểm tra SSID và password
- Đảm bảo WiFi 2.4GHz (ESP32 không hỗ trợ 5GHz)
- Reset cấu hình và thử lại
- Kiểm tra API URL có đúng không
- Tăng
DynamicJsonDocumentbuffer nếu JSON quá lớn - Xem Serial Monitor để debug
- Tăng delay giữa các lần refresh
- Kiểm tra nguồn cấp có đủ dòng không
MIT License - Tự do sử dụng và chỉnh sửa
Mọi đóng góp đều được chào đón! Hãy tạo Pull Request hoặc Issue trên GitHub.
Nếu có câu hỏi hoặc góp ý, vui lòng tạo Issue trên repository.
Made with ❤️ for the OmniRoute community