0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-10-05

Swift3.0を使って簡単なiPhoneアプリを作ってみます
(初心者向け)Swift3.0で初アプリ - CocoaPods, Carthagoを使ってみるでAlamoFireを使えるようにしました
(初心者向け)Swift3.0で初アプリ - iPhoneからMacbookへアクセスでiPhoneからMacbookへアクセスできるようにしました
(初心者向け)Swift3.0で初アプリ - iPhoneからNode-REDヘアクセスでiPhoneからNode-REDへアクセスできるようにしました
(初心者向け)Swift3.0で初アプリ - 万歩計アプリで万歩計アプリを動かしました

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

#1. Node-REDのフローを用意します

#2. アプリを用意します

  • Xcodeを起動し、新しいSingle View Applicationを用意します
  • ViewController.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_0558.jpg
  • Node-REDのデバッグ出力で歩数データが届いていることを確認します
  • 送付データのうち、「suji_param」に格納して送付されています
スクリーンショット 2017-10-05 19.50.23.png
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?