Witam.
Od dłuższego czasu sczytuję czujniki temp/wilg xiaomi mija za pomocą dwóch ESP32 (parter/piętro). Kod jaki mam wpisany został mi “podarowany” przez jakąś przyjazną duszę, a wygląda on tak:
Gdy zechcę dodać jakikolwiek binary sensor kod się nie kompiluje i zwraca następujący bład:
collect2: error: ld returned 1 exit status
*** [/data/esp32-parter/.pioenvs/esp32-pietro/firmware.elf] Error 1
Gdy skasuję sensor, wszystko wraca do normy.
NA esphome.io nie znalazłem ograniczeń dla ESP bluetooth tracker czy proxy (choć przyznam, że nieświadomie mam umieszczone oba wpisy i nie jestem pewien czy oba są niezbędne do moich celów), co do wykorzystywania tych funkcji jednocześnie z GPIO.
Czy wiecie, dlaczego kod się nie kompiluje i nie mogę korzystać z GPIO?
To są płytki z przewodowym Ethernetem?
Jeśli nie, to ten kod jest do poprawki od wielu miesięcy.
Więcej info tu:
Wzorcowy kod dla płytek używających WiFi równolegle z BT (do wywalenia interval i window)
Wracając do tematu innych GPIO, to generalnie jest błąd linkera, więc prawdopodobnie masz jakieś błędy już wcześniej, ale do diagnozy to by się przydały
pełny YAML po twoich modyfikacjach
pełny log kompilatora, a nie tylko ostatni błąd (może gdzieś wcześniej jest informacja o pierwotnym błędzie, pewnie jest)
W sumie skoro to błąd linkera, to przyczyny mogą być zewnętrzne (np. uszkodzony plik) możesz zrobić Clean Build Files przed ponowną kompilacją.
Nie ta jest w porządku (swoją drogą jest kluczowa dla wygenerowania nazwy z MAC-adressu, gdyby np. wykorzystać publikowanie kodu na githubie), chodzi o timingi dla Bluetooth - wymieniłem wcześniej, które 2 linijki usunąć (jeśli jest wykorzystywane WiFi, to timingi muszą być domyślne - tam oba radia pracują na tej samej antenie).
Linking /data/esp32-pietro/.pioenvs/esp32-pietro/firmware.elf
RAM: [== ] 16.1% (used 52692 bytes from 327680 bytes)
Flash: [======= ] 71.8% (used 1318173 bytes from 1835008 bytes)
Building /data/esp32-pietro/.pioenvs/esp32-pietro/firmware.bin
Creating esp32 image...
Successfully created esp32 image.
esp32_create_combined_bin(["/data/esp32-pietro/.pioenvs/esp32-pietro/firmware.bin"], ["/data/esp32-pietro/.pioenvs/esp32-pietro/firmware.elf"])
Wrote 0x153390 bytes to file /data/esp32-pietro/.pioenvs/esp32-pietro/firmware-factory.bin, ready to flash to offset 0x0
======================== [SUCCESS] Took 296.27 seconds ========================
INFO Successfully compiled program.
Wprawdzie za pierwszym razem nie bez szopek (wywrócił mi się HA w momencie linkowania - co za zbieg okoliczności? jakkolwiek trudno oceniać, bo eksperymentuję właśnie z wrześniowym wydaniem ESPHome i coś się mogło u mnie “pogryźć”).
tak, o te.
Jakkolwiek w kwestii twoich logów z kompilacji, to takie jak wrzuciłeś pochodzą z prekompilowanego projektu, gdy już masz setki plików w cache (właściwie to praktycznie nie kompilacja od zera tylko samo linkowanie), czyli są za krótkie bo nie wiadomo co się działo przy pierwotnej kompilacji - wtedy logi są “kilometrowej” długości i takie są potrzebne do jakiejś diagnostyki.
Tutaj linker próbuje zlinkować już istniejące pliki z cache, więc nie wiemy w jakich okolicznościach one powstały.
Natomiast Clean Build Files powoduje wyczyszczenie środowiska i kompilację (wręcz z pobieraniem składników online) wszystkiego od nowa.
Na wstępie YAMLa puściłem przez lintera (Validate) i nie zawiera ostrzeżeń, tak samo przy kompilacji nie ma ostrzeżeń, więc zakładam, że zarówno składniowo jest poprawny, jak i nie przegiąłeś sprzętowo z wykorzystaniem GPIO (ale czy nie masz konfliktów sprzętowych to wyjdzie w praniu, chyba, że projektowałeś to mając choćby bryk z dokumentacji EP32 przed oczami).
W kwestii dopieszczania kodu to zapewne można zmienić ogólną definicję płytki
board: esp32dev
na jakąś pasującą do sprzętu (wtedy wszelkie ulepszenia w Platformio dedykowane dla tej konkretnej płytki będą uwzględniane, np. aliasy zgodne z nadrukiem na soldermasce).
Wczoraj próbowałem znaleźć najbardziej pasującą do mojej (ESP32 devkit V1) i nie znalazłem identycznej tu. Widzę, że kod wklejony nie zawiera definicji tej, którą wybrałem esp32doit-devkit-v1 a nie mam pewności czy słusznie kminię i tą powinienem wpisać.
Zrób zdjęcia obu stron, to może ktoś pozna co to za płytka, prawdopodobnie podpasuje definicja esp32doit-devkit-v1
ta ma kontrolkę LED podpiętą do GPIO2
ale jeśli nie wiesz jaką masz płytkę to bezpieczniej jest nie zmieniać.