Arduino 101蓝牙低功耗(BLE)数据发送实战:从核心概念到手机端调试
1. 项目概述为什么Arduino 101的蓝牙值得你花时间如果你手头有一块Arduino/Genuino 101开发板并且已经点亮了LED、读过了传感器那么恭喜你是时候解锁它最酷的特性之一了板载蓝牙低功耗BLE。很多新手拿到这块板子可能只把它当作一个更快的Arduino Uno来用这实在是有点“暴殄天物”。它的核心价值就在于那颗集成的Intel Curie模块原生支持BLE 4.1。这意味着你不需要额外购买HC-05、HM-10这类串口蓝牙模块也不用处理复杂的接线和AT指令就能直接让设备无线“开口说话”。这个教程要解决的就是把101板子采集到的数据比如温度、光线强度、按钮状态通过蓝牙稳定、可靠地发送到你的手机或电脑上。这不仅仅是点对点传输更是物联网IoT的敲门砖。想想看一个自制的温湿度计数据能实时显示在手机App上或者一个遥控小车用手机就能直接控制。这些项目的核心通信链路就是今天要搭建的。整个过程会涉及Arduino编程、BLE协议的基本概念以及手机端或电脑端的调试工具使用。无论你是想做个智能家居原型还是单纯想玩转无线通信这篇手把手的指南都会帮你绕过我当初踩过的那些坑直达目标。2. 硬件与软件环境准备别在第一步就卡住开始写代码之前确保你的“战场”已经打扫干净。硬件上很简单你只需要一块Arduino/Genuino 101开发板和一根Micro-USB数据线。软件方面则有几个关键点需要注意特别是Arduino IDE的版本和库的安装。2.1 Arduino IDE的版本与板卡支持包安装首先我强烈建议你使用Arduino IDE 1.8.x 版本而不是最新的2.0版本。虽然IDE 2.0界面更现代化但在对Arduino 101的支持上1.8.x系列经过多年迭代更加稳定可靠社区资源也大多基于此版本。很多在2.0上遇到的诡异问题换回1.8.x就迎刃而解了。安装好IDE后你需要安装Arduino 101的板卡支持。打开IDE依次点击“工具” - “开发板” - “开发板管理器...”。在弹出窗口的搜索框中输入“Intel Curie”。你应该会看到一个名为“Intel Curie Boards by Intel”的条目点击并安装它。这个过程会下载必要的编译工具链和核心库包括我们今天要用的蓝牙库。安装时间取决于你的网络速度请耐心等待。安装完成后再次点击“工具” - “开发板”现在你应该能在列表里找到“Arduino/Genuino 101”并选中它。同时检查一下“端口”选项确保你的101板子通过USB连接后对应的COM口Windows或/dev/tty.usbmodemxxxMac/Linux被正确选中。2.2 理解101的板载蓝牙与外接模块的本质区别这里有一个非常重要的概念需要厘清它能帮你避免后续很多困惑。Arduino 101的蓝牙是板载集成、原生支持BLE的。它与我们常见的、需要通过TX/RX引脚连接的HC-05蓝牙模块有本质区别协议不同101使用BLE蓝牙低功耗主打低功耗、间歇性数据传输适合传感器上报HC-05多是经典蓝牙Bluetooth Classic常用于持续音频流或大量数据传输。编程接口不同对于101你使用专门的BLE库如CurieBLE进行编程操作的是“服务”、“特征值”这些BLE概念。对于HC-05你通常是用SoftwareSerial库把它当成一个无线串口来读写发送AT指令配置。功耗与成本101的BLE功耗更低而外接模块需要额外成本和接线。所以当你搜索“Arduino 蓝牙发送数据”时看到的很多教程是关于HC-05的那些代码不能直接用在101上。你必须寻找明确标注“Arduino 101 BLE”或“CurieBLE”的教程。我们今天用的正是CurieBLE库它已经随着板卡支持包一起安装好了。3. BLE核心概念快速入门服务、特征值与你在写代码前花五分钟理解BLE的基本模型会让后面的所有操作都变得清晰。你可以把BLE设备这里就是你的101板子想象成一个提供信息的“服务器”Peripheral而手机或电脑则是“客户端”Central来读取信息。这个“服务器”提供多种“服务”Service每个“服务”代表一个独立的功能领域比如“电池信息服务”、“心率测量服务”。每个“服务”下包含若干个“特征值”Characteristic这才是实际存放数据的地方。比如在“环境传感服务”下可能有一个“温度特征值”和一个“湿度特征值”。“特征值”有几个关键属性值Value就是你要发送的数据本身比如一个整数、一个字符串。属性Properties定义了客户端能对这个值做什么。最常用的有BLEWrite客户端可以写入数据到设备控制设备。BLERead客户端可以读取设备的数据获取传感器值。BLENotify设备可以在数据变化时主动“通知”客户端这是实现实时推送的关键。UUID一个128位的唯一标识符用来区分不同的服务和特征值。为了简化蓝牙技术联盟SIG定义了一些标准的16位UUID比如0x180A代表设备信息服务。我们也可以自定义UUID。在我们的项目里101板子将创建一个自定义服务其中包含一个具有BLERead和BLENotify属性的特征值。这样手机端既可以随时读取当前数据也能在数据更新时自动收到通知。4. 从零编写BLE数据发送程序理论铺垫完毕现在打开Arduino IDE我们开始写一个完整的示例程序。这个程序会让101板子创建一个BLE设备广播一个服务并定期比如每2秒更新一个特征值模拟发送传感器数据。4.1 程序骨架与库引入首先在代码开头引入必要的库并定义一些常量。#include CurieBLE.h // 定义自定义服务的UUID。你可以用在线UUID生成器生成这里为了演示使用一个简单的。 // 注意通常自定义UUID格式为 XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX但CurieBLE库也接受简短的格式。 #define SERVICE_UUID 19B10000-E8F2-537E-4F6C-D104768A1214 #define CHARACTERISTIC_UUID 19B10001-E8F2-537E-4F6C-D104768A1214 // 实例化BLE对象 BLEPeripheral blePeripheral; // 创建一个服务 BLEService customService(SERVICE_UUID); // 创建一个特征值属性为可读BLERead和可通知BLENotify BLECharacteristic dataCharacteristic(CHARACTERISTIC_UUID, BLERead | BLENotify, 4); // 最后一个参数4表示这个特征值最多容纳4个字节 // 模拟的传感器数据 int sensorValue 0;关键点解析#include CurieBLE.h这是使用101蓝牙功能的基石。BLEPeripheral代表101板子本身作为一个BLE外设。BLEService和BLECharacteristic分别创建我们自定义的服务和特征值。BLECharacteristic的构造函数中第三个参数4很重要。它设定了这个特征值“值”的最大字节长度。这里设为4是因为我们打算发送一个int类型的数据在Arduino上通常是2字节但为了兼容性留足空间。如果你要发送更长的字符串需要调整这个大小。4.2 Setup函数初始化与广播配置在setup()函数中我们需要完成BLE的初始化和广播设置。void setup() { Serial.begin(9600); // 初始化串口用于调试输出 while (!Serial); // 等待串口连接对于某些板子需要 Serial.println(Starting BLE Peripheral...); // 1. 设置BLE设备的本地名称这个名称会被手机扫描到 blePeripheral.setLocalName(MyArduino101); // 2. 设置设备的“广播名称”Advertised Name通常与本地名一致 blePeripheral.setAdvertisedServiceUuid(customService.uuid()); // 3. 为设备添加我们创建的服务 blePeripheral.addAttribute(customService); // 4. 为服务添加特征值 customService.addAttribute(dataCharacteristic); // 5. 初始化特征值的初始值 dataCharacteristic.setValue(sensorValue); // 6. 开始广播等待手机等中心设备连接 blePeripheral.begin(); Serial.println(BLE Peripheral started, waiting for connections...); }操作意图与避坑点setLocalName和setAdvertisedServiceUuid这两个调用决定了你的设备在手机蓝牙扫描列表里显示为什么以及携带了什么服务信息。名字起得直观一些方便识别。addAttribute这一步非常关键必须按照“设备-添加服务-服务添加特征值”的层级关系来操作。忘记添加特征值到服务是导致手机端看不到数据或无法读写的常见原因。begin()调用这个方法后板子才开始真正广播蓝牙信号。在这之前手机是扫描不到它的。4.3 Loop函数维持连接与更新数据loop()函数是程序的主循环在这里我们需要维持BLE连接并模拟数据更新和发送。void loop() { // 1. 监听BLE中心设备的连接事件 BLECentral central blePeripheral.central(); // 如果有设备连接上了 if (central) { Serial.print(Connected to central: ); Serial.println(central.address()); // 当连接保持时 while (central.connected()) { // 模拟传感器数据变化例如读取A0引脚 // sensorValue analogRead(A0); // 为了演示我们用一个递增的计数器 sensorValue; if (sensorValue 1000) sensorValue 0; // 防止溢出 // 2. 更新特征值的数值 dataCharacteristic.setValue(sensorValue); // 3. 重要对于 Notify 属性更新值后客户端会自动收到通知。 // 对于只有 Read 属性的特征则需要客户端主动来读。 Serial.print(Sensor value updated to: ); Serial.println(sensorValue); // 通过串口打印出特征值当前的原始字节用于高级调试 // const unsigned char* rawData dataCharacteristic.value(); // for (int i 0; i dataCharacteristic.valueLength(); i) { // Serial.print(rawData[i], HEX); // Serial.print( ); // } // Serial.println(); delay(2000); // 每2秒更新一次数据 } // 当设备断开连接时 Serial.print(Disconnected from central: ); Serial.println(central.address()); } }核心逻辑与经验技巧blePeripheral.central()这个调用是非阻塞的它会立即返回。如果有设备连接或断开它会返回对应的BLECentral对象否则返回一个未连接的状态。所以它必须放在loop中持续检查。central.connected()这是一个非常实用的方法用于在连接保持期间执行你的主业务逻辑如读取传感器、更新数据。setValue()这是发送数据的核心。它接受多种类型的参数如int,float,char*等库函数会帮你处理字节转换。但你需要确保创建特征值时指定的最大字节数足够容纳你的数据。Notify机制的优势我们为特征值设置了BLENotify属性。这意味着一旦我们调用setValue更新了数据所有订阅了此特征值通知的客户端都会立刻自动收到新数据。这比让客户端不断轮询Read要高效和实时得多是传感器数据上报的首选方式。调试串口代码中的Serial.print语句至关重要。它们是你了解程序运行状态的“眼睛”。通过串口监视器你可以确认设备是否启动、是否被连接、数据是否在更新。如果手机端收不到数据首先检查串口输出是否正常。5. 手机端测试与数据接收实战代码上传到101板子后它就开始广播名为“MyArduino101”的蓝牙设备了。接下来我们需要一个“客户端”来连接它并读取数据。最方便的工具就是手机App。5.1 通用BLE调试App的选择与使用在手机应用商店搜索“BLE Scanner”或“蓝牙调试器”会有很多选择。iOS上如“LightBlue Explorer”Android上如“nRF Connect”或“BLE调试助手”都是非常强大且免费的工具。它们的界面可能不同但核心操作流程一致扫描打开App点击扫描Scan。你应该能在设备列表里找到“MyArduino101”。连接点击你的设备名称进行连接。发现服务连接成功后App会列出设备提供的所有服务。找到我们自定义的UUID对应的服务19B10000-E8F2-537E-4F6C-D104768A1214或者有时App会直接显示“Unknown Service”因为UUID不是标准化的。查看特征值点击进入该服务你会看到其下的特征值列表。找到我们定义的CHARACTERISTIC_UUID19B10001-...。读取与订阅通知读取Read点击“Read”按钮App会立即读取一次特征值的当前数据并以十六进制Hex或十进制Decimal等形式显示。你应该能看到一个不断变化的值对应我们程序里的sensorValue。订阅通知Notify/Indicate找到“Subscribe”或“Enable Notification”之类的开关打开它。这是关键一步打开后你不需要再手动点击“Read”App界面上的数据就会自动、实时地更新与我们loop函数中每2秒的setValue同步。注意手机App显示的数据通常是十六进制字节流。比如我们的sensorValue是整数500在内存中可能是两个字节0x01 0xF4小端序。一些高级的App可以让你选择解析格式如“16-bit Integer Little Endian”选择正确后就能直接显示“500”。如果显示的是乱码或奇怪的数字先确认你解析的格式是否正确。5.2 数据格式解析与常见问题排查当你成功收到数据但显示“不对”时问题通常出在数据格式的解析上。Arduino端和手机端必须对数据的“解释方式”达成一致。Arduino端发送了什么在我们的例子里dataCharacteristic.setValue(sensorValue)发送的是一个int型变量。在Arduino 101上int占2个字节16位。它是以“小端序”Little-Endian存储在内存中的即低字节在前高字节在后。例如十进制500十六进制0x01F4发送的字节序列是F4 01。手机端如何解析原始十六进制查看这是最可靠的方式。在App里查看原始的Hex值如果看到类似F4 01这样每2秒变化一次的数据流说明通信本身完全正确。选择解析器在App中找到数据展示区域附近的设置选择正确的数据类型。对于我们的2字节整数应选择“16-bit Integer”或“Short Integer”并注意字节序。尝试“Little Endian”小端序如果显示的值是500、501、502...那就对了。如果选择“Big Endian”大端序可能会显示一个很大的错误数字如0xF401 62465。如果收不到任何数据检查串口输出首先确认Arduino程序运行正常串口监视器显示“BLE Peripheral started”以及后续的连接和数据更新信息。检查手机蓝牙权限确保手机App已获得定位或蓝牙权限在Android上蓝牙扫描需要定位权限。重启蓝牙有时关闭手机蓝牙再重新打开或重启App能解决临时性问题。检查UUID确认手机App里连接的服务和特征值UUID与代码中定义的完全一致一个字符都不能差。检查特征值属性确保代码中创建特征值时包含了BLENotify属性并且手机端成功开启了通知订阅。6. 进阶应用发送更复杂的数据与稳定化技巧掌握了基础的数据发送后我们可以尝试更实用的场景发送浮点数、多个数据打包以及让连接更稳定。6.1 发送浮点数与结构化数据传感器数据常常是浮点数比如float temperature 25.6;。你不能直接setValue(temperature)因为setValue对float的重载可能会因库版本不同而有问题。最稳妥的方式是将数据转换为字节数组再发送。float temperature 25.6; float humidity 60.5; // 创建一个足够大的字节数组 byte dataBuffer[8]; // 两个float每个4字节共8字节 // 使用memcpy将浮点数的内存拷贝到缓冲区 memcpy(dataBuffer, temperature, 4); memcpy(dataBuffer 4, humidity, 4); // 更新特征值注意创建时最大长度要设为8或更大 dataCharacteristic.setValue(dataBuffer, 8);在手机端你需要知道这个8字节的数组前4个字节是一个小端序的float后4个字节是另一个float并使用相应的工具或代码来解析。对于简单的调试你可以选择在Arduino端先将浮点数转换为字符串发送手机端直接显示文本。char strBuffer[20]; sprintf(strBuffer, %.1f,%.1f, temperature, humidity); dataCharacteristic.setValue(strBuffer); // 发送字符串如 25.6,60.56.2 连接稳定性优化与功耗浅析在实际项目中无线连接可能不稳定。以下是一些提升鲁棒性的技巧连接事件处理我们的示例代码在loop中检测连接。更健壮的做法是在连接建立和断开时执行一些初始化和清理工作比如连接后打开传感器断开后关闭传感器以省电。广播参数调整高级CurieBLE库允许你调整广播间隔等参数这会影响设备被发现的快慢和功耗。但这部分API可能不直接暴露通常默认值已足够。心跳与超时在while (central.connected())循环内除了发送数据可以添加一个简单的“心跳”机制比如每10秒通过串口打印一条信息确认循环还在运行。如果长时间没有数据更新可以检查传感器是否异常。关于功耗BLE本身是低功耗的但Arduino 101的Curie模块在运行时的整体功耗相比专门的低功耗MCU如nRF52840还是要高一些。对于电池供电的长期监测项目需要考虑让MCU在数据发送间隙进入睡眠模式。这涉及到更底层的Curie芯片电源管理超出了本入门教程范围但它是产品化路上必须考虑的一环。7. 从调试到应用下一步可以做什么当你成功在手机App上看到来自101板子的实时数据流时这个入门项目就完成了。但这仅仅是起点。你可以尝试连接真实传感器将代码中的sensorValue替换为analogRead(A0)或digitalRead()连接一个光敏电阻、温湿度传感器如DHT11需用数字引脚和库或按钮发送真实的世界数据。开发专属手机App使用MIT App Inventor图形化简单、React Native或Flutter跨平台甚至原生Android/iOS开发编写一个定制化的App用更友好的界面图表、仪表盘展示数据并增加控制功能如发送指令控制101板上的LED。连接物联网平台让101板子将数据通过WiFi网关或直接使用ESP32这类带WiFi的板子更简单上报到阿里云、腾讯云或自建的MQTT服务器实现真正的远程监控。实现双向通信为特征值添加BLEWrite属性。这样手机App就可以向特征值写入数据例如发送一个命令字符串“LED_ON”101板子在代码中监听特征值的写入事件并解析命令来控制硬件。我个人的体会是玩转Arduino 101的蓝牙最难的不是写代码而是建立对BLE通信模型的正确理解以及掌握有效的调试方法。一旦打通了第一个“Hello World”级别的数据流后面各种想法的实现就只是时间和耐心的问题了。多利用串口打印日志耐心分析手机端收到的原始字节数据这两个习惯能帮你解决90%的通信问题。

相关新闻

从C语言文件管理系统到Linux装NAS:开发者的自建存储之路

从C语言文件管理系统到Linux装NAS:开发者的自建存储之路

开发者论坛里的一次讨论 “用易语言写个内网穿透软件难不难?”这是某开发者社区里一个常见问题。回答区里的思路大致分两派:一派认为易语言上手快,做个简单的端口映射工具并不复杂;另一派则提醒,稳定的内网穿透涉及NAT…

2026/7/29 14:57:02阅读更多 →
Matlab实现电动车充电负荷优化与削峰填谷策略

Matlab实现电动车充电负荷优化与削峰填谷策略

1. 项目背景与核心价值 去年参与某充电站运营项目时,我亲眼目睹了晚高峰时段变压器过载跳闸的窘境。当30辆电动车同时开启快充,630kVA的配电设备在持续报警15分钟后彻底罢工。这个价值47万的教训让我意识到:无序充电就像没有交通灯的十字路口…

2026/7/29 14:57:02阅读更多 →
Design Token 单一真源:从 Figma 变量到代码的工程化同步

Design Token 单一真源:从 Figma 变量到代码的工程化同步

Design Token 单一真源:从 Figma 变量到代码的工程化同步 一、设计稿与代码的漂移:Token 治理的工程痛点 在多人协作的前端工程中,"设计稿与代码不一致"是高频出现的协作债务。设计师在 Figma 中定义了一组颜色变量(如 …

2026/7/29 14:57:02阅读更多 →
免费开源RPA工具taskt:3小时掌握桌面自动化的完整指南

免费开源RPA工具taskt:3小时掌握桌面自动化的完整指南

免费开源RPA工具taskt:3小时掌握桌面自动化的完整指南 【免费下载链接】taskt taskt (pronounced tasked and formely sharpRPA) is free and open-source robotic process automation (rpa) built in C# powered by the .NET Framework 项目地址: https://gitcod…

2026/7/29 16:17:20阅读更多 →
如何永久保存微信聊天记录:5步完整数据留痕指南

如何永久保存微信聊天记录:5步完整数据留痕指南

如何永久保存微信聊天记录:5步完整数据留痕指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeChatMsg …

2026/7/29 16:17:20阅读更多 →
网盘直链下载助手终极指南:9大网盘免客户端下载全攻略

网盘直链下载助手终极指南:9大网盘免客户端下载全攻略

网盘直链下载助手终极指南:9大网盘免客户端下载全攻略 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼…

2026/7/29 16:17:20阅读更多 →
智慧水利数字化转型,别忽略数字孪生渲染的核心价值

智慧水利数字化转型,别忽略数字孪生渲染的核心价值

智慧水利数字化转型进程中,数字孪生完成流域、水库、灌区实体的数字化复刻,支撑预报、预警、预演、预案全业务闭环。大量项目落地反馈显示,三维场景卡顿、弱网画面模糊、多终端并发受限等可视化问题,会直接削弱数字孪生的调度研判…

2026/7/29 16:17:20阅读更多 →
法务总监私藏工具箱曝光:用这6个开源+商用AI合同生成器,年省律师费超86万元

法务总监私藏工具箱曝光:用这6个开源+商用AI合同生成器,年省律师费超86万元

更多请点击: https://codechina.net 第一章:AI合同模板生成的法律与技术双重视角 AI驱动的合同模板生成正迅速从实验性工具演变为企业法务与IT部门协同落地的关键基础设施。其核心价值不仅在于提升起草效率,更在于弥合法律严谨性与技术可扩展…

2026/7/29 16:17:20阅读更多 →
Durand-Kerner算法详解:高效求解多项式全部根的数值方法

Durand-Kerner算法详解:高效求解多项式全部根的数值方法

1. 项目概述:从“求根”到“找全根”的算法挑战 在数值计算和工程仿真领域,多项式求根是一个古老而基础的问题。无论是控制系统分析中的特征方程,还是信号处理中的滤波器设计,亦或是计算机图形学中的曲线求交,最终都可…

2026/7/29 16:15:19阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/29 9:47:45阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/29 7:00:19阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/29 7:58:51阅读更多 →
28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“! 在构建复杂的 Agent 系统时,我们经常会遇到这样的场景:Agent 正在执行一个多步骤的任务,比如“下单购买商品”,但执行到一半时,我们…

2026/7/29 0:01:46阅读更多 →
自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

近日,国际专注开放式技术研发的声学品牌Nank南卡,正式官宣实力艺人曾舜晞担任品牌代言人。消息一经发出便轰动全网。为什么耳机品牌不选择流量明星、老牌歌手?而且是选择曾舜晞?让我们一起来探索一下!比起短期的流量&a…

2026/7/29 0:01:46阅读更多 →
【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:01:46阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/28 20:22:24阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/29 4:31:51阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/29 14:26:42阅读更多 →