接到一个客户需求,利用ESP32+摄像头完成家庭燃气表数据的采集接入,大概流程:
一、设备配网:
通过微信小程序BLE连接到ESP32配网,配网完成后,把设备id绑定到相应的账号下。
样品购买:
https://item.taobao.com/item.htm?&id=593059823849&
让ChatGPT设计协议及代码如下:
设计一个通过微信小程序和BLE(蓝牙低功耗)给ESP32设备配网的协议需要考虑数据安全性、网络配置的有效性以及用户体验的流畅性。以下是一个建议的协议设计步骤:
1. 总体流程概述
- 用户通过微信小程序扫描设备的二维码:获取设备的蓝牙MAC地址或设备唯一标识。
- 微信小程序通过BLE与ESP32设备建立连接:启动BLE连接,进行初步的设备认证和握手。
- 传输Wi-Fi配置信息:将Wi-Fi的SSID和密码加密后通过BLE发送到ESP32。
- ESP32连接Wi-Fi并返回结果:ESP32尝试连接Wi-Fi,并通过BLE将连接结果返回给微信小程序。
- 小程序显示连接结果:如果连接成功,小程序显示成功页面;如果失败,显示错误信息。
2. 协议设计详细步骤
Step 1: 设备扫描和BLE连接
- 设备二维码扫描:
- 用户通过微信小程序扫描设备上的二维码,获取设备的蓝牙MAC地址或者设备唯一标识符。
- BLE连接:
- 小程序通过获取到的蓝牙MAC地址与ESP32设备建立BLE连接。
- 使用标准的BLE连接过程,建立GATT(通用属性协议)会话,选择适当的服务和特征值来进行数据传输。
Step 2: 设备认证与握手
- 设备身份认证:
- ESP32生成一个随机数(nonce),通过BLE发送给小程序。
- 小程序接收到nonce后,使用设备提供的公钥对其进行签名并将签名返回ESP32。
- ESP32验证签名是否正确,以此确认微信小程序的合法性。
- 握手完成:
- 认证成功后,双方交换加密密钥(如AES对称密钥)以保护后续的数据传输。
Step 3: Wi-Fi配置信息传输
-
数据加密:
- 小程序加密Wi-Fi的SSID和密码,确保传输过程中的数据安全。
- 可以使用AES对称加密算法来加密SSID和密码。
-
传输Wi-Fi配置信息:
- 小程序将加密后的Wi-Fi SSID和密码通过BLE发送给ESP32设备。
- 建议分块传输数据,以确保每个BLE包大小不超过BLE的最大传输单元(MTU)。
-
配置确认:
- ESP32接收到数据后解密并验证配置。
- ESP32确认数据完整性后,通过BLE发送一个确认信号给小程序。
Step 4: Wi-Fi连接尝试与结果返回
- ESP32连接Wi-Fi:
- ESP32使用接收到的SSID和密码尝试连接指定的Wi-Fi网络。
- 连接结果返回:
- 连接成功时,ESP32发送成功状态和IP地址回微信小程序。
- 连接失败时,ESP32发送错误代码或错误信息回微信小程序,指出具体的失败原因(如密码错误、网络不可达等)。
Step 5: 小程序显示结果
- 成功界面:
- 如果ESP32成功连接Wi-Fi,小程序显示成功界面,并提示用户设备已成功连接至Wi-Fi网络。
- 失败处理:
- 如果连接失败,小程序根据ESP32返回的错误信息提示用户重新尝试,或者手动输入Wi-Fi信息进行再次配置。
3. 通信数据包结构
握手阶段数据包
- 请求握手(微信小程序 -> ESP32):
Opcode
: 0x01 (握手请求)Nonce
: 16字节的随机数
- 握手响应(ESP32 -> 微信小程序):
Opcode
: 0x02 (握手响应)Nonce
: 16字节的随机数Signature
: 使用设备私钥签名的Nonce
- 密钥交换(微信小程序 -> ESP32):
Opcode
: 0x03 (密钥交换)Encrypted_Key
: AES加密的对称密钥
Wi-Fi配置阶段数据包
- 传输Wi-Fi信息(微信小程序 -> ESP32):
Opcode
: 0x10 (Wi-Fi信息传输)SSID_Length
: SSID的长度SSID
: 加密后的SSIDPassword_Length
: 密码的长度Password
: 加密后的密码
- 确认Wi-Fi配置(ESP32 -> 微信小程序):
Opcode
: 0x11 (配置确认)Status
: 0x00(成功),0x01(失败)
- 连接结果返回(ESP32 -> 微信小程序):
Opcode
: 0x12 (连接结果)Status
: 0x00(成功),0x01(失败)IP_Address
: 成功连接时返回的IP地址(可选)
4. 安全性考虑
- 数据加密:确保所有的Wi-Fi配置数据都经过AES加密,以防止中间人攻击。
- 认证机制:使用设备证书或公钥进行认证,防止非法设备或程序的接入。
- 重放攻击防护:使用随机数