admin 管理员组

文章数量: 1184232

要在Arduino UNO R4 WiFi上实现蓝牙控制,需使用其内置的BLE(蓝牙低功耗)功能。

 

arduino r4 WiFi蓝牙显示输入的字符

1. 所需材料

  • Arduino UNO R4 WiFi

  • 手机(支持BLE,安装蓝牙调试APP:安卓:LightBlue)或者其他


2. 安装库

在Arduino IDE中安装内置库:
工具管理库 → 搜索 ArduinoBLE → 安装最新版


3. 完整代码

#include <ArduinoBLE.h>
#include "ArduinoGraphics.h"
#include "Arduino_LED_Matrix.h"
#include "TextAnimation.h"

ArduinoLEDMatrix matrix;

// 定义BLE服务和特征
BLEService displayService("19B10000-E8F2-537E-4F6C-D104768A1214");
BLEStringCharacteristic textChar("19B10001-E8F2-537E-4F6C-D104768A1214", BLERead | BLEWrite, 20); // 最大20字符

// 文本动画配置
TEXT_ANIMATION_DEFINE(anim, 100)
String displayText = "Arduino R4"; // 默认显示文本
bool newTextReceived = false;      // 新文本接收标志

void matrixCallback() {
  // 动画完成回调(此处不需要操作)
}

void setup() {
  Serial.begin(9600);
  pinMode(LED_BUILTIN, OUTPUT);
  
  // 初始化LED矩阵
  matrix.begin();
  matrix.beginDraw();
  matrix.stroke(0xFFFFFFFF);
  matrix.textFont(Font_5x7);
  matrix.textScrollSpeed(50); // 滚动速度(毫秒)
  matrix.setCallback(matrixCallback);
  updateDisplay(); // 显示初始文本
  
  // 初始化BLE
  if (!BLE.begin()) {
    Serial.println("BLE初始化失败!");
    while (1) digitalWrite(LED_BUILTIN, millis() % 200 < 100); // 错误闪烁
  }
  
  // 配置BLE服务和特征
  BLE.setLocalName("MatrixDisplay");
  BLE.setAdvertisedService(displayService);
  displayService.addCharacteristic(textChar);
  BLE.addService(displayService);
  textChar.writeValue(displayText); // 设置初始值
  
  // 开始广播
  BLE.advertise();
  Serial.println("等待蓝牙连接...");
  Serial.println("设备名称: MatrixDisplay");
}

void loop() {
  // 处理蓝牙连接
  BLEDevice central = BLE.central();
  
  if (central) {
    Serial.print("已连接: ");
    Serial.println(central.address());
    digitalWrite(LED_BUILTIN, HIGH); // 连接时LED常亮
    
    while (central.connected()) {
      // 检查是否收到新文本
      if (textChar.written()) {
        displayText = textChar.value();
        newTextReceived = true;
        Serial.print("收到新文本: ");
        Serial.println(displayText);
      }
      
      // 更新显示
      if (newTextReceived) {
        updateDisplay();
        newTextReceived = false;
      }
      
      delay(10); // 减少CPU占用
    }
    
    Serial.print("断开连接: ");
    Serial.println(central.address());
    digitalWrite(LED_BUILTIN, LOW);
  }
  
  // 未连接时的LED闪烁
  digitalWrite(LED_BUILTIN, millis() % 1000 < 500);
}

// 更新LED矩阵显示
void updateDisplay() {
  matrix.beginDraw();
  matrix.clear();
  
  matrix.beginText(0, 1, 0xFFFFFF);
  matrix.print("   "); // 左侧留空
  matrix.println(displayText);
  matrix.endTextAnimation(SCROLL_LEFT, anim);
  
  matrix.loadTextAnimationSequence(anim);
  matrix.play();
}

使用说明:

  1. 蓝牙连接

    • 手机安装BLE调试APP(如nRF Connect或LightBlue)

    • 搜索并连接名为 MatrixDisplay 的设备

    • 找到UUID为 19B10001-E8F2-537E-4F6C-D104768A1214 的特征

  2. 发送文本

    • 向特征写入任意文本(最多20个字符)输入方式选择 HEX 是十六进制生成ACSII码,UTF-8是直接输入字符串

    • 示例:发送 "Hello" → LED矩阵将滚动显示 "Hello"

  3. 显示效果

    • 文本从右向左滚动显示

    • 连接成功后板载LED常亮

    • 未连接时LED缓慢闪烁

功能特点:

  1. 实时更新

    • 收到新文本时立即刷新显示

    • 保留前导空格实现右侧进入效果

  2. 滚动动画

    • 文本平滑滚动显示

    • 可通过修改matrix.textScrollSpeed()调整速度

  3. 状态指示

    • 蓝牙未连接:LED慢闪(500ms间隔)

    • 蓝牙已连接:LED常亮

    • BLE初始化失败:LED快闪(100ms间隔)

自定义选项:

// 修改文本滚动方向(可选值):
matrix.endTextAnimation(SCROLL_RIGHT, anim);   // 从右向左
matrix.endTextAnimation(SCROLL_LEFT, anim);    // 从左向右
matrix.endTextAnimation(SCROLL_UP, anim);      // 从下向上
matrix.endTextAnimation(SCROLL_DOWN, anim);    // 从上向下

// 修改滚动速度(值越小越快):
matrix.textScrollSpeed(30); // 更快
matrix.textScrollSpeed(100); // 更慢

// 修改字体(可选字体):
matrix.textFont(Font_4x6);    // 小号字体
matrix.textFont(Font_6x10);   // 大号字体

常用文本的十六进制对照表:

文本内容十六进制值
HELLO48 45 4C 4C 4F
ARDUINO41 52 44 55 49 4E 4F
R4 WIFI52 34 20 57 49 46 49
1234531 32 33 34 35
TEST!54 45 53 54 21

发送示例:

  1. 显示"HELLO WORLD":

  • 48 45 4C 4C 4F 20 57 4F 52 4C 44
  • 显示温度值"25.5°C":

  1. 32 35 2E 35 B0 43

    (注意:°符号是B0)

特殊字符编码:

  • 空格:20

  • 句点:2E

  • 感叹号:21

  • 问号:3F

  • 度符号:B0

  • 心形:E2 99 A5 (UTF-8编码)

使用技巧:

  1. 多行显示
    发送包含换行符的文本:

48 65 6C 6C 6F 0A 57 6F 72 6C 64  // "Hello\nWorld"

 

本文标签: 蓝牙 板载 uno Arduino led