ArduinoにEthernet シールドを取り付けてiPhoneでLED(緑色、赤色)2個の Lチカをしてみました。
Arduinoのサイトによれば、デジタルI/Oピンの11、12、13番ピンはSPI通信に使われているようなので、それらのピンにはセンサなどを接続しないことにします。
今回は、Arduino 0012に含まれている「Web
Server」というサンプル(File>Sketchbook>Examples>Library-Ethernet>Web Server)を参考にブラウザで閲覧可能なWebベージをアクセスさせます。
基本的な入力情報として、
・MACアドレス
・サーバのIPアドレス
・ポート番号
が必要となります。尚、ローカルネットワーク内から閲覧できる設定にします。
// ethernetLED03
// GND PIN
// LEDライト用PIN番号
// int ledPin02 = 2;
// int ledPin03 = 3;
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var myWebView: UIWebView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func switchPressed01(sender: UISwitch) {
if sender.on {
// turn the LED on
// URLを設定する.
let url = NSURL( string: "http://192.168.1.5/$1" )
// リクエストを作成する.
let req = NSURLRequest(URL: url!)
// リクエストを実行する.
myWebView.loadRequest(req)
} else {
// turn the LED off
// URLを設定する.
let url = NSURL( string: "http://192.168.1.5/$2" )
// リクエストを作成する.
let req = NSURLRequest(URL: url!)
// リクエストを実行する.
myWebView.loadRequest(req)
}
}
@IBAction func switchPressed02(sender: UISwitch) {
if sender.on {
// turn the LED on
// URLを設定する.
let url = NSURL( string: "http://192.168.1.5/$3" )
// リクエストを作成する.
let req = NSURLRequest(URL: url!)
// リクエストを実行する.
myWebView.loadRequest(req)
} else {
// turn the LED off
// URLを設定する.
let url = NSURL( string: "http://192.168.1.5/$4" )
// リクエストを作成する.
let req = NSURLRequest(URL: url!)
// リクエストを実行する.
myWebView.loadRequest(req)
}
}
}
// iOS iLampSwift03
// イーサネットライブラリを読み込み
#include <SPI.h>
#include <Ethernet.h>
// スイッチでLEDのオンオフ trueかfalse
// 初期値「0」
boolean incoming = 0;
// Arduino Ethernet ShieldのMACアドレスをセット
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 };
// サーバーとなるArduinoのIPアドレス
IPAddress ip(192,168,1,5);
// HTTP通信をするのでサーバーのポートは80でセット
EthernetServer server(80);
// GND PIN
// LEDライト用PIN番号
int ledPin02 = 2;
int ledPin03 = 3;
void setup()
{
pinMode(ledPin02, OUTPUT);
pinMode(ledPin03, OUTPUT);
// LEDの明かりは初期状態では切っておく
digitalWrite(ledPin02, LOW);
digitalWrite(ledPin03, LOW);
//イーサネット通信開始
Ethernet.begin(mac, ip);
//サーバ開始
server.begin();
// デバッグログ用
Serial.begin(9600);
}
void loop()
{
// クライアントからのデータ受信
EthernetClient client = server.available();
// クライアントからの受信がある場合
if (client) {
// ブラウザからのHTTPリクエストの空白行の有無のフラグ
boolean currentLineIsBlank = true;
// クライアントとの接続中の処理
while (client.connected()) {
// 接続状態だったら
if (client.available()) {
// HTTPリクエスト(受信データ)を一つずつ読み込む
char c = client.read();
/*
*
行の最後に得ている場合(改行文字を受け取った)およびラインは、
* httpリクエストが終了した空白ですので、
* あなたは応答を送信することができます
*/
// URL文字列を読み込みデータが「incoming:初期値「0」」そして「c」が'
'空白だとincoming に「0」を代入
if(incoming && c == '
'){
incoming = 0;
}
// URL文字列を読み込みCが'#39;だとincoming に「1」を代入
if(c == '$'){
incoming = 1; // LED ON
}
// URL文字列をチェックします$1、$2 「incoming:true」
if(incoming == 1){
// シリアルポートデータ
Serial.println(c);
if(c == '1'){
Serial.println("ON");
// LEDの明かりを入れる
digitalWrite(ledPin02,
HIGH);
}
if(c == '2'){
Serial.println("OFF");
// LEDの明かりを切る
digitalWrite(ledPin02,
LOW);
}
if(c == '3'){
Serial.println("ON");
// LEDの明かりを入れる
digitalWrite(ledPin03,
HIGH);
}
if(c == '4'){
Serial.println("OFF");
// LEDの明かりを切る
digitalWrite(ledPin03,
LOW);
}
}
////////////////////////////////////////
// ArduinoをWebサーバにして "Hello, world!"
と表示させる
// https://www.qoosky.net/techs/99
// 改行コードが2連続で出力されるまで、すなわち
// 空行が返ってくるまで、言い換えると
// クライアントからのGETリクエストが終了するまで読み飛ばす
if (c == '1') {
client.println("HTTP/1.1 200
OK");
client.println("Content-Type:
text/html");
client.println("");
client.println("<html><head><title>Arduino World</title></head>");
client.println("<body>Hello,
world!</body></html>");
break;
}
////////////////////////////////////////
// 読み込んだ文字がラインフィードの場合
if (c == '\n') {
//現在の行を空白行とみなす
currentLineIsBlank = true;
}
else if (c != '\r') { //
読み込んだ文字がキャリッジリターン以外の場合
// 現在の行を空白行としない
currentLineIsBlank = false;
}
}
}
// サーバーがコネクションを早く閉じ過ぎる為、
// プロトコル違反を報告、ここでdelay(1)を入れておく
delay(1);
client.stop();
}
}
▫️参考ページ
Electronics for iPhone Developers Tutorial: Control a LED from your iPhone!
Arduino Tutorial for Complete Beginners: Using a Button
Ethernetシールドを使ってArduino上のLEDを遠隔操作 WEBサーバー HTML
Arduino Tutorial: Temperature Sensor
Arduino Tutorial: Networked Temperature Sensor with Swift
A Swift Adventure: Building BasicPhone with TwilioClient
Windows
コメントをお書きください