HIDSimpleFrameworkについて
HIDSimpleFrameworkはUSB HIDを用いてホスト(PC)とマイコンのプログラムを連携させる、非常にシンプルなフレームワークです。 できることは限られていますが、USB HIDなのでドライバが不要、また、CDCデバイスのようにCOMポートを選択する必要もありません。 ホスト側のライブラリはC#で書かれており、.NET frameworkさえインストールされていれば、Windows XP~Windows 8まで幅広い環境で確実に動作します。
最も簡単な使い方
PCと接続して、ホスト(PC)からの指令でLEDを点滅させる簡単なサンプルは以下のようになります。 64バイトのパケットにデータを入れてホストから送信し、それをマイコンで受信する、単純な動作です。マイコン側は、LEDのポートの初期化と簡単なループ以外になにも書く必要がありません。
デバイス(マイコン)側のコード:
void init( void ) {
TRISBbits.TRISB1 = 0; // RB1をデジタル出力に設定
}
void run( void ) {
BYTE buff[64]; // 受信バッファ
// データが届いていたら受信する
if ( HIDReceive( buff, sizeof( buff ) ) ) {
// LEDを点けるか消すか
LATBbits.LATB1 = ( buff[0] ? 1 : 0 );
}
}
ホスト(PC)側のコード:
// デバイスに接続
HIDSimple dev = new HIDSimple();
dev.Open( vid, pid );
while ( true ) {
// 1を送信
dev.Send( new byte[] { 1 } );
System.Threading.Thread.Sleep( 500 );
// 0を送信
dev.Send( new byte[] { 0 } );
System.Threading.Thread.Sleep( 500 );
}
もう少し実用的な使い方
一方的にホストから指令を送るだけではあまり使えないので、ボタンを押したらLEDが光るサンプルを作ってみます。 マイコンに接続されたボタンの状態をホスト側で読み取り、LEDを点灯させる指令をマイコンに送信します。
デバイス(マイコン)側のコード:
void init( void ) {
ANSELBbits.ANSB0 = 0; // RB0をデジタル入力に設定
TRISBbits.TRISB0 = 1;
TRISBbits.TRISB1 = 0; // RB1をデジタル出力に設定
}
void run( void ) {
BYTE buff[64]; // 受信バッファ
// データが届いていたら受信する
if ( HIDReceive( buff, sizeof( buff ) ) ) {
// LEDを点けるか消すか
LATBbits.LATB1 = ( buff[0] ? 1 : 0 );
}
// 送信可能?
if ( HIDSendReady() ) {
// ボタンの状態を送る
buff[0] = PORTBbits.RB0;
HIDSend( buff, 1 );
}
}
ホスト(PC)側のコード:
// デバイスに接続
HIDSimple dev = new HIDSimple();
dev.Open( vid, pid );
while ( true ) {
// 受信する
byte[] buff = dev.Receive();
// そのまま送り返す
dev.Send( buff );
System.Threading.Thread.Sleep( 100 );
}
お約束
このライブラリは三条項BSDライセンスとなっています。 まったく自由にお使い下さい。但し特に保証もしません。