You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Web Bluetooth向ESP32发送WiFi凭证时JSON无效问题求助

Web Bluetooth向ESP32 BLE设备发送WiFi凭证时JSON解析失败问题

尝试通过Web Bluetooth向Olimex ESP32-WROOM-32F BLE设备发送WiFi凭证,无论调整JSON结构(如{ssid:'',pass:''}等多种格式)、使用writeValue/writeValueWithResponse/writeValueWithoutResponse任一写入方法,设备始终返回“Received invalid JSON”错误。

Web Bluetooth代码

const connectToDeviceAndSubscribeToUpdates = async () => {
    const device = await navigator.bluetooth.requestDevice({
        // filers: ["ESP32-E89F6DD0DF34"],
        acceptAllDevices: true,
        optionalServices: ["0000aaaa-ead2-11e7-80c1-9a214cf093ae"],
    });

    let server = await device.gatt.connect();
    const service = await server.getPrimaryService(
        "0000aaaa-ead2-11e7-80c1-9a214cf093ae"
    );

    let characteristic = await service.getCharacteristic(
        "00005555-ead2-11e7-80c1-9a214cf093ae"
    );
    console.log(characteristic);

    var thing = await characteristic.readValue();
    var encoder = new TextEncoderStream();
    let data = { ssidPrim: "", pwPrim: "", ssidSec: "", pwSec: "" };
    await characteristic.writeValueWithoutResponse(
        encoder.encode(JSON.stringify(data))
    );
    console.log(response);
};

document.getElementById("connect").addEventListener("click", (e) => {
    connectToDeviceAndSubscribeToUpdates();
});

Windows PowerShell串口读取脚本

function read-com {
 $port= new-Object System.IO.Ports.SerialPort COM8,115200,None,8,one
 $port.Open()
 do {
 $line = $port.ReadLine()
 Write-Host $line 
 } while ($port.IsOpen)
 }

设备串口日志

ets Jul 29 2019 12:21:46

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:1344
load:0x40078000,len:13836
load:0x40080400,len:3608
entry 0x400805f0
Build: Feb 22 2023 22:32:28
Read from preferences:
primary SSID: hhhh password: hhhh
secondary SSID: eeee password: tttttttt
BLE advertising using ESP32-E89F6DD0DF34
Start scanning for networks
Found AP: UPC1690653 RSSI: -42
Found AP: UPC5088637 RSSI: -71
Found AP: Wi-Free #InternetUPCNajszybszy RSSI: -71
Found AP: UPC1690653_EXT RSSI: -73
Found AP: UPC3006601 RSSI: -77
Found AP: Wi-Free #InternetUPCNajszybszy RSSI: -77
Found AP: UPC244036972 RSSI: -83
Found AP: Wi-Free #InternetUPCNajszybszy RSSI: -85
Found AP: UPC4415581 RSSI: -85
Found AP: UPCA1C5DBA RSSI: -86
Found AP: NETIASPOT-72E0C0 RSSI: -86
Found AP: Wi-Free #InternetUPCNajszybszy RSSI: -87
Found AP: UPC1369909 RSSI: -88
Found AP: UPC1176318 RSSI: -90
Found AP: Apartamentowiec Bonczyka_25 RSSI: -91
Found AP: Wi-Free #InternetUPCNajszybszy RSSI: -91
Found AP: [air purifier]_E30AJT1003236X RSSI: -95
Found AP: Wi-Free #InternetUPCNajszybszy RSSI: -95
Found AP: UPC245739629 RSSI: -95
Found AP: UPC5562094 RSSI: -97
Found AP: Wi-Free #InternetUPCNajszybszy RSSI: -97
Could not find any AP


##################################
Internal Total heap 258752, internal Free Heap 151220
SPIRam Total heap 0, SPIRam Free Heap 0
ChipRevision 3, Cpu Freq 240, SDK Version v4.4.3
Flash Size 4194304, Flash Speed 80000000
##################################


BLE client connected
BLE onRead request
Stored settings: {"ssidPrim":"hhhh","pwPrim":"hhhh","ssidSec":"eeee","pwSec":"tttttttt"}
BLE client disconnected
BLE client connected
BLE onRead request
Stored settings: {"ssidPrim":"hhhh","pwPrim":"hhhh","ssidSec":"eeee","pwSec":"tttttttt"}
Received over BLE: {"information":{"ssidPrim":"UPC1690653","pwPrim":"******"}}
Received invalid JSON

排查思路

  • 匹配ESP32端期望的JSON结构:从日志看设备存储的格式是顶层直接包含ssidPrim等字段,但收到的是嵌套在information对象中的JSON,确认ESP32端是否要求非嵌套的结构。
  • 更换编码方式:用TextEncoder替代TextEncoderStream,避免流处理可能导致的数据分段,代码改为new TextEncoder().encode(JSON.stringify(data))。
  • 启用带响应的写入:使用writeValueWithResponse,确保设备完整接收数据后返回确认,排查无响应模式下的数据丢失问题。
  • 验证发送的JSON字符串:在发送前用console.log(JSON.stringify(data))输出,确认生成的JSON语法完全合规(键和值均用双引号,无语法错误)。
  • 检查ESP32端的BLE接收逻辑:
    • 确认BLE特征的MTU值,若JSON长度超过MTU,需在ESP32端实现分段数据拼接逻辑,确保完整接收后再解析。
    • 检查ESP32端的JSON解析代码,是否在解析前去除了多余的空白字符或控制字符(如换行、回车)。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 08:32:53