ArduinoにEthernet シールドを取り付けてiPhoneでLED(緑色、赤色、青色)3個の Lチカをしてみました。
Arduinoのサイトによれば、デジタルI/Oピンの11、12、13番ピンはSPI通信に使われているようなので、それらのピンにはセンサなどを接続しないことにします。
今回は、Arduino 0012に含まれている「Web
Server」というサンプル(File>Sketchbook>Examples>Library-Ethernet>Web Server)を参考にブラウザで閲覧可能なWebベージをアクセスさせます。
基本的な入力情報として、
・MACアドレス
・サーバのIPアドレス
・ポート番号
が必要となります。尚、ローカルネットワーク内から閲覧できる設定にします。
//
// ViewController.swift
// iLampSwiftSW_GetPost
//
// Created by MAEDAHAJIME on 2016/04/09.
// Copyright © 2016年 MAEDAHAJIME. All rights reserved.
// EthernetGetPost_00
// GND PIN
// LEDライト用PIN番号
// int ledPin02 = 2;
// int ledPin03 = 3;
// int ledPin03 = 4;
import UIKit
class ViewController: UIViewController {
var sw:String = ""
var flag:Bool = true
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.
}
// セグメント GET/POST選択
@IBAction func lbSegment(sender: UISegmentedControl) {
print("sender:",sender.selectedSegmentIndex)
switch sender.selectedSegmentIndex {
case 0:
// GET
flag = true
case 1:
// POST
flag = false
default:
print("Error")
}
}
@IBAction func switchPressed01(sender: UISwitch) {
if sender.on {
//uiSwitch.onTintColor = UIColor.orangeColor()
// スイッチがオフの時のアウトラインの色を設定
//uiSwitch.onTintColor = UIColor.blueColor()
// スイッチがオフの時の背景の色を設定
// turn the LED on
// スイッチを設定する.
sw = "$1"
// セグメント true:GET送信 false:POST送信
GetPostSend()
} else {
// turn the LED off
// スイッチを設定する.
sw = "$2"
// セグメント true:GET送信 false:POST送信
GetPostSend()
}
}
@IBAction func switchPressed02(sender: UISwitch) {
if sender.on {
// turn the LED on
// スイッチを設定する.
sw = "$3"
// セグメント true:GET送信 false:POST送信
GetPostSend()
} else {
// turn the LED off
// スイッチを設定する.
sw = "$4"
// セグメント true:GET送信 false:POST送信
GetPostSend()
}
}
@IBAction func switchPressed03(sender: UISwitch) {
if sender.on {
// turn the LED on
// スイッチを設定する.
sw = "$5"
// セグメント true:GET送信 false:POST送信
GetPostSend()
} else {
// turn the LED off
// スイッチを設定する.
sw = "$6"
// セグメント true:GET送信 false:POST送信
GetPostSend()
}
}
// セグメント true:GET送信 false:POST送信
func GetPostSend(){
print("flag:",flag)
if flag == true {
// ArduinoにGET送信
sendValueGetToServer(sw)
} else {
// ArduinoにPOST送信
sendValuePostToServer(sw)
}
}
// GET送信
func sendValueGetToServer(stringer: String) {
// slider数値
// cr(\r) LF(\n) CR:0x0d、LF:0x0A '\0':0x00
let switch01:String = stringer
let str = "http://192.168.1.10/?sw=\(switch01)"
//let str = "http://192.168.2.10/?sw=\(switch01)"
let url = NSURL(string: str)
let req = NSURLRequest(URL: url!)
print("URL",url)
/*
* Sessionを生成.
* NSURLSession:バックグランドで通信できるクラス
* 使用できる通信プロトコルは HTTP 通信のみ
*/
let task = NSURLSession.sharedSession()
.dataTaskWithRequest(req,completionHandler: {
( data, res, err ) in
if data != nil {
// NSData to String 文字コード:UTF-8エンコーディング
let text:NSString = NSString(data: data!,
encoding: NSUTF8StringEncoding)!
// バックグラウンド処理
dispatch_async(dispatch_get_main_queue(), {
// データが空ではなかったら
//self.label1.text = text as String?
print("送信内容",text as String?)
})
} else {
dispatch_async(dispatch_get_main_queue(), {
//self.label1.text = "error"
print("送信error")
})
}
})
// タスクの実行.
task.resume()
}
// POST送信
func sendValuePostToServer(stringer: String) {
// slider数値
// cr(\r) LF(\n) CR:0x0d、LF:0x0A '\0':0x00
let switch01:String = stringer
let post = "Switch=\(switch01)"
print("post:",post)
// String to NSData 文字コード:UTF-8エンコーディング
let postdata:NSData =
post.dataUsingEncoding(NSUTF8StringEncoding)!
// 通信先のURLを生成.
let url = NSURL(string: "http://192.168.1.10/")
//let url = NSURL(string: "http://192.168.2.10/")
print("url:",url)
// POST用のリクエストを生成.
let req = NSMutableURLRequest(URL: url!)
print("POST req:",req)
// HTTPサーバー送信 POSTのメソッドを指定.
req.HTTPMethod = "POST"
/*
* "application/x-www-form-urlencoded"
* アプリケーション・エックス・フォーム・ユーアーエルエンコーディド
* フォームの送信のさい、クライアントがWebサーバーに送信する
Content-Type名の一つ。
* データはid=dataの形式で、formが複数ある場合は&で区切られる
(form1=data1&form2=data2)。
* dataはURLエンコードされる。
* 英数字と3種類の記号 _ . - はそのまま、スペースは+に変換され、
* それ以外の文字は%xxの16進形式になる。
*/
req.setValue("application/x-www-form-urlencoded",
forHTTPHeaderField: "Content-Type")
// エンコーディングされた「postdata」の長さ(桁数)を算出
let length:Int = postdata.length
//print("length:",length)
// ヘッダにコンテンツの長さ(桁数)をセット
req.setValue("\(length)", forHTTPHeaderField:
"Content-Length")
// HTTPBody:NSData型に渡す
req.HTTPBody = postdata
/*
* Sessionを生成.
* NSURLSession:バックグランドで通信できるクラス
* 使用できる通信プロトコルは HTTP 通信のみ
*/
let task = NSURLSession.sharedSession()
.dataTaskWithRequest(req,completionHandler: {
( data, res, err ) in
// データが空ではなかったら
if data != nil {
let text = NSString(data: data!, encoding:
NSUTF8StringEncoding)
dispatch_async(dispatch_get_main_queue(), {
// Slider値を表示
//self.label1.text = text as String?
print("送信内容",text as String?)
})
} else {
dispatch_async(dispatch_get_main_queue(), {
// errorを表示
//self.label1.text = "error"
print("送信error")
})
}
})
// タスクの実行
task.resume()
}
}
▫️参考ページ
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
コメントをお書きください