Skip to content

localaivn/esp32-c6-omniroute

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 

Repository files navigation

English

📊 ESP32-C6 OmniRoute Dashboard

Dashboard hiển thị thống kê API usage từ OmniRoute trên màn hình TFT ST7789 240x320 với ESP32-C6.

ESP32-C6 OmniRoute Arduino License

✨ Tính năng

🎨 Giao diện Dashboard

  • 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

🌐 Kết nối WiFi

  • 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

🔄 Cập nhật dữ liệu

  • 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

⚙️ Cấu hình linh hoạt

  • 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

🛠️ Phần cứng yêu cầu

Board

  • ESP32-C6 (hoặc ESP32-C3/S3 tương thích)

Màn hình

  • ST7789 TFT Display 240x320 pixels
  • Kết nối SPI

Sơ đồ kết nối

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

📦 Thư viện cần thiế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

🚀 Cách sử dụng

Lần đầu khởi động

  1. Upload code lên ESP32-C6
  2. Màn hình hiển thị "SETUP MODE"
  3. Kết nối WiFi tên "ESP32-C6-Setup" (không cần mật khẩu)
  4. Trình duyệt tự động mở trang cấu hình (hoặc truy cập 192.168.4.1)
  5. 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)
  6. Nhấn "Lưu và Kết nối"
  7. ESP32 sẽ khởi động lại và kết nối WiFi

Sử dụng thường xuyên

  • 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

Thay đổi cấu hình

Khi đã kết nối WiFi, bạn có thể:

  1. Truy cập địa chỉ IP của ESP32 (hiển thị trên màn hình)
  2. Thay đổi:
    • API URL: Cập nhật endpoint mới
    • WiFi: Đổi sang mạng WiFi khác
  3. Reset: Xóa toàn bộ cấu hình và quay về AP mode

🔧 API Format

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
    }
  }
}

🎯 Kiến trúc code

Multi-tasking với FreeRTOS

Code sử dụng 3 task chạy song song:

  1. web_task (Core 0): Xử lý web server và DNS
  2. fetch_task (Core 1): Fetch dữ liệu từ API mỗi 60s
  3. display_task (Core 1): Chuyển trang hiển thị mỗi 15s

Thread-safe với Mutex

  • 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

Memory Management

  • 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ớ

🔮 Hướng phát triển tương lai

📈 Tính năng mới

  • 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

🌐 Kết nối

  • 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

🎨 Giao diệ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

⚡ Hiệu năng

  • 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

🔐 Bảo mật

  • 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

🧪 Testing & Debug

  • 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

🐛 Xử lý lỗi thường gặp

Màn hình không hiển thị

  • Kiểm tra kết nối SPI
  • Đảm bảo đúng chân GPIO
  • Thử thay đổi tft.setRotation()

Không kết nối được WiFi

  • 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

Lỗi JSON parsing

  • Kiểm tra API URL có đúng không
  • Tăng DynamicJsonDocument buffer nếu JSON quá lớn
  • Xem Serial Monitor để debug

Màn hình bị nhấp nháy

  • Tăng delay giữa các lần refresh
  • Kiểm tra nguồn cấp có đủ dòng không

📝 License

MIT License - Tự do sử dụng và chỉnh sửa

🤝 Đóng góp

Mọi đóng góp đều được chào đón! Hãy tạo Pull Request hoặc Issue trên GitHub.

🌍 Ngôn ngữ

📧 Liên hệ

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

About

Dashboard to monitoring OmniRoute's usage on ESP32-C6 with 2.0TFT screen

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages