You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过蓝牙实现ESP32的Web服务器访问?

ESP32通过蓝牙PAN实现Web应用访问

你提到的蓝牙tether本质是利用**蓝牙PAN(个人区域网络)**技术,ESP32完全支持该功能,可以模拟成蓝牙网络网关,让电脑/手机通过蓝牙建立TCP/IP链路,进而访问ESP32上的Web应用。以下是具体实现方案:

核心原理

蓝牙PAN通过BNEP(蓝牙网络封装协议)将TCP/IP数据包封装在蓝牙链路中,ESP32启用蓝牙PAN的AP模式并配置NAT(网络地址转换)后,会为连接的设备分配IP地址,形成一个小型蓝牙内网——和WiFi热点的工作逻辑类似,因此可以直接复用原有的Web服务器代码。

实现步骤

1. 确认环境支持

确保使用的ESP-IDF版本在v4.0及以上(基于ESP-IDF的Arduino ESP32核心,只要是v1.0.6及以上版本即可),该版本原生支持蓝牙PAN功能。

2. 编写蓝牙PAN+Web服务器代码

以下是基于Arduino框架的示例代码,实现蓝牙PAN网关和基础Web服务:

#include <Arduino.h>
#include <WebServer.h>
#include <esp_bt.h>
#include <esp_bt_main.h>
#include <esp_gap_bt_api.h>
#include <esp_pan.h>
#include <esp_netif.h>

WebServer server(80);

// 根路由响应逻辑
void handleRoot() {
  server.send(200, "text/html", "<h1>ESP32 Bluetooth Web Server</h1><p>Connected via Bluetooth PAN!</p>");
}

void setup() {
  Serial.begin(115200);

  // 初始化蓝牙控制器
  esp_bt_controller_config_t bt_cfg = BT_CONTROLLER_INIT_CONFIG_DEFAULT();
  if (esp_bt_controller_init(&bt_cfg) != ESP_OK) {
    Serial.println("Bluetooth controller init failed");
    return;
  }
  if (esp_bt_controller_enable(ESP_BT_MODE_BTDM) != ESP_OK) {
    Serial.println("Bluetooth controller enable failed");
    return;
  }
  if (esp_bluedroid_init() != ESP_OK) {
    Serial.println("Bluedroid init failed");
    return;
  }
  if (esp_bluedroid_enable() != ESP_OK) {
    Serial.println("Bluedroid enable failed");
    return;
  }

  // 创建并配置蓝牙PAN网络接口
  esp_netif_t *pan_netif = esp_netif_create_default_wifi_ap();
  esp_netif_netstack_config_t netstack_cfg = ESP_NETIF_NETSTACK_DEFAULT_BT_PAN();
  esp_netif_config_t netif_cfg = ESP_NETIF_DEFAULT_BT_PAN_AP();
  esp_netif_new(&netif_cfg, &netstack_cfg, pan_netif);

  // 设置蓝牙设备名称(可自定义)
  esp_bt_gap_set_device_name("ESP32-BT-Gateway");
  // 设置蓝牙为可发现、可连接模式
  esp_bt_gap_set_scan_mode(ESP_BT_CONNECTABLE, ESP_BT_GENERAL_DISCOVERABLE);

  // 启动蓝牙PAN服务
  if (esp_pan_start() != ESP_OK) {
    Serial.println("PAN service start failed");
    return;
  }

  // 配置Web服务器路由
  server.on("/", handleRoot);
  server.begin();
  Serial.println("Bluetooth Web Server is running");
}

void loop() {
  server.handleClient();
}

3. 客户端连接与访问

  • 安卓设备:打开蓝牙,搜索到ESP32-BT-Gateway设备并配对,配对成功后进入蓝牙设置,启用该设备的"互联网访问"选项;此时安卓会获取ESP32分配的IP,ESP32的网关IP默认是192.168.4.1,直接在浏览器访问该IP即可。
  • Windows电脑:配对蓝牙设备后,进入"网络和共享中心",找到蓝牙网络连接,确认网络连接状态;获取分配的IP后,访问ESP32的网关IP即可。
  • Mac电脑:配对蓝牙设备后,系统会自动建立蓝牙网络连接,在网络设置中查看ESP32的网关IP,直接访问即可。

注意事项

  • 蓝牙PAN的带宽远低于WiFi,仅适合低流量的Web应用(如控制界面、数据查询),不适合传输大文件或高清视频。
  • 部分旧设备可能不支持蓝牙PAN功能,需确保客户端设备支持BNEP协议。
  • 若需要密码配对,可以通过esp_bt_gap_set_pin函数设置蓝牙配对密码。

内容的提问来源于stack exchange,提问作者dronus

火山引擎 最新活动