1. esp32作为https服务端,接收客户端https请求时,报如下错误:
日志打印如下:Dynamic Impl: mbedtls_ssl_fetch_input error=29312
分析:
将错误码29312转换成16进制为0x7280,通过代码定义可知道是MBEDTLS_ERR_SSL_CONN_EOF,即大概率是对端关闭了连接导致的。
复现:
通过postman测试工具,如将请求超时时间设置为4s,在网络比较差的情况下,是有概率出现对端关闭了连接,导致客户端没有收到应答数据,所以客户端在https请求数据时设置超时时间要适当加长。
2. esp32运行内存优化
-
对支持psram扩展的芯片,可以勾选上Support for external,SPI-connected RAM选项扩大内存
-
对于需要使用到蓝牙的场景,如果只是实现类似配网功能,可以选用只支持低功耗蓝牙BLE功能的NimBLE,减少蓝牙占用内存资源
-
mbedtls内存优化,可以去掉勾选保留对端证书(keep peer certificate after handshake completion)来减少内存占用
-
更多内存优化可以参考官方链接:https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-guides/performance/ram-usage.html
3. Https OTA升级关于证书认证问题
对于不需要进行相关证书认证的,可以勾选跳过证书认证(skip server certificate verification by default)
4. 分区表规划
对于项目中需要同时使用蓝牙功能、wifi功能以及ota功能的,会使得编译后程序占用flash资源比较多,一般会超过1M空间,所以在分区表规划的时候需要预留足够的ota分区。esp32原本的分区表是一个固件(factory)和两个OTA(ota_0,ota_1),而固件(factory)分区是用来兜底的,但是这部分可以用ota_0或ota_1来作为兜底的功能分区。那么固件(factory)分区是可以删除,把这部分的flash长度平均到ota_0和ota_1,来扩大可编程flash空间
nvs, data, nvs, 0x9000, 0x4000, 16k
otadata, data, ota, 0xD000, 0x2000, 8k
phy_init, data, phy, 0xF000, 0x1000, 4k
ota_0, app, ota_0, 0x10000, 0x1C0000, 1792k
ota_1, app, ota_1, 0x1D0000, 0x1C0000,