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/Consoleのprint()や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サービスと対話するのと同様にして、これらのデバイスの操作を許可します。
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);
}
clientにvalueをprintし、現在のピン値をデータストアキーとして更新します。
valueをF()内の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は..
やり過ぎ&オールレンジ対応のところが
ニュータイプ用のキワモノモビルアーマー
ぽくない?
エルメスというより、ちょっと怖いビグザムじゃないか..と
...スミマセン、仕事、戻ります..