ArduinoにEthernet シールドを取り付けてiPhoneで Lチカしてみました。
Arduinoのサイトによれば、デジタルI/Oピンの11、12、13番ピンはSPI通信に使われているようなので、それらのピンにはセンサなどを接続しないことにします。
今回は、Arduino 0012に含まれている「Web
Server」というサンプル(File>Sketchbook>Examples>Library-Ethernet>Web Server)を参考にブラウザで閲覧可能なWebベージをアクセスさせます。
基本的な入力情報として、
・MACアドレス
・サーバのIPアドレス
・ポート番号
が必要となります。尚、ローカルネットワーク内から閲覧できる設定にします。
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var myWebView: UIWebView!
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func switchPressed(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)
}
}
}
// イーサネットライブラリを読み込み
#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);
// LEDライト用PIN番号
int ledPin = 2;
void setup()
{
pinMode(ledPin, OUTPUT);
// LEDの明かりは初期状態では切っておく
digitalWrite(ledPin, 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(ledPin,
HIGH);
}
if(c == '2'){
Serial.println("OFF");
// LEDの明かりを切る
digitalWrite(ledPin,
LOW);
}
}
// 読み込んだ文字がラインフィードの場合
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
WiFi
iOS App for Wireless LED Control with ESP8266
Arduino WiFi 101
Arduinoの無線LAN 101 ThingSpeakデータアップローダチュートリアル
WiFi 101 ThingSpeak Data Uploader POST
BLE
Arduino Tutorial: Integrating Bluetooth LE and iOS with Swift
Windows
コメントをお書きください