Blinker ESP32 内存不足 无法连接服务器-Arduino中文社区 - Powered by Discuz! Archiver

a2302004040 发表于 2020-1-17 23:22

Blinker ESP32 内存不足 无法连接服务器





基本信息
[*] 这个问题满足提问指南
[*] 我阅读了开发文档
[*] 我使用了最新的库及APP进行测试,但是问题仍然存在
[*] 我搜索过类似问题的解决方法但是仍然无法解决
[*] 有设备端的LOG信息
[*][] 有编译报错信息
[*] 我已填写基本信息
设备信息
[*]硬件:
[*]接入方式:
[*]package版本:
[*]blinker库版本:
[*]开发环境:
[*]操作系统:
IDE 中的设置
[*]Module:
[*]Flash Mode:
[*]Flash Size:
[*]lwip Variant: [(不存在)]
[*]Reset Method: [(不存在)]
[*]Flash Frequency:
[*]CPU Frequency:
[*]Upload Using:
[*]Upload Speed: 手机信息及APP信息
[*](APP没有问题,暂时不填)

问题描述Blinker 无法连接服务器,日志中提示似乎是内存不足。难道是BluetoothSerial占用了太多内存?如果是这样,使用带psRAM的ESP32模块可以解决问题吗?代码#include "BluetoothSerial.h"
#define BLINKER_WIFI
#define BLINKER_ALIGENIE_LIGHT
#include <Blinker.h>
BluetoothSerial SerialBT;
bool connected;

uint8_t address= {0xc9, 0xa0, 0x20, 0x47, 0xbe, 0x89};
const uint8_t off = {0x01, 0xfe, 0x00, 0x00, 0x51, 0x81, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x07, 0x01, 0x03, 0x01, 0x02, 0x0e, 0x00};
const uint8_t on = {0x01, 0xfe, 0x00, 0x00, 0x51, 0x81, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x07, 0x01, 0x03, 0x01, 0x01, 0x0e, 0x00};
const uint8_t col = {0x01, 0xfe, 0x00, 0x00, 0x51, 0x81, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x07, 0x02, 0x03, 0x01, 0x01, 0x0e, 0x00};

void aligeniePowerState(const String & state)
{
BLINKER_LOG("need set power state: ", state);

if (state == BLINKER_CMD_ON) {
    SerialBT.write(on, 24);

    BlinkerAliGenie.powerState("on");
    BlinkerAliGenie.print();
}
else if (state == BLINKER_CMD_OFF) {
    SerialBT.write(off, 24);

    BlinkerAliGenie.powerState("off");
    BlinkerAliGenie.print();
}
}

void setup() {
Serial.begin(115200);
Serial1.begin(115200, SERIAL_8N1, 33, 32);
BLINKER_DEBUG.stream(Serial);
SerialBT.begin("ESP32test", true);
connected = SerialBT.connect(address);

if (connected) {
    Serial.println("Connected Successfully!");
};
SerialBT.write(on, 24);
SerialBT.flush();
delay(100);
SerialBT.write(off, 24);
delay(300);
if (SerialBT.available()) {
    SerialBT.flush();
    Serial.println("Link OK");
} else {
    Serial.println("Link ERROR");
    delay(100000);
    ESP.restart();
};
Blinker.begin("(api key是正确的)", "bu~zhun~ceng~wang(2.4G)", "(wifi密码是正确的)");
BlinkerAliGenie.attachPowerState(aligeniePowerState);
}

void loop() {
Blinker.run();
}LOG信息
_init_bt(): device name set
esp_spp_cb(): ESP_SPP_INIT_EVT
connect(): master : remoteAddress
esp_spp_cb(): ESP_SPP_DISCOVERY_COMP_EVT
esp_spp_cb(): ESP_SPP_DISCOVERY_COMP_EVT: spp connect to remote
esp_spp_cb(): ESP_SPP_CL_INIT_EVT
esp_spp_cb(): ESP_SPP_OPEN_EVT
Connected Successfully!
Link OK


__ __ __
/\ \ /\ \ __ /\ \ v0.3.1
\ \ \___ \ \ \ /\_\ ___\ \ \/'\ __ _ __
\ \ '__`\\ \ \ \/\ \ /' _ `\ \ , < /'__`\/\`'__\
\ \ \L\ \\ \ \_\ \ \/\ \/\ \ \ \\`\ /\ __/\ \ \./
\ \_,__/ \ \__\\ \_\ \_\ \_\ \_\ \_\ \____\\ \_\
\/___/ \/__/ \/_/\/_/\/_/\/_/\/_/\/____/ \/_/
To better use blinker with your IoT project!
Download latest blinker library here!
=> https://github.com/blinker-iot/blinker-library

Connecting to bu~zhun~ceng~wang(2.4G)
_eventCallback(): Event: 0 - WIFI_READY
_eventCallback(): Event: 2 - STA_START
ESP32_MQTT initialized...

===========================================================
================== Blinker Timer loaded! ==================
Warning!EEPROM address 1536-2431 is used for Blinker Timer!
============= DON'T USE THESE EEPROM ADDRESS! =============
===========================================================

begin(): Expanding EEPROM from 64 to 4096
_eventCallback(): Event: 4 - STA_CONNECTED
_eventCallback(): Event: 7 - STA_GOT_IP
_eventCallback(): STA IP: 10.10.10.208, MASK: 255.255.255.0, GW: 10.10.10.1
WiFi Connected.
IP Address:
10.10.10.208
beginInternal(): unexpected protocol: https, expected http
beginInternal(): host: iotdev.clz.me port: 443 url: /api/v1/user/device/diy/auth?authKey=8f10cf06422e&aliType=light
start_ssl_client(): WARNING: Use certificates for a more secure communication!
_handle_error(): : (-10368) X509 - Allocation of memory failed
connect(): start_ssl_client: -10368
connect(): failed connect to iotdev.clz.me:443
returnError(): error(-1): connection refused
GET... failed, error: connection refused
returnError(): error(-4): not connected

disconnect(): tcp is closed

ERROR: Maybe you have put in the wrong AuthKey!
ERROR: Or maybe your request is too frequently!
ERROR: Or maybe your network is disconnected

编译信息(编译时一切正常)

coloz 发表于 2020-1-18 01:25

ESP32外接个蓝牙模块???这什么骚操作?

coloz 发表于 2020-1-18 01:27

1.看文档 https://diandeng.tech/doc/getting-start-esp32-ble
2.使用文档中的链接下载最新的blinker lib
3.esp32自带蓝牙,不需要外接蓝牙模块,lib中提供的示例

a2302004040 发表于 2020-1-18 21:40

那个..你理解错了:L

BluetoothSerial不是串口蓝牙模块!
BluetoothSerial不是串口蓝牙模块!
BluetoothSerial不是串口蓝牙模块!

BluetoothSerial是ESP32自带的一个库,用途是和手机或者其它ESP32通过蓝牙SPP协议(蓝牙串口协议)通信
在这个项目中我打算使用这个库连接一个第三方的吸顶灯
那个吸顶灯只能通过蓝牙连接手机,并且经过我的抓包分析,这个灯使用SPP协议
并且我抓到了手机和吸顶灯的通信数据(就是代码中的on,off,col数组)
所以我打算使用Blinker将ESP32通过WiFi联网,接收天猫精灵的控制数据,然后通过蓝牙发送开关灯信号给吸顶灯。
不是 手机通过蓝牙连接ESP32!

a2302004040 发表于 2020-1-18 23:38

coloz 发表于 2020-1-18 01:25
ESP32外接个蓝牙模块???这什么骚操作?

那个..你搞错了

coloz 发表于 2020-1-19 00:46

a2302004040 发表于 2020-1-18 23:38
那个..你搞错了

抱歉,是我搞错了。esp32 arduino sdk的固件都会非常大,目前基本无解,只有等官方优化,或者尝试使用freertos sdk

a2302004040 发表于 2020-1-19 22:34

coloz 发表于 2020-1-19 00:46
抱歉,是我搞错了。esp32 arduino sdk的固件都会非常大,目前基本无解,只有等官方优化,或者尝试使用fre ...

如果自带520KB的内存不够,外接psRAM可以解决吗?

coloz 发表于 2020-1-21 12:16

a2302004040 发表于 2020-1-19 22:34
如果自带520KB的内存不够,外接psRAM可以解决吗?

不清楚,这个只有看看esp datasheet

LeiGeE 发表于 2020-2-3 11:33

既然数组是只读的,就把数组放入flash里面就好啊,在数组加上PROGMEM如:
char table[]PROGMEM={};
页: [1]
查看完整版本: Blinker ESP32 内存不足 无法连接服务器