返回
IoT 拓展:通过蓝牙与手机通讯,实现持久化参数设置
闲谈
2023-11-03 13:02:23
与手机通过蓝牙通信:
- 启用 ESP32 的蓝牙功能。 根据您使用的 ESP32 型号,可能需要调整引脚设置或使用不同的库。
- 建立 Bluetooth Serial (BT Serial) 服务。 这将允许 ESP32 与手机或其他蓝牙设备进行通信。
- 创建一个连接侦听器。 当设备连接到 ESP32 时,该侦听器将被触发。
- 处理传入数据。 一旦设备连接,您就可以开始接收和处理从手机发送的数据。
参数设置的持久化存储:
- 选择合适的存储选项。 您可以在 ESP32 的内部闪存、EEPROM 或 SD 卡中存储参数。
- 格式化存储选项。 这将确保存储选项已准备好接收数据。
- 将参数写入存储选项。 使用适当的函数将参数写入选定的存储选项。
- 在重新启动时读取参数。 在 ESP32 重新启动后,您需要从存储选项中读取参数并将其应用到您的项目中。
示例:
我们将通过一个示例来演示如何将参数设置持久化存储在 ESP32 中。在这个示例中,我们将使用 ESP32 的内部闪存来存储参数。
// 引入必要的库
#include <BluetoothSerial.h>
// 创建蓝牙串行实例
BluetoothSerial ESP32BT;
// 创建存储参数的结构体
struct Settings {
int brightness;
bool autoConnect;
};
// 创建存储参数的实例
Settings settings;
// 设置 ESP32 的蓝牙名称
ESP32BT.setName("MyESP32");
// 开始蓝牙串行服务
ESP32BT.begin();
// 定义连接侦听器
void connectCallback() {
Serial.println("设备已连接");
}
// 定义数据接收处理函数
void dataReceiveCallback(uint8_t *data, uint16_t len) {
// 将接收到的数据转换为字符串
String message = String((char *)data);
// 将字符串转换为 JSON 格式
DynamicJsonDocument doc(1024);
deserializeJson(doc, message);
// 从 JSON 中提取参数
settings.brightness = doc["brightness"];
settings.autoConnect = doc["autoConnect"];
// 将参数写入 ESP32 的内部闪存
EEPROM.put(0, settings);
}
// 设置连接侦听器
ESP32BT.onConnect(connectCallback);
// 设置数据接收处理函数
ESP32BT.onData(dataReceiveCallback);
// 从 ESP32 的内部闪存中读取参数
EEPROM.get(0, settings);
// 应用参数到项目中
analogWrite(LED_PIN, settings.brightness);
if (settings.autoConnect) {
// 自动连接到 Wi-Fi 网络
}
// 主循环
void loop() {
// 处理蓝牙串行通信
ESP32BT.poll();
}
总结:
通过蓝牙与手机通信,并持久化存储 ESP32 中的参数设置,您可以创建功能更加强大和用户友好的 IoT 项目。