JDY18蓝牙透传模块从接线到手机实测:串口透传与AT指令避坑指南
简介JDY18使用例子是一份面向BLE蓝牙应用开发者的实践示例包重点演示JDY18模块与外部设备通信的两种常用方式。资源包含串口通信与IIC通信两个完整C语言示例压缩包内共2个源文件整体仅4KB结构清晰、便于快速移植到物联网或嵌入式项目中。串口示例覆盖串口初始化、数据发送接收、中断驱动与错误检测处理适合无线透传场景IIC示例则从协议时序、设备寻址、主从通信模式到读写操作逐步展开帮助理解JDY18作为主设备与传感器等从设备的交互过程。通过这两个示例读者可以掌握BLE低功耗蓝牙模块的实际配置方法与调试思路直接参考源码完成基础通信功能。目前已有1366人学习适合正在开发基于BLE的物联网产品、希望借助JDY18快速实现无线数据交换的嵌入式开发者。1. JDY18使用例子从串口到手机一块透传模块的前半小时第一次拿到 JDY18多数人手里就是一块带邮票孔的小板子默认波特率 9600接上电手机就能在蓝牙列表里搜到它。这块模块的任务非常单一把串口上收到的字节原封不动搬到蓝牙对端再把对端发来的内容原样吐回串口。所以 JDY18 使用例子的核心就是搞清楚两条线怎么接、AT 指令怎么发、数据从哪进又从哪出。这个方向特别适合两类人一类是刚接触蓝牙透传、想快速给传感器数据加一条无线通道的开发者另一类是把 JDY18 塞进硬件 Demo需要低成本搞定无线配参和日志输出的个人开发者。新手按下面这套流程走一个晚上能跑通整条链路老手可以直接跳到避坑那一章看透传丢包和 AT 指令不回应的边界条件。2. JDY18 接线与 AT 指令最小系统先让模块开口说话JDY18 本质上是一个蓝牙 SoC 加上晶振和天线匹配电路外部只需要电源和一组串口就能工作。它的工作方式是典型的串口透传手机侧把它当成一个蓝牙串口设备单片机侧把它当成一个普通 UART 外设。选它的理由很实际价格低、默认配置可用、AT 指令改参数方便、主从模式能覆盖点对点和一主多从的场景。这一章先把最小硬件系统搭起来再用 AT 指令让模块“开口说话”。刚上电的模块就是一块白板所有行为都由串口发过去的指令决定所以接线和指令格式这两件事必须先做对。2.1 JDY18 引脚定义与最小接线四根线就够了JDY18 的引脚不算多真正跑通透传只需要 VCC、GND、TXD、RXD 四根线另外两个引脚在做状态检测和深度休眠控制时才会用到。先记住一个原则单片机发送数据到模块的 RXD模块回数据从 TXD 出来所以两边一定是交叉连接。下面是最常用的引脚功能新手第一次接线就照着这张表来引脚方向作用接线目标VCC输入模块电源接 3.3V 或 5V推荐 3.3VGND输入电源地与单片机共地必须接TXD输出模块串口发送接单片机 RXDRXD输入模块串口接收接单片机 TXDEN输入使能/唤醒引脚悬空即可默认开启STATE输出连接状态指示可接 LED配对成功后拉高接线时最容易翻车的地方是交叉连接被忽略。用 USB 转 TTL 小板调试时小板的 TXD 要接模块 RXD小板的 RXD 接模块 TXD直连的话模块永远收不到数据。另外 VCC 的电压选择有个玄学JDY18 的板载稳压能承受一定范围的输入但 5V 供电时模块发热明显长时间跑透传我一般直接给 3.3V电平匹配也更干净。模块的 TXD 引脚输出的是 3.3V 电平接 5V 单片机 RX 时虽然多数情况能识别但稳妥起见加一颗分压电阻更保险。USB 转 TTL 小板的推荐接线顺序是先接 GND再接 VCC最后接 TXD 和 RXD。带电插拔串口线偶尔会把模块 RXD 脚打坏尤其 USB 转 TTL 小板刚从电脑拔下来还带着电荷的时候。上电后观察模块上的 LED慢闪表示已经进入可配对状态这一步确认了硬件最小系统就算通了。2.2 用串口助手发 AT 指令配置名字、波特率与主从模式模块通电后第一件事不是写单片机代码而是用串口助手发几个 AT 指令确认通信没问题。JDY18 的 AT 指令格式和常见的蓝牙透传模块类似每条指令以回车换行结尾模块收到后返回 OK 或 ERR。注意这里有个普遍坑指令结尾必须有换行串口助手里要勾选“发送新行”否则模块一直不响应。我用串口助手“发新行”发下面这几条指令验证模块状态也可以直接用 Python 脚本走一遍后面写自动化配置时要用import serial import time ser serial.Serial(COM3, 9600, timeout1) time.sleep(1.5) # 模块上电后需要时间完成初始化 ser.write(bAT\r\n) # 测试指令返回 OK 说明链路通 time.sleep(0.5) print(ser.read_all().decode()) ser.write(bATNAMEJDY18-DEV\r\n) # 修改蓝牙广播名 time.sleep(0.5) print(ser.read_all().decode()) ser.close()这段代码的作用很简单打开串口、等模块初始化、发一条 AT 测试指令再发一条改名字的指令。参数说明里有两个点最容易出问题一是time.sleep(1.5)不能省模块上电后串口还没准备好时发的指令会被丢掉血泪经验是刚上电就发指令大概率返回空二是ATNAME后面直接跟名字不要加等号JDY18 这类模块的指令格式和某些带等号格式的模块不同发错就回 ERR。改波特率用的指令是ATBAUD加编号比如ATBAUD4对应 9600ATBAUD7对应 115200。不同固件版本对编号的定义不完全统一我一般先保持默认 9600 跑通业务确定需要更高吞吐再改。改完之后有一个特别容易忽略的动作串口助手和单片机那边的波特率必须同步改成新值否则两边各说各话返回的全是乱码。改名字和波特率这类参数是即时生效并保存到模块内部的掉电不会丢所以不需要每次上电重配。2.3 改完参数必做的两件事断电重启与重新配对不少人在串口助手把名字和 PIN 码改完直接拿手机去连结果搜不到或者连不上然后开始怀疑模块坏了。其实大部分情况只是漏了“断电重启”和“重新配对”这两步。JDY18 改完广播名后手机端蓝牙列表里的旧名字可能还缓存着需要模块重新上电广播一次手机端也要在蓝牙设置里忽略旧设备再重新搜索。配对码的问题更隐蔽。出厂默认 PIN 码一般印在模块背面的标签上如果你用 AT 指令改过 PIN手机端之前记住的旧配对信息就失效了。Android 手机的处理方式是到蓝牙设置里找到该设备选择“忽略此设备”再重新配对iOS 设备则是到蓝牙设置里点设备旁边的感叹号忽略后重新搜索。最容易让人迷惑的是模块从机模式和手机连接之间的关系JDY18 出厂默认是从机模式也就是被动等待手机连接这是最稳的组合方式新手不要先去改主从。3. JDY18 单片机收发例程把数据真正从串口搬到蓝牙硬件通了、AT 指令能回 OK下一步就是把 JDY18 接进单片机系统里。这一章从选型差异讲起分别给出 Arduino 和 STM32 两种常见平台的例程代码。JDY18 对单片机来说就是一个普通串口设备所以核心代码就是串口初始化、中断接收、数据转发这三件事。不同的平台差异主要在串口资源上Arduino 的硬件串口只有一组软件模拟串口成了常见选择STM32 串口多收发框架可以写得更完整。3.1 选 STM32 还是 Arduino两块板子的接入差异Arduino 生态里最常见的做法是用 SoftwareSerial 库在任意两个数字引脚上模拟一组串口把 JDY18 挂在软串口上USB 调试口保留给电脑。这样做的优点是接线灵活、代码短缺点是软串口在高波特率下容易丢字节9600 波特率下收发几十个字节没问题往上到 38400 就得注意每次发送的数据量。STM32 平台则是直接使用 USART 外设硬件 FIFO 加中断接收稳定性和吞吐都要好一截代价是初始化代码长不少。用 STM32 时电平可以直接匹配因为 JDY18 的 TXD 就是 3.3V 电平和 STM32 的 IO 电平一致不需要分压。Arduino 上如果板子本身是 5V 逻辑建议给 JDY18 的 RXD 脚串一个 1k 电阻限流防止 5V 高电平长期打在模块引脚上。两个平台我都在项目里用过结论很直接做快速原型、验证功能用 Arduino做正式设备和长时间运行用 STM32。JDY18 不做协议解析也不参与复杂逻辑代码层面的工作量主要在串口数据如何不丢、不重、不粘连。3.2 Arduino 例程从 AT 配置到双向透传的最短代码下面的例程是一个完整的双向透传框架电脑串口输入的内容发给手机手机发来的内容打印到电脑串口。同时上电后自动发一条 AT 指令用来确认模块活着。#include SoftwareSerial.h SoftwareSerial bt(10, 11); // RX10 接模块 TXDTX11 接模块 RXD void setup() { Serial.begin(9600); // 调试串口连接电脑 bt.begin(9600); // 软串口波特率与模块一致 delay(1500); // 等待 JDY18 完成上电初始化 bt.println(AT); // 唤醒/测试带换行模块才认 Serial.println(BT Ready); } void loop() { if (bt.available()) { Serial.write(bt.read()); // 模块数据转发到电脑串口 } if (Serial.available()) { bt.write(Serial.read()); // 电脑串口数据转发给模块 } }逻辑说明SoftwareSerial bt(10, 11)创建一组软串口两个参数分别是 RX 和 TX 引脚接法要和 2.1 节的交叉原则对上10 号引脚接模块的 TXD11 号引脚接模块的 RXD。bt.println(AT)里的println自动补上回车换行正好满足 AT 指令的结尾要求如果用bt.print发指令模块大概率不回。delay(1500)是给模块留初始化时间放在bt.begin()之后是常见做法但注意它阻塞了主循环实际项目里上电后可以先做别的任务再发指令。这个例程跑通后用手机连上模块发一串字符电脑串口监视器里立刻能看到。反过来电脑往串口发数据手机 App 里也会出现。整个链路没有校验、没有协议这就是透传模块的原始工作方式。后续要加协议就在这个桥接位置上做处理比如在Serial.write(bt.read())之前加一个缓冲区凑够一帧再输出。3.3 STM32 的中断接收写法不丢字节的透传框架STM32 上我一般用两个 USARTUSART1 接 JDY18USART2 接调试输出用一个环形缓冲区把接收和转发解耦。核心是单字节中断接收每收到一个字节就存进缓冲区主循环查缓冲区再转发避免在中断里做耗时操作导致溢出。#define RX_BUF_SIZE 128 uint8_t rx_buf[RX_BUF_SIZE]; uint8_t rx_head 0; uint8_t rx_tail 0; uint8_t rx_byte; void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if (huart-Instance USART1) { rx_buf[rx_tail] rx_byte; rx_tail (rx_tail 1) % RX_BUF_SIZE; HAL_UART_Receive_IT(huart1, rx_byte, 1); // 重新挂载接收 } } int main(void) { HAL_Init(); // 省略时钟、GPIO、USART 初始化代码 HAL_UART_Receive_IT(huart1, rx_byte, 1); // 启动单字节中断接收 while (1) { while (rx_head ! rx_tail) { uint8_t d rx_buf[rx_head]; rx_head (rx_head 1) % RX_BUF_SIZE; HAL_UART_Transmit(huart2, d, 1, 10); // 转发到调试串口 } } }逻辑说明HAL_UART_RxCpltCallback是串口接收完成回调每收到一个字节就进一次中断把数据放进环形缓冲区后立刻重新调用HAL_UART_Receive_IT挂下一次接收。主循环里的while不断检查缓冲区是否有新数据有就转发。参数说明RX_BUF_SIZE要大于实际业务里最大单包长度128 字节对手机发来的控制指令绰绰有余HAL_UART_Transmit的最后一个参数是超时毫秒数这里给 10串口没准备好时最多等 10 毫秒就放弃防止主循环卡死。环形缓冲区的实现是这套代码的关键读写指针各自累加并取模不依赖清空操作天然防止覆盖。如果直接把HAL_UART_Transmit放进中断回调里短数据没问题长数据时阻塞在中断里会丢掉后续字节这是很多 STM32 透传丢数据的原因之一。3.4 波特率匹配9600 之外的另两个常用档位透传场景里9600 是最保守的选择短距离、小数据量、调试阶段用这个最稳。数据量上来之后我一般先把波特率提到 38400这是稳定性和吞吐量的平衡点JDY18 在这个波特率下长时间跑不丢字节。115200 在近距离无干扰时可以跑但单片机侧要做流控或者保证接收缓冲区足够大否则高波特率下中断响应不及时就会丢数据。波特率适用场景注意事项9600传感器数据、AT 配置、调试默认值最稳任何固件版本都支持38400日志输出、批量数据上传需要同步改单片机串口波特率115200大文件传输、频繁双向通信包长要短接收端用中断或 DMA改波特率一定要记住AT 指令改的是模块侧参数修改后模块立即生效串口助手和单片机必须同步切换。如果改完后模块不回任何指令大概率是电脑端波特率还停在旧值上。这时候把波特率调回旧值再发一次指令就能恢复。4. JDY18 与手机 App 透传实测链路通不通一次回环见分晓单片机侧的串口收发写好了接下来把手机拉进链路做一次完整的透传实测。这一步的目的是验证三个问题手机能不能发现并连上模块、数据从手机到单片机能不能完整到达、单片机回的数据手机能不能收到。三个问题都通过这条无线链路就真正可用了。这一章从手机连模块的流程讲起给出一个最小回环测试方案最后讨论怎么在透传之上加一层协议把裸字节变成可靠业务数据。4.1 手机端连接流程搜索、配对、选择一个能用的串口服务手机连 JDY18 和平常连蓝牙耳机不太一样关键区别在于 JDY18 暴露的是一个串口服务而不是音频服务。Android 手机的做法是打开系统蓝牙设置搜索设备找到你通过 AT 指令改好的名字点击配对并输入 PIN 码。配对成功之后打开任意一个“蓝牙串口”类 App在设备列表里选择 JDY18App 内部会主动去连接模块上的串口服务连接成功就能收发数据了。需要注意一个坑配对成功和串口连接成功是两回事。系统蓝牙设置里显示“已配对”不代表 App 能直接收发数据App 连接时如果提示“连接失败”或“Service Discovery Failed”先回系统设置里忽略设备重新配对一次。iOS 设备的情况更严格部分 iOS 版本对经典蓝牙 SPP 服务的支持有限市面上的透传调试 App 在 iOS 上经常连不上 JDY18 这类经典蓝牙模块。如果你手里只有 iOS 设备建议先借一台 Android 手机完成链路验证这是做 JDY18 调试最省时间的路子。选 App 的时候看两点支持 SPPSerial Port Profile而不是只支持 BLE能切换 ASCII 和 HEX 显示模式。透传调试时 ASCII 模式方便读文字排查乱码时切到 HEX 才能看到原始字节。4.2 回环测试手机发一句、单片机回一句链路验证最有效的方式是回环测试。手机端 App 发一串字符给 JDY18模块从串口吐给单片机单片机收到后原样返回手机 App 看到返回内容就说明整条链路是通的。单片机侧可以用 Arduino 例程加一点逻辑识别到特定结尾符就回一条消息。#include SoftwareSerial.h SoftwareSerial bt(10, 11); void setup() { Serial.begin(9600); bt.begin(9600); delay(1500); } void loop() { static String s ; while (bt.available()) { char c bt.read(); s c; if (c \n) { bt.print(echo:); bt.print(s); bt.print(\r\n); s ; } } }逻辑说明这段代码按行读取数据手机发来的内容以换行符作为一帧结束的标志收到完整一行后原样返回并加上echo:前缀。bt.print和bt.println的区别在这里体现为手动拼接因为要控制返回格式。参数说明String s这种方式在长时间大流量下会有内存碎片问题做调试验证没问题正式项目建议换成字符数组加下标的方式。回环失败时先别急着查模块用前面的 AT 流程确认串口链路是好的再检查手机 App 连的是不是 JDY18。最阴间的现象是手机连上了一个邻居的同类模块数据发过去完全不回。所以做实测之前先用 AT 指令把名字改成不容易撞车的名字避免误连。4.3 从串口数据到业务数据的三个转换点透传模块只保证字节从 A 到 B不保证业务语义正确。实际项目里在 JDY18 之上还要做三件事帧界定、完整性校验、格式统一。帧界定解决的是“一包数据从哪开始在哪结束”的问题常见方案是包头加包尾比如0xAA开头、0x55结尾中间放长度字段完整性校验用 CRC 或累加和防止无线传输中某一位被干扰格式统一是说收发双方约定好用 ASCII 字符串传还是十六进制字节传调了两天一度想换模块最后发现只是手机 App 把数据按 UTF-8 显示而我发的是 GBK换到 HEX 模式一看字节完全正确。所以排查乱码第一条永远是看原始字节别依赖文本显示。5. JDY18 使用中高频踩坑的 5 个翻车现场现象、原因与处理JDY18 本身不复杂但实际用起来翻车点密集而且很多坑是模块环境问题不算模块本身。这一章整理了 5 个最常见的现场每个都按“现象 - 原因 - 解决”给出来都是我实际调模块时反复踩过的。新手遇到问题时按顺序对照大概率能直接定位到原因。5.1 手机搜不到模块上电时序和供电不稳最容易背锅现象模块接好线、通上电手机蓝牙列表刷了好几遍始终看不到模块名字。原因分三种供电不足导致模块没有正常启动、模块还处于连接状态没有进入广播、广播名被改过但模块没重启。用电脑 USB 口加杜邦线给模块供电线长或接触不良时电流不够模块上电瞬间崩溃又重启LED 表现为亮一下又灭。解决先换独立供电用 USB 转 TTL 小板的 3.3V 输出直连模块 VCC确认模块 LED 在慢闪慢闪说明在广播快闪说明有设备连着改过名字就断电再上电让模块重新广播一次。注意手机蓝牙缓存搜索前先把旧设备忽略掉。5.2 搜索到了但连接一直转圈配对缓存和主从模式冲突现象手机能看到模块名字点击连接状态一直显示“正在连接”或“配对中”几秒后失败。原因手机之前用旧 PIN 和模块配对过后来 AT 指令改了 PIN手机端缓存的是旧配对信息另一种可能是模块被设置成了主模式主动去连其他设备不再作为从机等待手机连接。解决到手机蓝牙设置里找到该设备点“忽略”再重新搜索配对用串口发 AT 指令把模块切回从机模式做法是参考 AT 指令表找到主从配置项设成从机后断电重启。如果你不确定当前主从状态最简单的办法是恢复出厂设置绝大多数模块支持ATRESTORE指令恢复后重新改名配 PIN。5.3 收发全是乱码波特率不一致和文本编码的混淆现象手机和单片机都显示能收发数据但内容全是看不懂的符号。原因单片机串口波特率和模块不一致两边参考时钟不同步字节位全部错位或者是数据本身是十六进制字节被 App 按文本模式显示出来。解决先确认模块的实际波特率。怎么确认串口助手从 9600 开始逐一试每个波特率下发AT\r\n看哪个能回OK。找到实际波特率后把单片机代码里的波特率改成一致这个问题基本消灭。文本编码问题切到 HEX 模式看原始字节如果 HEX 正确、文本乱就是显示层问题不用改代码。5.4 AT 指令回 ERR 或完全无响应换行符和控制字符现象发AT没反应发ATNAMEJDY18返回ERR。原因模块对指令结尾的换行符敏感有些串口助手默认只发\n模块要的是\r\n另一类情况是指令格式写错JDY18 的指令是ATNAME后直接跟名字不需要等号习惯性写成ATNAMEDEV就会报错。解决串口助手里勾选“发送新行”并确认换行格式是 CRLF对照模块指令表逐字核对命令格式发指令前先发一条空指令或AT确认模块在响应状态。如果AT都不回先查接线和波特率不要怀疑模块坏了。5.5 透传过程莫名丢字节缓冲区和单包长度上限现象手机发来一长串内容单片机收到的中间缺了一截或者尾部被截断。原因模块单次透传长度有限数据超长会被分片或者丢弃单片机串口接收缓冲区不够大数据到达速度超过主循环读取速度时有覆盖软串口在高波特率下本身不稳定。解决业务层把数据分片发送每片控制在 128 字节以内中间加小延时让单片机有时间处理单片机侧用 3.3 节的环形缓冲区替代逐字节转发波特率优先用 9600 或 38400不要一上来就 115200。如果丢包集中在某一片区域检查是不是靠近电机或电源模块蓝牙在 2.4G 频段受到干扰时表现为偶发重传和丢包把模块天线尽量远离金属和干扰源。6. JDY18 进阶用法一条低成本无线调试通道的搭法JDY18 跑透传不是终点我用的最多的其实是把它当成一条无线调试通道。做法很简单单片机侧用 JDY18 替代调试串口所有日志通过蓝牙直接打到手机屏幕不用拖着一根 USB 线调设备。具体配置是模块固定 38400 波特率单片机的日志模块单独分配一个串口接 JDY18日志格式统一成带时间戳的文本“[ms] [level] message”。这样设备装进外壳之后依然能从手机读到运行日志比拆壳插线效率高很多。配这个方案时有个细节JDY18 放在设备内部天线要和金属外壳保持至少 1cm 距离否则距离缩水到两三米。实测空旷环境下十米内稳定隔一堵墙掉到五米以内穿两面墙就时断时续。所以无线调试通道适合近距离和桌面调试场景设备装好后如果需要远程观察我会再考虑加协议层做重传而不是指望透传本身可靠。功耗方面模块峰值电流比纯待机高不少静态功耗可以接受但电池供电的设备要加休眠控制用 EN 引脚做唤醒输入这是我后来才补上的设计。另外一个小习惯是我的血泪经验新到手的模块第一件事永远是发AT确认通信不要直接写业务代码。模块、USB 小板、单片机三方都可能是问题源先固定两个变量再动第三个排查速度会快很多。JDY18 这样的透传模块用熟了之后很多无线需求都能快速落地希望帮到你。本文还有配套的精品资源点击获取

相关新闻

串口与CAN双通道工业通信实战:硬件设计到C#STM32协同调试

串口与CAN双通道工业通信实战:硬件设计到C#STM32协同调试

1. 为什么串口CAN组合仍是工业现场最稳的通讯底座在某高校自动化实验室调试一套电机驱动监控系统时,我遇到一个典型场景:上位机(Windows PC)需要实时读取下位机(STM32F4系列主控板)采集的电流、温度、转速三…

2026/10/15 16:06:27 阅读更多 →
字符编码转换全解析:从BOM识别到批量工具实现

字符编码转换全解析:从BOM识别到批量工具实现

简介:面向PHP开发者的字符编码转换类,支持ANSI、Unicode(含Little Endian与Big Endian)、UTF-8及UTF-8BOM五种格式互转,可有效规避多来源文本在页面展示、文件读写中的乱码问题。类中封装了编码自动检测、字符串转换以…

2026/10/15 16:06:27 阅读更多 →
NVIDIA驱动升级导致SDDM黑屏:EGL库路径与Xorg配置修复指南

NVIDIA驱动升级导致SDDM黑屏:EGL库路径与Xorg配置修复指南

1. 黑屏现场还原:不是显卡坏了,是登录管理器“隐身”了那天早上按惯常流程开机,主机风扇转得挺欢,显示器也亮着——但画面是纯黑的。键盘灯正常,Caps Lock能切换,鼠标指针在漆黑背景上滑动自如,…

2026/10/15 16:06:27 阅读更多 →

最新新闻

USB-A转USB-C线缆选购指南:从电流规格到E-Marker芯片的全面解析

USB-A转USB-C线缆选购指南:从电流规格到E-Marker芯片的全面解析

1. 从抽屉里那根线说起:USB-A转USB-C到底解决了什么问题 几乎每个人的抽屉里都躺着几根线:一头是扁扁的矩形接口,另一头是椭圆形的正反插接口。前者是USB-A,后者是USB-C。很多人对这根线的认知停留在“能充电就行”,但…

2026/10/15 16:45:53 阅读更多 →
S9:80 公里干线工程怎么选

S9:80 公里干线工程怎么选

干线熔接机的档次序列里,八十公里级是个特殊的位置:往上,是近百公里级的 AI-30、AI-12;往下,是五十公里级的 AI-8C、中等距离的 AI-7V 与二十公里级的 AI-7C。市域光环网、县际中继、广电与铁路沿线链路,常…

2026/10/15 16:45:53 阅读更多 →
STM32+ESP8266+MQTT+Qt:从零搭建智能家居云端控制系统

STM32+ESP8266+MQTT+Qt:从零搭建智能家居云端控制系统

做嵌入式这几年,有个深切的感受:很多开发者能把裸机外设玩得飞起,UART、PWM、ADC信手拈来,但一旦涉及“联网”和“上位机”,项目就卡住了。要么是云平台那一堆产品模型、设备ID、Topic规则看得头皮发麻,要么…

2026/10/15 16:45:53 阅读更多 →
三段式Moore状态机实现交通灯控制器

三段式Moore状态机实现交通灯控制器

1. 项目概述:为什么交通灯控制必须用三段式Moore状态机?你有没有注意过十字路口的红绿灯——它从不抢拍、不跳变、不卡顿,黄灯总在绿灯结束后准时亮起,红灯也一定在黄灯熄灭后稳稳接上。这种严丝合缝的时序逻辑,不是靠…

2026/10/15 16:45:53 阅读更多 →
零碳工厂落地实战:用开源能源管理系统MyEMS夯实碳盘查底座

零碳工厂落地实战:用开源能源管理系统MyEMS夯实碳盘查底座

这两年我接触过不少想做零碳工厂改造的团队,里面有个现象特别有意思:项目启动会上一张口就聊碳汇、绿电交易、碳中和认证路径,可一落到“工厂去年到底用了多少电、哪些产线最耗能、夜班有没有设备在空转”这种基础问题上,全场鸦雀…

2026/10/15 16:45:52 阅读更多 →
STM32H723外挂W25Q128:Keil FLM烧录算法编写与避坑指南

STM32H723外挂W25Q128:Keil FLM烧录算法编写与避坑指南

简介:面向STM32嵌入式开发人员,这份资料提供STM32H723ZET6微控制器与W25Q128闪存搭配使用的Keil烧录算法FLM源码,解决通过Keil IDE对目标芯片进行程序下载、擦除与调试时缺少匹配算法的问题。资源包共1566个文件,大小14.41MB&…

2026/10/15 16:44:52 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →