返回

IoT 拓展:通过蓝牙与手机通讯,实现持久化参数设置

闲谈

与手机通过蓝牙通信:

  1. 启用 ESP32 的蓝牙功能。 根据您使用的 ESP32 型号,可能需要调整引脚设置或使用不同的库。
  2. 建立 Bluetooth Serial (BT Serial) 服务。 这将允许 ESP32 与手机或其他蓝牙设备进行通信。
  3. 创建一个连接侦听器。 当设备连接到 ESP32 时,该侦听器将被触发。
  4. 处理传入数据。 一旦设备连接,您就可以开始接收和处理从手机发送的数据。

参数设置的持久化存储:

  1. 选择合适的存储选项。 您可以在 ESP32 的内部闪存、EEPROM 或 SD 卡中存储参数。
  2. 格式化存储选项。 这将确保存储选项已准备好接收数据。
  3. 将参数写入存储选项。 使用适当的函数将参数写入选定的存储选项。
  4. 在重新启动时读取参数。 在 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 项目。