Forum: Mikrocontroller und Digitale Elektronik (Anfänger)probleme mit PlatformIO (mit VSC)


von Christian B. (cb1969)


Lesenswert?

Hallo

Ich versuche gerade den Quellcode von OpenDTU ( siehe auch hier: 
Beitrag "Re: Wechselrichter Hoymiles HM-xxxx 2,4 GhZ Nordic Protokoll?" ) derart zu 
erweitern, dass der ESP die Messwerte direkt in meine MySQL Datenbank 
speichert.

Ich habe ein ähnliches Projekt mit einem LoRa-fähigen ESP bereits für 
meine Wasserzisterne verwirklicht (allerdings in der Arduinoumgebung) 
und dachte, dass es ja kein großes Problem sein würde, die erforderliche 
Bibliothek und die paar Zeilen Quellcode hinzuzufügen.

Tja. Falsch gedacht.
Ich stolpere seit Tagen in dieser (für mich neuen und ziemlich 
unübersichtlichen) IDE herum und stoße ständig auf, für mich 
unerklärliche, Fehler.

Inzwischen ist es mir dank der Hilfe im anderen Thread gelungen OpenDTU 
von Github (mit dem ich mich ebensowenig auskenne) zu klonen und 
unverändert zu kompilieren (mit AhoyDTU, das ich eigentlich bevorzugen 
würde, schaffe ich das bis heute nicht).

Aber sobald ich die MySQL-Bibliothek ( 
https://github.com/ChuckBell/MySQL_Connector_Arduino ) auch nur zum 
Projekt hinzufüge (ohne auch nur eine Zeile des ursprünglichen Codes zu 
ändern (zumindest nicht wissentlich)), funktioniert kein Build mehr.
Und das aber mit Fehlermeldungen, die m.E. nichts mit der neuen 
Bibliothek zu tun haben (z.B.: In file included from 
src/Display_Graphic.cpp:2:
include/Display_Graphic.h:5:10: fatal error: U8g2lib.h: No such file or 
directory)

Kann mir da vielleicht jemand auf die Sprünge helfen und sagen was ich 
falsch mache?

Danke
Christian

von Εrnst B. (ernst)


Lesenswert?

Christian B. schrieb:
> auch nur zum
> Projekt hinzufüge

Wie hast du das "hinzufügen" gemacht? Eine neue Dependency in der 
platformio.ini eingetragen, oder das Mysql-Modul selbst heruntergeladen 
und irgendwo in den Source-Tree entpackt?

https://registry.platformio.org/libraries/chuckbell/MySQL%20Connector%20Arduino/installation

von Christian B. (cb1969)


Lesenswert?

Auf zwei verschieden Arten.

Erst habe ich die Dependency in die platformio.ini eingetragen (das war 
allerdings mit dieser Bibliothek: 
https://github.com/khoih-prog/MySQL_MariaDB_Generic (ist, glaub ich, ein 
Abkömmling der Obigen)).

Da funktionierte das Kompilieren wenigstens wieder nachdem ich die 
Einträge aus der platformi.ini entfernt hatte.

Als letztes habe ich die Bibliothek hinzugefügt indem ich in dem 
senkrechten Menü von PlatformIO auf Libraries geklickt habe und 
anschließend nach mysql gesucht und "Add to Project".

Da geht das Compilieren auch nicht mehr, wenn ich sie wieder 
deinstalliere ... :(

von Christian B. (cb1969)


Lesenswert?

Neuer Versuch:

Jetzt habe ich nur "chuckbell/MySQL Connector Arduino@^1.2.0" im Bereich 
[env] lib_deps eingefügt und auf Build gedrückt.

Das kommt dabei raus: ;(

Compiling .pio\build\generic_esp32c3\lib5a5\MySQL Connector 
Arduino\MySQL_Encrypt_Sha1.cpp.o
.pio/libdeps/generic_esp32c3/MySQL Connector 
Arduino/src/MySQL_Encrypt_Sha1.cpp: In member function 'virtual size_t 
Encrypt_SHA1::write(uint8_t)':
.pio/libdeps/generic_esp32c3/MySQL Connector 
Arduino/src/MySQL_Encrypt_Sha1.cpp:89:1: error: no return statement in 
function returning non-void [-Werror=return-type]
 }
 ^
.pio/libdeps/generic_esp32c3/MySQL Connector 
Arduino/src/MySQL_Encrypt_Sha1.cpp: In member function 'virtual size_t 
Encrypt_SHA1::write(uint8_t*, int)':
.pio/libdeps/generic_esp32c3/MySQL Connector 
Arduino/src/MySQL_Encrypt_Sha1.cpp:95:1: error: no return statement in 
function returning non-void [-Werror=return-type]
 }
 ^
cc1plus.exe: all warnings being treated as errors

von Εrnst B. (ernst)


Lesenswert?

> Arduino/src/MySQL_Encrypt_Sha1.cpp:89:1: error: no return statement in
> function returning non-void [-Werror=return-type]

Das ist ein Fehler in der MySQL-Lib. Entweder den Compiler ignorieren 
lassen (-Werror Compiler-Optionen ändern)

oder reparieren:
https://github.com/ChuckBell/MySQL_Connector_Arduino/commit/da48660b9b60cd717e856ed503bcc55ed91d755a

Leider hat der Entwickler die reparierte Version nicht 
getaggt/veröffentlicht...
Platformio kann aber den aktuellen Git-Stand verwenden:

lib_deps =
        https://github.com/ChuckBell/MySQL_Connector_Arduino

statt
   chuckbell/MySQL Connector Arduino@^1.2.0

von J. S. (jojos)


Lesenswert?

Lass mal die Versionsangabe in der dependency weg, der Fehler wurde nach 
dem Release gefixt, ist aber nur im aktuellen master branch.

von Christian B. (cb1969)


Lesenswert?

Danke euch. Ist wohl ein (kleiner) Fortschritt.

Aber viel weiter kommt der Compiler wieder nicht:

Archiving .pio\build\lolin32_lite\libf06\libU8g2.a
.pio/libdeps/lolin32_lite/MySQL Connector Arduino/src/MySQL_Packet.cpp: 
In member function 'int MySQL_Packet::read_lcb_int(int)':
.pio/libdeps/lolin32_lite/MySQL Connector 
Arduino/src/MySQL_Packet.cpp:523:7: warning: unused variable 'size' 
[-Wunused-variable]
   int size = 0;
       ^~~~
.pio/libdeps/lolin32_lite/MySQL Connector Arduino/src/MySQL_Cursor.cpp: 
In member function 'char* MySQL_Cursor::read_string(int*)':
.pio/libdeps/lolin32_lite/MySQL Connector 
Arduino/src/MySQL_Cursor.cpp:389:12: error: 'char* strncpy(char*, const 
char*, size_t)' output truncated before terminating nul copying 4 bytes 
from a string of the same length [-Werror=stringop-truncation]
     strncpy(str, "NULL", 4);
     ~~~~~~~^~~~~~~~~~~~~~~~
cc1plus.exe: all warnings being treated as errors
Compiling .pio\build\lolin32_lite\libf59\CMT2300a\cmt2300a.c.o
*** [.pio\build\lolin32_lite\lib894\MySQL Connector 
Arduino\MySQL_Cursor.cpp.o] Error 1
============================================================== [FAILED] 
Took 77.65 seconds 
==============================================================


Environment    Status    Duration
-------------  --------  ------------
lolin32_lite   FAILED    00:01:17.647

von Εrnst B. (ernst)


Lesenswert?

Christian B. schrieb:
> output truncated before terminating nul copying 4 bytes
> from a string of the same length [-Werror=stringop-truncation]
>      strncpy(str, "NULL", 4);

Ist zwar ein Fehler, aber der Entwickler hat ihn in der darauf folgenden 
Zeile repariert:
1
    strncpy(str, "NULL", 4);
2
    str[4] = 0x00;

-> Versuch erstmal das "-Werror" aus den Compileroptionen rauszunehmen. 
Ist zwar bei eigenem Code eine gute Idee, aber bei Fremdcode geht das 
halt nicht immer...

von J. S. (jojos)


Lesenswert?

Man könnte das Warnungen als Fehler abschalten, aber wenn eine Lib so 
unsauber programmiert ist, dann würde ich das nicht machen.
Der richtige Weg ist die Fehler in der Quelle zu beheben:
Zuerst einen Fork der Lib erstellen (anmelden bei Github, dann ist das 
nur ein Klick).
Dann branch erstellen, z.B. fix-unused-var. In diesem dann die 
Fehlerkorrekturen machen und diesen Branch als dependency in das pio 
Projekt eintragen.
Wenn das funktioniert, dann Pull Request an den Autor der Lib.

Meine Empfehlung: erst git, dann programmieren lernen. Git ist die beste 
Erfindung seit Bier in Dosen. Wobei gerade heute wohl letzteres mehr 
gebraucht wird 🍻

Für die unused vars gibt es in C++ das Attribut maybe unused. Wenn 
man die warum auch immer noch da stehen lassen möchte. Solche Relikte 
sind dank git aber auch meist überflüssig.

: Bearbeitet durch User
von Christian B. (cb1969)


Lesenswert?

Ich habe jetzt (aufgrund eines Tipps auf dieser Seite: 
https://github.com/facebookarchive/xcbuild/issues/297 ) "strncpy" durch 
"memcpy" ersetzt (ohne zu wissen was ich da tue) und es compiliert :)

Ich habe es noch nicht auf einen Controller geflasht, gehe aber 
optimistischerweise davon aus, dass es laufen wird.

D.h. ich werde als nächstes versuchen meinen Code einzufügen ...

@J.S.:

Du hast absolut recht, das wäre die richtige Vorgangsweise.
Aber: Wie gesagt, prorammiere ich seit Jahrzehnten in Pascal (auch 
wirklich große, kommerzielle Projekte) und konnte mich nie mit C/C++ 
anfreunden (trotz mehrerer Anläufe).
Ich sehe Git auch als großartige Sache an (Im Gegensatz zu Dosenbier, 
Bier gehört in Flaschen! :) ), möchte aber in diesem Fall eigentlich nur 
ein begrenztes Ziel erreichen (Die Werte aus meinem Wechselrichter in 
die DB bekommen) und glaube nicht, dass ich (auch weil ich außerhalb der 
virtuellen Welt einiges an Projekten (sowohl zum Broterwerb als auch zum 
Vergnügen) am laufen habe) in meinem Alter noch viel Zeit investieren 
möchte um diese tolle Sache zu erlernen. (Aber man soll ja nie nie sagen 
...)

Danke für eure Hilfe, mal sehen wie lang es dauert, bis ich die nächste 
(aus eurer Sicht möglicherweise dumme) Frage stelle :)

LG
CHristian

von Stefan F. (Gast)


Lesenswert?

J. S. schrieb:
> Git ist die beste Erfindung seit Bier in Dosen.

Vorher gab es CVS, das ist wie Bier in Fässern (etwas unhandlicher aber 
auch gut).

von J. S. (jojos)


Lesenswert?

5L in Glas sind so schwer zu schleppen …

Und nein, das sind keine dummen Fragen.

von Εrnst B. (ernst)


Lesenswert?

Christian B. schrieb:
> "strncpy" durch
> "memcpy" ersetzt (ohne zu wissen was ich da tue) und es compiliert

Jaja... wenn die Blinden versuchen, den Quelltext vom Einäugigen zu 
reparieren...

Der erste kann nicht bis 5 Zählen, und schreibt eine 4 in den Quelltext.
Der nächste sieht den Fehler, will aber die 4 nicht wegnehmen, sondern 
packt von Hand ein str[4] = 0x00; dahinter.
Und dann kommen die nächsten Spezialisten, und machen ein memcpy aus dem 
strncpy, weil sie auch unbedingt an der falschen 4 festhalten wollen.

Ist "5" eine soo böse Zahl, dass man die nicht im Quelltext haben darf?

von Stefan F. (Gast)


Lesenswert?

Εrnst B. schrieb:
> Ist "5" eine soo böse Zahl, dass man die nicht im Quelltext haben darf?

Dafür muss man unbedingt eine spezielle Library hinzufügen. Am Besten 
eine aus dem Arduino Umfeld, damit die Qualität passt.

von Christian B. (cb1969)


Lesenswert?

@Ernst und Stefan

Ich verstehe eure Ressentiments zu 100% und bin mir dessen auch durchaus 
bewusst.
Aber wie gesagt: Ich habe nicht die Absicht mich (mehr als für diesen 
Fall notwendig) mit C/C++ zu beschäftigen, möchte nur dieses EINE 
Problem lösen und werde meine Lösung auch nur für meine Zwecke verwenden 
und nicht als Lösung mit nennenswerter Schöpfungshöhe veröffentlichen.

Aber (leider) geht es sich nicht aus in einem Leben alles zu erlernen 
und zu können, somit werde ich mit euren Spott und Hohn leben müssen :)

Schönen Feiertag
Christian

von Christian B. (cb1969)


Angehängte Dateien:

Lesenswert?

Kleiner Zwischenbericht (um nicht in der Suppe derer mitzuschwimmen, die 
stets Fragen, nichts machen und nie wieder (bis zur nächsten dummen 
Frage) von sich hören zu lassen):

Ich konnte das Programm inzwischen um die Funktionalität des Schreibens 
in die MySQL-DB erweitern (allerdings noch ohne die sensationell 
gelungenen Einstellmöglichkeiten von AhoyDTU dafür zu verwenden, somit 
sind die Zugangsdaten, Server-IP etc. noch im Quellcode) und das 
abgebildete (Lazarus-)Programm visualisiert die Daten der 
Sonnenstromproduktion.

Der ESP8266 mit meiner modifizierten Version läuft inzwischen seit sechs 
Tagen problemlos durch.

Danke nochmals für eure Unterstützung
Christian

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.