Translate

2016年5月27日金曜日

Arduino Yunをはじめよう (Arduino社ドキュメント)を翻訳してみた


Ciao関連のドキュメントを勝手翻訳していると、
やはり Arduino Yun というボード自身の基礎知識が
どうしても必要になってくる。

これまでマニュアルも読まず使っていたツケを
そろそろ生産するときか..

ということで、いまさらだが
Arduino Yunの Getting Startedにあたるドキュメント


Getting Started with the Arduino Yún

を勝手翻訳してみた。
以下、参考にする場合はat your own riskでお願いします。


------

Arduino Yunをはじめよう


Arduino Yunは、ほかのもの(Arduino系のボード)とは異なるボードです。プログラミングはArduino Leonardoと大変似ており同じプロセッサATmega32U4を使っていますが、それとは別にプロセッサAtheros AR9331が追加されており、こちらではLinuxおよびOpenWrtワイヤレススタックが動作しています。USB経由での32U4へのプログラミングはArduino Leonardoと同じです。一度Yunに対してWiFiネットワークへの接続設定を行えば、WiFi経由での32U4へのプログラミングが可能になります。

Arduino Yunをコンピュータに接続するには、Micro-B USBケーブルが必要になります。このUSBケーブルは電源およびデータをボードへ供給します。Yunへのプログラミングを行う場合、ArduinoIDEのTools > Board menuに進みArduino YUNを選択しなくてはなりません。YunはArduino IDE 1.5.4以降のみサポートしています。

目次

    Arduino Leonardoとの違い
    OpenWrt-Yun
    Python
    Yun上の外部ストレージ
    Web サービス
    プロセッサ(AR9331、WiFi、32U4)の再起動
    パスワードのリセット
    リセットによるシリアルポートリストの再列挙
    シリアルポートのオープン時のリセットなし
    Yunドライバインストール
        OSX
        Windows
        Linux
    オンボードWiFiの設定
    WiFiを使った32U4プログラミング
    オンボードEthernetの使用
    Bridge経由でのOpenWrt-Yunとの通信
    コンソール
    Process
    Bridgeを使った2つのプロセッサ間の情報連携
    Tembooを使ったインターネットサービスへの接続
    Spacebrew
    Linux上にへ追加ソフトウェアのインストール
    次のステップ

 

Arduino Leonardoとの違い



図→ https://www.arduino.cc/en/uploads/Guide/YunParts.png
 

Yunは 32U4 チップに加え、 Python2.7のフルインストールも含んだ OpenWrt-Yun(OpenWrtベース)と呼ばれる組込みシステム向けのLinuxディストリビュージョンが動作する Atheros AR9331 というプロセッサを搭載してます。

Yun はたくさんの Leonardo とは異なる物理的な特徴やコネクターを持っています。オンボードSDカード、Ethernetジャック、USB-A ホストコネクタを搭載しています。かわりにUNOやLeonardoには搭載されていた樽型の電源コネクタがありません。Yunはmicro-USBコネクタから給電します。

SD、Ethernet、USB-Aコネクタは物理的には 32U4 と接続されていません、AR9331側に接続されています。

Yunにおける32U4 の機能は Serial1 を使用できない以外は Leonardo と全く同じです。Serial1は、AR9331プロセッサとの通信のために予約されています。

Yunは ワイヤレスルータと接続したりアクセスポイントとして振る舞うための WiFi モジュールもオンボードで搭載しています。

32U4、WiFi、AR9331プロセッサは、各々リセットボタンを持っています。



図→ https://www.arduino.cc/en/uploads/Guide/YunResetIllustrations.png

Yun上には、電源インジケータ、WLAN接続、WAN接続、そしてUSBのそれぞれのステータスLEDを搭載しています。加えてステータスライトの一つは13ピンに接続されています。

図→ https://www.arduino.cc/en/uploads/Guide/YunStatusLEDs.png

 

OpenWrt-Yun


Yun上では、(OpenWrtベースの)OpenWrt-Yunと呼ばれるLinuxディストリビュージョンが動作します。OpenWrt-Yunはコマンドラインから設定が可能で、多くの異なったオプションが設定可能なWebページも用意されています。(LuCiと呼ばれる)インターフェイスは、WiFiインターフェイスの維持に必要な多くの設定が可能です。



Webインターフェイスへのアクセスは、後述します。

OpeWrt-Yun上に追加ソフトウェアをインストールするためには、Linuxパッケージマネージャopkgを使う必要があります。マネージャについての詳細や一般的なコマンドについてはYun パッケージマネージャページを参照してください。



OpenWrt-Yunシステムとのインターフェイスとして、ArduinoのBridgeライブラリもしくはSSH経由によるどちらかでアクセスするには、コマンドラインを使用しなくてはなりません。もしあなたがコマンドラインを知らないのであれば、若干基礎を読む必要かもしれません。


OpenWrtコミュニティやArduinoコミュニティからの継続的な改善や提案により、あなたのYun上にインストールされたOpenWrt-Yunのバージョンが古い場合があります。更新チュートリアルをチェックし、最新版を動かすようにしてください。

Python


OpenWrt-Yunには、Python2.7がインストールされており、アプリケーションやスクリプトを書くことができます。Pythonについての詳細は、Pyhton2.7ドキュメンテーションページを訪問してください。


はじめてPythonを使うのであれば、多くの完全なオンラインリソースがあります。書籍"Learn Python the Hard Way"は、スクリプトを作成し実行するために必要な知識をカバーしています。


 

Yun上の外部ストレージ



書き込み上限があるため Yunのビルトイン不揮発メモリの使用を躊躇するとおもいます。
データ、スクリプト、Webページなどを保存するためにmicroSDカードやThumb Driveのような外部メモリを使うことができます。Yunが32U4を通してこれらのドライブへアクセスし情報を保管するには、ルートボリュームのarduinoと名付けられたディレクトリが必要です。

Web サービス


OpenWrt-YunはクライアントやサーバのためREST("Representational State Transfer"の略)を使います。RESTはURLを通してArduinoハードウェアの様々なパーツを公開するソフトウェアアーキテクチャの一つです。

デフォルトでは、REST APIはパスワードプロテクトされています。パスワード無しでサービスへのアクセスする設定に変更可能です。この設定変更は、Yun設定パネルへ入ります。ページの最後に、アクセス変更のためのトグルボタンがあります。

図→ https://www.arduino.cc/en/uploads/Guide/YunRESTAccess.png

RESTの裏のコンセプトの素晴らしい情報はこちらでみつけることができます。
 

Yunにより認められているRESTエンドポイントは以下のとおりです:
    /arduino
    /data
    /mailbox


"/arduino"ディレクトリは、予め何も設定されていません。エンドポイントの後ろに何か文字列を加える事で、Webサーバから32U4上のSketchへ渡されます。Sketch内部にAPIを定義することができます。Bridgeのサンプルを確認し、ボード上のピンへのアクセスがどのようになされているのか確認してください。

"/data"は内部のキーバリューストアへのアクセスが可能です。有効な呼び出しは、以下のとおりです:

    /put/KEY/VALUE : ストレージ内部へ値を格納する
    /get/KEY : JSON内の要求されたキー値を取得する
    /get : JSON内の全ストレージリストを取得する
    /delete : 内部ストレージを削除する


"mailbox"はMailboxとよばれるキューにメッセージを追加するために使用されています。メッセージキューはLinuxシステム内部に格納され、Arduinoマイクロコンピュータにより読み取りが可能です。有効なRESTコールは、次の通り:

    "/mailbox/message"


プロセッサ(AR9331、WiFi、32U4)の再起動


OpenWrt-Yunをリブートするために、AR9331を再起動するには、ボード上のアナログ入力ピンやLEDの近くにある"YUN RST"リセットボタンを押してください。

32U4を再起動し、現在インストール済みのSkectを再実行するには、Ethernetポートのとなりにあるボタンを2回タップしてください。

WiFiのリセットボタンは、USB-Aコネクタのそばにあります。"WLAN RST"とラベルされています。ボタンを押すと、WLAN LEDがフラッシュします。

もし異なるネットワークへ移動しWebインターフェイスを通してYunへ無線でアクセスしないのであれば、WiFiリセットボタン(WLAN RST)5秒以上30秒未満押すことでAR9331プロセッサがリブートし、Yunのネットワーク設定をリセットすることができます。WiFi設定がリセットされると、Yunは自身のWiFiネットワークを Arduino Yún-XXXXXXXXXXXX という名前で開始します。WiFi以外の設定や構成はすべて保管されます。

OpenWrt-Yunディストリビュージョンをデフォルト状態にリセットするには、WiFiリセットボタン(WLAN RST)を少なくとも30秒押します。ボードはオリジナルの設定に戻ります:箱から取り出した状態もしくは過去にリフラッシュしてOpenWRTの最新版の状態にした状態へ戻ります。この操作では、全てのインストルされたファイルやネットワーク設定が削除されます。


パスワードのリセット


Webパネルパスワードはリセット、変更可能です。コンピュータからUSBケーブルでYunSerialTerminal sketchをアップロードすることでArduino Yunへ接続します。YunSerialTerminalは、Arduino IDEのSketchサンプル(Bridge)内にあります。Yunのブート完了したら、シリアルモニタを開き、ドロップダウンメニューのNew Lineを選択しEnterを押します。シリアルモニタは次のような表示となります:

図→ https://www.arduino.cc/en/uploads/Guide/yunresetpsw_fixed.png

passwdコマンドを実行することでパスワードを変更することができます。シリアルモニタにpasswdとタイプしてEnterキーを入力してください。新しいパスワードを聞かれ、再度確認のためのリタイプも要求されます。あなたが望むのであれば、弱いパスワードである旨のエラーを無視することができます。両方のパスワードが合致したら、システムパスワードは変更され、あなたは新しいパスワードでWebパネルへアクセスすることができます。



リセットによるシリアルポートリストの再列挙


Yunにはシリアル通信を行うための専用チップがありません、これはシリアルポートが仮想-OS上およびボード上両方のソフトウェアルーチンであることを示しています。Arduinoがプラグインされあなたのコンピュータがシリアルポートドライバのインスタンスを構築したちょうどその時、32U4はブートローダ実行のたびにシリアルインスタンスを構築します。ボードは、USBの接続デバイスクラス(CDC)ドライバのインスタンスです。

このことは、32U4プロセッサがリセットされるたびにUSBシリアル接続が遮断され再確立していることを意味しています。ボードはシリアルポートリストにあらわれ、そして再列挙されます。Yunに接続したどんなプログラムでも接続を失います。この動きは、USB接続の解除しないでメインプロセッサ(ATmega328P)のリセットするArduino UNO(後続のプロセッサATmega8U2もしくはATmega16U2にも受け継がれています)とは対称的です。この違いはドライバのインストール・アップグレード・通信もふくんでいます。

シリアルポートのオープン時のリセットなし

コンピュータ上のシリアルポートがオープンした時、YunはSketchを再実行しません。これは、ボードからコンピュータに既に送信されたシリアルデータ(例えばsetup()内で送信したデータの多くを含む)を見れないことを意味します。

このことはConsoleにもあてはまります。

このことは、もしあなたがSeiral/Consoleprint()println()write()setup()内で使用した場合、シリアルモニタやコンソール接続をオープンする際にそれらが表示されないことを意味しています。次のように、これらが呼び出される前に、ポートが開いているかどうかを確認することが可能です:

// シリアルモニタがオープンされるまでプログラムを停止
   while (!Serial) ;


もしくは


// コンソールがオープンされるまでプログラムを停止
   while (!Console) ;


 

Yunドライバインストール



OSX


まず最初にYunをMacにつなぐと、"Keyboard Setup Assistant"を起動します。Yunの設定は不要です;ウィンドウの右上の赤いボタンをクリックしてダイアログを閉じてください。

図→ https://www.arduino.cc/en/uploads/Guide/OSXKeyboardNotification.png

 

Windows


IDEやドライバのためのインストーラが提供されています。

Arduino 1.5.4以降のインストーラをダウンロードし、インストーラアイコンをダブルクリックしてください。


図→ https://www.arduino.cc/en/uploads/Guide/WinYun1.png

ライセンスを読み、合意する場合は、"I agree"ボタンを押してください。


図→ https://www.arduino.cc/en/uploads/Guide/WinYun2.png


デフォルトではすべての有効なコンポーネントが選択済みとなっています。これらの中にはIDEやドライバ、ショートカットがふくまれています。

図→ https://www.arduino.cc/en/uploads/Guide/WinYun3.png


IDEをインストールしたい場所を選択してください。


図→ https://www.arduino.cc/en/uploads/Guide/WinYun4.png

 ファイルが適切な場所へ展開されたらインストーラは進捗状況を表示します。
 

図→ https://www.arduino.cc/en/uploads/Guide/WinYun5.png

 ドライバのインストールを選択した場合は、確認画面がポップアップされます。
 

図→ https://www.arduino.cc/en/uploads/Guide/WinYun6.png

インストールが完了したら、"Close"ボタンを押して終了します。
注意:Yunはワイヤレスネットワーク上の自動探索のためにBonjourサービスを使います。このサービスはデフォルトのWindowsには含まれていません。もしまだBonjourをインストールしていないのであれば、ここからダウンロードすることができます。付け加えると、ポート番号5353がアンチウィルスソフトにより遮断されないようにしてください。


Linux


Ubuntu10.0.4以降ではドライバのインストールは不要です、ただしファイアウォールにより5353番ポートが遮断されないようにしてください。

オンボードWiFiの設定


Yunはアクセスポイントとして動作する機能を持っています、しかし既存のネットワークへ接続する機能も持っています。Yunをワイヤレスネットワークへ接続する手順を説明します。Yunは、WEP、WPA、WPA2をサポートするネットワークだけでなく、暗号化されていないネットワークにも接続することができます。

最初にYunに電源を接続すると、ArduinoYun-XXXXXXXXXXXX という名前のWiFiネットワークを構築します。コンピュータをこのネットワークに接続してください。

IPアドレスを獲得したら、Webブラウザを起動して、http://arduino.local もしくは http://192.168.240.1 を開いてください。数秒後、パスワードを問い合わせるWebページが表示されます。"arduino"と入力して、"Log In"ボタンを押してください。


図→ https://www.arduino.cc/en/uploads/Guide/YunWebPassword.png

ページ上に現在のネットワーク接続に関する診断情報が表示されます。最初にWiFiインターフェイス、2番めにEthernet接続が表示されています。Configurationボタンを押して、次に進みます。
 

図→ https://www.arduino.cc/en/uploads/Guide/YunWebDiagnostic.png

新しいページで、ネットワーク接続時に認識するための一意なYunの名前を設定します。

Yun NAME欄に、一意な名前を入力します。設定以降は、入力した名前が使用されます。

あなたのArduinoに対して8文字以上のパスワードを選択します。もしブランクのままにすると、arduinoのデフォルトパスワードがシステムに残ります。

タイムゾーンや国を設定することも可能です。ローカルのWiFiネットワークへの接続を支援するために、これらの設定をすることを推奨します。ローカルタイムゾーンを設定するには国と地域を選択します。

接続先WiFiネットワークの名前を入力してください。

セキュリティタイプを選択し、パスワードを入力してください。


図→ https://www.arduino.cc/en/uploads/Guide/YunWebConfig.png

Configure & Restart ボタンを押すと、Arduinoを自身リセットし、指定したネットワークへ参加します。しばらくすると、Arduinoネットワークはシャットダウンされます。


図→ https://www.arduino.cc/en/uploads/Guide/YunRebooting.png

Yunへアサインされたネットワークに参加することができます。

WiFiを使った32U4プログラミング


Yunがあなたのコンピュータと同一のネットワーク上にあるのであれば、無線で接続してプログラムすることができます。

Yunの設定完了後、設定時に指定したネットワークに接続してください。Arduino IDEを開いてください。

Tools > Portメニューをくと、Yunの名前とIPアドレスがリストされているのが見えるはずです。ボードメニューで、Arduino Yunを選択してください。

Blinkサンプル(File > Examples > 01Basic > Blink)を開き、ボードへSketchをアップロードしてください。その際管理者パスワードを要求されます。設定スクリーンで入力したパスワードを使ってください。

一度プログラムをアップロードすると、32U4プロセッサが再起動します。ピン13に接続されたLEDの点滅が確認できます。

オンボードEthernetの使用


Ethernetケーブルで有線ネットワークに接続する場合、DHCPによる自動接続を試してください。WiFi経由での動作同様に、ポート上にボードが表示されます。

コンピュータと直接Yunを接続したい場合は、コンピュータのインターフェイスに静的IPアドレスを指定するか、DHCPサーバとして動作させるかのいずれかでおこないます。

注意:Ethernetインターフェイスはeth1です。eth0ではありません。


Bridge経由でのOpenWrt-Yunとの通信


BridgeライブラリはArduinoとOpenWrt-Yunとの間の通信を可能にします。Bridgeライブラリには異なった種類の2者間通信を容易にするいくつかのユーティリティクラスがあります。Bridgeライブラリリファレンスページにより深い説明があります。

図→ https://www.arduino.cc/en/uploads/Guide/BridgeBlockDiag.png

WiFiやEthernetのインターフェイス、USBホスト、SDカードは、すべてAR9331に接続されています。Bridgeライブラリは、スクリプトを実行しWebサービスと対話するのと同様にして、これらのデバイスの操作を許可します。

コンソール


Bridgeベースのコンソールは、ワイヤレスではないシリアルモニタのような、Yunからコンピュータへ情報を送信することを可能にします。SSHによるYunとコンピュータの間をセキュアに接続します。

Yunへ次のコードをロードしてください:

#include

const int ledPin = 13; // LEDを接続しているピン番号
int incomingByte;      // 読み込んだシリアルデータ用変数

void setup() {
  // シリアル通信の初期化
  Bridge.begin();
  Console.begin();

  while (!Console){
    ; // Consoleポートが接続されるまで待機
  }
  Console.println("You're connected to the Console!!!!");
  // LED接続ピンをoutputとして初期化
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // シリアルデータを受信した場合
  if (Console.available() > 0) {
    // シリアルバッファに最新バイトデータ読み込み
    incomingByte = Console.read();
    // 大文字 H (ASCII 72)の場合、LED点灯:
    if (incomingByte == 'H') {
      digitalWrite(ledPin, HIGH);
    }
    //  L (ASCII 76) の場合、LED消灯:
    if (incomingByte == 'L') {
      digitalWrite(ledPin, LOW);
    }
  }
  delay(100);
}

Consoleを参照し、PortメニューでYunの名前およびIPアドレスを選択してください。コンピュータが同一LAN上にある場合は、Portメニュー上にYunが表示されます。もし異なるネットワークにボードを接続している場合は、Portメニュー上には表示されません。Yunのパスワードを要求されます。

ターミナルウィンドウを開き、 ssh root@yourYunsName.local 'telnet localhost 6571' とタイプしてEnterを押すことでConsoleを確認することも可能です。

注意:もしWindowsを使用しているのであれば、ターミナルエミュレータをインストールしてください。PuTTYは合理的な選択肢の一つです。しかし2つのコマンドを別々に入力する必要があります。

'H'をタイプするとピン13のLEDが点灯し、'L'をタイプすると消えます。

Process


Processコマンドは、Arduinoを通してOpenWrt-Yun上でLinuxプロセスを実行することを許可します。

次の例は、OpenWrt-Yunがcurlコマンドを使ってサーバへ接続し、ASCIIテキストをダウンロードするサンプルです。テキストはシリアル接続に印字されます。

#include

void setup() {
  // Bridge初期化
  Bridge.begin();

  // Serial初期化
  Serial.begin(9600);

  // シリアルモニタを開くまで待機
  while (!Serial);

  // 例のプロセスを実行
  runCurl();
}

void loop() {
  // 何もしない
}

void runCurl() {
  // "curl"コマンドを呼び出しArduinoアスキーアートをネットワークから取得する
  // curlは異なるインターネットプロトコルを使ってデータを通信するための
  // コマンドラインプログラムである
  Process p;        // プロセス"p"を生成
  p.begin("curl");  // "curl"コマンドを呼び出すプロセスを準備
  p.addParameter("http://arduino.cc/asciilogo.txt"); // URLパラメータを"curl"へ追加
  p.run();      // プロセスを実行し、終了まで待機

  // ArduinoロゴをSerialへプリント
  // プロセスの出力はストリームメソッドで読むことが可能
  while (p.available()>0) {
    char c = p.read();
    Serial.print(c);
  }
  // データのラストビット送信を保証
  Serial.flush();
}


Bridgeを使った2つのプロセッサ間の情報連携


このサンプルプログラムは、Bridgeライブラリを使ったRESTコールを通してボード上のデジタル/アナログピンへのアクセス方法を示している。ブラウザからRESTをスタイルの呼び出しを使う場合どのようにAPIを構築するのかを証明する。

サンプルコードを実行する場合、コンピュータをYunと同一ネットワーク上に接続してください。

ボードがプログラムされている場合、ピン上の値をリクエストすることができます、そして入出力ピンとして設定することができます。

RESTパスワードがオフの場合、次のURL構造でブラウザを使うことができます:

    http://myArduinoYun.local/arduino/digital/13 : digitalRead(13)を呼び出し;
    http://myArduinoYun.local/arduino/digital/13/1 : digitalWrite(13,1)の呼び出し;
    http://myArduinoYun.local/arduino/analog/9/123 : analogWrite(9,123)の呼び出し;
    http://myArduinoYun.local/arduino/analog/2 : analogRead(2)の呼び出し;
    http://myArduinoYun.local/arduino/mode/13/input : pinMode(13, INPUT)の呼び出し;
    http://myArduinoYun.local/arduino/mode/13/output : pinMode(13, OUTPUT)の呼び出し;


ブラウザの代わりにコマンドラインからcurlコマンドを使うことができます。

Bridge、YunServer、YunClientライブラリを含める必要があります:

#include
#include
#include

接続されたクライアントのために問い合わせるYunを有効にするサーバのインスタンス化します。


YunServer server;

setup()では、デバッグ目的のシリアル通信を開始し、Bridgeを初期化したら13番ピン上のビルトインLEDをHIGHにします。Bridge.begin()はブロッキングし、完了には約2秒かかります。一度Bridgeを開始したら、LEDを消灯します。


void setup() {
  Serial.begin(9600);
  pinMode(13,OUTPUT);
  digitalWrite(13, LOW);
  Bridge.begin();
  digitalWrite(13, HIGH);


setup()の次のパートでは、YunServerインスタンスがlocalhostからのみやってくる通信要求を受け取るようにします。OpenWrt-Yunとの通信を構築のためにポート番号5555をオープンにします。そしてserver.begin()にてサーバを開始します。

  server.listenOnLocalhost();
  server.begin();
}


loop()では、通信の管理のためにYunClientインスタンスを生成しています。もしクライアント接続があれば、カスタム関数process()(詳細は後続)を呼び出し、完了したら接続をクローズします。

大量接続要求がある場合の対策として、loop()の終わりでdelay()を呼び出しています。

void loop() {
  YunClient client = server.accept();

  if (client) {
    process(client);
    client.stop();
  }

  delay(50);
}

processという名前の関数を作成し、引数としてYunCluentを受け取ります。やってくる情報を保持するための文字列からコマンドを読みます。そして文字列からRESTコマンドを機能(digital、analog、mode)でParseし、適切な名前の関数へ引数を渡します。

void process(YunClient client) {
  String command = client.readStringUntil('/');

  if (command == "digital") {
    digitalCommand(client);
  }
  if (command == "analog") {
    analogCommand(client);
  }
  if (command == "mode") {
    modeCommand(client);
  }
}



ここではデジタルコマンドをあつかう関数を作成しています。引数としてclientを受け取っています。そしてピン番号を保有するための変数とコマンドへ渡す値のための変数を定義しています。

void digitalCommand(YunClient client) {
  int pin, value;


client.parseInt()では、clientから操作対象のピン番号をparseしています。

もしpinの後のキャラクタが"/"であるならば、URLは値として1もしくは0が続くことを意味しています。この値は、変数pinが示すピンに対し、HIGHもしくはLOWを割り当てます。もしpinの後のキャラクタが"/"ではない場合は、変数pinが示すピンの値を読みます。

  pin = client.parseInt();

  if (client.read() == '/') {
    value = client.parseInt();
    digitalWrite(pin, value);
  }
  else {
    value = digitalRead(pin);
  }


clientvalueprintし、現在のピン値をデータストアキーとして更新します。

valueF()内のclientへラップすることで、フラッシュメモリへのpirntフォームにします。これはSRAMのスペース削減に役立ちます、そしてURLのように長い文字列をあつかうのに便利です。

キーはpin値と、そしてタイプです。例えば、D2の場合デジタル2番ピンとして保存します。valueは、現在ピンにセットされている/現在のピンから読み取った値です。

  client.print(F("Pin D"));
  client.print(pin);
  client.print(F(" set to "));
  client.println(value);

  String key = "D";
  key += pin;
  Bridge.put(key, String(value));
}


ピンへのアナログ入力の場合にDのかわりにAをセットしている場合を除き、同一の方法でanalogコールを操作する関数をセットアップします:

void analogCommand(YunClient client) {
  int pin, value;

  pin = client.parseInt();

  if (client.read() == '/') {
    value = client.parseInt();
    analogWrite(pin, value);

    // Send feedback to client
    client.print(F("Pin D"));
    client.print(pin);
    client.print(F(" set to analog "));
    client.println(value);

    String key = "D";
    key += pin;
    Bridge.put(key, String(value));
  }
  else {
    value = analogRead(pin);

    client.print(F("Pin A"));
    client.print(pin);
    client.print(F(" reads analog "));
    client.println(value);

    String key = "A";
    key += pin;
    Bridge.put(key, String(value));
  }
}


ピンモードの変更を操作するために1つ以上の関数を作成します。それらの関数はYunClientを引数とし、ピン番号をローカル変数として作成します。そして、digital/analog関数で記述した方法で、pin番号を読み込みます。

void modeCommand(YunClient client) {
  int pin;
  pin = client.parseInt();



URLの妥当性を確認します。

if (client.read() != '/') {
    client.println(F("error"));
    return;
  }


もしURLとして妥当であった場合、URLを文字列として保管します。もしモードがinputもしくはoutputであった場合は、変数pinの指すピンに対しモードをセットしclientへレポートします。もし文字列がinput、outputのどちらでもない場合は、エラーを返します。

  String mode = client.readStringUntil('\r');

  if (mode == "input") {
    pinMode(pin, INPUT);
    // フィードバックをクライアントへ送信
    client.print(F("Pin D"));
    client.print(pin);
    client.print(F(" configured as INPUT!"));
    return;
  }

  if (mode == "output") {
    pinMode(pin, OUTPUT);
    // フィードバックをクライアントへ送信
    client.print(F("Pin D"));
    client.print(pin);
    client.print(F(" configured as OUTPUT!"));
    return;
  }

  client.print(F("error: invalid mode "));
  client.print(mode);
}


Bridge Example ページ上に、このサンプルコードの詳細を見つけることができます。

Tembooを使ったインターネットサービスへの接続

図→ https://www.arduino.cc/en/uploads/Guide/TembooIllustrated.png
 

Yunはたくさんのビルトインされたネットワーク機能を持っていますが、最も刺激的なもののいくつかはのオンラインプラットフォーム上で動作しています。Arduinoは、できるだけ簡単に好きなサービスと接続するためにTembooとパートナーとなりました。Tembooは、(例えばFedExやPayPal以外のTwitterやFacebook、Foursquareといった)おおくのプラットフォームからやってくる様々なものが混ざったデータへ向けて一箇所からコンタクトする100を超える標準化されたAPIへのアクセスを提供します

たくさんのサンプルコードが、Arduino IDEのFile > Examples > Bridge > Tembooフォルダにあり、それらはクラウドをYunをつかって開始するにはすばらしい場所です。Temboo getting started pageでは、TembooとArduinoの協働についてもっと学ぶことができます。

Spacebrew


Spacebrewは、"a simple way to connect interactive things to one another(モノとモノを相互接続させる一つの簡単な方法)"です。クライアント/サーバモデル依存しており、2者間通信にWebSocketを使用しています。簡単な通信を許可するpythonで書かれたYun上のカスタムWebサーバが動作しています。


Yun上で動作するSpacebrewの多くのサンプルコードが用意されています。Spacebrewの詳細は、project documentation pageを参照してくだい。

Linux上にへ追加ソフトウェアのインストール


YunのOpenWrt-Yun上には、"curl"や"python"などのいくつかのソフトウェアがプリインストールされています。ほかのソフトウェアもYun上へインストールすることも可能です。Linuxシステム上で、"package management system(パッケージ管理システム)"と呼ばれるツールを使って追加のソフトウェアをインストールできます。詳細情報は、package managerチュートリアルを参照してください。

次のステップ


これで基礎は終了です、Bridge library and examplesに対してより深く掘り起こすことができるようになっていることでしょう。追加情報のあるYunハードウェアページもチェックしておきましょう。




Arduino getting started guideの文章はCreative Commons Attribution-ShareAlike 3.0ライセンスに準拠しています。ガイド内のサンプルコードはpublic domainとしてリリースされています。

-------

なるほど、新たにわかったことは、だいたい以下のとおり。

・RESTがはなっから使えるようになってる
 LuCiやLininoで設定は必要だけど、デジタル・アナログピンの読み書きなら
 デフォルト状態でも用意されてるので、32U4側に一切Sketchを書かなくても
 RESTコールできる仕組みを用意してくれている
 しかもフラッシュへの書き込み(通電していない場合ある場合関係なく
 データの永続化)もできる。


・Arduino Yunには32U4、AR9331、WiFiの3プロセッサが搭載されている
 で、本体にはリセットスイッチが3つあるわけね..なるほどなあ..

・32U4にはSDカードやUSBポートは一切繋がっていないこと
 そうか全部 LinuxであるOpenWrt-Yun上のデバイスとして認識させてるのか..

・Arduino Yunデバイスは仮想だったこと
 たしかにArduino UNOをつかってプログラムをアップロードする時
 はデバイス自体の認識が全然切れないけど、
 Arduino Yunの時は一瞬切れる。
 しかもたまーにべつのCOM番号を割り当てることがあったが、
 こういうことだったのか..

・TembooとArduinoがパートナー
 でTembooだけサンプルコードがArduino IDE上に最初っからあったのね..

・Spacebrewもサンプルが既にIDE上にある
 予想通りArduino社は、家電とかIoTデバイスの上にAVR系マイコンを載せた
 設計をしてもらおうと計画してたのね..
 Spacebrewは日本語情報が少ないなあ..



IoTデバイスのプロトタイプボードとしてのArduinoの立ち位置確保は
だいぶ前から狙っていたわけか..

でも一つ誤解があった。
Ciaoといい、SpacebrewといいArduino社のアーキテクトも標準がどこにおちつくか
迷ってると思っていたけど、
プロトタイプボードとしてはむしろなんでもやる、

そして

単にUNOにESP8266をつむ設計にしなかったのは

Linux OSを搭載するプロセッサとのシリアル連携

で、どうせ最後は直結するのだけど
テストベッドとしては
どんなデバイスに対しても一旦AR9331をかませておきたかった。

そして、
Sketchプログラミングは常に極小になるように
関心の分離をさせていきたかったってとこか..



..頭いいなあ、Arduinoのアーキテクトは..

アーキテクチャにぶれない背骨(思想)が入ってる。



p.s. 
(..というか、与太話)


そしてArduino社は、IoTに対して
ジオンの一年戦争にかけるかのごとく気合が入ってる

だってBraccioっていう二の腕ロボットなんか..わざわざ売り出す?
UNOだって派生が多いし..LilyPadなんて水陸両用モビルスーツみたいなもんでしょ..
いろんな装備(シールド)もできるし、

コピーされて他社製AVRマイコン(アナハイムのガンダム)つくってもなにもいわんし..


IoT=一年戦争Arduino=ジオン(ジオニック社?)ザク=UNO ってかんがえると
いろいろ辻褄合ってくるんだよなあ..


あ、ゲルググはArduino UNO WiFiね。で、Leopard Etherは量産競争に負けたギャン。

Arduino Yunは..
やり過ぎ&オールレンジ対応のところが
ニュータイプ用のキワモノモビルアーマー
ぽくない?

エルメスというより、ちょっと怖いビグザムじゃないか..と




...スミマセン、仕事、戻ります..

0 件のコメント:

NVIDIA K20C で Tensor2Tensor を動かしてみた

ふとしたことで一時的にNVIDIA K20Cが使える機会ができた。 ので、ココぞとばかりに前に動かしたTransformerモデルの 実装サンプル Tensor2Tensor を オプションなし で動かしてみた。 [GitHub]T2T: Tensor2Tensor Tra...