YUN iDuino でBRIDGEをつかってスマートフォンで操作(Lチカ)
私のようにJAVASCRIPTもC言語も初心者ではスマートフォンとYUNをつなぐのは一苦労でした。
スイッチサイエンスさんの例を見て作ったのですが、教えてくれる人がいるわけでもなく、手探り状態、チョーむつかしい・・・難関続出。

しかもYUNの情報2016年10月段階では少なく、スイッチサイエンスさん以外はほとんど英語での情報集め、かつ英語のページもYUNとスマホ繋がんないんだけどなんでよ~みたいな質問のところが多くて苦労しました。

で一部まだ不具合ありますが、私なりに解析したものを備忘録として残しておきます。

私が使ったのは
・左 DRAGINO Ver2.4
・右 GEEETEC製iDuinoシールド(UNO純正の場合はジャンパピンで一番右端ジャンパする必要あり)



赤はUNO互換ボード、DRAGINOVER2.4であればそのまま載せても認識しますが、IDUINO現バージョンは認識しても、アップロード失敗します。

私的にはDRAGINOのほうが良いと思います。IDUINOは現段階では(2016.10.18)バージョン上がる気配がなくUNO互換ボードははんだ付けしなくてはなりません。
UNO純正であればジャンパを変えるだけでよいのですが。


DRAGINOは、はんだ付けなど、しなくてもVer2.3以降であればシールドを乗せるだけです。

あとはUNOとiDUINOシールドを2段重ねする

キャラクタ液晶LCD(なくてもよい。不要な方は下のコードの
//////LCDキャラクタ液晶部分を削除)

・LEDと抵抗
・ブレッドボード
・ジャンプワイヤー

実験用なので、いろいろついてますが必要なものはLEDと抵抗 ワイヤーだけです。

下記はBridgeサンプルの必要な部分を最小限取り出しました。下記で動きます。
ただし、条件としてはデジタルピンでしか反応しません。アナログピンのコードは消して、シンプルにしました。

下のコードはここからまとめてダウンロードしてください。
JavaScript、スケッチ、ボタン画像まとめてダウンロードできるようにしてます。
下のコードは//赤字印部分が後からホームページビルダー上でコメントしてますのでこのままではもしスケッチエラーするので消してください。
スケッチ部分説明

/////////////////////この部分は必須です。ヘッダを読み込みます。BridgeとYunServer、YunClientヘッダを読み込む必要あります。
#include <Bridge.h>
#include <YunServer.h>
#include <YunClient.h>
// Listen to the default port 5555, the Yún webserver
// will forward there all the HTTP requests you send
YunServer server;

/////////////////////////////////////////////////////////////////////////////////////////////////////////

//////LCDキャラクタ液晶
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//#include "Arduino.h" // WProgram.h
LiquidCrystal_I2C lcd(0x3F,16,2);//小
/////////////////////
volatile int mode = 0;
int PINNO8=8;

void setup() {

//////LCDキャラクタ液晶
lcd.clear();
lcd.begin();
lcd.backlight();
/////////////////////

/////////////////////13番のLチカ 不要ですが、サンプルにはありましたので一応そのままにしました。起動すれば13番のLED光ります。

// Bridge startup
pinMode(13, OUTPUT);
pinMode(8,OUTPUT);

digitalWrite(13, LOW);

/////////////////////////////////////////////////////////////////////////////////////////////////////////


/////////////////////Bridge起動します。


Bridge.begin();


/////////////////////////////////////////////////////////////////////////////////////////////////////////


/////////////////////13番のLチカ光ります。

digitalWrite(13, HIGH);

/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Listen for incoming connection only from localhost
// (no one from the external network could connect)
server.listenOnLocalhost();
server.begin();

}

void loop() {
// Get clients coming from server

/////////////////////ここから本番です。Client=1ならば(アクセスがあったならば)processルーチンに逃げます。
おわったらdelay(50) 50msだけ待つほうが良いようです。
processルーチンでは概略で言うと、URLの場所を読み込むプログラムです。
Bridgeではこのプログラム例では

http://arduino.local/arduino/test/8/1

というように読み込めばArduino+iduinoが反応し、デジタル8番がLチカします。
http://arduino.local/arduino/test/8/1

”http://arduino.local/arduino”
はBridgeスケッチが無関係に設定します。
変更できるのはtest/8/1部分です。
testはjavascriptで(ホームページビルダーで作成可能)決めます。
ボタンを押せばURLを記憶してスケッチに渡すようなjavascriptを作ればよいわけです。
8はデジタルピン8番です。13番でも3番でも構いません。変更してください。
1はHIGH LEDが光ります。0なら消灯
/////////////////////////////////////////////////////////////////////////////////////////////////////////



YunClient client = server.accept();


// put your main code here, to run repeatedly:
// There is a new client?


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


delay(50);
}
/////////////////////ここからprocessルーチンです。javascriptでボタンコマンドがONが返されればmode=1 OFFなら mode=2を返してdigitalWriteでLED光らせます。
void process(YunClient client) {
String command = client.readStringUntil('/');
//this is Based on URL if URL is arduino.local/arduino/test/PINNO/0


//////LCDキャラクタ液晶
lcd.setCursor(0,0);
lcd.print(command);
/////////////////////


if (command == "ON") {

mode=1;


}
else if (command == "OFF") {

mode=2;


} /////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////下はただのswitch文です。
digitalCommand();
}

void digitalCommand() {
switch(mode){
case 1:
digitalWrite(PINNO8,HIGH);
lcd.setCursor(0,1);
lcd.print("HIGH");
break;
case 2:
digitalWrite(PINNO8,LOW);
lcd.setCursor(0,1);
lcd.print("LOW");
break;

}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
javascript部分説明
シンプルに必要な部分しか作ってません。
同じ階層に"jquery-1.11.2.min.js"
を入れて下さい。これはスイッチサイエンスさんと同じです。
特に詳しく説明しませんが、赤字が必須です。(全部必須なのですが重要な部分だけ赤字にしました)
function command(cnum)
はスイッチイエンスさんそのままです。
ようするに$.get("/arduino/"+cnum);でURLの場所をArduinoのスケッチに手渡ししてます。
これにより
arduino.local/arduino/test/8/1
というURLがつくられ、手渡されます。

<html>
<head>
<title>Yun Controller</title>
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<script src="jquery-1.11.2.min.js"></script>
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="static/style.css" rel="stylesheet" type="text/css">

<SCRIPT langage="JavaScript">

function command(cnum){
$.get("/arduino/"+cnum);




}

</SCRIPT>
</head>

<body>
<p></p>
<button type="button" id="button1" onclick="command('OFF/8/0')"><img src="button1.gif" width="180" height="180"></button>
<button type="button" id="button2" onclick="command('ON/8/1')"><img src="button2.gif" width="180" height="180"></button>

</body>
</html>
</html>

アップロード説明
私はwinSCPというソフトを使いました。
ArduinoYUN側がLINUX系統らしく、私にはよくわかりませんが転送プロトコルにSCPというプロトコルが必要です。
ダウンロード winSCP
いつも使っているNextFTPにはそのプロトコルがないようなのでつながりません、何かの設定あるのかも。
スイッチサイエンスさん同様、ArduinoYUN iDUINOの中のぞき込み、WWWフォルダ直下に転送します。

転送プロトコルは必ず SCP
ユーザ名はデフォルトでは root 
パスワードはiduinoでは iduino

ホスト名(ここでは192.168.0.48)は各人のルータによって変わります。


アクセスしたらwwwフォルダ直下につくったファイル入れます。

そうすればあとはスマートフォン 私はAndroid iphone4sで両方OKでした。

LチカOKです。
http://6242.teacup.com/sagyo/bbs
スイッチサイエンスさんのページ曰く、スマホで操作できればワクワクしませんか?たしかにワクワクでしたがかなり難易度高いんですけど・・・