Class iot.espressif.esp32.api.EspMeshApis
/**
* 获取API单例
*
* @return API实例
*/
public static EspMeshApis getImplInstance();
/**
* 开始扫描Mesh蓝牙信号
*
* @param listener 发现Mesh设备时回调
*/
abstract public void startScanMeshBleDevice(@NonNull MeshScanListener listener);
/**
* 停止正在进行的扫描进程
*
* @param listener 停止扫描的标识,必须与开始扫描的接口是同一个
*/
abstract public void stopScanMeshBleDevice(@NonNull MeshScanListener listener);
/**
* 将设备配置到指定的路由器
* 如果设备成功连接路由器将调用回调接口{@link MeshBlufiCallback#onWifiStateResponse(BlufiClient, BlufiStatusResponse)}
*
* @param device Mesh BLE设备
* @param meshVersion 从MDF蓝牙广播数据中获取的版本
* @param params 配网参数
* @param blufiCallback 回调接口
* @return MeshBlufiClient
*/
abstract public MeshBlufiClient startConfigureNetwork(@NonNull BluetoothDevice device, int meshVersion, @NonNull MeshConfigureParams params, @Nullable MeshBlufiCallback blufiCallback);
/**
* 停止回调进程
*
* @param client 配网中的客户端
*/
abstract public void stopConfigureNetwork(@NonNull MeshBlufiClient client);
/**
* 扫描路由器下的所有节点设备
*
* @return 节点设备列表
*/
abstract public List<IEspDevice> scanStations();
/**
* 扫描路由器下的所有节点设备
*
* @param callback 获的一组Mesh设备时触发
* @return 节点设备列表
*/
abstract public List<IEspDevice> scanStations(@Nullable DeviceScanCallback callback);
/**
* 开始升级设备固件版本,APP将会把固件数据发送给设备
*
* @param bin 升级固件
* @param devices 需要升级的设备
* @param callback 升级过程中的回调接口
* @return EspOTAClient
*/
abstract public EspOTAClient startOTA(@NonNull File bin, @NonNull Collection<IEspDevice> devices, @Nullable EspOTAClient.OTACallback callback);
/**
* 开始升级设备固件版本,设备将会从给定的地址下载数据
* OTA将在异步线程中运行
*
* @param url 固件地址
* @param devices 需要升级的设备
* @param callback 升级过程中的回调接口
* @return EspOTAClient
*/
abstract public EspOTAClient startOTA(@NonNull String url, @NonNull Collection<IEspDevice> devices, @Nullable EspOTAClient.OTACallback callback);
/**
* 停止升级进程
*
* @param client ongoing client
*/
abstract public void stopOTA(@NonNull EspOTAClient client);
/**
* 更新设备详细信息
*
* @param device MDF设备
* @return true 若获取信息成功
*/
abstract public boolean getDeviceInfo(@NonNull IEspDevice device);
/**
* 更新设备详细信息
*
* @param devices MDF设备列表
*/
abstract public void getDevicesInfo(@NonNull Collection<IEspDevice> devices);
/**
* 修改设备状态
*
* @param device MDF设备
* @param characteristics EspDeviceCharacteristic需要设置cid和value
* @return true 若发送请求成功
*/
abstract public boolean setDeviceStatus(@NonNull IEspDevice device, @NonNull Collection<EspDeviceCharacteristic> characteristics);
/**
* 修改设备状态
*
* @param devices MDF设备列表
* @param characteristics EspDeviceCharacteristic需要设置cid和value
*/
abstract public void setDevicesStatus(@NonNull Collection<IEspDevice> devices, @NonNull Collection<EspDeviceCharacteristic> characteristics);
/**
* 更新指定的状态信息
*
* @param device MDF设备
* @param cids 需要更新的属性id
* @return true 若获取信息成功
*/
abstract public boolean getDeviceStatus(@NonNull IEspDevice device, int... cids);
/**
* 更新指定的状态信息
*
* @param devices MDF设备列表
* @param cids 需要更新的属性id
*/
abstract public void getDevicesStatus(@NonNull Collection<IEspDevice> devices, int... cids);
/**
* 请求设备重启
*
* @param device MDF设备
* @return true 若发送请求成功
*/
abstract public boolean reboot(@NonNull IEspDevice device);
/**
* 请求设备重启
*
* @param devices MDF设备列表
*/
abstract public void reboot(@NonNull Collection<IEspDevice> devices);
-
在AndroidManifest.xml中注册iot.espressif.esp32.app.EspApplication
-
代码调用:
// 1. 开始扫描Mesh BLE设备 MeshScanListener meshScanListener = new MeshScanListener() { @Override public void onMeshDeviceScanned(MeshBleDevice meshBleDevice) { // 获取BLE设备 BluetoothDevice bluetoothDevice = meshBleDevice.getDevice(); // 获取mesh版本 int meshVersion = meshBleDevice.getMeshVersion(); // 获取station bssid String staBssid = meshBleDevice.getStaBssid(); // 获取rssi int rssi = meshBleDevice.getRssi(); // 获取设备类型id int tid = meshBleDevice.getTid(); } }; EspMeshApis.getImplInstance().startScanMeshBleDevice(meshScanListener); // 2. 停止扫描Mesh BLE设备 EspMeshApis.getImplInstance().stopScanMeshBleDevice(meshScanListener); // 3. 配网 int meshVersion = 0; // Mesh version, 从MeshBleDevice获取 BluetoothDevice device = null; // BLE device,从MeshBleDevice获取 List<String> whiteList = new ArrayList<>(); // 将需要配到同一个Mesh网络下的设备的station bssid加入白名单, station bssid从MeshBleDevice获取 whiteList.add("staBssid1"); whiteList.add("staBssid2"); MeshConfigureParams params = new MeshConfigureParams(); params.setAPSsid("ssid"); // 必需 params.setAPBssid("bssid"); // 必需 params.setAPPassword("password"); // 必需 params.setMeshID("meshid".getBytes()); // 必需,6个字节,将设备配置到指定的Mesh网络 params.setMeshPassword("mesh password"); // 非必需 params.setWhiteList(whiteList); // 非必需 MeshBlufiClient meshBlufiClient = EspMeshApis.getImplInstance().startConfigureNetwork(device, meshVersion, params, new MeshBlufiCallback() { @Override public void onWifiStateResponse(BlufiClient client, BlufiStatusResponse response) { boolean success = response.isStaConnected(); // 设备已经连上了指定的路由器 } // 配网失败有多种回调, 具体可参考类MeshBlufiCallback }); // 4. 停止配网并释放配网过程中申请的资源 EspMeshApis.getImplInstance().stopConfigureNetwork(meshBlufiClient); // 5. 获取路由器下的所有节点设备,此时获取的设备是没有设备详情的 List<IEspDevice> deviceList = EspMeshApis.getImplInstance().scanStations(); // 6. 获取设备详情 EspMeshApis.getImplInstance().getDeviceInfo(IEspDevice); // 获取一个设备的信息 EspMeshApis.getImplInstance().getDevicesInfo(deviceList); // 批量获取设备信息 // 7. 修改设备状态 EspDeviceCharacteristic characteristic = EspDeviceCharacteristic.newInstance(EspDeviceCharacteristic.FORMAT_INT); // 根据format建立 characteristic.setCid(0x01); // 设置需要修改的属性的cid characteristic.setValue(100); // 设置需要修改的数据的值 List<EspDeviceCharacteristic> characteristics = new ArrayList<>(); characteristics.add(characteristic); EspMeshApis.getImplInstance().setDevicesStatus(IEspDevice, characteristics); // 修改一个设备的状态 EspMeshApis.getImplInstance().setDevicesStatus(deviceList, characteristics); // 批量修改设备的状态 // 8. OTA升级设备版本 EspOTAClient otaClient = EspMeshApis.getImplInstance().startOTA(bin, deviceList, new EspOTAClient.OTACallback() { @Override public Handler getHandler() { return null; // 设置回调Handler, 可以为null } @Override public void onOTAPrepare(EspOTAClient client) { // OTA开始前回调 } @Override public void onOTAProgressUpdate(EspOTAClient client, List<EspOTAClient.OTAProgress> progressList) { // OTA过程中回调 for (EspOTAClient.OTAProgress progress : progressList) { String mac = progress.getDeviceMac(); // 设备MAC int progressValue = progress.getProgress(); // 升级进度 String message = progress.getMessage(); // 升级信息 } } @Override public void onOTAResult(EspOTAClient client, List<String> sucMacList) { // OTA结果回调 // sucMacList是升级成功的设备列表 // 升级成功后设备需要重启 EspMeshApis.getImplInstance().reboot(sucDevices); } }); // 9. 停止OTA升级并释放升级过程中申请的资源 EspMeshApis.getImplInstance().stopOTA(otaClient);