(初心者向け)Swift3.0で初アプリ - 万歩計データをNode-REDへ送付

Swift3.0を使って簡単なiPhoneアプリを作ってみます
[(初心者向け)Swift3.0で初アプリ - CocoaPods, Carthagoを使ってみる](https://qiita.com/egplnt/items/8099fa3c6dfd1db785a9)でAlamoFireを使えるようにしました
[(初心者向け)Swift3.0で初アプリ - iPhoneからMacbookへアクセス](https://qiita.com/egplnt/items/8099fa3c6dfd1db785a9)でiPhoneからMacbookへアクセスできるようにしました
[(初心者向け)Swift3.0で初アプリ - iPhoneからNode-REDヘアクセス](https://qiita.com/egplnt/items/21524e1950e6e0d232c3)でiPhoneからNode-REDへアクセスできるようにしました
[(初心者向け)Swift3.0で初アプリ - 万歩計アプリ](https://qiita.com/egplnt/items/3e8472e27133f12c11fa)で万歩計アプリを動かしました

この万歩計データをNode-REDへ送ってみます

#1. Node-REDのフローを用意します
- [(初心者向け)Swift3.0で初アプリ - アプリからNode-REDヘアクセス](https://qiita.com/egplnt/items/8bd53a09332bc1fd2019)を参照し、Node-REDのフローを用意します

#2. アプリを用意します
- Xcodeを起動し、新しいSingle View Applicationを用意します
- ViewController.swiftへ下記をコピペします

```swift:万歩計データをNode-REDへ送付
import UIKit
import Alamofire
import CoreMotion

class ViewController: UIViewController {
    
    var steps:Int = 0
    let url = "http://192.168.2.1:1880/test10"  //送付先を指定
    let headers: HTTPHeaders = [
        "name": "value"
    ]

    var myPedometer: CMPedometer!
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 画面の背景色を指定
        self.view.backgroundColor = UIColor(red:1.0,green:1.0,blue:0.875,alpha:1.0)

        //　ボタンを作成
        let button = UIButton()
        // ボタンのサイズ
        button.frame = CGRect(x: 0, y: 0, width: 150, height: 100)
        // ボタンの位置
        button.layer.position = CGPoint(x: self.view.bounds.width/2,y: 500)
        // ボタンの背景色
        button.backgroundColor = UIColor(red:0.5,green:0.875,blue:0.875,alpha:1.0)
        // ボタンのタイトル
        button.setTitle("送信", for: .normal)
        // ボタンのタイトルの色
        button.setTitleColor(UIColor.black, for: .normal)
        // ボタンのタイトルのサイズ
        button.titleLabel?.font = UIFont.systemFont(ofSize: 30)
        // ボタン押下時のアクションとして送信処理("sendJson()")を指定
        button.addTarget(self, action: #selector(self.sendJson(sender:)), for: .touchUpInside)
        // 画面に追加
        self.view.addSubview(button)
        
        // 歩数表示ラベルを作成
        let myStepLabel: UILabel = UILabel(frame: CGRect(x:0,y:0,width:150,height:150))
        // ラベルの背景色
        myStepLabel.backgroundColor = UIColor(red:1.0,green:0.875,blue:1.0,alpha:1.0)
        // ラベルの背景色
        myStepLabel.layer.masksToBounds = true
        myStepLabel.layer.cornerRadius = 75.0
        myStepLabel.textColor = UIColor.black
        myStepLabel.shadowColor = UIColor.gray
        myStepLabel.font = UIFont.systemFont(ofSize: CGFloat(30))
        myStepLabel.textAlignment = NSTextAlignment.center
        myStepLabel.layer.position = CGPoint(x: self.view.bounds.width/2,y: 200)
        // Viewに追加
        self.view.addSubview(myStepLabel)
        
        // 歩数計を生成
        myPedometer = CMPedometer()
        
        // ペドメーター(歩数計)で計測開始
        myPedometer.startUpdates(from: NSDate() as Date, withHandler: { (pedometerData, error) in
            if let e = error {
                print(e.localizedDescription)
                return
            }
            guard let data = pedometerData else {
                return
            }
            let myStep = data.numberOfSteps
            myStepLabel.text = "\(myStep) 歩"
            self.steps = myStep.intValue
        })
    }
    
    // 送信処理
    @objc func sendJson(sender:UIButton){
        let parameters: Parameters = [
            "moji_param": "こんにちは",   // 文字パラメータの例
            "suji_param": steps,          // 数値パラメータの例
            "nested": [
                "nested_param": "ごきげんよう" // ネストしたパラメータの例
            ]
        ]
        // Alamofireでの送信処理
        Alamofire.request(url,
                          method: .post,    // POSTメソッド
            parameters: parameters,
            encoding: JSONEncoding.default,
            headers: headers)
            .authenticate(user: "user", password: "password")
            .responseJSON { response in
                if
                    let json = response.result.value as? [String: Any],
                    let prop1 = json["prop1"] as? String
                {
                    debugPrint(prop1)
                }
                debugPrint(response)
        }
    }

}

```

- iPhoneの万歩計データは非同期に更新されるので慌てずに稼働を確認します。「ヘルスケア」メニューからも歩数のデータを確認可能です


#3. アプリを稼働させてみます
- アプリを稼働させ、万歩計データを取得できたら、Node-REDへ送付してみます

<img width="375" alt="IMG_0558.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/125842/364974bc-d591-e47f-9d03-a6da88650170.jpeg">

- Node-REDのデバッグ出力で歩数データが届いていることを確認します
- 送付データのうち、「suji_param」に格納して送付されています

<img width="1200" alt="スクリーンショット 2017-10-05 19.50.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/125842/515424d9-4273-a961-51c8-16ba5fff2e21.png">


- [Node-REDからデータベースをアクセスする](https://qiita.com/egplnt/items/1d83fe8b9c27ec99cbf2)、[省略語を表示するサイトを作ってみる](https://qiita.com/egplnt/items/927701fe6efac7dedbd8)などを参照し、この万歩計データをデータベースに登録、参照することが可能です