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