Files
CLIProxyAPI-auto-install-on…/esp32-s3-cliproxy-dashboard

ESP32-S3 CLIProxyAPI Dashboard

Hiển thị thống kê sử dụng CLIProxyAPI trên màn hình ST7789 320x240 gắn với ESP32-S3 (N16R8).

📦 Phần cứng cần thiết

Thành phần Mô tả
ESP32-S3 Board có PSRAM (N16R8 khuyến nghị) ví dụ: ESP32-S3-DevKitC-1, ESP32-S3-N16R8
Màn hình ST7789 320×240 SPI, driver ST7789, không touch (hoặc có touch nhưng không dùng)
Dây nối 67 dây jumper (mẹ-đực hoặc hàn trực tiếp)
Nguồn USB-C (5 V) cấp cho ESP32-S3

⚠️ ESP32-S3 chỉ chịu 3.3 V trên GPIO. Màn hình ST7789 thông thường hoạt động 3.3 V logic không cần level-shifter nếu màn hình đã có LDO 3.3 V onboard (phần lớn module ST7789 bán sẵn đều có).


🔌 Sơ đồ đấu nối (theo code hiện tại)

Màn hình ST7789 ESP32-S3 (GPIO) Chú thích
VCC 3V3 Cấp 3.3 V (hoặc 5V nếu module có LDO)
GND GND
SCL / SCK GPIO 5 SPI Clock
SDA / MOSI GPIO 6 SPI MOSI
RST GPIO 7 Reset (active low)
DC / RS GPIO 15 Data/Command select
CS GPIO 16 Chip Select
BLK / BL 3V3 (hoặc GPIO tùy chỉnh) Backlight nối 3V3 để luôn bật, hoặc gắn GPIO để PWM dimming

Nếu màn hình của bạn có chân MISO không cần nối (driver Adafruit_ST7789 chỉ dùng chế độ write-only).


🛠 Chuẩn bị môi trường Arduino IDE

  1. Cài Arduino IDE ≥ 2.x
  2. Boards Manager → tìm "esp32" → cài esp32 by Espressif Systems ≥ 3.0.0
  3. Tools → BoardESP32S3 Dev Module (hoặc board ESP32-S3 cụ thể bạn dùng)
    • USB CDC On Boot: Enabled
    • Flash Mode: QIO 80MHz
    • Flash Size: 16 MB (128 Mb)
    • Partition Scheme: 16M Flash (3M APP / 9.9M FATFS) hoặc tuỳ chọn
    • PSRAM: OPI PSRAM
  4. Library Manager cài các thư viện sau:
    • Adafruit GFX Library (by Adafruit)
    • Adafruit ST7735 and ST7789 Library (by Adafruit)
    • Adafruit NeoPixel (by Adafruit)
    • ArduinoJson ≥ 7.x (by Benoit Blanchon)

⚙️ Cấu hình code trước khi nạp

Mở file esp32-s3-cliproxy-dashboard.ino, sửa các dòng sau nếu cần:

// ── Cấu hình chân TFT ── (đổi nếu bạn đấu nối khác)
#define TFT_CS    16
#define TFT_DC    15
#define TFT_RST    7
#define TFT_MOSI   6   // SDA
#define TFT_SCLK   5   // SCL

// Màn hình ngang 320x240
#define SCREEN_WIDTH  320
#define SCREEN_HEIGHT 240
#define TFT_ROTATION  3   // 0,1,2,3  xoay cho đúng hướng

// ── WiFi mặc định (sẽ ghi đè qua giao diện web sau khi nạp) ──
char g_ssid[64]     = "TEN_WIFI_CUA_BAN";
char g_password[64] = "MAT_KHAU_WIFI";

// ── API URL trỏ về dashboard server (máy chạy usage-dashboard.py) ──
// Mặc định: http://<IP_MAY_CHU>:8320/api/summary?range=today
char g_api_url[160] = "http://192.168.1.3:8320/api/summary?range=today";

Lưu ý: g_api_url phải trỏ đến endpoint /api/summary của usage-dashboard.py đang chạy trên máy chủ (PC/Server) cùng mạng LAN.


🚀 Nạp firmware

  1. Kết nối ESP32-S3 với PC qua USB-C.
  2. Chọn đúng Port (COMx / /dev/ttyUSBx).
  3. Nhấn Upload (mũi tên phải) trong Arduino IDE.
  4. Mở Serial Monitor (115200 baud) để theo dõi log.

🌐 Cấu hình WiFi & API qua giao diện Web (AP Mode)

Lần đầu nạp (hoặc khi reset cấu hình):

  1. ESP32 phát Access Point ESP32-S3-Setup (không mật khẩu).
  2. Kết nối điện thoại / laptop vào WiFi này.
  3. Mở trình duyệt truy cập http://192.168.4.1.
  4. Trang web sẽ hiện:
    • Nút "Quét WiFi" → chọn mạng nhà bạn.
    • Nhập Mật khẩu WiFi.
    • Kiểm tra/sửa API URL (IP máy chạy dashboard server + port 8320).
  5. Nhấn "Lưu và Kết nối" → ESP32 restart, kết nối WiFi nhà bạn.

Sau khi đã có cấu hình:

  • Truy cập http://<IP_ESP32_TRONG_MANG_LAN> để đổi API URL, đổi WiFi, hoặc Reset về AP Mode.

📊 Giao diện màn hình (4 trang tự xoay 10s/lần)

Trang Nội dung
0 Total Tổng Requests, Failed, Total Tokens, Input / Output / Reasoning / Cached
1 Account Top 5 tài khoản: requests, tokens, failed
2 Model Top 6 model: requests, tokens, failed
3 Hourly 6 giờ gần nhất: requests, tokens
  • Đèn RGB onboard (GPIO 48):
    • 🔵 Xanh dương = fetch dữ liệu thành công
    • 🟢 Xanh lá = chuyển trang hiển thị
  • Nút BOOT (GPIO 0) trên board: chưa gán chức năng trong code, dự trữ cho tương lai.

🔧 Troubleshooting

Vấn đề Nguyên nhân / Khắc phục
Màn hình trắng / không sáng Kiểm tra dây BLK (nối 3V3), kiểm tra TFT_ROTATION (thử 03), kiểm tra init(240, 320) vs init(320, 240).
Kết nối WiFi thất bại -> rơi về AP SSID/Pass sai, hoặc router chặn ESP32 (MAC filter, band 5 GHz ESP32 chỉ 2.4 GHz).
Fetch lỗi ("Fetch loi! Kiem tra API URL") API URL sai IP")
JSON parse error Đảm bảo server trả về đúng format summary, accounts[], models[], hours[] như code mong đợi.
Guru Meditation / Crash Tăng stack size task fetch_task (hiện 8192) hoặc giảm DynamicJsonDocument size.

📁 Cấu trúc thư mục

esp32-s3-cliproxy-dashboard/
├── esp32-s3-cliproxy-dashboard.ino   # Firmware chính
├── README.md                          # File này
└── (các file build tự động)


📄 License

Copyright (c) 2026 [Tran Thanh Tan / TTAI Solutions Software] All rights reserved.

No part of this software or its source code may be reproduced, distributed, or transmitted in any form or by any means, including photocopying, recording, or other electronic or mechanical methods, without the prior written permission of the copyright holder.