25
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

USBデバイスが作りたいんじゃ:CPUメーター

Last updated at Posted at 2021-04-12

#はじめに

Digispark互換をAmazonで購入し、まだ世に出てないっぽい「Digispark CPU Meter」を作ってみた。CPU負荷の他にパフォーマンスモニタ風に表示した。
(YouTube)

##利用場面
ノートPCに

サーバーなどに

RaspberryPiで

#ハード

  • Digispark(Amazonで300円/1個
  • SSD1331 96x64 OLEDディスプレイ(Amazonで1,300円/1個
  • Windows10(母艦)
  • ユニバーサル基板、ワイヤ、抵抗、コンデンサ等(回路図参照)
  • ケースは 100均のフォトスタンドの透明プラスチックを切って作った
  • ネジは M2x20

##Digispark
Amazon
開発元はここなのですが、Amazonで買えるのはほとんど互換品。PB5ピンが初期では使えなくなっているとかあり、他は問題なく使えている。Windows10で開発するには こちらのサイト通りに行った。USB-HIDとして使用する分にはドライバのインストールは不要なのだが、ArduinoIDEで開発するには開発用ドライバのインストールが必要だった。
プログラム用メモリが実質6KBしかないので、使用するライブラリはかなりシビア。有名所のグラフィックライブラリはほとんど使えなかった。

##OLED SSD1331
Amazon

DataSheet

#開発環境

  • ArduinoIDE 1.8.12
  • Visual Studio 2019 (Community 無料版)

#システム概要

##CPUメーター(Digispark+OLED)
Digisparkと OLED(SSD1331)を SPI接続する。回路図は下記参照。

DigisparkのP3,P4は USB で使用するため他の用途では使用できない。中華Digisparkでは P5 は REST になっているため初期状態では使えません。
なのでP0,P1,P2の3つでSPIをするのに苦労した。使えそうなディスプレイ+SPIライブラリがないか色々探したところ、ここにたどり着きました。このページでは生ATtiny85だが、Digisparkも中身はATtiny85なのでバッチリ。

スケッチは、ArduinoIDEで作成。HIDライブラリは v-usb を使用した。

RapsberryPi用は以下を有効にする。

DigiCPUMeter.ino
//#define _RASBERRYPI // to use RaspberryPi

###USB転送方式
今回のUSB転送方式は、コントロール転送 を使った。比較的簡単に扱えるが転送データ量は小さいため、コマンドぐらいの用途で使用されるのが一般的。
今回は、ホストプログラムから データ5byte を デバイスに送るようになっている。

###回路図

※5V/GND はDigisparkのUSBより供給される。 ※SSD1331は3.3Vに降圧した方が良いかもしれません。

Windows10

Windows10環境では、タスクマネージャーの下記赤線部を表示している。

  • スクショのタイミングが違うので写真と一致していない。
  • Network は、送受信の合計を Kbps/Mbps で表示。目安程度かな。

USB は HID を使うため、実行環境にドライバをインストールする必要はない。ただしCPU負荷などをDigisparkに送るホストプログラムが必要。
ホストプログラム(CPUMeter.exe)は、C# で作成した。HIDライブラリとして HIDSharp を使用した。

##RaspberryPi
RaspberryPi環境では $ dstat コマンド の出力の下記赤線部を表示している。

  • スクショのタイミングが違うので写真と一致していない。
  • Memoryはpagingのout値が1以上だと [swap] が赤くなる。
  • TempはCPU温度($ vcgencmd measure_temp)。
  • CPU は、100 - idl を表示した。
  • Network は、送受信の合計を Kbps/Mbps で表示。目安程度かな。

ホストプログラム(CPUMeter.js)は、Node.js で作成した。
HIDライブラリとして node-hid、USB 監視ライブラリとして usb-detection を使用した。
パフォーマンス収集として dstat の 標準出力を利用している。よって、dstat のインストールが必要。

$ sudo node CPUMeter.js > /dev/null &

#ソースコード
HID周りのコードは、こちらのコードを利用させて頂きました。
SSD1331ディスプレイ制御用のコードは、こちらのコード を利用させて頂きました。回路も参考にさせて頂きました。

github:https://github.com/nori-dev-akg/Digispark-CPU-Meter

#おわりに
もちょっとキレイなケースなどにすれば、千円ぐらいで売れるんじゃないかな?と思うぐらいの出来になりました。材料で2千円弱なので大赤字。ディスプレイが500円ぐらのを見つければ行けるかな。Macを持っていないのでMac版は作れていません。

YoutTube

#Special Thanks!!!

25
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?