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

告别接线烦恼!用JDY-23蓝牙模块DIY一个手机遥控的智能小夜灯(附Arduino代码)

用JDY-23蓝牙模块打造手机遥控的智能小夜灯

深夜起床开灯太刺眼?传统小夜灯需要手动开关太麻烦?今天我们就用JDY-23蓝牙模块和Arduino,DIY一个可以通过手机APP远程控制的智能小夜灯。这个项目不仅实用,还能让你深入了解蓝牙通信和物联网的基础原理。无论你是电子爱好者还是创客新手,都能在2小时内完成这个有趣的项目。

1. 项目准备与硬件选型

在开始动手之前,我们需要准备好所有必要的硬件组件。这个项目的核心是JDY-23蓝牙模块,它是一款基于蓝牙5.0协议的低功耗模块,具有以下优势:

  • 超低功耗:深度睡眠电流仅9μA,非常适合24小时运行的小夜灯
  • 稳定连接:最大传输距离60米,完全满足家庭使用需求
  • 简单易用:支持AT指令配置,无需复杂编程即可实现基本功能

除了蓝牙模块,我们还需要以下组件:

组件名称规格要求数量备注
Arduino开发板Nano或Uno1建议使用Nano节省空间
LED灯带WS2812B可寻址1米支持RGB调色
电阻220Ω1用于LED限流
面包板标准尺寸1方便原型搭建
杜邦线公对公若干建议不同颜色区分

提示:WS2812B灯带每米60珠的型号亮度适中,适合做小夜灯。如果追求更高亮度,可以选择每米144珠的型号。

2. 硬件连接与电路搭建

正确的硬件连接是项目成功的关键。我们先来看JDY-23蓝牙模块的引脚定义:

VCC - 接3.3V电源 GND - 接地 TXD - 接Arduino的RX引脚 RXD - 接Arduino的TX引脚

具体连接步骤如下:

  1. 将JDY-23的VCC和GND分别连接到Arduino的3.3V和GND
  2. 连接JDY-23的TXD到Arduino的RX,RXD到TX
  3. WS2812B灯带的VCC接5V,GND接地,DIN接Arduino的D6引脚
  4. 在灯带数据输入端串联220Ω电阻

注意:Arduino的3.3V输出电流有限,如果同时连接多个外设,建议使用外部电源供电。

电路连接完成后,可以用以下代码测试基本功能:

#include <Adafruit_NeoPixel.h> #define LED_PIN 6 #define LED_COUNT 60 Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); void setup() { Serial.begin(9600); strip.begin(); strip.show(); // 初始化所有像素为关闭状态 } void loop() { // 测试代码:让灯带显示彩虹渐变 for(int i=0; i<256; i++) { for(int j=0; j<strip.numPixels(); j++) { strip.setPixelColor(j, Wheel((i+j) & 255)); } strip.show(); delay(20); } } // 输入0-255的值,返回彩虹色 uint32_t Wheel(byte WheelPos) { WheelPos = 255 - WheelPos; if(WheelPos < 85) { return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3); } if(WheelPos < 170) { WheelPos -= 85; return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3); } WheelPos -= 170; return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0); }

3. 蓝牙模块配置与AT指令

JDY-23蓝牙模块支持通过AT指令进行配置。我们先通过串口发送一些基本指令来设置模块参数:

  1. 测试连接:发送AT,应返回OK
  2. 设置设备名称AT+NAME智能夜灯
  3. 设置配对密码AT+PIN1234
  4. 查询模块地址AT+ADDR?
  5. 保存设置AT+SAVE

提示:可以使用Arduino IDE的串口监视器发送AT指令,记得选择"Both NL & CR"和"9600 baud"。

为了方便后续开发,我们可以将这些配置整合到一个初始化函数中:

void setupBluetooth() { Serial.println("AT"); // 测试连接 delay(100); Serial.println("AT+NAME智能夜灯"); delay(100); Serial.println("AT+PIN1234"); delay(100); Serial.println("AT+SAVE"); delay(100); }

4. 手机APP开发与控制逻辑

虽然可以使用现成的蓝牙调试助手,但定制化的APP能提供更好的用户体验。这里我们使用MIT App Inventor来快速开发一个简单的控制APP。

APP需要实现以下功能:

  • 连接蓝牙设备:扫描并连接我们的智能夜灯
  • 开关控制:打开/关闭夜灯
  • 亮度调节:滑动条控制亮度
  • 颜色选择:RGB调色板选择灯光颜色

APP界面可以包含以下组件:

  1. ListPicker:用于选择蓝牙设备
  2. Button:连接/断开按钮
  3. Slider:亮度调节
  4. ColorPicker:颜色选择
  5. Toggle:开关控制

在Arduino端,我们需要编写代码解析APP发送的指令:

void parseBluetoothCommand(String command) { if(command.startsWith("ON")) { // 开灯指令 strip.setBrightness(50); // 默认50%亮度 colorWipe(strip.Color(255, 255, 255), 50); // 白光 } else if(command.startsWith("OFF")) { // 关灯指令 colorWipe(strip.Color(0, 0, 0), 50); } else if(command.startsWith("BRT:")) { // 亮度调节指令 int brightness = command.substring(4).toInt(); strip.setBrightness(brightness); strip.show(); } else if(command.startsWith("COL:")) { // 颜色设置指令 int comma1 = command.indexOf(',', 4); int comma2 = command.indexOf(',', comma1+1); int r = command.substring(4, comma1).toInt(); int g = command.substring(comma1+1, comma2).toInt(); int b = command.substring(comma2+1).toInt(); colorWipe(strip.Color(r, g, b), 50); } } // 填充灯带颜色 void colorWipe(uint32_t color, int wait) { for(int i=0; i<strip.numPixels(); i++) { strip.setPixelColor(i, color); strip.show(); delay(wait); } }

5. 项目优化与进阶功能

基础功能实现后,我们可以考虑添加一些增强功能:

  1. 定时功能:设置夜灯在特定时间自动开启/关闭
  2. 情景模式:预设多种灯光场景(阅读、睡眠、夜灯等)
  3. 亮度自适应:根据环境光线自动调节亮度
  4. 低电量提醒:当电池电量低时改变灯光颜色

要实现环境光检测,可以添加一个光敏电阻:

const int lightSensorPin = A0; void checkAmbientLight() { int sensorValue = analogRead(lightSensorPin); int brightness = map(sensorValue, 0, 1023, 255, 10); // 光线越暗亮度越低 strip.setBrightness(brightness); strip.show(); }

对于定时功能,我们可以使用Arduino的时间库:

#include <TimeLib.h> void setup() { // ...其他初始化代码 setTime(12,0,0,1,1,2023); // 设置初始时间 } void checkSchedule() { if(hour() == 22 && minute() == 0) { // 晚上10点自动开启夜灯模式 strip.setBrightness(20); colorWipe(strip.Color(255, 180, 100), 50); // 暖黄色 } else if(hour() == 7 && minute() == 0) { // 早上7点自动关闭 colorWipe(strip.Color(0, 0, 0), 50); } }

6. 外壳设计与成品制作

为了让项目更加完整,我们可以为小夜灯设计一个合适的外壳。以下是几种常见方案:

  • 3D打印外壳:使用PLA材料打印定制化外壳
  • 亚克力激光切割:制作现代感十足的几何形状外壳
  • 木质外壳:使用激光切割或手工制作温暖的木质外观

设计外壳时需要考虑:

  1. 散热:LED长时间工作会产生一定热量
  2. 光线扩散:使用磨砂材料使光线更柔和
  3. 蓝牙信号:避免金属外壳屏蔽蓝牙信号
  4. 电源接入:预留USB接口或电池仓位置

一个简单的亚克力外壳设计可以包括:

  • 底部:放置Arduino和电源
  • 中部:灯带缠绕区域
  • 顶部:磨砂亚克力扩散板

7. 常见问题与解决方案

在实际制作过程中,可能会遇到以下问题:

  1. 蓝牙连接不稳定

    • 检查天线方向,避免金属屏蔽
    • 确保供电稳定,电压不低于3V
    • 尝试修改广播间隔(AT+ADVI指令)
  2. LED灯带不亮

    • 检查数据线方向(DIN应接控制器)
    • 确认电源足够(5V 2A以上适配器)
    • 测试单个LED是否工作
  3. 手机APP无法控制

    • 确认蓝牙模块已正确配对
    • 检查串口通信波特率(默认9600)
    • 验证AT指令响应是否正常
  4. 灯光闪烁或颜色异常

    • 在数据线靠近Arduino端添加220Ω电阻
    • 缩短数据线长度(最好小于50cm)
    • 在代码中添加strip.show()后适当延时

完成这个项目后,你不仅收获了一个实用的智能小夜灯,还掌握了蓝牙通信、Arduino编程和物联网设备开发的基础知识。这些技能可以扩展到更多智能家居项目中,比如智能门锁、温控系统或者安防设备。

http://www.jsqmd.com/news/625908/

相关文章:

  • 把轮询时代收起来,ABAP Daemon 才是事件驱动应用的长驻底座
  • 告别手动复制:用Apifox Helper插件+访问令牌,实现IDEA与API文档的自动同步
  • 从AAAI2025看技术风向:Gaussian Splatting、Mamba、MoE这些词为啥这么火?
  • 让微信网页版重新可用:wechat-need-web浏览器插件完全攻略
  • 使用Microsoft Agent Framework构建C# AI代理雍
  • 学Simulink——基于Simulink的重复控制抑制周期性负载转矩扰动​
  • Verdi Transaction Debug避坑指南:从环境变量配置到FSDB文件生成,解决monitor采集不到Transaction的常见问题
  • MiniMax Music 2.6深度解析:当AI开始听懂音乐的气口
  • 你应该从 VSCode 切换到 Cursor 吗?
  • 第16讲:C语⾔内存函数
  • Matlab与Pixel Script Temple联姻:科学可视化与艺术化呈现
  • 告别VNC卡顿!用NoMachine远程桌面连接树莓派5的保姆级教程(含ARM架构选择避坑)
  • 宿州人不骗宿州人!眼科检查实用指南 - 品牌测评鉴赏家
  • 光伏逆变器低电压穿越仿真模型:基于Boost加NPC拓扑结构的Simulink模型
  • CMMI认证避坑指南:中小企业如何用最低成本拿下3级认证(附实战案例)
  • 2026最权威的六大AI科研工具实测分析
  • 大模型之Linux服务器部署大模型筛
  • 拆穿名词诈骗!用大白话理解晦涩难懂的AI概念蕉
  • 国际物联网卡哪家好?核心科普与主流服务商对比
  • 粉紫系超人气月兔铃仙账
  • FastUtil:为原始类型提升性能的集合框架
  • MATLAB/Simulink搭建全桥LLC仿真:从参数计算到波形调试的保姆级避坑指南
  • 从原理到实践:详解双目散斑结构光的生成与优化
  • 技能配置指南:从WorkBuddy到多平台技能配置实操手册
  • 三菱FX3U与上位机通信实战:手把手教你用FX-232-BD实现数据读写(附C#代码)
  • 2026最权威的十大AI辅助论文方案解析与推荐
  • 从LangChain到LocChain:重构AI原生研发流水线的6个关键插件(含开源LocoKit v2.1 Beta版限时开放)
  • AI原生软件技术选型到底怎么选?:一张动态决策树图谱,覆盖LLM接入、向量基建、Agent编排与合规审计4大生死关
  • 自用力扣刷题总结经验
  • YOLO部署全过程