ไลฟ์สไตล์ 1 มิถุนายน 2569

วิธีสร้าง Clawdmeter: จอ ESP32 สำหรับดู Usage ของ Claude Code บนโต๊ะทำงาน

By Cashless Thailand
วิธีสร้าง Clawdmeter: จอ ESP32 สำหรับดู Usage ของ Claude Code บนโต๊ะทำงาน

ถ้าใช้ Claude Code ทำงานทุกวัน สิ่งหนึ่งที่น่ารำคาญคือ “quota / rate limit” มันอยู่ลึกในระบบ มองไม่เห็นจนกว่าจะใกล้ชนเพดาน แล้วค่อยตกใจทีหลังว่า session เหลือเท่าไหร่ สัปดาห์นี้ใช้ไปกี่เปอร์เซ็นต์ รีเซ็ตเมื่อไหร่

Clawdmeter เป็นโปรเจกต์โอเพนซอร์สจาก HermannBjorgvin/Clawdmeter ที่แก้ปัญหานี้แบบเท่มาก: เอาบอร์ด ESP32 จอ AMOLED มาทำเป็น dashboard ตัวเล็กบนโต๊ะ แสดงการใช้งาน Claude Code ผ่าน Bluetooth พร้อมปุ่มลัดสำหรับ voice mode และ mode toggle

แก่นของโปรเจกต์นี้ไม่ใช่แค่ “จอเล็กน่ารัก” แต่มันคือแนวคิด physical dashboard: เอาสัญญาณสำคัญที่ปกติซ่อนใน software ออกมาเป็นของจริงบนโต๊ะ ทำให้เราตัดสินใจได้เร็วขึ้น

Clawdmeter คืออะไร

Clawdmeter คือจอแสดงสถานะการใช้งาน Claude Code ที่รันบนบอร์ดตระกูล ESP32 พร้อมจอ AMOLED แบบ touch screen ตัว firmware ฝั่งบอร์ดเขียนด้วย Arduino framework + LVGL ส่วนฝั่งคอมมี daemon คอยอ่าน token ของ Claude Code แล้ว polling API เพื่อดึงตัวเลข usage จาก response headers จากนั้นส่งข้อมูลสั้น ๆ ไปที่บอร์ดผ่าน BLE

จาก README และ source code ใน repo โปรเจกต์นี้รองรับบอร์ดหลัก ๆ ดังนี้:

  • Waveshare ESP32-S3-Touch-AMOLED-2.16 — จอ 480×480 เหมาะสุดสำหรับงาน dashboard
  • Waveshare ESP32-C6-Touch-AMOLED-2.16 — รุ่น C6 ไม่มี PSRAM ต้องลด buffer บางส่วน
  • Waveshare ESP32-S3-Touch-AMOLED-1.8 — จอเล็กกว่า แต่ firmware มี layout compact รองรับไว้แล้ว

อ่าน repo แล้ว โครงสร้างโปรเจกต์มีอะไรบ้าง

repo นี้แบ่งงานชัดเจนดี ไม่ใช่โปรเจกต์ Arduino ไฟล์เดียวจบ แต่เป็น firmware + host daemon + tooling + เอกสาร porting:

  • firmware/platformio.ini — กำหนด PlatformIO environments ของแต่ละบอร์ด, build flags, LVGL config และ dependencies เช่น Arduino_GFX, XPowersLib, LVGL, ArduinoJson, NimBLE-Arduino
  • firmware/src/main.cpp — loop หลัก: init display/touch/power/IMU/BLE/LVGL, อ่าน JSON จาก BLE, update UI, ส่ง ACK/NACK กลับ
  • firmware/src/ble.cpp — ทำทั้ง custom BLE GATT service และ BLE HID keyboard สำหรับปุ่ม Space / Shift+Tab
  • firmware/src/ui.cpp — สร้างหน้าจอ Usage, Bluetooth, splash animation ด้วย LVGL
  • daemon/claude_usage_daemon.py — daemon ฝั่ง macOS/Linux สำหรับอ่าน Claude token, call API, ส่ง payload ผ่าน BLE
  • tools/ — tool scrape/convert pixel-art animation เป็น C header สำหรับ firmware
  • docs/porting/ — คู่มือ port ไปบอร์ดอื่นผ่าน HAL contract

หลักการทำงานแบบเข้าใจง่าย

ระบบของ Clawdmeter แยกเป็น 2 ฝั่ง: ฝั่งคอมพิวเตอร์กับฝั่ง ESP32

1) ฝั่งคอม: daemon อ่าน usage จาก Claude Code

daemon จะอ่าน OAuth token ของ Claude Code จากแหล่งที่ระบบเก็บไว้:

  • macOS: Keychain service ชื่อ Claude Code-credentials
  • Linux: ไฟล์ ~/.claude/.credentials.json

จากนั้น daemon call ไปที่ https://api.anthropic.com/v1/messages ด้วย request เล็กมาก กำหนด max_tokens: 1 จุดประสงค์จริงไม่ได้สนใจคำตอบของโมเดล แต่สนใจ response headers ที่บอก rate-limit utilization

anthropic-ratelimit-unified-5h-utilization
anthropic-ratelimit-unified-5h-reset
anthropic-ratelimit-unified-7d-utilization
anthropic-ratelimit-unified-7d-reset
anthropic-ratelimit-unified-5h-status

2) ฝั่ง BLE: ส่ง JSON สั้น ๆ ไปที่ ESP32

เมื่อ daemon คำนวณเปอร์เซ็นต์แล้ว จะส่ง JSON payload ไปที่ RX characteristic ของ custom GATT service:

{ "s": 45, "sr": 120, "w": 28, "wr": 7200, "st": "allowed", "ok": true }
field ความหมาย
ssession usage % ในรอบ 5 ชั่วโมง
srเวลาที่เหลือก่อน session reset หน่วยเป็นนาที
wweekly usage %
wrเวลาที่เหลือก่อน weekly reset หน่วยเป็นนาที
stสถานะ rate-limit เช่น allowed
okบอกว่าการดึงข้อมูลสำเร็จหรือไม่

3) ฝั่ง ESP32: parse JSON แล้วอัปเดต LVGL dashboard

ใน main.cpp firmware จะรอข้อมูลจาก BLE ถ้ามีข้อมูลก็ parse ด้วย ArduinoJson แล้วนำค่า session %, weekly %, reset time และ status ไปอัปเดต UI บน LVGL

อีกส่วนที่ฉลาดคือ firmware track อัตราการเปลี่ยนของ session % ในหน้าต่างประมาณ 5 นาที เพื่อเลือกกลุ่ม animation ให้เหมาะกับความ “เร่ง” ของ usage ถ้าใช้หนักขึ้น animation ก็จะดูวุ่นขึ้น เป็น UX เล็ก ๆ ที่ทำให้ dashboard มีชีวิต ไม่ใช่แค่ตัวเลขนิ่ง ๆ

ฟีเจอร์ที่ทำให้โปรเจกต์นี้น่าสนใจ

  • มอง quota ได้ทันที — ไม่ต้องรอให้ CLI ฟ้องตอนใกล้เต็ม เห็น session และ weekly utilization บนโต๊ะตลอดเวลา
  • ใช้ BLE ไม่ต้องเสียบสายตลอด — USB ใช้ flash/monitor ได้ แต่ runtime หลักสื่อสารผ่าน Bluetooth Low Energy
  • เป็น HID keyboard ได้ด้วย — ปุ่มข้างตัวเครื่องส่ง Space สำหรับ voice-mode push-to-talk และ Shift+Tab สำหรับ toggle mode
  • ออกแบบให้ port บอร์ดใหม่ง่าย — shared code ไม่ผูกกับ hardware โดยตรง แต่มี HAL แยก display, touch, input, power, IMU
  • เรียนรู้ embedded UI ได้ครบ — ได้แตะ PlatformIO, LVGL, NimBLE, ArduinoJson, power management, touch, PMU, IMU, font conversion และ asset pipeline

อุปกรณ์ที่ต้องใช้

  • บอร์ด Waveshare ESP32-S3 Touch AMOLED 2.16 หรือรุ่นที่ repo รองรับ
  • สาย USB-C สำหรับ flash firmware
  • คอม macOS หรือ Linux ที่ติดตั้ง Claude Code และ login subscription ไว้แล้ว
  • PlatformIO CLI
  • Bluetooth ใช้งานได้ปกติบนเครื่อง host

วิธีสร้าง Clawdmeter แบบ step-by-step

ขั้นที่ 1: clone repo

git clone https://github.com/HermannBjorgvin/Clawdmeter.git
cd Clawdmeter

ขั้นที่ 2: ติดตั้ง PlatformIO

บน macOS วิธีง่ายคือใช้ Homebrew:

brew install platformio

บน Linux ให้ติดตั้งตามเอกสาร PlatformIO หรือใช้ environment ที่มี ~/.platformio/penv/bin/pio ตามที่ script ใน repo เรียกใช้งาน

ขั้นที่ 3: flash firmware ลงบอร์ด

เลือก environment ให้ตรงกับบอร์ด ถ้าไม่แน่ใจ รัน script โดยไม่ใส่ argument เพื่อดูรายชื่อ env ที่มีใน firmware/platformio.ini

ตัวอย่างบน macOS:

./flash-mac.sh waveshare_amoled_216
# หรือระบุ port เอง
./flash-mac.sh waveshare_amoled_18 /dev/cu.usbmodem1101

ตัวอย่างบน Linux:

./flash.sh waveshare_amoled_216 /dev/ttyACM0

ขั้นที่ 4: pair Bluetooth

หลัง flash แล้วตัวบอร์ดจะ advertise เป็น BLE HID + custom data service ชื่อใน firmware คือ Claude Controller ส่วนใน README บางจุดพูดถึงชื่อ Clawdmeter/Claudemeter ให้ยึดหน้าจอ Bluetooth ของบอร์ดและชื่อที่ OS เห็นเป็นหลัก

บน macOS เปิด System Settings → Bluetooth แล้วกด Connect ที่อุปกรณ์

บน Linux ใช้ bluetoothctl:

bluetoothctl scan le
bluetoothctl pair AA:BB:CC:DD:EE:FF
bluetoothctl trust AA:BB:CC:DD:EE:FF

ขั้นที่ 5: ติดตั้ง daemon ฝั่งคอม

บน macOS installer จะสร้าง Python venv, ติดตั้ง bleak และ httpx, render LaunchAgent แล้วโหลด service:

./install-mac.sh
launchctl list | grep claude-usage
tail -F ~/Library/Logs/claude-usage-daemon.out.log

บน Linux installer จะติดตั้ง systemd user service:

./install.sh
systemctl --user start claude-usage-daemon
systemctl --user status claude-usage-daemon
journalctl --user -u claude-usage-daemon -f

ถ้าจะต่อยอดหรือ port ไปบอร์ดอื่น

จุดแข็งของ repo นี้คือ HAL แยกชั้นไว้ค่อนข้างดี ในเอกสาร docs/porting/adding-a-board.md ระบุชัดว่าโดยหลักไม่ควรต้องแก้ main.cpp, ui.cpp หรือ HAL headers ถ้าจะเพิ่มบอร์ด ให้เพิ่ม folder ใหม่ใน firmware/src/boards/ แล้ว implement display/touch/input/power/IMU/caps/board_init ของบอร์ดนั้น

นั่นแปลว่าแนวคิดนี้ไม่ได้จำกัดอยู่แค่ Claude Code usage อย่างเดียว ถ้าเปลี่ยน daemon และ payload ก็สามารถทำเป็น dashboard สำหรับราคาเหรียญ, สถานะ node, alert จาก server, ยอดขายร้าน, หรือสถานะ payment terminal ได้หมด หลักการคือ hardware display + BLE data channel + UI layer

ข้อควรระวัง

  • token คือความลับ — daemon อ่าน OAuth token ของ Claude Code ดังนั้นอย่าเอา log/token ไปแชร์ และอย่าแก้ script ให้ print token ออกมา
  • ต้องมี Claude Code ที่ login แล้ว — ถ้ายังไม่ได้ sign in หรือไม่มี subscription ตัว daemon ก็ไม่มี usage ให้ดึง
  • Bluetooth บน macOS มี edge case — repo แก้ปัญหาอุปกรณ์ที่ OS ถือไว้เป็น HID แล้ว scan ไม่เจอ ด้วย CoreBluetooth retrieveConnectedPeripheralsWithServices
  • เรื่อง license ต้องดูดี ๆ — README เตือนเองว่า assets/brand fonts/mascot บางส่วนเป็น gray area ถ้าจะ fork ไปใช้เชิงพาณิชย์ ควรเปลี่ยน asset และ font ให้เป็นของตัวเอง

ประโยชน์จริงของ physical dashboard

เหตุผลที่โปรเจกต์แบบ Clawdmeter น่าสนใจ ไม่ใช่เพราะมันประหยัดเวลาได้มหาศาล แต่เพราะมันเปลี่ยน “ข้อมูลที่เราควรเห็น” ให้กลายเป็นสิ่งที่มองเห็นง่ายโดยไม่ต้องสลับหน้าต่าง

  • developer เห็น usage ก่อนชน limit และวางแผนงานได้ดีขึ้น
  • โต๊ะทำงานมี ambient information ที่ไม่รบกวน flow
  • ปุ่ม hardware ลด friction เวลาทำงานกับ voice/mode switching
  • maker ได้ template สำหรับเอา API data ใด ๆ มาขึ้นจอจริง

พูดง่าย ๆ คือมันเป็นตัวอย่างที่ดีของ “ข้อมูลดิจิทัล + อุปกรณ์จริง” เหมือนแนวคิด smart display, market ticker, payment terminal หรือจอแจ้งเตือนหลังบ้านร้านค้า

สรุป

Clawdmeter เป็นโปรเจกต์เล็กที่มี architecture ดีเกินขนาด มันสอนให้เห็นครบทั้ง API polling, BLE GATT, BLE HID, embedded UI, LVGL, PlatformIO, hardware abstraction และการออกแบบ dashboard ที่ใช้งานจริงบนโต๊ะ

ถ้าเป็นสาย developer/maker ที่ใช้ Claude Code หนัก ๆ โปรเจกต์นี้น่าลองมาก แต่ถ้าจะเอาไปใช้ขายหรือทำสินค้า ควรแยกแก่นเทคนิคออกจาก asset ของ Anthropic แล้วออกแบบ identity ใหม่ให้ถูกต้องตั้งแต่แรก

อยากได้จอ dashboard สวย ๆ บนโต๊ะ แต่ไม่อยากประกอบเอง?

หลักการเดียวกับ Clawdmeter คือเอาข้อมูลสำคัญออกมาจากหน้าจอคอม แล้วทำให้มันมองเห็นได้ทันทีบนอุปกรณ์จริง ถ้าสนใจจอสำหรับดูราคา Bitcoin/คริปโตแบบพร้อมใช้ ไม่ต้อง flash firmware ไม่ต้องแก้ BLE เอง ลองดู CryptoClock Basic ของ Cashless Thailand ได้

ดู CryptoClock Basic

อ้างอิง source: github.com/HermannBjorgvin/Clawdmeter

Community Reviews