クイックスタート WiFi Module2
目的
iOS 開発者向けに SesameSDK のクイックガイドです。コピペですぐ使えるサンプルコードを通じて、WiFi Module 経由でセサミを遠隔操作できるアプリを一瞬で作りましょう。
準備リスト
- WiFi Module デバイス
- Sesame デバイス(登録済みスマートロック)
- iOS10 以上の端末
フロー
- クイックスタート Sesame の通り Sesame を登録します
- 未登録の WiFi Module を取得する
- WiFi Module の状態を取得する
- WiFi Module と BLE 接続する
- WiFi Module を登録する
- WiFi Module に近くにある
SSIDリストをスキャンさせる - WiFi Module に WiFi の
SSIDを設定する - WiFi Module に WiFi の
パスワードを設定する - WiFi Module に設定した WiFi に接続させる
- WiFi Module に Sesame 情報を追加する
- WiFi Module 経由でセサミを遠隔操作してみる!
クイックスタート Sesame 通り Sesame を登録する
- WiFi Module は登録済の Sesame デバイスにのみ対応しますよ
- BLE スキャンは必ずオンにして下さいね
未登録の WiFi Module を取得する
- iOS 端末の横に未登録の WiFi Module デバイスを用意します
CHBleManagerの delegate の通知先をselfに設定しますCHBleManagerDelegateのdidDiscoverUnRegisteredCHDevices(_ devices: [CHDevice])から未登録の WiFi Module の delegate イベントを取得します
CHBleManager.shared.delegate = self // delegateの通知先をselfに設定しますextension ViewController: CHBleManagerDelegate {func didDiscoverUnRegisteredCHDevices(_ devices: [CHDevice]) {// 未登録の WiFi Module を発見します}}
WiFi Module の BLE 状態を取得する
- BLE スキャンにより WiFi Module の取得後、
CHWifiModule2Delegateの delegate メソッドを使って、WiFi Module の状態変化の delegate イベントを取得します - 各操作により BLE 状態変化が異なります。状態一覧はWiFi Module 状態遷移図をご参照ください。
extension ViewController: CHWifiModule2Delegate {func viewDidLoad() {super.viewDidLoad()self.wifiModule.delegate = self // WiFi Module のdelegateの通知先をselfに設定します}// wifi-module の状態変化をdelegatefunc onBleDeviceStatusChanged(device: CHWifiModule2, status: CHSesame2Status) {}// wifiModule の代理事件func onAPSettingChanged(device: CHWifiModule2, settings: CHWifiModule2MechSettings) {}func onNetworkStatusChanged(device: CHWifiModule2, status: CHWifiModule2NetworkStatus) {}func onSesame2KeysChanged(device: CHWifiModule2, sesame2keys: [String: String]) {}func onOTAProgress(device: CHWifiModule2, percent: UInt8) {}func onScanWifiSID(device: CHWifiModule2, ssid: SSID) {}}
WiFi Module と BLE 接続する
- WiFi Module デバイスの BLE アドバタイジングを取得できたら、WiFi Module と BLE 接続するコマンドが使用可能となります。
- WiFi Module デバイスの BLE アドバタイジングを取得できたら、未登録の WiFi Module の delegate イベントが伝わってきます。未登録のデバイスの初期 BLE 状態は必ず
receivedBleとなります。
extension ViewController: CHWifiModule2Delegate {func onBleDeviceStatusChanged(device: CHWifiModule2, status: CHSesame2Status) {if status == .receivedBle() {device.connect() { _ in } // デバイスのBLE状態が receiveBle になったら、connectコマンドをする。}}}
WiFi Module を登録する
- WiFi Module デバイスと BLE 接続する完了後、WiFi Module の BLE 状態が
readyToRegisterと変わります。registerコマンドを使って、WiFi Module デバイスを登録します。 - WiFi Module デバイスの登録が完了後、WiFi Module の BLE 状態が
waitApConnectに変わり、次のステップにて WiFi Module デバイスに Router の設定をします - WiFi Module デバイスの LED は登録前に紫色、登録後は赤色となるので、ご確認下さい
extension ViewController: CHWifiModule2Delegate {func onBleDeviceStatusChanged(device: CHWifiModule2, status: CHSesame2Status) {if (wifiModule.deviceStatus == .readyToRegister()) {device.register { _ in } // デバイスのBLE状態が receiveBle になったら、registerコマンドをする。}}}
WiFi Module に近くにある WiFi SSID リストをスキャンさせる
scanWifiSSIDメソッドを叩き、WiFi Module に近くにある WiFi SSID リストをスキャンさせるonScanWifiSIDから 2.4GHz WiFi SSID リストの delegate イベントを取得する
self.wifiModule.scanWifiSSID { _ in } // 近くの SSID をスキャンする.extension ViewController: CHWifiModule2Delegate {func onScanWifiSID(device: CHWifiModule2, ssid: SSID) {// 2.4g WiFi SSID リストのコールバックが返ってきます}}
WiFi Module に WiFi の SSID を設定する
setWifiSSIDメソッドを使ってSSIDを入力します- もし WiFi Module デバイスが入力された
SSIDを検知できない場合、失敗のコールバックが返ってきます
wifiModule2.setWifiSSID("your-ssid") { setResult inif case let .failure(error) = setResult {}}
WiFi Module に WiFi のパスワードを設定する
setWifiPasswordメソッドを使ってパスワード入力します
device.setWifiPassword("your-wifi-ssid-password") { _ in }
WiFi Module に設定した WiFi に接続させる
connectWifiを使って、WiFi Module に設定された WiFi に接続させます- CANDY HOUSE Cloud に接続成功後、WiFi Module デバイスの青色 LED ランプが点灯します
wifiModule.connectWifi { _ in }
WiFi Module に Sesame 情報を追加する
insertCHDevice(device)にCHDeviceオブジェクトを入力します。こちらのCHDevicesはCHSesame2型クラス- WiFi Module が
CHSesame2の鍵オブジェクトを受け取ったら、WiFi Module デバイスが Sesame デバイスを BLE スキャンすることを行います - WiFi Module が BLE スキャンをしている場合、WiFi Module デバイスの赤い LED ランプが 3 回ずつ点滅します
- 赤いランプが消灯後、
onBleDeviceStatusChangedの中のCHSesame2Status状態がLockedからLockedWm2に変更し、またsesame.isConnectedByWM2がtrueになりますlocked->lockedWifiModule2unlocked->unlockedWifiModule2moved->movedWifiModule2isConnectedByWM2はtrue
wifiModule2.insertCHDevice(device) { _ in }
WiFi Module 経由でセサミを遠隔操作!
- BLE 経由で Sesame を施解錠するメソッドとは変わりません。BLE 経由でするか、WiFi 経由でするかを SesameSDK が自動的に判断します
- インターネット経由で施解錠をする時に、WiFi Module デバイスの赤い LED ランプが一瞬点滅します
device.toggle { _ in } // 施/解錠device.lock { _ in } // 施錠device.unlock { _ in } // 解錠