当前位置: 首页 > article >正文

DS18B20单总线温度传感器在CircuitPython中的实战应用指南

1. 项目概述与单总线协议的价值如果你正在用像Adafruit Feather M0 Express或Raspberry Pi Pico这类小巧的板子做项目需要测量温度DS18B20绝对是一个绕不开的经典选择。我这些年做过不少环境监测、智能家居的小玩意儿从鱼缸水温到3D打印机热床DS18B20出场率极高。它最吸引人的地方就是那套“单总线”协议。简单来说只用一根数据线外加电源和地线就能让多个传感器“排队”向你的主控板汇报数据。这听起来有点神奇一根线怎么又能发指令又能收数据其核心就像是一个严格的“点名问答”系统。主控板老师发出一个特定的时序脉冲点名总线上的每个DS18B20学生都有一个全球唯一的64位ROM ID学号。主控通过这唯一的ID就能精准地和指定的传感器“对话”读取其温度数据。这种设计带来的直接好处就是布线极其简洁特别适合传感器分散布置的场景比如你要在温室的不同角落、机房的多台机柜里同时测温用单总线能省下大量的连线和GPIO口。DS18B20本身是一个“数字”传感器这意味着它内部已经集成了模数转换器ADC。它感知到的温度在芯片内部就直接被转换成了一个12位的数字量然后通过那根单总线以严格的时序波形发送出来。你拿到手的就是摄氏度数值完全不需要像老式的热敏电阻或模拟温度传感器那样再去折腾ADC读取、计算电压、查表换算。精度方面在-10°C到85°C的常用范围内它能做到±0.5°C对于绝大多数非精密工业场合这已经绰绰有余。更实用的是它支持“寄生供电”模式理论上只需要接数据和地两根线数据线在特定时序下“偷电”但为了稳定性我强烈建议新手还是老老实实接上三根线VCC GND DATA和一个上拉电阻这是最稳妥的方案。2. 硬件准备与电路连接详解2.1 核心元件选型与作用要玩转DS18B20你得先认识手头的家伙。市面上常见的DS18B20主要有三种形态选哪种取决于你的应用场景TO-92封装直插式最常见像一个三极管价格最便宜。适合安装在空气流通的电路板或小空间内比如检测机箱内部气温。防水探头式传感器头被密封在不锈钢管里引出一段防水线缆通常红、黄、黑三线。这是我用得最多的型号直接扔水里测水温、埋土里测土壤温度非常皮实。注意它的线缆长度和封装质量决定了耐温范围和长期稳定性普通款别长期用于沸水。高温探头式专为高温环境设计比如测量热风枪出口、小型熔炉附近温度线材和封装更耐热。无论哪种形态其电气接口本质都是一样的VDD电源正极、DQ数据线、GND电源负极。对于TO-92封装引脚顺序平面朝向自己从左至右通常是GND DQ VDD。除了传感器另一个至关重要的配角是4.7kΩ的上拉电阻。这是单总线协议正常工作的“生命线”。因为单总线是开漏Open-Drain输出这意味着DS18B20的数据引脚只能主动把电平拉低到GND而不能主动拉高到VCC。当它不拉低时数据线处于“浮空”状态电平不确定会导致主控读取错误。这个4.7kΩ电阻接在数据线DQ和电源VCC 通常是3.3V之间它的作用就是提供一个弱上拉确保在总线空闲时数据线被稳定地拉到高电平。很多集成模块或防水探头已经内置了这个电阻购买时一定要确认。如果没有你必须自己外加一个阻值在4.7kΩ到10kΩ之间都可以4.7kΩ是标准推荐值通信最稳定。2.2 电路连接实战与避坑指南连接电路本身非常简单但细节决定成败。我们以最通用的3.3V系统如绝大多数CircuitPython开发板和TO-92封装传感器为例标准三线接法推荐:GND传感器左引脚- 开发板的GND引脚。DQ传感器中引脚- 开发板的某个GPIO引脚例如board.D5。VDD传感器右引脚- 开发板的3.3V输出引脚。4.7kΩ电阻一端接在DQ线上即开发板GPIO引脚连接点另一端接在3.3V线上。如果你用的是防水探头线序通常是黑线(GND) 黄线或白线(DQ) 红线(VCC)。务必用万用表通断档确认一下不同厂家可能略有差异。注意电源质量是稳定读数的基础。如果你的开发板通过USB供电且线缆较长或连接了多个外设3.3V输出可能会有波动。一个简单的判断方法是在代码中连续读取温度如果偶尔出现-127°C传感器初始化失败或剧烈跳变很可能是电源问题。解决方法给开发板的VIN引脚提供更稳定的5V输入或者在传感器的VCC和GND之间并联一个10-100µF的电解电容可以很好地平滑电压毛刺。关于引脚选择理论上任何支持数字输入输出的GPIO都可以。但要避开那些有特殊启动功能的引脚例如某些板子的GPIO0、GPIO2可能用于启动模式判断。选择像D5D6这样“普通”的引脚最省心。另外虽然单总线支持多个传感器挂在同一引脚但初次调试时强烈建议只接一个传感器排除地址冲突的干扰。3. CircuitPython环境配置与库安装3.1 固件更新与库管理逻辑在连线之前确保你的开发板运行着最新版本的CircuitPython固件。Adafruit团队对核心驱动和库的更新非常活跃新版本往往修复了旧版的兼容性问题并提升了性能。去Adafruit官网找到你的板子型号下载最新的.uf2文件按住板子上的复位键或BOOT键进入UF2引导模式将文件拖入出现的U盘即可完成刷写。CircuitPython的魅力在于它像一个真正的U盘。刷写成功后电脑上会出现一个名为CIRCUITPY的驱动器。你的代码文件如code.py或main.py和依赖的库都放在这里。库文件需要放在CIRCUITPY驱动器下的lib文件夹内。Adafruit提供了一个庞大的“CircuitPython Library Bundle”里面包含了几乎所有传感器和模块的驱动库。你需要做的不是下载整个Bundle而是从中精准提取我们需要的两个库adafruit_onewire和adafruit_ds18x20.mpy。为什么是两个库这是一种清晰的架构分层。adafruit_onewire是底层协议库它实现了单总线通信的时序、设备搜索Scan等基础操作负责“如何通过一根线聊天”。而adafruit_ds18x20是设备驱动库它基于onewire库实现了DS18B20以及同系的DS18S20等特有的命令集和数据处理负责“聊天时具体问什么、答案怎么解读”。这种设计使得adafruit_onewire库可以被其他单总线设备如DS2413开关复用。3.2 库文件安装的具体操作步骤访问Adafruit CircuitPython Library Bundle的GitHub发布页面。下载对应你CircuitPython版本号的最新“Bundle”压缩包通常是.zip格式。解压这个压缩包。在解压后的文件夹里找到lib子文件夹。从lib文件夹中找到并复制整个adafruit_onewire文件夹。同样在lib文件夹中找到并复制adafruit_ds18x20.mpy文件注意是.mpy文件不是文件夹。打开电脑上的CIRCUITPY驱动器如果里面没有lib文件夹就新建一个。将复制的adafruit_onewire文件夹和adafruit_ds18x20.mpy文件粘贴到CIRCUITPY/lib/目录下。完成后你的CIRCUITPY驱动器的目录结构应该类似这样CIRCUITPY/ ├── lib/ │ ├── adafruit_onewire/ │ │ ├── __init__.mpy │ │ ├── bus.py │ │ └── ... │ └── adafruit_ds18x20.mpy ├── code.py └── ...注意.mpy文件是经过编译的MicroPython字节码可以节省内存和提升加载速度。对于adafruit_onewire这种包含多个子模块的库必须复制整个文件夹以保持其内部结构完整。直接复制.py文件或破坏文件夹结构会导致导入失败提示“No module named adafruit_onewire”。4. 代码实战从扫描设备到稳定读取4.1 初始化总线与设备发现一切就绪后打开串行终端如Mu编辑器、Thonny或VS Code with Serial Monitor连接到你的开发板你会看到提示符。我们一步步在REPL里交互式测试这是排查问题最快的方式。首先导入必要的模块并初始化总线。假设你的传感器数据线接在了D5引脚。import board import time from adafruit_onewire.bus import OneWireBus # 初始化单总线指定数据引脚 ow_bus OneWireBus(board.D5)这里OneWireBus(board.D5)创建了一个单总线对象它将会控制D5引脚按照严格的单总线时序发出信号。接下来最关键的步骤是扫描总线上的设备。这个操作会向总线上发送复位脉冲和搜索ROM命令所有连接的DS18B20都会响应并返回其唯一的64位ROM ID。devices ow_bus.scan() print(找到的设备数量:, len(devices)) for device in devices: print(ROM ID:, [hex(i) for i in device.rom]) print(设备系列码:, hex(device.family_code))ow_bus.scan()返回一个设备对象列表。每个设备的rom属性是一个包含8个整数的列表共64位通常我们以十六进制查看。family_code对于DS18B20来说应该是0x28。如果你看到输出是0x10那可能是老款的DS18S20。实操心得扫描失败排查三步法。如果scan()返回空列表[]别慌按顺序检查1.电源与接地用万用表量一下传感器VCC和GND之间电压确保在3.0V-3.6V之间。2.上拉电阻确认4.7kΩ电阻是否可靠连接在数据线和3.3V之间。可以临时换一个10kΩ电阻试试。3.接触不良面包板连接、杜邦线接头是故障高发区用手轻轻按压各连接点看扫描结果是否会偶尔出现。我遇到过无数次因为一根杜邦线内部断裂导致的问题。4.2 传感器对象创建与温度读取扫描到设备后我们就可以针对具体的设备创建温度传感器对象了。from adafruit_ds18x20 import DS18X20 # 使用扫描到的第一个设备创建传感器对象 ds18 DS18X20(ow_bus, devices[0])DS18X20类会自动识别设备是DS18B20还是DS18S20并调用相应的温度转换命令。现在读取温度就一行代码temperature_c ds18.temperature print(f当前温度: {temperature_c:.2f} °C).temperature属性是一个float类型的摄氏度值。每次访问这个属性库函数实际上在背后执行了一个“启动温度转换 - 等待转换完成 - 读取暂存器”的完整流程所以你直接拿到的是最新的温度值。关于分辨率设置DS18B20的温度转换分辨率可调9 10 11 12位默认是12位。分辨率越高转换精度越高12位时可达0.0625°C但转换时间也越长最长达750ms。分辨率越低转换越快9位时仅93.75ms但精度也越低0.5°C。你可以通过resolution属性读写print(当前分辨率位:, ds18.resolution) # 默认应为12 ds18.resolution 9 # 设置为9位分辨率转换更快 print(设置后分辨率:, ds18.resolution)在需要快速采样的场合比如每秒读取多次降低分辨率可以显著提升系统响应速度。但要注意改变分辨率后下一次.temperature读取才会生效并且转换时间立即变化。5. 完整应用示例与高级技巧5.1 单传感器循环监测代码解析把上面的代码片段组合起来并加上循环和延时就构成了一个完整的温度监测程序。将以下代码保存为CIRCUITPY驱动器根目录下的code.py板子就会自动运行。# SPDX-FileCopyrightText: 2020 ladyada for Adafruit Industries # SPDX-License-Identifier: MIT # 单DS18B20温度监测示例 import time import board from adafruit_onewire.bus import OneWireBus from adafruit_ds18x20 import DS18X20 # 初始化单总线 ow_bus OneWireBus(board.D5) # 扫描设备取第一个 try: devices ow_bus.scan() if not devices: raise RuntimeError(未找到单总线设备请检查接线和上拉电阻。) ds18 DS18X20(ow_bus, devices[0]) print(f传感器初始化成功ROM: {[hex(i) for i in devices[0].rom]}) except Exception as e: print(f初始化失败: {e}) while True: pass # 出错后停在这里 # 主循环 while True: try: temp_c ds18.temperature # 转换为华氏度如需 # temp_f temp_c * 9 / 5 32 print(f温度: {temp_c:.3f} °C) # print(f温度: {temp_f:.2f} °F) except Exception as e: print(f读取温度时出错: {e}) time.sleep(2.0) # 每2秒读取一次这段代码增加了异常处理这是产品化项目中必不可少的。单总线通信易受干扰偶尔的读取失败是正常的好的程序应该能捕获这些异常并继续运行或者至少给出明确的错误提示而不是整个崩溃。5.2 多传感器管理与地址识别实战单总线最大的优势之一是一线多机。你可以把多个DS18B20并联在同一个数据引脚上。每个传感器有唯一的ROM ID这就是它们的“地址”。代码上只需要在初始化时为每个设备创建独立的DS18X20对象即可。# 假设总线上挂了三个传感器 ow_bus OneWireBus(board.D5) devices ow_bus.scan() print(f找到 {len(devices)} 个设备) sensors [] for i, dev in enumerate(devices): sensor DS18X20(ow_bus, dev) sensors.append(sensor) print(f传感器{i}: ROM {[hex(x) for x in dev.rom]}) # 循环读取所有传感器 while True: for i, sensor in enumerate(sensors): print(f传感器{i} 温度: {sensor.temperature:.2f} °C) print(- * 20) time.sleep(5.0)如何管理一堆难以记忆的ROM ID在实际项目中你不可能每次看一串十六进制数来区分哪个传感器在哪个位置。标准的做法是首次部署时进行地址登记。你可以写一个简单的脚本在传感器安装到位后运行一次打印出每个传感器的ROM ID并人工记录其物理位置如“ROM: [0x28, 0xaa, 0x...] 对应 客厅鱼缸”。然后在你的主程序中可以创建一个映射字典sensor_location { tuple([0x28, 0xaa, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc]): 客厅鱼缸, tuple([0x28, 0xbb, 0x34, 0xcd, 0xfe, 0x12, 0x45, 0x67]): 阳台花盆, # ... 其他传感器 } # 初始化时根据ROM ID找到对应位置的传感器对象 for dev in devices: rom_tuple tuple(dev.rom) location sensor_location.get(rom_tuple, 未知位置) print(f初始化 {location} 的传感器)6. 常见问题排查与性能优化6.1 典型错误与解决方法速查表问题现象可能原因排查步骤与解决方案ow_bus.scan()返回空列表[]1. 电源未接通或电压不足2. 上拉电阻未接或接错3. 数据线接触不良4. GPIO引脚配置错误1. 用万用表测量传感器VCC与GND间电压确保≥3.0V。2. 确认4.7kΩ电阻一端接数据线一端接3.3V。3. 摇晃并检查所有连接点尝试更换杜邦线或引脚。4. 确认代码中board.D5与实际接线引脚一致。读取温度值为-127°C85°C或0°C1. 电源不稳定或电流不足多个传感器时2. 总线受到强干扰3. 传感器损坏1. 在传感器VCC和GND间并联一个47-100µF电解电容。2. 缩短数据线长度远离电机、继电器等干扰源。3. 尝试更换一个已知好的传感器。-127°C通常是转换错误85°C和0.0°C可能是上电默认值。温度读数偶尔跳跃剧烈1. 电气噪声干扰2. 寄生供电模式功率不足3. 软件读取间隔太短未等转换完成1. 在数据线上靠近MCU端加一个100pF的小电容到GND滤波。2.务必使用外部电源三线接法避免寄生供电。3. 确保两次读取间隔大于传感器转换时间12位分辨率时需750ms。多传感器时只能识别到一个1. 传感器ROM ID冲突极其罕见2. 总线驱动能力不足1. 分别单独连接每个传感器记录其ROM ID看是否真的相同。2. 尝试将上拉电阻阻值减小如从4.7kΩ换为2.2kΩ增强总线驱动能力。导入库时提示ModuleNotFoundError1. 库文件未正确放置2. 库文件版本与CircuitPython不兼容1. 确认lib文件夹内存在adafruit_onewire文件夹和adafruit_ds18x20.mpy文件。2. 从官方Bundle下载与你的CircuitPython固件版本号匹配的库。6.2 提升稳定性与精度的工程经验长导线传输当传感器距离主控板较远超过10米时信号衰减和干扰会成为问题。除了降低波特率单总线协议本身速率不高约16kbps可以采取1) 使用双绞线网线中的一对连接数据线和地线能有效抑制共模干扰。2) 在接收端MCU侧的数据线对地之间增加一个100Ω电阻串联一个100pF电容的RC低通滤波电路。3) 考虑使用RS-485等总线转换器进行长距离传输将单总线信号转换为差分信号。降低功耗对于电池供电项目DS18B20在静止状态下功耗约1µA几乎可忽略。但温度转换时峰值电流可达1.5mA。优化点在于1) 使用ds18.start_temperature_conversion()和ds18.read_temperature()组合而不是直接读.temperature属性。这样可以先启动所有传感器的转换然后让MCU进入睡眠等待转换完成后再统一读取最大化MCU休眠时间。2) 降低分辨率到9位转换时间从750ms缩短到94ms也减少了高功耗时间。软件去抖动与滤波即使硬件没问题读数也可能有轻微波动。一个简单的软件滤波方法是移动平均滤波。维护一个最近N次读数的列表每次取平均值作为输出。readings [] # 存储历史读数 window_size 5 # 窗口大小 while True: current_temp ds18.temperature readings.append(current_temp) if len(readings) window_size: readings.pop(0) # 移除最旧的读数 filtered_temp sum(readings) / len(readings) print(f原始: {current_temp:.2f}°C, 滤波后: {filtered_temp:.2f}°C) time.sleep(1)对于需要快速响应的场景如温控开关可以结合中值滤波取几次读数的中间值来剔除偶然的野值。最终关于精度校准DS18B20出厂精度典型值为±0.5°C。如果你需要更高的绝对精度可以进行单点校准。找一个你认为可靠的温度计如酒精温度计和DS18B20一起置于稳定的温度环境如冰水混合物约0°C同时记录两者的读数计算出一个偏移量Offset在后续读数中软件补偿这个偏移量。注意DS18B20的非线性误差很小单点校准在常用温区通常是足够的。

相关文章:

DS18B20单总线温度传感器在CircuitPython中的实战应用指南

1. 项目概述与单总线协议的价值如果你正在用像Adafruit Feather M0 Express或Raspberry Pi Pico这类小巧的板子做项目,需要测量温度,DS18B20绝对是一个绕不开的经典选择。我这些年做过不少环境监测、智能家居的小玩意儿,从鱼缸水温到3D打印机…...

ESP32一键安装CircuitPython与Wi-Fi配置:Web串口技术实战指南

1. 项目概述:告别繁琐,一键搞定ESP32固件与网络配置如果你玩过ESP32、ESP32-S3这类微控制器,肯定对固件烧录这个步骤不陌生。传统的流程是什么?先去官网下载对应板型的.bin或.uf2文件,然后打开一个专用的烧录工具&…...

基于Adafruit FunHouse与MQTT构建响应式智能家居传感节点

1. 项目概述:从零构建一个响应灵敏的智能家居传感节点如果你手头有一块像Adafruit FunHouse这样的开发板,上面集成了温湿度、气压传感器,还有几个物理按钮和滑块,你可能会想,怎么才能让它真正“活”起来,成…...

避坑指南:STM32CubeMX配置高级定时器PWM时,时钟源、ARR重载和DMA传输的那些坑

STM32高级定时器PWM配置实战:从时钟陷阱到DMA优化的深度解析 引言 深夜的实验室里,示波器上跳动的波形总是不尽如人意——这可能是许多嵌入式开发者使用STM32高级定时器输出PWM时的共同经历。不同于基础定时器,高级定时器(如TIM1/…...

别再凭感觉选电感了!深入拆解Bulk电路中电感与电容的选型计算(以12V转5V为例)

别再凭感觉选电感了!深入拆解Bulk电路中电感与电容的选型计算(以12V转5V为例) 在电源设计领域,Bulk电路(又称Buck电路)作为最常见的降压型DC-DC转换拓扑,其性能优劣直接决定了整个系统的稳定性和…...

如何快速清理Mac残留文件:免费开源工具终极指南

如何快速清理Mac残留文件:免费开源工具终极指南 【免费下载链接】Pearcleaner A free, source-available and fair-code licensed mac app cleaner 项目地址: https://gitcode.com/gh_mirrors/pe/Pearcleaner 你是否曾经遇到过这样的困扰?明明已经…...

SteamVR Unity插件实战:解决VR开发中的三大核心挑战

SteamVR Unity插件实战:解决VR开发中的三大核心挑战 【免费下载链接】steamvr_unity_plugin SteamVR Unity Plugin - Documentation at: https://valvesoftware.github.io/steamvr_unity_plugin/ 项目地址: https://gitcode.com/gh_mirrors/st/steamvr_unity_plug…...

手把手教你用TMS320F2803x DSP实现PMBus通信(附代码下载与避坑指南)

TMS320F2803x DSP实战:PMBus通信从零搭建到波形调试全攻略 1. 工程搭建与开发环境配置 在开始PMBus通信开发前,需要准备完整的软硬件环境。以下是基于TI C2000系列DSP的典型配置流程: 硬件准备清单: TMS320F2803x开发板&#xff0…...

LabVIEW虚拟仪表:数据流编程与测控应用的核心交互范式

1. 项目概述:为什么虚拟仪表是LabVIEW的灵魂如果你用过LabVIEW,或者哪怕只是看过它的界面,第一印象大概率是那些花花绿绿的旋钮、开关、仪表盘和波形图。很多人觉得这就是LabVIEW的“皮肤”,一个为了让程序看起来像真实仪器而做的…...

告别‘屎山’代码:手把手教你阅读和复用《饥荒》官方Lua源码来开发Mod

从《饥荒》源码到高效Mod开发:解锁官方Lua代码的实战指南 当你在深夜调试第37个宠物AI的bug时,是否想过游戏开发者早已为你准备好了完美解决方案?《饥荒》的官方Lua源码就像一座未被充分发掘的金矿,里面藏着Klei工程师们精心设计的…...

PSoC时钟系统深度解析:从架构原理到配置避坑指南

1. 项目概述:为什么PSoC的时钟值得你花时间研究?如果你刚开始接触Cypress(现Infineon)的PSoC系列微控制器,可能会觉得它的开发环境PSoC Creator功能强大但有点复杂。在众多需要配置的模块里,时钟系统往往是…...

谷歌 5 月算法大更新|独立站必看

2026年5月11日至15日,Google完成了本月核心算法的全面推送。这场覆盖全球搜索生态的更新,没有冗长的预热,却在上线后迅速引发跨境SEO、独立站运营、内容创作者群体的剧烈震动。本次更新是Google继3月核心算法后,对搜索质量体系的又…...

硬件安全漏洞披露与静态侧信道攻击防御实践

1. 漏洞披露流程与行业实践在硬件安全研究领域,负责任披露(Responsible Disclosure)是研究人员发现关键漏洞后的标准操作流程。以我们团队发现的AMD和Microchip芯片漏洞为例,完整披露过程通常包含以下关键阶段:漏洞确认…...

Hi3516DV300鸿蒙时钟应用开发:从环境搭建到驱动调试全流程

1. 项目概述:从零到一,在Hi3516DV300上跑通一个鸿蒙时钟最近在捣鼓OpenHarmony,手头正好有一块海思的Hi3516DV300开发板。这块板子性能不错,带屏显,很适合做点有意思的应用。我琢磨着,与其跑个现成的Demo&a…...

Beam Search不是训练用的!搞懂它在NLP模型评估中的正确打开方式

Beam Search在NLP模型评估中的正确实践指南 当你在调试一个文本生成模型时,是否遇到过这样的困惑:训练时指标表现优异,实际生成时却频频输出不连贯的句子?这往往源于对序列生成任务中关键环节——推理阶段解码策略的误解。许多开发…...

别再乱用nn.Flatten了!详解start_dim与end_dim参数,避坑数据维度混淆

深度解析PyTorch中的nn.Flatten:从参数误区到实战应用 在深度学习模型的构建过程中,数据维度的处理往往成为许多开发者容易忽视却又至关重要的环节。特别是当我们需要将卷积层的输出传递给全连接层时,nn.Flatten操作几乎成为了标准配置。然而…...

百度网盘直链解析工具:告别限速,3分钟实现全速下载!

百度网盘直链解析工具:告别限速,3分钟实现全速下载! 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘那令人抓狂的下载速度而…...

OpenClaw用户指南,如何正确配置Taotoken作为其大模型供应商

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 OpenClaw用户指南,如何正确配置Taotoken作为其大模型供应商 对于使用OpenClaw这类Agent框架的开发者来说,接…...

BG3 Mod Manager终极指南:如何轻松管理《博德之门3》模组

BG3 Mod Manager终极指南:如何轻松管理《博德之门3》模组 【免费下载链接】BG3ModManager A mod manager for Baldurs Gate 3. This is the only official source! 项目地址: https://gitcode.com/gh_mirrors/bg/BG3ModManager 你是否曾经因为《博德之门3》模…...

将 Hermes Agent 工具连接到 Taotoken 自定义模型提供方

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 将 Hermes Agent 工具连接到 Taotoken 自定义模型提供方 Hermes Agent 是一款功能强大的 AI 智能体开发工具,它支持通过…...

ESP32S3驱动1.3寸圆形AMOLED屏(RM67162芯片)的完整避坑指南:从SPI配置到LVGL局部刷新修复

ESP32S3驱动1.3寸圆形AMOLED屏(RM67162芯片)全流程实战:从SPI配置到LVGL优化 这块1.3寸圆形AMOLED屏幕以其出色的显示效果和独特的外形设计,在智能穿戴设备和小型嵌入式项目中越来越受欢迎。然而,当它与ESP32S3开发板结…...

《数据挖掘》读书笔记系列(一):大数据时代与数据挖掘概述

---title: 《数据挖掘》读书笔记系列(一):大数据时代与数据挖掘概述categories: 数据挖掘tags: 数据挖掘, 机器学习, 读书笔记cover: ---## 📚 关于本书> **书名**:《数据挖掘》 > **作者**:吕欣>…...

你的嵌入式数据记录仪方案:基于STM32CubeMX+FATFS+SD卡存储传感器数据(CSV格式实战)

嵌入式数据记录仪实战:STM32CubeMXFATFSSD卡构建工业级CSV存储方案 在工业物联网和智能硬件开发中,可靠的数据记录功能往往是产品核心价值所在。想象一下温室大棚的环境监控系统需要连续记录温湿度数据三个月,或者电力设备振动监测装置要在无…...

FPGA新手必看:用Verilog手搓一个SPI Master控制器(Mode 0/3实战)

FPGA实战:从零构建SPI Master控制器的Verilog实现指南 1. 初识SPI协议与FPGA开发环境搭建 对于刚接触FPGA和数字电路设计的工程师来说,SPI(Serial Peripheral Interface)协议是一个理想的起点。这种同步串行通信协议广泛应用于传感…...

新手首次使用 Taotoken 从注册到完成第一个 API 调用的完整指南

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 新手首次使用 Taotoken 从注册到完成第一个 API 调用的完整指南 本文旨在为初次接触 Taotoken 的开发者提供一份清晰的入门指引。我…...

科技赋能林草防火,合规筑牢生态屏障—— 杭兴智能 XHJK‑5000 / HXJK‑6000 系列智慧宣传杆适配 LY/T 2798‑2025 标准实践

森林草原是我国重要的生态资源,守护林草安全、防范火灾风险,是生态文明建设的关键一环。随着《森林草原防灭火条例》深入实施与林业行业标准化建设持续推进,传统人工巡护、静态标语、零散警示等方式,已难以满足新时期 “预防为主、…...

英雄联盟个性化改造神器:3分钟打造专属游戏身份

英雄联盟个性化改造神器:3分钟打造专属游戏身份 【免费下载链接】LeaguePrank 项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrank 还在为千篇一律的英雄联盟个人资料感到乏味吗?想要在好友面前展示与众不同的游戏身份却苦于官方限制&…...

【教育研究者的AI外脑】:NotebookLM如何72小时内重构文献综述工作流?

更多请点击: https://codechina.net 第一章:【教育研究者的AI外脑】:NotebookLM如何72小时内重构文献综述工作流? 教育研究者长期面临文献爆炸与认知过载的双重压力:平均每位博士生需精读300篇中英文文献,…...

内网手机远程桌面:解锁高效协同的数字密钥

在数字化办公与生活深度融合的当下,人们对于信息获取与设备操控的便捷性需求持续攀升。当我们身处内网环境,却渴望随时随地操控远端的电脑设备,内网手机远程桌面技术便如同一把精准的数字密钥,打破空间与网络的束缚,为…...

Trae日志占用很大解决方法(Windows)Trae日志占用、Trae logs删除、Trae缓存清理、Trae占用C盘、Trae AppData 清理

Trae日志占用很大解决方法(Windows) 关键词:Trae日志占用、Trae logs删除、Trae缓存清理、Trae占用C盘、Trae AppData 清理最近清理电脑磁盘时,发现 C 盘莫名其妙少了十几个 G。作为长期写代码的人,我第一反应就是&…...