-
Notifications
You must be signed in to change notification settings - Fork 0
/
ViewController.swift
138 lines (107 loc) · 4.39 KB
/
ViewController.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
//
// ViewController.swift
// BLESerial3-sample
//
// Created by Tomonari Takahashi on 2016/12/26.
// Copyright © 2016年 Tomonari Takahashi. All rights reserved.
//
import UIKit
import CoreBluetooth
class ViewController: UIViewController, CBCentralManagerDelegate, CBPeripheralDelegate {
var centralManager: CBCentralManager!
var peripheral: CBPeripheral!
var characteristic: CBCharacteristic!
var centralManagerReady: Bool = false
var peripheralReady: Bool = false
// MARK: - IBOutlet
@IBOutlet weak var SSIDUILabel: UILabel!
// MARK: - IBAction
@IBAction func connectBtnTapped(_ sender: Any) {
if !self.centralManagerReady {
return
}
self.scanBLESerial3()
}
@IBAction func send1BtnTapped(_ sender: Any) {
if !peripheralReady {
return
}
var val1: Int = 1
let data: NSData = NSData.init(bytes: &val1, length: 1)
self.peripheral.writeValue(data as Data, for: self.characteristic, type: .withoutResponse)
}
@IBAction func send2BtnTapped(_ sender: Any) {
if !peripheralReady {
return
}
var val2: Int = 2
let data: NSData = NSData.init(bytes: &val2, length: 1)
self.peripheral.writeValue(data as Data, for: self.characteristic, type: .withoutResponse)
}
// MARK: - CBCentralManager Delegate
// CBCentralManagerの状態が変化するたびに呼ばれる
func centralManagerDidUpdateState(_ central: CBCentralManager) {
switch central.state {
case .poweredOn:
self.centralManagerReady = true
default:
break
}
}
// Scanをして、該当のBLE(ペリフェラル)が見つかると呼ばれる
// 第二引数に該当のBLEが渡されてくる
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
print("発見したBLE: \(peripheral)")
self.stopScan()
self.connectPeripheral(peripheral: peripheral)
}
// BLE(ペリフェラル)に接続が成功すると呼ばれる
// 第二引数に接続したのBLEが渡されてくる
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
print("接続したBLE: \(peripheral)")
self.SSIDUILabel.text = peripheral.name
self.scanService()
}
// MARK: - CBPeripheralDelegate Delegate
// サービスを発見すると呼ばれる
func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
let service: CBService = peripheral.services![0]
self.scanCharacteristics(service)
}
// キャラスタリスティックを発見すると呼ばれる
func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
let characteristic: CBCharacteristic = service.characteristics![0]
self.characteristic = characteristic
peripheralReady = true
}
// MARK: - Method
func scanBLESerial3() {
let BLESerial3UUID: [CBUUID] = [CBUUID.init(string: "FEED0001-C497-4476-A7ED-727DE7648AB1")]
self.centralManager?.scanForPeripherals(withServices: BLESerial3UUID, options: nil)
}
func stopScan() {
self.centralManager.stopScan()
}
func connectPeripheral(peripheral: CBPeripheral) {
self.peripheral = peripheral
self.centralManager.connect(self.peripheral, options: nil)
}
func scanService() {
self.peripheral.delegate = self
let TXCBUUID: [CBUUID] = [CBUUID.init(string: "FEED0001-C497-4476-A7ED-727DE7648AB1")]
self.peripheral.discoverServices(TXCBUUID)
}
func scanCharacteristics(_ service: CBService) {
let characteristics: [CBUUID] = [CBUUID.init(string: "FEEDAA02-C497-4476-A7ED-727DE7648AB1")]
self.peripheral.discoverCharacteristics(characteristics, for: service)
}
// MARK: - LifeCycle
override func viewDidLoad() {
super.viewDidLoad()
// centralManagerを初期化する
self.centralManager = CBCentralManager(delegate: self, queue: nil)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}