设备配网

用户登录/注册后,需要绑定设备才能够使用。对于普通的WIFI连接类型设备,绑定设备之前,首先需在APP上给出配置设备进入SmartConfig状态的提示;然后填写当前手机连接的WiFi和密码,调用startAbleLink将SSID与密码广播给设备,设备拿到WiFi密码后连接到云端然后开始局域网广播自己的物理Id和subdomainId,APP拿到回调后即可以调用bindDevice接口绑定设备。

普通SmartLink配网

DM_wifi

1.获取设备激活器

Ablecloud提供了ACDeviceActivator激活器供你使用,具体使用步骤如下:

//以汉枫模块为例
ACDeviceActivator deviceActivator = AC.deviceActivator(AC.DEVICE_HF);

AC.DEVICE_HF表示汉枫的wifi模块,如果用的是其它的wifi模块,则需要改成相对应的值。 目前支持的wifi模块有:AC.DEVICE_MTK(MTK模块)、AC.DEVICE_MX(庆科模块)、AC.DEVICE_MARVELL(MARVELL模块)、AC.DEVICE_MURATA(村田模块)、AC.DEVICE_WM(联盛德模块)、AC.DEVICE_RAK(RAK模块)、AC.DEVICE_TIAC.DEVICE_ESP8266AC.DEVICE_REALTEKAC.DEVICE_AI6060HAC.DEVICE_MILLAC.DEVICE_GUBEI(古北模块)。

2.获取WiFi的SSID

deviceActivator. getSSID()

3.激活设备

APP通过startAbleLink广播自己的WiFi密码,设备成功连上云之后通过广播通知APP同时获取设备物理Id和subDomainId(用来区分设备类型)。只支持配置手机当前连接的WiFi。

//ssid为wifi名,password为wifi密码,AC.DEVICE_ACTIVATOR_DEFAULT_TIMEOUT为AC默认的配网超时时间60s,具体可根据实际情况测试进行修改。
deviceActivator.startAbleLink(ssid, password,  AC.DEVICE_ACTIVATOR_DEFAULT_TIMEOUT, new PayloadCallback<List<ACDeviceBind>>() {
    @Override
    public void success(List<ACDeviceBind> deviceBinds) {
        //成功后得到已激活设备的列表,从列表中得到物理id后可调用AC.bindMgr()的bindDevice接口进行绑定
    }

    @Override
    public void error(ACException e) {
        //根据e.getErrorCode()做不同的提示或处理
    }
});

以下为该接口详细的错误信息描述

错误码 错误描述 可能原因
1960 局域网内没有发现设备 设备配网失败、发送广播失败
1961 MCU注册失败 MCU与WiFi通信错误
1962 建立长连接失败 弱网络环境、路由器未能连接云端
1963 与云端激活认证失败 弱网络环境、密钥烧录错误
1999 网络错误或其他 app联网错误

若希望这个配网日志可以上报到云端,通过AbleCloud控制台设备管理查看该设备配网的详细流程,则还需要集成AbleCloud大数据分析SDK即可。

4.停止激活设备

建议在退出激活设备的页面时,调用以下接口。

@Override
protected void onDestroy() {
    super.onDestroy();
    if (deviceActivator.isAbleLink())
        deviceActivator.stopAbleLink();
}

如激活设备过程中用户手动停止配网,则调用stopAbleLink接口即可。

AP模式配网

配网原理

AP模式配网是指通过APP连接设备发出的AP热点, 然后将设备正常工作时候的WIFI信息发送给设备, 完成设备配网的过程

适用场景

所有支持AP模式的设备, 建议在普通SmartConfig配网模式配网失败的情况下使用。

整体实现流程

代码示例

1、 APP连接设备的AP热点 APP在UI界面上给出提示,让用户点击设备上对应的进入AP模式的按键, 确认设备进入配网模式,同时提示用户连接该AP热点

2、 APP获取设备可用WIFI列表 手机连接到设备AP热点后, 切换到APP页面, 发送请求给设备, 以获取设备可用的WIFI列表:

ACDeviceActivator deviceActivator = AC.deviceActivator(AC.DEVICE_AP);
//第一个参数为超时时间,单位为毫秒,此处建议为10s
deviceActivator.searchAvailableWifi(10000, new PayloadCallback<List<ACWifiInfo>>() {
    @Override
    public void success(List<ACWifiInfo> wifiInfos) {
        for (ACWifiInfo info : wifiInfos) {
            //WiFi的SSID
            String ssid = info.getSsid();
            //WiFi的信号强度
            String power = info.getPower();
        }
    }

    @Override
    public void error(ACException e) {
        //
    }
});

建议开发者在获取到WIFI列表后,弹窗或者以Spinner控件展示,方便用户点击对应的WIFI直接输入密码.

3、 APP选择设备要工作的目标WIFI, 发送SSID和密码(以SSID:Hello_world, 密码:123456为例)

//AC.DEVICE_ACTIVATOR_DEFAULT_TIMEOUT:使用默认超时时间60s
//第一个回调为配置SSID与Password成功与否的回调,建议传null;只用于调试阶段分析问题。
//第二个回调为设备是否连云成功的回调。配置成功与否以第二个回调为主
deviceActivator.startApLink("Hello_world", "123456", AC.DEVICE_ACTIVATOR_DEFAULT_TIMEOUT, null, new PayloadCallback<ACDeviceBind>() {
    @Override
    public void success(ACDeviceBind deviceBind) {
        //设备已成功连接,通过ACDeviceBind获取到物理ID进行绑定设备操作
    }

    @Override
    public void error(ACException e) {
        //此处一般为1993的超时错误,建议处理逻辑为页面上提示配网失败,提示用户检查自己输入的WIFI信息是否正确等,回到上述第一步骤,重新开始所有配网步骤。
    }
});

4、 在APP发送SSID和密码的同时,同步更新UI界面,提示用户切换手机WiFi连接到Hello_world(手机进入设置->无限局域网, 选择目标WIFI, 连接. 然后切回到APP界面), 等待设备将物理ID等信息返回. 开发者拿到ACDeviceBind回调后可调用绑定接口进行设备绑定操作等。