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?
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?
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 ... :(
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
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 ==============================================================
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...
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.
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 :)
"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?
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 :)
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.