- 博客(35)
- 收藏
- 关注
原创 蓝牙学习之通过OP CODE解析输入输出数据
摘要:日志记录显示网关(0x0001)向设备(0x0004)发送了操作码1d80(0x801D)的配置指令,该指令对应蓝牙Mesh标准中的ConfigModelSubscriptionDeleteAll命令,用于清空设备的GenericOnOffServer(0x1000)模型订阅列表。设备成功响应(0x1F80)确认操作完成。解析过程通过SDK头文件和蓝牙Mesh规范文档确认了操作码与字段定义的一致性,并解释了小端序数据的实际含义,包括源/目的地址、模型标识符等关键字段的解析方法。(149字)
2026-04-15 16:19:35
232
原创 蓝牙学习之APP的Group控制
摘要:本文介绍了蓝牙Mesh网络中的地址类型及其应用。地址类型包括未分配地址(0x0000)、单播地址(0x0001-0x7FFF)、虚拟地址(0x8000-0xBFFF)和组地址(0xC000-0xFFFF)。其中组地址分为用户自定义区域(如客厅地址0xD001)和系统预留地址(如全屋控制0xFFFF)。文中还展示了具体的通信示例,包括配置模型订阅(0x1B80)、状态反馈(0x1F80)以及开关控制(0x0382)等操作码的使用,演示了如何通过地址和操作码实现设备间的控制和状态同步。
2026-03-17 13:43:15
66
原创 蓝牙学习之APP设置亮度色温
摘要:蓝牙Mesh网络中,Node代表完整节点,Element是节点内的操作元素。Node地址唯一,Element地址可多个且连续,首地址与Node地址相同。多Element用于区分相同状态控制,如插座多个插孔或色温灯的不同参数控制。组网时Provisioner分配地址,色温灯需2个Element分别控制亮度和色温,HSL灯需3个。色温范围为800-20000K,亮度控制通过特定指令实现百分比调节。文中提供了具体指令格式和参数示例,展示如何设置不同色温和亮度值。
2026-02-27 09:46:24
510
原创 蓝牙学习之发送 Secure Network beacon
MeshSecureNetworkbeacon是蓝牙Mesh网络中的安全广播包,主要用于网络状态同步。其核心功能包括:1)通过NetworkID标识合法网络成员;2)同步IVIndex防止重放攻击;3)通过Flags字段通告IV更新和密钥刷新状态。该数据包包含NetworkID哈希、IVIndex和认证值等关键信息,格式遵循蓝牙Mesh规范1.1版本。对应的设置API为mesh_tx_sec_nw_beacon(),确保全网节点保持安全参数同步,防止通信中断和安全漏洞。
2026-02-10 16:16:15
351
原创 蓝牙学习之发送 Mesh Proxy ADV
本文介绍了Bluetooth Mesh组网成功后发送可连接广播包的关键函数set_adv_proxy()。该函数用于生成包含networkID和node identity的广播数据,供GATT proxy client发现和连接。文章详细说明了函数实现逻辑,包括设置广播包类型、MAC地址和有效载荷数据,并给出了数据格式示例。广播包数据结构rf_packet_adv_t包含DMA长度、RF头部、地址和31字节数据域。最后展示了实际广播数据样例,其中包含服务数据、Mesh代理UUID、类型和NetworkID等
2026-02-10 14:50:42
99
原创 蓝牙学习之发送 Unprovisioned Device beacon
本文介绍了未组网设备发送广播包的机制。设备通过unprov_beacon_send()API发送不可连接的UnprovisionedDeviceBeacon广播包,用于ADV-basedProvisioner发现设备并启动配网流程。该API将数据压入mesh_adv_cmd_fifo队列,在app_advertise_prepare_handler()中检查并发送。广播包包含24字节数据,包括设备UUID、OOB信息和URI哈希值。同时设备会交替发送可连接的MeshProvisioningService广播
2026-02-10 14:05:46
100
原创 蓝牙学习之发送 Mesh Provisioning Service advertising
本文介绍了MeshProvisioningService广播机制,用于未组网设备通过BLE广播被发现。主要内容包括: 该服务通过set_adv_provision()API设置广播数据,包含0x1827服务UUID标志 数据格式包含标志位、服务UUID列表和配网服务数据 设备会交替发送可连接广播(供GATT配网器发现)和不可连接广播(供ADV配网器发现) 该服务实现PB-GATT协议,用于传输配网过程中的PDU数据 详细说明了广播数据包结构和相关API实现逻辑 (字数:149字)
2026-02-09 17:11:25
128
原创 蓝牙学习之发送自定义广播包
本文介绍了蓝牙Mesh网络中自定义广播包的发送方法。通过设置BEACON_ENABLE=1并注册广播包发送回调函数,开发者可以修改广播包内容。文章详细说明了如何构造类似BYDBLE3的广播包结构,包括设置标志位、UUID列表和本地名称等字段。同时提供了通过clock_time_exceed控制广播间隔的方法,并演示了如何构造不同类型的广播包(如iBeacon、Eddystone等)。最后解释了Manufacturer Specific Data(ADType=0xFF)的作用,这是BLE协议为厂商预留的自定
2026-02-07 10:21:29
381
原创 蓝牙学习之Time Set
摘要:蓝牙标准文档通过手机广播设置时间参数,其中0x60表示UTC+8时区(中国标准时间)。通过Python验证,TAI时间(国际原子时)与UTC时间的转换考虑了37秒的闰秒差。示例1(0x20E5369D)显示2017年TAI时间需减去37秒得到UTC时间,而示例2(0x310c7786)因TAI-UTC差为0,直接转换为北京时间(UTC+8)2026-01-28 15:30:14,与串口日志时间[15:30:14.526]完全吻合。验证了蓝牙时间广播的准确性和时区转换机制。
2026-01-28 17:07:24
326
原创 蓝牙学习之Provision(7)bind (2)
本文介绍了蓝牙Mesh网络中CompositionData的核心作用及其在设备配网后的获取过程。详细解析了ConfigAppKeyAdd操作(OpCode 0x00)实现AppKey与NetKey绑定的机制,以及Telink SDK中Model-AppKey绑定的实现方式(OpCode 0x803D/0x803E)。通过日志分析展示了从元素地址0x0002开始,逐步将HealthServer(0x0002)、GenericOnOffServer(0x1000)等11个标准模型和1个厂商模型(0x1102)与
2026-01-21 09:01:19
392
原创 蓝牙学习之Provision(7)bind (1)
摘要: 在蓝牙Mesh网络中,设备配网后需绑定AppKey才能处理应用层指令。绑定过程涉及将AppKey与特定Model关联,未绑定的Model会丢弃应用消息。文中详细解析了绑定命令结构(如fast_bind标志、AppKey索引及值),并展示了设备返回的Composition Data,包含支持的Model列表(如Generic OnOff Server、Light Lightness Server等)及位置信息(0x0000表示未指定位置)。该流程确保设备能正确响应加密的应用消息,是Mesh网络功能实现
2026-01-16 17:33:30
425
原创 蓝牙学习之Provision(6)Provison Complete
摘要:设备配网完成后,网关会上报节点信息(NODE_INFO)和配网事件(PROVISION_EVT)。NODE_INFO包含设备地址(0x0002)、元素数量(2个)、保留字段和16字节DeviceKey(用于加密配置消息)。PROVISION_EVT包含配网状态(成功)、设备地址、6字节MAC地址和16字节UUID(用于设备识别)。网关还会将网络信息(包括NetKey、AppKey、设备列表等)打包成JSON格式上报,其中包含设备的详细信息如UUID、MAC地址、DeviceKey、单播地址、安全特性、
2026-01-16 14:19:57
258
原创 蓝牙学习之Provision(5)PB-ADV provisioning sample data 数据检证
本文演示了使用Python cryptography库实现ECDH密钥交换的过程。代码展示了如何从十六进制格式的密钥构造P-256曲线上的公私钥对象,并执行ECDH计算。双方生成的共享密钥一致且符合预期值。同时验证了公钥点确实位于SECP256R1曲线上。文章特别指出,虽然密码学实现正确,但在蓝牙LE安全连接和Mesh配网场景中,规范要求必须使用Y坐标为偶数的公钥进行DHKey计算,以确保协议一致性。这一限制会影响配对确认值、长期密钥生成等安全流程的实现。
2026-01-16 11:43:18
159
原创 蓝牙学习之Provision(4)
摘要:蓝牙Mesh配网流程中的关键认证步骤包括随机数交换和确认值验证。设备收到ProvisioningRandom后,会使用该随机数结合ConfirmationKey和AuthValue重新计算确认值,并与之前收到的ProvisioningConfirmation进行比对验证。配网过程中会分配设备地址(如0x0002),并通过加密的ProvisioningData传输网络密钥和配置信息。设备解密数据后验证MIC,提取NetKey、单播地址和IVIndex,派生DevKey,最终发送ProvisioningC
2026-01-15 16:37:47
191
原创 蓝牙学习之Provision(3)
摘要:该文档描述了蓝牙Mesh配网流程中的公钥交换和认证阶段。首先,网关(GATEWAY)与设备(IUT)通过ProvisioningStart消息协商安全参数,使用ECDH算法交换临时ECC密钥对(P-256曲线)。双方依次发送ProvisioningPublicKey消息交换公钥,生成共享密钥。随后进入认证阶段,虽然未启用MITM防护,但仍执行标准的ProvisioningConfirmation交换流程。网关和IUT分别计算并交换16字节Confirm值,该值通过AES-CMAC算法基于共享密钥、随机
2026-01-15 14:33:51
423
原创 蓝牙学习之Provision(2)
摘要:本文分析了telink sigmesh工具通过网关为蓝牙设备配网的过程。配网流程包括Provisioning Invite、Capabilities和Start三个阶段:1) Invite阶段发送0x00指令停止Attention过程;2) Capabilities阶段设备上报支持FIPS P-256椭圆曲线等参数;3) Start阶段确认使用FIPS P-256算法且不带外认证。整个过程遵循Bluetooth Mesh规范,涉及网络密钥、IV索引等安全参数的配置,最终为设备分配0x0002单播地址。
2026-01-12 16:43:53
460
原创 蓝牙学习之Provision(1)
AppKey 的分发 属于 Configuration Server Model 的操作(见 Section 4.3.2),通过 Config AppKey Add 消息完成,且必须在设备已配网后进行。设备只有在成功完成 Provisioning、获得 NetKey 并能解密网络层数据后,才有资格接收 AppKey。以上是网关给自己设置配置信息的流程,通过网关给其他蓝牙设备配网在下一章节说明。
2026-01-09 14:26:40
749
原创 蓝牙学习之unprovision beacon
摘要:本文分析了Telink SIG Mesh工具中未配置设备信标(Unprovisioned Device Beacon)的解析过程。当网关扫描到未配置设备时,会以特定格式上报数据,包含设备MAC地址和信标信息。信标数据包含类型标识、设备UUID、OOB认证信息和URI哈希值。重点验证了URI哈希的计算方法,通过Python实现AES-CMAC算法,计算结果与Telink SDK示例一致,证明其符合Mesh规范标准。URI哈希通过全零密钥的AES-CMAC运算生成,并取结果前4字节作为最终哈希值。
2026-01-07 13:46:51
838
原创 蓝牙学习之uuid与mac
摘要:Telink SDK中deviceuuid作为设备唯一标识,通过MAC地址和预定义命名空间UUID生成。实现方式包括uuid_create_by_mac()和uuid_create_md5_from_name()函数,采用UUIDv3标准(基于MD5)。MAC地址由前3字节随机数和后3字节固定值(如8258芯片为38C1A4)组成,存储在Flash 0x76000地址。实际生成的UUID与Python计算结果存在差异,表明SDK可能包含未公开的特殊处理逻辑。
2026-01-06 15:41:35
494
原创 蓝牙学习之亮度调节
蓝牙Mesh协议中定义了两种亮度设置方式:LIGHTNESS_SET(0x4C82)和LIGHTNESS_LINEAR_SET(0x5082)。前者采用Gamma校正,符合人眼感知(50%亮度值为0x8000);后者采用物理线性亮度(70%亮度值为0xB504),适用于自动化控制。实验显示,相同数值下两种方式的实际亮度不同,验证了SET面向用户调光,LINEAR面向机器计算的特性差异。过渡时间采用特殊编码格式,支持从300ms到20分钟的范围设定。
2025-12-30 17:29:08
762
原创 python学习之串口通信
本文介绍了一个Python串口通信Demo的实现。该程序使用PySimpleGUI构建界面,具备自动扫描可用串口功能,支持配置波特率(默认9600)、数据位(8位)、校验位(偶校验)和停止位(1位)等参数。核心功能包括:通过serial库实现串口通信,支持发送16进制数据,但接收数据需要主动读取或改用多线程/异步库。程序还预留了JSON配置文件接口(未完全实现),提供了端口扫描、恢复默认设置等实用功能。代码结构清晰,通过事件驱动方式处理用户操作,适合作为串口通信的基础开发框架。
2025-12-25 11:51:25
309
原创 蓝牙学习之广播信号“BYD BLE3“解析
摘要:通过蓝牙扫描发现名为BYD BLE3的设备,分析其广播数据包含LE-only标志、自定义128位服务UUID(含BYD AUTO标识)和厂商特定数据。该设备极可能是比亚迪第三代蓝牙数字车钥匙系统,使用私有制造商ID(0x3494)和自定义UUID实现车钥匙功能,其中部分字段可能用于唯一性验证。
2025-12-19 11:57:02
2013
原创 Python学习之使用pycharts
本文介绍了一个使用Python生成交互式图表的脚本。该脚本通过读取Excel文件(charts_demo.xlsx)中的数据,利用PyEcharts库创建包含多种可视化选项的HTML图表(page_simple_layout.html)。脚本从Excel中提取横纵坐标数据(G3单元格作为图表标题),支持生成柱状图/折线图切换,并提供保存图片功能。图表采用简洁布局,支持数据缩放和主题设置,最终输出为可交互的网页文件。
2025-12-17 14:40:29
486
原创 Python学习之使用笔记本摄像头截屏
该程序实现了一个简单的摄像头截图功能。使用OpenCV库(cv2)调用摄像头,实时显示画面。用户可通过两种方式退出:1)按Q键截图并保存为当前目录下的photo.jpg文件;2)点击窗口右上角关闭按钮退出程序。程序会先检测摄像头是否可用,若无法打开则提示错误信息。运行后,摄像头画面会显示在名为Camera的窗口中,截图成功后控制台会显示照片已保存的提示。
2025-12-15 17:37:47
353
原创 Python学习之计算当前文件夹大小
本文介绍了一个Python脚本,用于计算当前目录下所有文件的总大小。主要功能包括:1.使用os.walk()遍历目录下的所有文件并统计大小;2.提供进度条显示扫描过程;3.支持字节到KB/MB/GB的自动转换;4.采用PySimpleGUI创建可视化界面。程序会忽略FutureWarning警告,并建议后期可通过多线程优化性能。用户界面包含路径显示、扫描按钮、进度条和容量显示区域,点击扫描按钮即可计算并显示当前目录总大小。
2025-12-15 13:16:34
162
原创 Python学习之文件后缀批量转换
本文介绍了一个使用Python和PySimpleGUI实现的批量文件后缀转换工具。该程序通过图形界面让用户选择原格式和新格式(支持mp4、mkv等多种常见格式),提供"交换"按钮快速切换格式选项,点击"执行转换"即可批量修改当前目录下所有匹配文件的后缀名。核心功能通过os模块的rename方法实现,操作简单高效,适合需要批量修改文件后缀的场景。
2025-12-12 17:35:41
140
原创 谷歌浏览器规避DNS污染的方法
访问网站时出现"ERR_ADDRESS_INVALID"错误提示,建议更换DNS服务器为Cloudflare(1.1.1.1)来解决连接问题。该错误通常是由于网址无效或网站已迁移导致的网络连接故障。
2025-12-02 08:48:34
162
原创 RS-485信号解析
这次来看看RS-485信号使用绿联的USB转RS485模块。线用的颜色不对,类型也不对,实际使用中请用带屏蔽层的双绞线示波器CH1是R-(B)示波器CH2是R+(A)RS485电平 由于两者均采用 差分传输(平衡传输)的方式,所以他们的电平方式,一般有两个引脚 A,B发送端 AB间的电压差。+2 ~ +6v 表示1-2 ~ -6v 表示0接收端 AB间的电压差大于 +200mv表示1小于 -200mv表示0定义逻辑0为B>A的状态定义逻辑1为A&
2021-07-21 21:03:25
9085
1
原创 2021-07-21 蓝牙Mesh时间设置
最近研究蓝牙mesh设置时间时发现手机发送的时间戳有点奇怪。[LIB]:rcv access layer,retransaction:0,ttl:10,src:0x0001,dst:0xffff op:0x005c,par_len:10,par:fa 08 84 28 00 00 00 00 00 60[LIB]:mesh tx NoAck,op:0x5d,src:0x0026,dst:0x0001,par_len:10 par:fa 08 84 28 00 00 00 00 00 60opco
2021-07-21 20:55:14
813
原创 python遍历当前目录找到所有的文件夹并计算每个文件夹占用空间
#*****************************************************# 遍历当前目录找到所有的文件夹并计算每个文件夹占用空间#*****************************************************import osimport datetime #-------------------------------------------------------------# getFileFolderSize 使用网上分.
2021-01-10 21:05:42
595
原创 如何使用Python对Json数据做增删改查排序操作
如何使用Python对Json数据做增删改查排序操作我一直认为GUI界面对用户更加友好,所以用pysimplegui简单做了一下界面,如下图:Python创建图形用户界面(GUI graphical user interface),推荐PySimpleGUI。理由:我们很多时候只是想有个界面罢了,并不太在乎美观程度,也不希望花太多时间去专门学习一个 GUI 库,因为我们有太多需要学习的了。那么 PySimpleGUI 是非常好的选择。安装方法:pip install pysimplegu
2020-08-18 23:23:57
2858
原创 UART与TTL
一.首先UART和TTL完全就是两码事。UART是通用异步收发传输器(Universal Asynchronous Receiver/Transmitter,通常称作UART) 是一种串行异步收发协议。TTL电平信号规定,+5V等价于逻辑“1”,0V等价于逻辑“0”(采用二进制来表示数据时)。这样的数据通信及电平规定方式,被称做TTL(晶体管-晶体管逻辑电平)信号系统。这是计算机处理器控制的设备内部各部分之间通信的标准技术。TTL集成电路的全名是晶体管-晶体管逻辑集成电路(Transistor-
2020-08-10 10:26:06
17777
原创 Qt天气助手
Qt学习后自己实践下的产物(Qt5.9.2)主要功能:1.运行后在屏幕右上方显示。2.隐藏标题栏,自定义退出按钮。3.通过网络获取天气信息。4.解析JSON格式的天气信息。效果图:Qt5.9.2可直接运行的源码地址在github:https://github.com/darkershadow/Qt.git点击打开链接...
2018-03-05 14:53:50
712
原创 SIMCom芯片关于GPS定位信息的的解析(AT+CGNSINF)
SIMCom用户手册里的关于AT+CGNSINF的返回值的解释:AT+CGNSINF return ParametersIndex Parameter Unit Range Length1 GNSS run status -- 0-1 12 Fix status -- 0-1 13 UTC dat...
2018-02-11 15:37:52
8409
3
原创 把时间戳转换成16进制BCD码或字符串(直接复制黏贴即可)
把时间戳转换成16进制BCD码:1518335905转换成0x20180211155825或"20180211155825"亲测可直接使用#include <stdio.h>#include <time.h>#include <stdint.h>#include <unistd.h>#include <stdio.h>#incl...
2017-06-27 09:49:58
6715
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅