wiki:Guide/ArduinoLeonardo

Arduino Leonardoへのガイド

Arduino Leonardoをパソコンに接続するには、マイクロUSBのB端子を持つケーブルが必要です。このUSBケーブルで、電源を供給し、データ通信を行います。Leonardoにスケッチを書き込むには、Arduino IDEの「ツール」→「マイコンボード」メニューから「Arduino Leonardo」を選んでください。

Arduino Unoとの違い

基本的には、Leonardoは他のArduinoマイコンボードと全く同じように使えます。しかし、少数ながら重要な違いがあります。

1個のマイコンでスケッチの実行およびUSB通信の両方を実現している

Leonardoは、1個のマイコンでスケッチを動かし、USB通信も行なっているという点が、これまでのArduioマイコンボードと異なります。Unoおよびその他のマイコンボードでは、これら二つの機能のために別々のマイコンを使っています。つまり、スケッチを動かすメインのマイコンの状態にかかわらず、USB接続は維持されたままです。これら二つの機能を1個のマイコンに統合した事により、Leonardoはパソコンとの通信をこれまでよりも柔軟に行う事ができます。また、マイコンの数を減らした事により、マイコンボードの製造コストが下がりました。

リセット時にシリアルポートが再検出される

Leonardoにはシリアル通信専用のマイコンが搭載されておらず、シリアルポートはあなたのパソコンとLeonardo上のソフトウェアにより、仮想的に実現されています。Arduinoマイコンボードを接続したときに、あなたのパソコン上にシリアルポートドライバのインスタンスが生成されるのと同様、ブートローダが動いているときにはLeonardoはシリアルインスタンスを生成しています。LeonardoはUSBのCommunications Device Class (CDC)ドライバのインスタンスです。つまり、あなたがボードをリセットするたびに、LeonardoのUSBシリアル通信は切断され、再接続されます。Leonardoはシリアルポートのリストから消え、再度リストに上ることになります。Leonardoとのシリアル接続を開いているプログラムは接続を失うことになります。これはUSB接続(ATmega8U2やATmega16U2といった二つ目のプロセッサによって管理されている)を閉じること無くメインプロセッサ(ATmega328P)をリセットできるArduino Unoとは対照的です。この違いはドライバのインストール、スケッチの書き込み、そして通信に影響します。具体的には後述します。

シリアルポートを開いてもリセットされない

Arduino Unoとは異なり、Leonardoはパソコンでシリアルポートを開いてもスケッチをリスタートしません。つまり、ボートによって既にパソコンに送信されたシリアルデータ、例えばsetup()で送信された多くのデータを見ることはできません。この変更は、Serial print()、println()あるいはwrite()といったステートメントをsetup()で使用してもシリアルモニタを開いても読むことができないということを意味します。こういった動作を期待する場合、次の様にシリアルポートが開いているかをチェックすることもできます。

// シリアルストリームが開いていないときには、何もしない:
   while (!Serial) ;

キーボードとマウスのエミュレーション

1個のマイコンをスケッチの実行とUSB接続に利用する利点のひとつに、パソコンとの通信の柔軟性が増す、ということが挙げられます。Leonardoが(Arduino Unoと同様の)仮想シリアルポート(CDCとも呼ばれます)としてパソコンに認識され、スケッチの転送と通信に使われている時、同時にLeonardoは(HID)キーボードやマウスとして振る舞うことができます。後述の「良いコードの例」の項に、この機能を使う際の注意点が記されているので参照してください。

USBとシリアル通信の分離

Leonardoにおいて、SerialクラスはUSBによるパソコンとLeonardo間の仮想シリアルドライバを指します。これはArduino Unoといった従来のArduinoマイコンボードとは異なり、0番ピンおよび1番ピンとは繋がっていません。ハードウェアシリアルポート(0番ピンおよび1番ピン、RXおよびTX)を使用するには、Serial1クラスを使って下さい。(Serial クラスのリファレンスページ(訳注: 未翻訳)に詳しい記述があります。)

ピン機能の相違

Leonardoは、ピンの割り当てや機能(特にSPIやTWI関連)にちょっとした相違があります。詳細はハードウェアページ(訳注: 未翻訳)に記してあります。

Leonardo用ドライバのインストール

OSX

はじめてLeonardoをMacに接続した際に、「キーボード設定アシスタント」が起動します。Leonardoのために設定すべき項目は特にありませんので、左上の赤いボタンをクリックして、このダイアログを閉じてください。

Windows (XPと7でテスト済み)

Windows XPとWindows 7での手順は概ね一緒です。以下のスクリーンショットはXPにインストールした場合のものです。

  • ボードをパソコンに接続して、Windowsがドライバのインストール手順を開始するまで待ちます。インストーラが自動的に起動しない場合、「デバイスマネージャ」(「スタート」→「コントロールパネル」→「ハードウェア」)を開き、Arduino Leonardoを探してください。それを右クリックして「ドライバの更新」ボタンをクリックします。
  • 「ソフトウェア検索のため、Windows Updateに接続しますか?」と聞かれたら、「いいえ、今回は接続しません」を選んで、「次へ」ボタンをクリックしてください。


  • 自動的にインストールするか場所を指定するか尋ねられたら、「一覧または特定の場所からインストールする(詳細)」を選択して、「次へ」ボタンをクリックしてください。


  • 「次の場所で最適のドライバを検索する」を選び、「次の場所を含める」チェックボックスをチェックしてください。
  • 「参照」ボタンをクリックしてから、あなたがArduino IDE 1.0.1またはそれ以降のソフトウェアを展開した場所を探してください。
  • 「drivers」フォルダを選択してから「OK」ボタンをクリックしてください。


  • 「次へ」をクリックします。
  • Leonardoのドライバがウィンドウズロゴテストに合格していないという警告が表示されますが、「続行」ボタンをクリックしてください。


  • しばらくすると、Arduino Leonardoのドライバソフトウェアのインストールが完了したと表示されます。「完了」ボタンをクリックしてください。


Linux

Ubuntu 10.0.4ではドライバをインストールする必要がありません。

コードをLeonardoに書き込む

Leonardoへのスケッチの書き込みは、Unoや他のArduinoマイコンボードでの手順と同様です。ArduinoIDEの「マイコンボードに書き込む」ボタンをクリックすると、あなたのスケッチは自動的にLeonardoに転送され、実行されます。ArduinoIDEはLeonardoをリセットし、ブートローダ(これは新しいスケッチを受信し、保存し、起動するものです。)を起動します。

Leonardoのシリアルポートは仮想ですので、ボードがリセットされたときにパソコンから見えなくなります。このため、ArduinoIDEはUnoや他のボードとは異なるタイミングで書き込みを行います。Leonardoのオートリセットを開始した後(「ツール」→「シリアルポート」メニューで選択したシリアルポートを使います。)、ArduinoIDEは新たに仮想シリアルポートが見つかるまで待ちます(これがLeonardoのはずです)。その後、新たに見つかったポートに対して、スケッチの書き込みを実行します。

これらの違いによって、オートリセットが働かなかったときにリセットボタンを用いる方法に違いが生じています。Leonardoのリセットボタンを押し、押したままの状態でArduino IDEの「マイコンボードに書き込む」ボタンをクリックします。Arduino IDEのステータスバーに「マイコンボードに書き込んでいます…」と表示された後にリセットボタンから指を離して下さい。すると、ブートローダがスタートし、パソコン上で新しい仮想シリアルポート(CDC)が作成されます。Arduino IDEはポートを見つけ、そのポートを使って書き込みを実行します。なお、この方法でのリセットが必要なのは、通常の書き込み(例えば「マイコンボードに書き込む」ボタンをクリックしたとき)がうまくいかなかった場合のみです。オートリセットはパソコンがLeonardoのシリアルポートを1200bpsで開いた後に閉じる事によって実行されます。たとえばスケッチで割り込みを禁止しているような場合には、USB通信がうまくいかず、オートリセットも動作しません。

Leonardoにおける良いコードの例

Leonardoをマウスやキーボードとして使うときの注意点: マウスやキーボードライブラリが絶えず動作していると、スケッチを書き込むことが難しくなります。Mouse.move()とKeyboard.print()は、接続しているパソコンのカーソルを動かしたりキー操作をするので、あなたが取り扱えるというときにのみ呼び出すべきです。物理的なスイッチなど、あなたがコントロールできる特別な入力にのみ反応する仕組みを用意することを薦めます。マウスやキーボードライブラリを使うときには、まず Serial.print() を使ってなにが出力されるかテストしてみたほうが良いでしょう。こうすることで、どんな値が出力されるかを確かにすることができます。スケッチの例を参照して、上手く扱う方法を学んでください。

シリアルモニタを効果的に使う: Leonardoでは、シリアルは1つのマイコンだけを通過するだけなので、Unoや他のマイコンボードよりも早くパソコンのシリアルバッファをいっぱいにしてしまう可能性があります。次のコードのようにシリアル通信を連続して行うときには注意が必要です。

void loop() {
    int sensorReading = analogRead(A0);
    Serial.println(sensorReading);
}

IDEのシリアルモニタは、大量のデータを処理するため、動作が相当に緩慢になります。このような現象に遭遇したら、短いディレイをループに追加しましょう。するとパソコンのシリアルバッファはそんなに早く埋まらなくなります。1ミリ秒のディレイでも役に立ちます。

void loop() {
    int sensorReading = analogRead(A0);
    Serial.println(sensorReading);
    delay(1);
}

RXTXライブラリ以外のネイティブライブラリを使用しているシリアル通信アプリケーションはシリアルバッファをより高速に読むことができます。ですので、シリアルモニタ、Processing、他のRXTXベースのシリアルアプリケーション以外ではこのような問題には遭遇しづらいはずです。 Arduino Leonardoに関するより詳細な情報は、ハードウェアページ(訳注: 未翻訳)やマウスおよびキーボードリファレンス(訳注: 未翻訳)にあります。

このドキュメントはCC BY-SA 3.0でライセンスされています。 Creative Commons Attribution-ShareAlike 3.0 License.

このドキュメントはArduino Teamにより執筆されたGuide to the Arduino Leonardoを、スイッチサイエンスと坪井さん(@ytsuboi)が翻訳し、一部加筆修正したものです。

スイッチサイエンスでの取り扱い

Arduino Leonardoはスイッチサイエンスからもご購入いただけます。ピンソケットが付いた物と付いてないものの2種類からお選びいただけます。

Last modified 5 years ago Last modified on May 27, 2012 3:17:14 AM

Attachments (12)