Android 蓝牙Mesh组网代码详解

Android硬件通信之 蓝牙Mesh通信 蓝牙Mesh通信 阅读详情
AI摘要

本文详细解析了蓝牙Mesh组网原理及Android代码实现,涵盖扫描、组网、控制等核心流程,分享泰凌微蓝牙Mesh灯项目源码,助力开发者快速上手。

前言

  上面的几篇文章都是在说Android网络编程方面的内容,我本来就有打算做成一个系列。但最近因为工作的原因,一直在研究蓝牙mesh组网对蓝牙设备进行控制,研究了近两个星期,总算有了点自己的理解。先对蓝牙Mesh 组网做一个总结,下面的文章会继续写Android 网络编程方面的内容。网上关于Mesh 组网的理论解释倒是很多,但是很少有关于Android 代码具体实现的,这篇文章将基于Android Mesh 组网的代码实现进行讲解,希望能带给大家一些帮助。

Mesh组网基本理解

  蓝牙技术联盟写了解密蓝牙mesh系列,一共10篇文章 讲述了蓝牙mesh理论内容以及整个流程 ,想要详细了解的可以点击查看。下面我们简单介绍下Mesh组网到底是什么:
在这里插入图片描述
  MESH是一种新型的无线网络架构,蓝牙Mesh组网内每台设备均通过低功耗蓝牙无线连接进行通信,而这些设备被称之为节点。每个节点都能发送和接收消息,消息能够在节点之间被中继,从而让消息传输至比无线电波正常传输距离更远的位置。归结成一句话:蓝牙Mesh组网 就是一种在同一个网络内任意蓝牙设备都进行数据交互的技术。这样的话,APP 只要能发现组网内的任何一台设备,就能由设备发现组网内的其他Mesh设备,并和任何一台设备建立连接并控制。


  其实,我对蓝牙Mesh 的组网也仅仅限于上面的理解。作为一个Android 开发人员,我更关注的是Android 代码到底如何去实现蓝牙设备的组网。在网上也找到了一些项目和代码,仔细研究了下也是很迷茫。后来找到了泰凌微提供的蓝牙Mesh灯项目以及开放的Mesh 组网流程的源码,才真正的算是实现了Android 组网。我将这个资料上传到了百度网盘 ,提取码是6i57。也上传到了优快云资源,点击即可下载,里面有一个Android Mesh组网的项目及具体源码、SDK开发手册以及加密手册。当然,这个项目的知识产权还是归泰凌微所有,如果有任何侵权行为联系本人,本人将立即下架这两个项目,发布的原因还是想给大家普及一下Android 如何实现Mesh 组网的,没有任何盈利行为。

扫描设备

  因为下面的分析是基于上面项目的代码去分析的,所以需要你们下载下来项目跑起来。
  无论是连接已经完成组网设备还是将一个待组网设备进行组网,APP 做的第一步永远是扫描,扫描到所有的蓝牙设备,然后拿到指定的Mesh组网的设备进行组网操作。下面是代码分析:

在扫描界面执行: startScan(params) 启动扫描,然后会执行一个循环任务EventLoopTask,在循环任务中每200毫秒查询一次状态,然后 startLeScan() 方法中判断设备是否正在扫描,如果没有,则在LeBluetooth类中开启扫描startScan()。
在注册TelinkLightService的时候,会创建一个LightAdapter并启动,会设置设备的扫描结果回调setLeScanCallback(LeScanCallback callback),然后当上面的扫描开启后,会将扫描得到的设备返回的这个回调中的onLeScan()方法中.在这个方法中,会先对设备本身返回的信息进行处理和判断,符合标准的设备返回到在扫描界面设置监听的performed方法中的,然后执行onLeScan(),扫描这一步就完成了。
扫描完拿到三个信息 device rssi 以及scanRecord 。蓝牙设备的地址可以根据device.getAddress()直接获取 比如说我拿到的灯设备 scanRecord 的数据如下:
02:01:05:05:09:4D:65:73:68:09:FF:11:02:11:02:35:43:68:38:1E:FF:11:02:11:02:35:43:68:38:21:43:01:35:00:10:19:44:45:4C:20:68:73:65:4D:20:47:53:54:42:4A:00:00:00:00:00:00:00:00:00:00:00:00
​ 在
DefaultAdvertiseDataFilter
类中可以看到 有meshName,meshAddress,meshUUID,productUUID等数据。很明显我们可以根据这些数据分析当前设备在哪个mesh 下,地址又是什么。

  总结:执行SDK提供的开始扫描接口startScan()的时候,可以从设备发现的回调中拿到具体的蓝牙设备和广播。mac 地址和设备名称等信息可以从设备中拿到,而设备所属的Mesh 组网名称、设备的MeshAddress(设备在组网内的唯一标识,通讯地址)等信息可以在广播中获取到。其中productUUID是指的产品类型,可以在设备中自定义这个类型。而meshUUID则是厂商默认设置的值,至于status 这个值是厂商的预留值,也是可以在设备中自定义的信息,总的来说,在这个APP 的代码中,并没有实际用到这三个参数。

组网

meshAddress

   在onLeScan() 方法里,会调用一个mesh.getDeviceAddress() 的方法,这个方法很重要,这里面拿到的meshAddress就是后面要修改新加入组网设备的meshAddress,他在后面会被设为newMeshAddress然后保存下来。因为在蓝牙mesh组网下,meshAddress是用来确定设备的,他在这个组网内是唯一固定的。那这个方法实现的逻辑是怎样的呢?比如说要加入一个新设备要加入当前的组网,不管他原先的meshAddress是多少 ,只看我当前组网下的meshAddress。比如说有两个设备,地址分别是 1、3,在这个方法里,会遍历1-254的值,然后就会返回一个2 ,这个2就是要设置的新meshAddress。meshAddress的范围就是1-254,当然了你也可以修改这个范围。

添加与重连

  组网的时候,SDK提供了两个接口,一个是添加新的设备进行组网,调用的是TelinkLightService.Instance().updateMesh(params);更新接口,这个接口能够更改设备本身出厂时的参数meshName、password、ltk三个信息,这三个信息修改成功, 就标志着设备已经组⽹网成功,将设备成功加入到新的组网下。另一个是如果当前设备的meshName,password是你要组⽹网的名称,可以执⾏**TelinkLightService.Instance().autoConnect(connectParams);**自动重连接口,直接把APP 跟设备连接起来。

UUID

  在组网之前,我们需要知道UUID。UUID是根据一定算法,计算得到的一长串数字,这个数字的产生使用了多种元素,所以使得这串数字不会重复,每次生成都会产生不一样的序列,所以可以用来作为唯一标识。
  在蓝牙协议中,UUID被用来标识蓝牙设备所提供的服务,并非是标识蓝牙设备本身哦,一个蓝牙设备可以提供多种服务,比如A2DP(蓝牙音频传输)、HEADFREE(免提)、PBAP(电话本)、SPP(串口通信)等等,每种服务都对应一个UUID,其中在蓝牙协议栈里,这些默认提供的profile是都有对应的UUID的,也就是默认的UUID,比如SPP,00001101-0000-1000-8000-00805F9B34FB就是一个非常 well-known的UUID,基本上所有的蓝牙板不修改的话都是这个值。但是,不同的设备也不同的UUID,如果是与一个蓝牙开发板进行通信,需要APP 和 蓝牙设备的UUID 保持一致。而APP代码中的UuidInformation类里面就可以设置你要控制的低功耗蓝牙设备的UUID。一般都要修改服务、状态通知、控制、OTA、加密这五个UUID。下面进行的登录,修改参数、控制设备等等操作都需要UUID 的验证。

  下面我们主要讲一下更新接口的实现,其实自动重连接口就是比更新接口少了修改设备信息这一步。

连接

   发现设备后,拿到要组网的设备的本身的信息,然后就开始进行连接了。其实就是走的低功耗蓝牙设备的connectGatt(this, false, mGattCallback); 连接方法。

更新参数执行updateMesh()⽅法来更新设备的meshName、password、ltk,也还是会执⾏行一个循环任务 EventLoopTask,在循环任务中每200毫秒查询一次状态,然后update()方法中进行connect(),然后在LightController类中执行connect(),最终会执行Peripheral类的connect()⽅法,然后通过此BluetoothDevice的connectGatt(this, false, mGattCallback)方法获取设备连接。⽆论当连接上设备或者失去连接时会回调onConnectionStateChange(),当连接成功后调用discoverServices函数尝试发现服务,当设备是否找到服务时,会回调onServicesDiscovered()函数,然后会在LightPeripheral类中的onServicesDiscovered()回调给LightController,最后发给 LightAdapter类CONNECT_SUCCESS. 连接成功后会执行登录的⽅法。

登录

  登录的过程是一个比较复杂的过程,涉及到多次的加密验证。这个验证之间的过程就会用到我们上面说的服务特征值UUID以及加密特征值UUID。
  在LightAdapter类执行登录login的方法,最终的实现是在LightController类中的login方法.参考了BLE_LIGHT加密流程简介V1.9.pdf文档,登录校验的具体实现如下:

  1. 根据 meshName、password、randm 这 3 个参数生成一个 sk,然 后把 randm 和生成的 sk 的低 8 个 byte(校验用)一起发送给设备
  2. 设备获取到发过来的 randm 并和 BLE Light 本身存储的 meshname 和 password 进行加密获取一个 sk,将生成的 sk 的低 8Byte 和 Master 发过来的 sk 进行比较,如果正确,则表示认证成功。
  3. 设备也会随机生成8Byte的 rands、以及本地存储的 mesh name、password 这 3 个参数加密生成一个 sk,会把sk 和 rands 传给APP,然后在本地会根据 randm、rands、meshname、password 共同生成一个新的sk,后续的加密和解密都将使用刚刚生成的 sk。
  4. APP 拿到设备发过来的sk后会进行校验,校验成功后获取8Byte的 rands,并根据该 rands 和randm、mesh name、password共同生成一个 sk,此时,APP 和 设备 两边的 sk 都是一样的,也就可以进行正常的加密和解密,同时的,登录的过程也就完成了。

修改信息

  我上面说过,加新设备进行组网的过程就是修改meshName、password、ltk,这三个参数的过程。其实这么说也并不是特别准确,其实在修改这三个参数之前还需要对比meshAddress(就是扫描设备拿到的meshAddress)与上面保存的newMeshAddress 要不要修改,因为我们上面说过,因为在蓝牙mesh组网下,meshAddress是用来确定设备的,他在这个组网内是唯一固定的。修改成功后才能进行下面三个参数的修改,这三个参数修改完成就标志这新设备已经成功组网。
  上面我说到LTK,可能有的朋友不知道这个是什么东西,meshName、password都很好理解,是mesh 组网的名称和密码,而LTK 是节点之间的通信秘钥,只要LTK一致,同一个组网间的设备就能正常通信。但是在代码中updateMesh(params)方法中,我们并没有给LTK赋值,所以当我们设置的时候将使用厂商默认LTK值。如果要修改自定义的LTK,可以调用params.setLtk() 方法进行赋值。
  下面是代码分析:

登录的sk校验会出现在LightController类的LoginCommandCallback里面,然后在LightAdapter里面的ConnectionListener() 返回一个登录成功或者失败的回调。登录成功后要修改meshName, password, ltk这三个信息,这三个信息就是组网的标志。修改的过程发生在LightController类的reset方法,会先判断设备的meshAddress要不要修改,如果要修改的话就先修改meshAddress,然后在onDeviceAddressNotify()方法里继续执行reset方法。通过加密的方法将这三个参数发送给设备,具体的加密过程也可以参照上面的BLE_LIGHT加密流程简介V1.9.pdf 文档去解析下,最后发发送了一个重新检查的命令,等待设备解密并修改完成发出的确认信息就完成了信息的修改。修改命令的回调都在ResetCommandCallback里,收到最后的TAG_RESET_MESH_CHECK的确认后,继续往下执行,会发出一个RESET_MESH_SUCCESS事件 ,然后在ResetMeshListener的回调里设置STATUS_UPDATE_MESH_COMPLETED,表明已完成信息更新,扫描到的这个设备组网完成,最后在扫描界面onDeviceStatusChanged的方法里面继续执行加灯操作,直到扫不到设备。

控制与接收设备数据

  控制与接收设备数据这里的代码就比较简单了,都有特定的方法去实现,唯一需要注意的一点就是发送数据的协议,一定要是当前设备的协议,否则无法进行控制。具体的实现可以参照下面的流程:
在这里插入图片描述

总结

  以上就是蓝牙Mesh 组网的整个流程了,下面引用一张我们ios 同事画的流程图理解一下:
在这里插入图片描述
  喜欢这篇文章或者对你有帮助的话希望能点个赞!


2020年2月23日补充

  我写了这篇博客有很多人联系我讨论蓝牙Mesh 组网的问题,非常感谢大家的信任。但因为这篇文章内容已经有点久远了,并且我本人在18年底就换了份工作,蓝牙Mesh网关之后就没有搞过了,有很多问题帮助不了大家,真的很抱歉。建议大家如果看了这篇文章有帮助的话尽量联系下泰凌威或者类似的蓝牙厂商,就算不接入他们看看他们的开发文档也是很有帮助的,毕竟他们才是专业的。而我当时只不过是一个开发接入者,把他们的实现用自己的思路整理了下,然后分享出来。真心希望大家能获取到自己想要的答案,再次感谢。

浅述蓝牙Mesh的配网流程 1. 信标(Beaconing)阶段 2.邀请 (Invitation)阶段 3. 交换公钥 (Exchange Public Keys)阶段 4. 身份认证 CAuthentication)阶段 5. 分发配网数据 (Distribution Of Provisioning Data)阶段 阅读详情

相关推荐

android ble mesh,Android 蓝牙Mesh组网代码详解

文章目录前言Mesh组网基本理解扫描设备组网meshAddress添加与重连UUID连接登录修改信息控制与接收设备数据总结前言上面的几篇文章都是在说Android网络编程方面的内容,我本来就有打算做成一个系列。但最近因为工作的原因,一直在研究蓝牙mesh组网对蓝牙设备进行控制,研究了近两个星期,总算有了点自己的理解。先对蓝牙Mesh 组网做一个总结,下面的文章会继续写Android 网络编程方面的...

weixin_42557803的博客 3284

Android蓝牙开发系列文章-蓝牙mesh(二)

在《Android蓝牙开发系列文章-策划篇》中我们对蓝牙专题的内容进行整体规划,现在让我们一点点揭开他的面纱~ 本文是关于蓝牙mesh的第二篇文章,由好友优快云博主yk150915提供,在优快云查看原文:蓝牙mesh(二) 移步微信公众号:Android蓝牙开发系列文章-蓝牙mesh(二) 查看蓝牙mesh第一篇文章,请点击:Android蓝牙开发系列文章-蓝牙mesh(一) 微信扫描...

马小橙的专栏 912

Android蓝牙Mesh组网实战:从零搭建智能灯光控制系统(附完整代码)

本文详细介绍了基于Android平台开发蓝牙Mesh智能灯光控制系统的完整实战流程。从环境搭建、核心概念解析,到设备扫描配网、网络初始化、模型配置与消息通信,提供了完整的代码实现和调试技巧。重点讲解了如何使用开源Mesh库实现设备发现、分组控制、场景管理等核心功能,并分享了实际项目中遇到的典型问题与解决方案。

weixin_29174013的博客 651

android 5. 蓝牙 mesh,蓝牙mesh组网

智能照明是智能家居的一个重要入口,传统照明方案存在布线复杂,控制单一等问题。搭配飞易通MESH组网模组替换传统方案,无需额外的布线。提供更智能的控制,更极致的用户体验。一、MESH应用领域:蓝牙5.0MESH是由SIG蓝牙联盟发布建立的多对多设备通信的低能耗蓝牙网络拓扑。作为一种低能耗蓝牙通信网络,可以用于楼宇自动化、无线传感器网络和资产管理等领域;楼宇自动化:智能照明、智能电工等;无线传感器:智...

weixin_42516657的博客 2913

蓝牙Mesh多跳组网:手机断网也能实现群聊的开源方案

蓝牙Mesh是一种基于低功耗蓝牙(BLE)的网络层协议,通过节点间的广播与监听实现多跳传输,从而突破单跳通信的距离限制。其核心机制是受控泛洪:消息沿节点接力传递,配合TTL和去重缓存机制抑制消息风暴,即使没有中心服务器,也能自组织形成覆盖更大范围的去中心化网络。这种技术价值在应急通信、物联网和智能家居等场景中尤为突出。当一群人处于手机无信号或WiFi断网的环境时,利用蓝牙Mesh多跳中继,普通Android手机与ESP32开发板即可构建临时群聊系统。本文从协议原理出发,对比主流开源方案,给出一个最小可运行的

weixin_33843409的博客 429

【CSRMesh2.1蓝牙开发】-Android demo介绍

之前开发了CSRMesh1.3版本,在基础上我们团队开发了智能照明系统,有android和IOS的二个app,通过蓝牙控制有所灯具设备,后来扩展了面板控制(遥控器),在给客户测试,发现三星手机组网只能支持15个设备一起组网,如果超过组网时经常失败,原因是三星手机对ble支持不怎么好,后来与原厂沟通需要升级2.1版本,因此我们就开始2.1版本开发了,苦逼啊 熟悉CSRMesh2.1Demo 拿到...

Mr.qiu的专栏 1036

BLE Mesh collections

1.nRF-Mesh 2.蓝牙 mesh 一起学 3.Android 蓝牙Mesh组网代码详解 4.BLE Mesh(二)BLE Mesh 基础 5.BLE MESH 6.BLE Mesh(零)学习资料 7.(基于Nordic)Android 蓝牙mesh协议栈问题修复之-未知model解析问题修复

hhbgk的专栏 177

ESP32蓝牙组网之节点配网

在进行这篇文章之前,请确保你已经知道了一个蓝牙节点的组成。 APP链接(这个APP是安卓的):https://github.com/EspressifApp/EspBLEMeshForAndroid/releases/tag/v1.0.0 源码连接:https://github.com/espressif/espidf/tree/master/examples/bluetooth/esp_ble_...

liumengyang1992的博客 6272

【Android 与 Nordic 蓝牙芯片开发实战:从通信到物联网应用】

• Nordic 的 nRF52/nRF53 系列是低功耗蓝牙(BLE)领域的标杆,广泛应用于 IoT、可穿戴设备、智能家居等。• Nordic + Android 是 IoT 开发的黄金组合,适用于智能硬件、可穿戴设备等场景。• Android 对 BLE 的支持完善,适合与 Nordic 芯片交互。• Nordic 开发板(如 nRF52840 DK、nRF5340 DK)编写一个简单的 BLE 服务(如心率监测、自定义数据传输)。• 编译并烧录到 Nordic 开发板。(Nordic 官方开发环境)

qq_30415023的博客 483

CSR1010 CSR1011 CSR1012 CSR1013 BLE 蓝牙4.0 CSR MESH组网 RGB调光灯

蓝牙mesh组网,相对zigbee、RF等其他常见方式组网的很大优势:不需要网关,尤其适合面对普通个人用户,家庭用户; 比如用户购买3个采用zigbee组网方案的灯泡,智能手机是不支持zigbee的,因此用户还需要购买一个网关设备,该设备起到TCPIP网络转zigbee信号的作用,用户通过android 或者IOS app 走TCPIP网络来连接网关设备,进而控制这3个灯泡。因此该方案,

Embedded Travel 3766

Nordic nRF5 mesh蓝牙组网(一)

Nordic nRF5 mesh蓝牙组网(一)

嵌入式软硬件叶玄 1266

安信可PB系列蓝牙模组 APP Ble Mesh组网教程

文章目录一、AT指令集二、APP组网示例三、数据通信 一、AT指令集 二、APP组网示例 准备至少 3 个 PB 系列模组,烧录支持 APP 组网的固件。 依次输入 AT+SETUP 进入组网 安装并且启动“PHY Mesh”ANDROID APP。启动后界面如下图一所示。底部导航栏分别 为,网络(NETWORK),分组(GROUPS),和设置(SETTINGS)选项页面。 点击网络页面的“ADD NODE”开始扫描未配置的节点(UNPROVISIONED NODE)。如下图二 所示,附近的未配置的节点

安信可科技 6506

Android-nRF-Mesh-Library:蓝牙网状配置器和配置器库

Android-nRF-Mesh-Library 关于 Android-nRF-Mesh-Library允许配置并将消息发送到Bluetooth Mesh设备。 蓝牙网格规范可以在以下位置找到: : 该库与Bluetooth Mesh配置文件规范的1.0.1版本兼容。 在运行Android 4.3及更高版本的Android设备上支持适用于Android的nRF Mesh。 特征 Provisionig具有Bluetooth Mesh Profile 1.0.1中可用的所有功能,包括OOB公钥和所有类型的OOB。 管理预配器,网络密钥,应用程序密钥,重置网络等。 所有网络层都在工作。 解析安全网络信标。 向节点添加,删除和刷新网络和应用程序密钥。 将应用程序密钥绑定和解除绑定到模型。 设置和清除模型的发布。 设置和删除模型的订阅。 组,包括具有虚拟地址的组。 用于

安信可TB蓝牙模组系列 APP Ble Mesh组网教程

文章目录一、AT指令集二、APP 组网示例三、数据通信 一、AT指令集 二、APP 组网示例 准备至少 3 个 PB 系列模组,烧录支持 APP 组网的固件。 依次输入 AT+SETUP 进入组网 安装并且启动“TelinkSigMesh”ANDROID APP。启动后界面如下图一所示。底部导航栏分 别为,设备(Device),分组(Group),和设置(Setting)选项页面。 点击网络页面右上的“+”号,进入 Device Scan 开始扫描未配置的节点(UNPROVISIONED NODE)。如

安信可科技 4773

Android 蓝牙Mesh组网代码详解-附件资源

Android 蓝牙Mesh组网代码详解-附件资源

WordPress主题开发实战:从零开始手把手教你创建自定义主题(含常用函数大全)

本文是一份WordPress主题开发实战指南,从零开始手把手教你创建自定义主题。内容涵盖主题核心文件结构、模板层级与循环机制、函数与钩子的运用,并附有详细的常用函数大全,帮助开发者彻底掌握主题开发的核心技能,实现从使用者到创造者的转变。

weixin_27943395的博客 255

小智AI音箱蓝牙Mesh组网实战

本文深入解析蓝牙Mesh技术原理与架构,涵盖协议栈、发布/订阅模型、安全密钥体系及小智AI音箱的组网实践,介绍配网、中继、代理功能配置与优化,结合智能家居场景实现设备联动与OTA升级。

weixin_42393362的博客 1323

Qoder + ADB Supabase :5分钟GET超火AI手办生图APP

本文介绍如何利用Qoder、阿里云 ADB Supabase 和通义千问图像编辑模型,快速构建AI手办生图Flutter应用。无需传统后端,通过AI生成代码、BaaS服务与边缘函数调用,实现从原型到上线的敏捷开发,全流程轻量高效,助力Vibe Coding落地实践。

数据库技术 931

智能音箱蓝牙Mesh组网语音控制案例

本文系统阐述了智能音箱集成蓝牙Mesh网络实现语音控制的技术架构与实践路径,涵盖通信机制、协议栈解析、语音识别、组网部署及性能优化,结合主流厂商案例揭示从指令接收到设备响应的全链路实现逻辑,并展望边缘AI与Matter协议融合的未来方向。

weixin_34547628的博客 1015

三、STM32F103ZET6最小系统

stm32最小系统除去主控CPU外,需要包含,电源电路,复位电路,BOOT电路,时钟电路(因为stm32有内置时钟,对时钟要求不高的话,可以不要)。NRST引脚其实芯片已经用一个约40K的电阻上拉了,所以理论上来说是不需要再外接上拉电阻的,但我看大家都是有外接上拉的,心里没有底,不管这么多,先预留着。吃过亏,特意查看了芯片手册资料,下图是官方建议的供电方案,图片来自stm32f103zet6数据手册。首先明白目标,单纯的学习软件知识并不是我希望的,我还希望会硬件设计,这样后面才能摆脱开发板。

sevendecsdn的博客 6450

FDTD材料nk值拟合优化指南:利用材料资源管理器提升光学模型精度

本文详细介绍了如何利用FDTD仿真软件中的材料资源管理器,对材料nk值进行精确拟合与优化,从而提升光学模型的仿真精度。文章通过实战案例,解析了拟合参数调整、报告解读以及针对varFDTD求解器的特殊注意事项,帮助用户从根本上解决仿真结果不准的常见问题。

weixin_29196891的博客 352

JDY-24M模块基本使用说明(主从透传、MESH组网、BLE等数据传输)

  JDY-24M 超级蓝牙功能支持主从透传,iBeacon,BLE 探针,iBeacon 探测,MESH 组网,MESH 组网数量最大支持 65280 设备组网,采用多跳无线防碰撞技术,组网通信速度支持 50ms发 12 字节数据,单模块支持路由节点与终端节点,路由节点支持数据中继(不支持低功耗),终端节点支持低功耗(按键唤醒发完数据后自动睡眠),JDY-24M 组网一般只需要配置好组网 NETID、MADDR 短地址后,模块将会自动组网,组网模块与 APP 通信时相当于透传,这样极大的方便用户开发 AP

优信电子的博客 2354

一文详解数据仓库、数据湖、湖仓一体和数据网格

本文对数据仓库、数据湖、湖仓一体、数据网格四个技术概念进行了辨析,并对它们的优势和局限给出了对比介绍。

oOBubbleX的博客 2593
上一篇: Android 网络编程(三) 浅谈HttpURLConnection
下一篇: Android面试资料整理
谦行
博客等级 码龄11年 182粉丝 35原创
评论 16
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值