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();
}
使用说明:
-
蓝牙连接:
-
手机安装BLE调试APP(如nRF Connect或LightBlue)
-
搜索并连接名为
MatrixDisplay的设备 -
找到UUID为
19B10001-E8F2-537E-4F6C-D104768A1214的特征
-
-
发送文本:
-
向特征写入任意文本(最多20个字符)输入方式选择
HEX是十六进制生成ACSII码,UTF-8是直接输入字符串 -
示例:发送 "Hello" → LED矩阵将滚动显示 "Hello"
-
-
显示效果:
-
文本从右向左滚动显示
-
连接成功后板载LED常亮
-
未连接时LED缓慢闪烁
-
功能特点:
-
实时更新:
-
收到新文本时立即刷新显示
-
保留前导空格实现右侧进入效果
-
-
滚动动画:
-
文本平滑滚动显示
-
可通过修改
matrix.textScrollSpeed()调整速度
-
-
状态指示:
-
蓝牙未连接: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); // 大号字体
常用文本的十六进制对照表:
| 文本内容 | 十六进制值 |
|---|---|
HELLO | 48 45 4C 4C 4F |
ARDUINO | 41 52 44 55 49 4E 4F |
R4 WIFI | 52 34 20 57 49 46 49 |
12345 | 31 32 33 34 35 |
TEST! | 54 45 53 54 21 |
发送示例:
-
显示"HELLO WORLD":
-
48 45 4C 4C 4F 20 57 4F 52 4C 44
-
显示温度值"25.5°C":
-
32 35 2E 35 B0 43
(注意:°符号是B0)
特殊字符编码:
-
空格:
20 -
句点:
2E -
感叹号:
21 -
问号:
3F -
度符号:
B0 -
心形:
E2 99 A5(UTF-8编码)
使用技巧:
-
多行显示:
发送包含换行符的文本:
48 65 6C 6C 6F 0A 57 6F 72 6C 64 // "Hello\nWorld"
版权声明:本文标题:Arduino UNO R4 WiFi用蓝牙控制板载8×12LED输出 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1754130143a2967129.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论