クイックスタート 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
->lockedWifiModule2
unlocked
->unlockedWifiModule2
moved
->movedWifiModule2
isConnectedByWM2
はtrue
wifiModule2.insertCHDevice(device) { _ in }
WiFi Module経由でセサミを遠隔操作!
- BLE経由でSesameを施解錠するメソッドとは変わりません。BLE 経由でするか、WiFi 経由でするかを SesameSDK が自動的に判断します
- インターネット経由で施解錠をする時に、WiFi Moduleデバイスの赤いLEDランプが一瞬点滅します
device.toggle { _ in } // 施/解錠device.lock { _ in } // 施錠device.unlock { _ in } // 解錠