USB Native portでPCと通信してみます

〔arduino Zero の使い方に戻る〕


このページでは"Arduino Zero Pro"のUSB2(Native port)を使ってパソコンと通信をしてみます。
・CDCクラスでのシリアル通信
・HIDクラスでのマウスとキーボードのエミュレーション
又このNative portは周辺機器用のUSBホスト(OTG)として動作もしますが、この記事は後日追記します。

《シリアル通信(CDC)》

@ "Native port"とPCをUSBマイクロBコネクターケーブルで繋ぎます。

A ArduinoIDEを起動させ、ボードとポート設定を"Arduino Zero Pro(Native USB port)"に設定します。

B IDEに下記のスケッチプログラムをコピーペーストして貼り付けて下さい。
---------------------------------------------------------------------
void setup()
{
     // USBでCDCクラスの初期化を行う
     SerialUSB.begin(9600);  // シリアル通信の速度は9600bps
     while (!SerialUSB) {
        ; // シリアルポートが接続するのを待ちます(ネイティブUSBポートにのみ必要)
     }
}
void loop()
{
     char inChar;

     if (SerialUSB.available() > 0) {
          // データが受信されたら1バイト読み込む
          while( -1 == (inChar = SerialUSB.read()));
          // 読み込んだ"データ+1"で返す
          SerialUSB.println((char)(inChar+1));
     }
     delay(10);
}
---------------------------------------------------------------------
C スケッチをコンパイルして書き込みます。
  ("Native port"で書き込む事になります)

D "Tera Term"等のターミナルツール等で操作しても良いのですが、ここは簡単にIDEのシリアルモニタを
  使いましょう。

E シリアルモニタを表示させ、送信ボックスに"a"を入れて[ENTER]を押して見て下さい。
  "b"が返されて表示されると思います。(送信データ+1の内容で返されます)

何とも簡単に出来てしまいました、流石Arduinoと言った所ですね、PICで苦労したのは何だったのでしょう。

しかぁ〜しぃ、
PCからデータを数バイト送信した場合、最初の1バイトしか受信しない、なぁ〜ぜぇ?、バグっぽ〜い。
因みに、"Arduino Zero"からPCへは数バイトの送信OKです。

SerialUSBライブラリのの使い方説明

 SerialUSB.begin(speed)
  USBでCDCクラスによるシリアル通信の初期化を行います。
   uint32_t speed:通信する速度を指定します

 SerialUSB(又はSerial)
  指定されたシリアルポートの準備ができているかどうかを調べます。
  ネイティブUSBを搭載したボードでは、if(Serial)(又はDue/Zero(SerialUSB)は、
  USB CDCシリアル接続が開いているかどうかを示します。
  他の全てのボード、及びUSB以外のCDCポートでは、これは常にtrueを返します。
   bool Returns:指定されたシリアルポートが使用可能な場合はtrueを返します
   例)
     SerialUSB.begin(9600) ;
     while(!SerialUSB) ; // USBポートが開くまで待つ、それ以外は常にtrueを返す

 SerialUSB.end( )
  シリアル通信の終了を行います、再度シリアル通信を有効にしたい時は、
  SerialUSB.begin( )をコールして下さい。
  終了した場合はボードがリセットされないと新しいプログラムをアップロードする事が出来ません。

 ans = SerialUSB.available( )
  シリアルポートに何バイトのデータが到着しているかを返します、バッファは64byteまでです。
   int ans:シリアルバッファに有るデータのバイト数を返します

 SerialUSB.accept( )
  データを受信するまで待ちます、データはSerialUSB.read( )で取り出します。

 ans = SerialUSB.peek( )
  受信データを1バイト読み込みますが、バッファ中の読み取り位置は変更しません。
  つまり、peek()は同じ文字を繰り返し読み取ります。
   int ans:読込み可能なデータの最初の1バイトを返します、-1の場合は、データが存在しません

 ans = SerialUSB.read( )
  受信データを読み込みます。
   int ans:読み込み可能なデータの最初の1バイトを返します、-1の場合は、データが存在しません

 ans = SerialUSB.readBytes(char *buffer, size_t count)
  指定した数(count)の分だけ受信データを読み込むまで待ちますが、1秒でタイムアウトです。
   uint8_t *buffer :受信したデータを格納する場所を指定します
   size_t count  :受信するデータのバイト数を指定します
   size_t ans    :実際に受信したバイト数を返します

 SerialUSB.flush( )
  これは受信データのバッファクリアではなく、ポートに対する何らかの操作の様です。


 ans = SerialUSB.write(uint8_t c)
 ans = SerialUSB.write(const uint8_t *buffer, size_t size)
  シリアルポートにバイナリデータを出力します。
  1バイトずつ、あるいは複数バイトの送信が可能です。
   uint8_t c    :送信する1バイトのデータを指定します
   uint8_t *buffer:送信するデータを格納した場所を指定します
   size_t size   :送信するデータのバイト数を指定します
   size_t ans   :実際に送信したバイト数を返します

 SerialUSB.print( )
 SerialUSB.println( )
  データの送信ですが、使い方は、Serial.print( )と同じです。


以下の記事は動作させられなかったので記事は中断したままです。m(_ _)m

《キーボード(HID)》

詳しくは、本家の"Mouse and Keyboard libraries"リファレンスマニュアルを参照しましょう。

@ IDEに下記のスケッチプログラムをコピーペーストして貼り付けて下さい。
---------------------------------------------------------------------
const int buttonPin = 2 ;         // input pin for pushbutton
int previousButtonState = HIGH ;  // for checking the state of a pushButton
int counter = 0;                  // button push counter

void setup()
{
     // キーボードスイッチの代わり
     pinMode(buttonPin, INPUT) ;
     // USBでHIDクラスのキーボードで初期化を行う
     Keyboard.begin() ;
}
void loop()
{
     int buttonState ;

	// read the pushbutton:
     buttonState = digitalRead(buttonPin);
	// if the button state has changed, and it's currently pressed:
	if ((buttonState != previousButtonState) && (buttonState == HIGH))
	{
		// increment the button counter
		counter++;
		// type out a message
		Keyboard.print("You pressed the button ");
		Keyboard.print(counter);
		Keyboard.println(" times.");
	}
	// save the current button state for comparison next time:
	previousButtonState = buttonState;
}
---------------------------------------------------------------------
C スケッチをコンパイルして書き込みます。

《マウス(HID)》





【きむ茶工房ガレージハウス】
Copyright (C) 2006-2020 Shigehiro Kimura All Rights Reserved.