Cyber Desk on Wio Terminal using Platform IO, powered by Cursor AI
この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues
Wio Terminal PCモニター チュートリアル - サイバーパンクスタイル

中文版本はこちらをクリックしてください。
プロジェクト概要
Wio Terminal をディスプレイ端末として使用し、コンピュータのさまざまなパフォーマンス指標をリアルタイムで監視するサイバーパンクスタイルのPCモニタリングシステムを作成します。
ハードウェア要件
- Wio Terminal
- USB-Cデータケーブル
- Windowsを実行しているコンピュータ
ソフトウェア要件
- VSCode + PlatformIOプラグイン
- Python 3.x
- Open Hardware Monitor(温度データを取得するため)
詳細な手順
1. 環境設定
Pythonパッケージをインストールします:
pip install psutil pyserial GPUtil wmi pywin32
VSCodeプラグインをインストールします:
- PlatformIO IDEプラグインをインストール
- OpenHardwareMonitorをインストールして実行
2. プロジェクトを作成
- PlatformIOプロジェクトを作成します:
- VSCodeを開く
- PlatformIOアイコンをクリック
- 「新しいプロジェクト」を選択
- 設定:
- ボード: "Seeed Wio Terminal"
- フレームワーク: "Arduino"
3. コード実装
(a) platformio.ini
を設定
[env:seeed_wio_terminal]
platform = atmelsam
board = seeed_wio_terminal
framework = arduino
lib_deps =
[email protected]
(b) PCモニタリングスクリプト (pc_stats.py
) を作成
import psutil
import serial
import time
import GPUtil
import socket
import wmi
from datetime import datetime
def get_cpu_temp():
try:
w = wmi.WMI(namespace="root\wmi")
temperature_info = w.MSAcpi_ThermalZoneTemperature()[0]
temp = float(temperature_info.CurrentTemperature) / 10.0 - 273.15
return max(0, min(temp, 100))
except Exception as e:
print(f"[WARN] CPU温度を読み取れません: {e}")
return 0.0
# シリアルポートを設定(必要に応じてCOMポートを変更)
ser = serial.Serial('COM10', 115200)
while True:
try:
# システムデータを取得
cpu_usage = psutil.cpu_percent()
ram_usage = psutil.virtual_memory().percent
cpu_temp = get_cpu_temp()
disk_usage = psutil.disk_usage('/').percent
# GPU情報を取得
try:
gpus = GPUtil.getGPUs()
gpu_usage = gpus[0].load * 100
gpu_temp = gpus[0].temperature
except:
gpu_usage = gpu_temp = 0
# データをWio Terminalに送信
data = f"{cpu_usage},{ram_usage},{cpu_temp},{gpu_usage},{gpu_temp},{disk_usage},{socket.gethostbyname(socket.gethostname())}\n"
ser.write(data.encode())
time.sleep(0.5)
except KeyboardInterrupt:
ser.close()
break
(c) Wio Terminal コード (main.cpp
) を作成
#include <Arduino.h>
#include "TFT_eSPI.h"
TFT_eSPI tft;
int currentPage = 0;
// ボタンを定義
const int BTN_1 = WIO_KEY_A;
const int BTN_2 = WIO_KEY_B;
const int BTN_3 = WIO_KEY_C;
// PC状態構造体
struct PCStats {
int cpuUsage = 0;
int ramUsage = 0;
float cpuTemp = 0.0;
int diskUsage = 0;
int gpuUsage = 0;
float gpuTemp = 0.0;
char ipAddress[16] = "0.0.0.0";
unsigned long lastUpdate = 0;
} pcStats;
// 描画関数
void drawBox(int x, int y, int w, int h) {
tft.drawRect(x, y, w, h, TFT_GREEN);
}
void drawTitle(const char* title) {
tft.drawString("<<", 10, 10);
tft.drawString(title, 40, 10);
tft.drawString(">>", 270, 10);
drawBox(5, 5, 310, 230);
tft.drawLine(10, 30, 300, 30, TFT_GREEN);
}
// [その他の描画関数...]
void setup() {
Serial.begin(115200);
tft.begin();
tft.setRotation(3);
tft.setTextSize(2);
pinMode(BTN_1, INPUT_PULLUP);
pinMode(BTN_2, INPUT_PULLUP);
pinMode(BTN_3, INPUT_PULLUP);
drawPage(currentPage);
}
void loop() {
// データを受信して解析
if (Serial.available()) {
String data = Serial.readStringUntil('\n');
// データを解析...
}
// ボタン処理
if (digitalRead(BTN_1) == LOW) {
currentPage = 0;
drawPage(currentPage);
delay(200);
}
// [その他のボタン処理...]
// ディスプレイを更新
if (currentPage == 0) {
drawSystemStatus();
delay(100);
}
}
4. プロジェクトを実行
- コードをWio Terminalにアップロードします
- OpenHardwareMonitorを実行します
- Pythonスクリプトを実行します:
python pc_stats.py
- Wio Terminalのボタンを使用してページを切り替えます:
- ボタンA: システムステータス
- ボタンB: パフォーマンスモニタリング
- ボタンC: ネットワーク情報

カスタマイズの提案
- 表示スタイルの調整: 色(例:
TFT_GREEN
)、レイアウト、フォントサイズを変更する。 - アニメーションの追加: サイバーパンク風の演出を強化するためにアニメーション効果を追加する。
- 新機能の追加:
- ネットワーク速度の監視
- ディスクの読み書き速度
- システムプロセス情報
トラブルシューティング
シリアル接続の問題:
- COMポートが正しいか確認する
- ボーレート設定(115200)を確認する
温度読み取りの問題:
- OpenHardwareMonitor が実行中であることを確認する
- 管理者権限を確認する
表示の問題:
- 表示座標が境界を超えていないか確認する
- ゴースティングを防ぐために
clearArea
関数を使用する
高度な最適化
- データログ機能を追加する
- 警告閾値を実装する
- 表示テーマをカスタマイズする
- グラフ表示を追加する
- WiFi接続を有効にする
このプロジェクトは初心者に最適であり、拡張の余地がたくさんあります。基本機能から始めて、徐々に必要な機能を追加してください。
カーソルAI開発チュートリアル - Wio Terminal PCモニターを基に
1. カーソルAIの基本
1.1 プロジェクトの初期化
- カーソルエディタを開く。
- AIに作成したい内容を伝える:
"PCのシステム情報をサイバーパンク風に表示するWio Terminalプロジェクトを作りたい。"
- AIが以下を支援:
- プロジェクト構造の提案
- 必要なファイルの作成
- 初期コードの提供
1.2 コラボレーションモード
- 明確かつ具体的に説明する: 一度に1つの機能に集中する。
- 迅速にフィードバックを提供する: 問題が発生した場合はAIに知らせる。
2. 実践的なケーススタディ
2.1 基本的な表示機能の作成
良いプロンプト:
"CPU使用率、メモリ使用率、温度情報を表示するWio Terminalのプログラムを作るのを手伝ってください。"
- AIが提供する内容:
- 必要なヘッダーファイル
- 基本的なコード構造
- 表示機能の実装
2.2 特定の問題を解決する
例: 温度読み取りの問題を修正する
良いプロンプト:
"CPU温度の読み取りが0になっています。どうすれば修正できますか?"
- AIの回答:
- 考えられる原因を分析
- 複数の解決策を提供
- 実装例を提示
2.3 表示効果の最適化
良いプロンプト:
"サイバーパンク風の表示を最適化するにはどうすればいいですか?"
- AIが以下を提供:
- デザインの提案
- 特定のコードの実装
3. デバッグ技術
3.1 コードエラーの処理
コンパイルエラーが発生した場合、エラーメッセージをAIにコピーする:
"コンパイル中にこのエラーが発生しました: [エラーメッセージ]"
AIが以下を行う:
- エラー原因を分析
- 修正方法を提供
- 解決策を説明
3.2 ロジックの問題の処理
良い説明:
"画面上の数字が更新時にゴースティングしています。どうすれば修正できますか?"
- AIのプロセス:
- 根本原因を理解する
clearArea
関数を提案する- 完全な解決策を提供する
4. ベストプラクティス
4.1 適切な質問をする
- 具体的に:
- "特定の機能を実装したい。"
- コンテキストを提供する:
- "A機能を実装しましたが、次にB機能を追加したいです。"
- 問題を明確に説明する:
- "特定の問題が発生しました。エラーメッセージは[エラー内容]です。"
4.2 コードの最適化
- コードレビューを依頼する:
- "このコードをレビューして改善点を提案してください。"
- パフォーマンスの最適化:
- "このコードの実行速度が遅いです。どうすれば最適化できますか?"
- コードスタイルの改善:
- "このコードをより読みやすく、保守しやすくするにはどうすればいいですか?"
4.3 機能拡張
- 段階的な開発:
- "新しい機能を追加したいです。どこから始めればいいですか?"
- モジュール化の依頼:
- "この機能を将来の拡張のためにモジュール化するにはどうすればいいですか?"
5. よくある落とし穴
5.1 避けるべきこと
- 不明確な問題:
- ❌ 「コードが動きません。どうすればいいですか?」
- 不完全な情報:
- ❌ 「エラーがあります。直してください。」
- 範囲が広すぎる:
- ❌ 「プロジェクト全体を完成させるのを手伝ってください。」
5.2 推奨される方法
- 明確な問題の説明:
- ✅ 「CPU使用率の値が常に0です。これを修正するにはどうすればいいですか?」
- 完全な情報を提供する:
- ✅ 「このエラーが発生しました: [完全なエラー情報]。使用しているライブラリのバージョンは: ...」
- 合理的なタスク分割:
- ✅ 「まず基本的な表示を実装し、その後段階的に他の機能を追加しましょう。」
6. 結論
- 段階的な開発: 基本的な機能から始め、徐々に新しい機能を追加していきます。
- タイムリーな問題解決: 問題が発生したらすぐに対処します。
- 効果的なコミュニケーション: ニーズを明確に説明し、コンテキストを提供します。
- 継続的な最適化: 定期的にコードを見直し、改善を行います。
このプロジェクトを開発することで、Cursor AIが開発効率を大幅に向上させることを実感できます。重要なのは、AIと効果的に協力する方法を学ぶことです。明確な質問と適切に定義された要件が、より良い結果を得る助けとなります。