Ik weet niet zeker of ik in het juiste deel van het forum zit...
doel: maken van een library die een deel van de terugkerende code in mijn ESP-projecten verzameld. In het bijzonder het connecteren met wifi en mqtt server en nadien controleren of wifi en mqtt nog verbonden is (en indien niet meer verbonden, opnieuw proberen te verbinden).
Ik heb de code wat geknipt hieronder om de focus te leggen op daar waar het misloopt:
Er wordt gebruikt gemaak van de PubSubclient (Knolleary).
lib.h
lib.cpp
main.cpp
PubSubclient.cpp (knolleary):
De code compileert correct maar op de ESP krijg ik telkens een kernel panic die terug te leiden is naar
foutmelding:
EXCVADDR: --> 0; dus dit lijkt een er ergens een pointer naar foute plaats verwijst, alsof bij het uitvoeren van de functie "connected()", het programma de weg kwijt is?
Mijn vraag:
hebben jullie een idee wat ik verkeerd doe?
Relevante software en hardware die ik gebruik
platformio
PubSubClient van Knolleary
doel: maken van een library die een deel van de terugkerende code in mijn ESP-projecten verzameld. In het bijzonder het connecteren met wifi en mqtt server en nadien controleren of wifi en mqtt nog verbonden is (en indien niet meer verbonden, opnieuw proberen te verbinden).
Ik heb de code wat geknipt hieronder om de focus te leggen op daar waar het misloopt:
Er wordt gebruikt gemaak van de PubSubclient (Knolleary).
lib.h
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| class wifi_mqtt { public: wifi_mqtt(String wifiSsid, String wifiPassword, const char* mqttServer); void begin(); bool connect_mqtt(); bool reconnect(); private: WiFiClient espClient; PubSubClient mqtt_client; String _mqtt_client_id; }; |
lib.cpp
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| wifi_mqtt::wifi_mqtt(String wifiSsid, String wifiPassword, const char* mqttServer) { ... PubSubClient mqtt_client(espClient); _mqtt_client_id=String(random(0xffff), HEX); ... } void wifi_mqtt::begin() { connect_wifi(); connect_mqtt(); } ... bool wifi_mqtt::connect_mqtt() { mqtt_client.setServer(_mqttServer, 1883); mqtt_client.setBufferSize(1024); if (!mqtt_client.connected()) { // Attempt to connect if (mqtt_client.connect(_mqtt_client_id.c_str())) { Serial.println("MQTT connected"); } } } |
main.cpp
code:
1
2
3
4
5
| ... wifi_mqtt wifi_mqtt_client(ssid, passw, mqtt_server); void setup() { wifi_mqtt_client.begin(); } |
PubSubclient.cpp (knolleary):
code:
1
2
3
4
5
6
7
| boolean PubSubClient::connect(const char *id) { return connect(id,NULL,NULL,0,0,0,0,1); } boolean PubSubClient::connect(const char *id, const char *user, const char *pass, const char* willTopic, uint8_t willQos, boolean willRetain, const char* willMessage, boolean cleanSession) { if (!connected()) { int result = 0; } |
De code compileert correct maar op de ESP krijg ik telkens een kernel panic die terug te leiden is naar
lib.cpp | lijn_19 | if (mqtt_client.connect(_mqtt_client_id.c_str())) { |
PubSubclient.cpp | lijn_5 | if (!connected()) { |
foutmelding:
code:
1
2
3
4
5
6
7
8
9
| Guru Meditation Error: Core 1 panic'ed (LoadProhibited). Exception was unhandled. Core 1 register dump: PC : 0x400d2b49 PS : 0x00060130 A0 : 0x800d2d6d A1 : 0x3ffb21b0 A2 : 0x3ffc4034 A3 : 0x3ffc3ff4 A4 : 0x00000000 A5 : 0x00000000 A6 : 0x00000000 A7 : 0x00000000 A8 : 0x800d2b42 A9 : 0x3ffb2190 A10 : 0x00000000 A11 : 0x3f404d59 A12 : 0x22f696ad A13 : 0x3ffc4404 A14 : 0x00ff0000 A15 : 0xff000000 SAR : 0x00000020 EXCCAUSE: 0x0000001c EXCVADDR: 0x00000000 LBEG : 0x40089911 LEND : 0x40089921 LCOUNT : 0xfffffffd |
EXCVADDR: --> 0; dus dit lijkt een er ergens een pointer naar foute plaats verwijst, alsof bij het uitvoeren van de functie "connected()", het programma de weg kwijt is?
Mijn vraag:
hebben jullie een idee wat ik verkeerd doe?
Relevante software en hardware die ik gebruik
platformio
PubSubClient van Knolleary