
开源DIY基于STM32F103与RC522的百变小樱NFC鸟头杖制作全解析最近在B站上看到一个非常酷的DIY项目——一个能识别动漫《魔卡少女樱》中“库洛牌”的NFC鸟头杖。当法杖靠近不同的卡牌时不仅能播放对应的音效和灯光还能通过蓝牙无线控制家里的灯、风扇等设备。作为一个嵌入式爱好者我立刻被这个创意吸引了于是决定复刻一个并把整个从硬件到软件的搭建过程以及我踩过的坑详细地分享给大家。这个项目非常适合有一定单片机基础的创客朋友。它综合了STM32开发、NFC读写、蓝牙Mesh组网、音频播放等多个技术点是一个非常好的综合性实战项目。跟着这篇教程你不仅能做出一个有趣的动漫周边更能深入理解这些技术是如何在实际项目中协同工作的。1. 项目总览它到底是怎么工作的在动手之前咱们先把这个项目的“骨架”理清楚。整个系统由三大部分组成鸟头杖主控制器、库洛牌NFC标签和执行器受控设备。工作流程是这样的识别当你用鸟头杖的杖头靠近一张“库洛牌”时杖头内置的RC522 NFC读卡器会读取卡牌芯片里存储的数据。处理与播放鸟头杖里的STM32F103主控芯片解析这些数据然后根据数据指示播放对应的音效比如“光”牌的咒语并点亮杖身的WS2812 RGB灯珠实现灯光效果。无线控制同时STM32会通过蓝牙Mesh网络将卡牌信息主要是卡牌ID和一个自定义数据字节发送给指定的执行器。执行动作执行器比如灯控器或风扇控制器收到无线指令后根据卡牌ID执行预设的动作比如开灯、关灯或者切换风扇开关。整个系统的核心逻辑都写在NFC卡牌里鸟头杖本身只是一个“中转站”和“播放器”。这意味着你可以随意增加新的卡牌和新的控制效果而不需要修改鸟头杖的固件只需要在对应的执行器上添加对新卡牌ID的处理逻辑即可拓展性非常强。2. 硬件准备与制作“工欲善其事必先利其器”。我们先来看看需要准备哪些硬件以及如何把它们组装起来。2.1 核心元器件清单首先你需要准备以下核心部件部件名称型号/规格数量备注主控MCUSTM32F103C8T6蓝桥杯最小系统板即可1核心处理器也可以用其他F103系列但引脚需兼容NFC读卡模块RC522 或 WS1850S1WS1850S更便宜且经测试可用蓝牙模块支持蓝牙Mesh的模块如ATB-24G11负责无线通信音频播放模块CH8001 MP3解码模块1播放WAV/MP3格式音效RGB灯珠WS2812B带PCB焊盘或插件式若干用于杖身灯光效果具体数量看设计电池3.7V锂电池带保护板1供电容量建议1000mAh以上卡牌芯片NFC标签芯片如NTAG213多张建议买不带线圈的裸芯片尺寸5*8mm执行器MCUSTM32F103C8T6若干每个受控设备灯、风扇需要一个提示RC522/WS1850S模块、蓝牙Mesh模块、CH8001模块通常都可以在电商平台找到现成的模块直接使用可以大大降低焊接和调试难度。2.2 鸟头杖的组装要点鸟头杖的PCB设计比较紧凑组装时需要一些技巧。我根据原作者的说明和自己的经验总结了几个关键点1. 结构固定PCB主板是通过螺丝固定在3D打印的外壳内部的。除了固定外壳的螺丝是M2*10的自攻螺丝其他内部固定比如模块都用M2*5的自攻螺丝。喇叭、开关等没有螺丝孔位的部件需要用热熔胶或AB胶进行粘接固定。2. 灯光安装WS2812B灯珠需要粘贴在杖身内部。你可以选择那种自带引出焊盘的PCB式WS2812或者插件式的WS2812这样方便焊接和固定。粘贴时注意灯珠的发光面朝向杖身透光部分如果有的话。3. 核心NFC读卡天线这是实现“刷卡”感应的关键。天线是一个电感线圈感值大约需要1uH。自制天线如果你不想用现成的天线可以自己用漆包线绕制。大致方法是找一个直径约20mm的圆柱体比如笔杆绕上4到5圈然后将线头焊接到RC522模块的天线接口上。天线接法RC522支持单天线和双天线接法。这个项目里单天线接法的读卡距离就已经足够了正好贴合卡牌。如果用双天线必须确保两天线的线圈长度完全一致否则会影响读卡性能。单天线接法只使用RC522模块上的TX1和RX1引脚连接天线线圈。双天线接法同时使用TX1/RX1和TX2/RX2引脚连接两个独立的天线线圈。4. 供电与接口电池使用一块3.7V锂电池供电通过一个拨动开关控制总电源。开关的安装位置需要根据外壳开孔来确定。Type-C接口这个设计非常巧妙鸟头杖上的Type-C口正反插功能不同正面插入设备进入语音下载模式电脑会识别出一个U盘可以直接拖入音频文件。反面插入设备进入串口通信模式可以用于调试和写入卡牌数据。2.3 库洛牌的制作“库洛牌”的本质就是一张写入特定数据的NFC标签。你有三种方式制作它彩色PCB丝印直接设计成PCB把卡牌图案用丝印工艺印在板上最精致但也最贵。普通PCB贴纸用单色PCB做底板然后贴上打印的卡牌贴纸性价比高。3D打印贴纸用3D打印机打出卡牌形状的底板再贴贴纸适合有3D打印机的朋友。无论用哪种方式核心都是要把NFC标签芯片如NTAG213固定在里面。建议购买不带线圈的裸芯片尺寸约5*8mm然后根据你选择的PCB或3D模型在对应位置焊接或粘贴上芯片和线圈。2.4 执行器灯控/风扇控制器执行器是通用的你可以基于同一个硬件框架STM32F103 蓝牙Mesh模块来制作不同功能的控制器。灯控制器通常通过继电器或MOS管来控制220V交流电的通断。风扇控制器原理类似也可以用来控制其他家电。预留接口执行器PCB上一般会预留一个舵机控制接口或其他GPIO你可以修改代码用这个引脚来控制其他设备比如窗帘电机、玩具小车等。注意对于舵机控制的执行器比如用来按物理开关的舵机的旋转角度需要你根据实际开关的行程在代码中仔细调整否则可能按不动或按过头。3. 软件配置与烧录硬件搭好了接下来就是注入“灵魂”——软件。所有工程代码都托管在Gitee上便于管理和更新。3.1 获取源代码项目的总仓库地址是https://gitee.com/TiX233/sakura_nfc_repo你需要使用Git工具将这个仓库克隆到本地。仓库里应该包含了鸟头杖主控、各类执行器的源代码工程。建议使用STM32CubeIDE或者Keil MDK来打开和编译这些工程。3.2 下载语音文件鸟头杖的音效是通过CH8001模块播放存储在SD/TF卡或SPI Flash里的MP3文件实现的。用Type-C线正面插入鸟头杖此时电脑会识别出一个U盘。将准备好的MP3音频文件按照规定的格式拖入这个U盘。文件夹命名必须以两位数字开头例如02_光牌咒语。整个文件夹名不超过12个字节一个汉字占2字节。文件命名必须以三位数字开头例如001_光.mp3。一个文件夹下最多放255个文件。音频格式支持MP3采样率可以是8, 11.025, 12, 16, 22.05, 24, 32, 44.1, 48 KHz。如果对音质有更高要求可以改造硬件将CH8001的DAC输出接到一个外置的优质DAC芯片上。3.3 写入卡牌数据核心步骤这是整个项目最有趣也最关键的一步赋予每张“库洛牌”独特的魔法。连接串口用Type-C线反面插入鸟头杖此时它处于串口模式。在电脑上打开串口助手软件如XCOM、Putty等找到对应的串口号设置好波特率通常是115200。在串口助手的发送区输入写卡命令。命令格式为/card -w [卡牌ID] [Mesh地址] [自定义数据] [音频文件夹号] [音频号]举例我们来写一张“光牌”。/card -w 1 0x0006 0x00 2 11: 卡牌ID我们定义“光牌”的ID是1。0x0006: 蓝牙Mesh地址表示这张牌的控制指令要发给地址为0x0006的设备比如你的灯控制器。0x00: 自定义数据这里暂时没用填0。2 1: 表示播放02号文件夹里的第001个音频文件。输入命令后将一张空白的NFC卡牌靠近鸟头杖的读卡区听到“嘀”的一声或看到串口返回成功信息数据就写入了。卡牌数据存储格式揭秘数据被写入卡牌芯片如M1卡的特定扇区第二扇区第零块。格式是固定的理解它有助于你调试/* 卡片存储数据格式 */ 0字节: 起始标志 0x25 1字节: 库洛牌 ID // 最重要的标识执行器靠它判断是哪张牌 2字节: 固定值 0x68 3字节: 固定值 0x25 4-5字节: 受控设备 mesh 地址 // 2字节大端格式高位在前 6字节: 自定义数据 // 1字节可自由发挥比如传递亮度、速度等级 7字节: 指定音频文件夹号 // 1字节 8字节: 指定音频序号 // 1字节 9字节: 结束标志 0x68当鸟头杖读卡时就会按照这个格式解析出所有信息然后执行播放和转发操作。3.4 预设卡牌与自定义原作者提供了一些预设你可以直接使用卡牌效果卡牌 ID蓝牙 mesh 地址自定义数据音频文件夹音频号光牌开灯10x00060x0021暗牌关灯20x00060x0031风牌开/关风扇30x00070x0041如何自定义新增卡牌完全没问题只需用/card -w命令写入新的ID、地址等信息即可。比如你想做一张“水牌”ID4来控制加湿器地址0x0008并播放5号文件夹的1号音频命令就是/card -w 4 0x0008 0x00 5 1。新增控制效果这需要修改执行器的代码。在对应执行器的工程里找到处理蓝牙Mesh消息的函数添加对新卡牌ID例如case 4:的判断然后编写控制加湿器继电器的代码。关于Mesh地址0xFFFF是广播地址发给这个地址的消息所有Mesh网络内的设备都能收到。0x0002到0xFF00是单播地址用于指定一台设备。鸟头杖的地址固定为0x0005所以你的执行器地址建议设置为比这个大的数比如0x0006、0x0007。4. 调试心得与常见问题做完以上步骤你的魔法杖应该就能工作了。不过在实际制作中可能会遇到一些小问题这里分享一些我的调试经验读卡不灵敏首先检查天线线圈是否焊接牢固有没有短路或断路。如果是自制天线可以微调线圈的匝数或形状。确保卡牌芯片和读卡天线之间的距离在几毫米以内。蓝牙Mesh连接不上检查蓝牙模块的供电是否稳定。确认鸟头杖和执行器使用的蓝牙Mesh协议和配置如网络密钥是否一致。查看地址配置是否正确确保没有冲突。没有声音检查Type-C口是否插反了下载音频必须正面插入识别为U盘。确认音频文件命名和文件夹命名完全符合规则数字开头。检查喇叭连接线是否接好。执行器不动作首先在鸟头杖端确认串口打印信息看读卡和发送Mesh数据是否成功。然后在执行器端通过串口打印调试信息检查是否收到了Mesh数据以及是否正确解析了卡牌ID。检查执行器的控制电路继电器、MOS管等和代码中的GPIO配置是否正确。这个项目最吸引我的地方在于它的完整性和可玩性。它不仅仅是一个简单的读卡播放器而是构建了一个小小的物联网生态系统。你可以不断地为它添加新的“库洛牌”NFC标签和新的“魔法效果”执行器让这个来自动漫的幻想真正照进我们的现实生活。希望这篇详细的解析能帮助你顺利制作出自己的魔法杖