Problem
Beim Versuch, dein arduino-esp32-Projekt zu kompilieren, erhältst du eine Fehlermeldung wie diese:
spi_host_device_error.txt
In file included from /home/user/my-project/managed_components/espressif__arduino-esp32/libraries/Ethernet/src/ETH.cpp:24:
/home/user/my-project/managed_components/espressif__arduino-esp32/libraries/Ethernet/src/ETH.h:161:70: error: 'spi_host_device_t' has not been declared
161 | eth_phy_type_t type, int32_t phy_addr, int cs, int irq, int rst, spi_host_device_t spi_host, int sck = -1, int miso = -1, int mosi = -1,
| ^~~~~~~~~~~~~~~~~
/home/user/my-project/managed_components/espressif__arduino-esp32/libraries/Ethernet/src/ETH.h:246:34: error: 'spi_host_device_t' has not been declared
246 | int sck, int miso, int mosi, spi_host_device_t spi_host, uint8_t spi_freq_mhz
| ^~~~~~~~~~~~~~~~~
/home/user/my-project/managed_components/espressif__arduino-esp32/libraries/Ethernet/src/ETH.cpp:516:6: error: no declaration matches 'bool ETHClass::beginSPI(eth_phy_type_t, int32_t, uint8_t*, int, int, int, SPIClass*, int, int, int, spi_host_device_t, uint8_t)'
516 | bool ETHClass::beginSPI(
| ^~~~~~~~
/home/user/my-project/managed_components/espressif__arduino-esp32/libraries/Ethernet/src/ETH.h:241:8: note: candidate is: 'bool ETHClass::beginSPI(eth_phy_type_t, int32_t, uint8_t*, int, int, int, SPIClass*, int, int, int, int, uint8_t)'
241 | bool beginSPI(
| ^~~~~~~~
/home/user/my-project/managed_components/espressif__arduino-esp32/libraries/Ethernet/src/ETH.h:149:7: note: 'class ETHClass' defined here
149 | class ETHClass : public NetworkInterface {
| ^~~~~~~~
/home/user/my-project/managed_components/espressif__arduino-esp32/libraries/Ethernet/src/ETH.cpp:867:6: error: no declaration matches 'bool ETHClass::begin(eth_phy_type_t, int32_t, int, int, int, spi_host_device_t, int, int, int, uint8_t)'
867 | bool ETHClass::begin(
| ^~~~~~~~
/home/user/my-project/managed_components/espressif__arduino-esp32/libraries/Ethernet/src/ETH.h:165:8: note: candidates are: 'bool ETHClass::begin()'
165 | bool begin() {
| ^~~~~
/home/user/my-project/managed_components/espressif__arduino-esp32/libraries/Ethernet/src/ETH.h:160:8: note: 'bool ETHClass::begin(eth_phy_type_t, int32_t, int, int, int, int, int, int, int, uint8_t)'
160 | bool begin(
| ^~~~~
/home/user/my-project/managed_components/espressif__arduino-esp32/libraries/Ethernet/src/ETH.cpp:861:6: note: 'bool ETHClass::begin(eth_phy_type_t, int32_t, int, int, int, SPIClass&, uint8_t)'
861 | bool ETHClass::begin(eth_phy_type_t type, int32_t phy_addr, int cs, int irq, int rst, SPIClass &spi, uint8_t spi_freq_mhz) {
| ^~~~~~~~
/home/user/my-project/managed_components/espressif__arduino-esp32/libraries/Ethernet/src/ETH.cpp:191:6: note: 'bool ETHClass::begin(eth_phy_type_t, int32_t, int, int, int, eth_clock_mode_t)'
191 | bool ETHClass::begin(eth_phy_type_t type, int32_t phy_addr, int mdc, int mdio, int power, eth_clock_mode_t clock_mode) {
| ^~~~~~~~
/home/user/my-project/managed_components/espressif__arduino-esp32/libraries/Ethernet/src/ETH.h:149:7: note: 'class ETHClass' defined here
149 | class ETHClass : public NetworkInterface {
| ^~~~~~~~
/home/user/my-project/managed_components/espressif__arduino-esp32/libraries/Ethernet/src/ETH.cpp: In member function 'void ETHClass::end()':
/home/user/my-project/managed_components/espressif__arduino-esp32/libraries/Ethernet/src/ETH.cpp:886:22: warning: 'void NetworkEvents::removeEvent(NetworkEventFuncCb, arduino_event_id_t)' is deprecated: removing functional callbacks via pointer is deprecated, use removeEvent(network_event_handle_t) instead [-Wdeprecated-declarations]
886 | Network.removeEvent(onEthConnected, ARDUINO_EVENT_ETH_CONNECTED);
| ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/user/my-project/managed_components/espressif__arduino-esp32/libraries/Network/src/Network.h:9,
from /home/user/my-project/managed_components/espressif__arduino-esp32/libraries/Ethernet/src/ETH.h:70:
/home/user/my-project/managed_components/espressif__arduino-esp32/libraries/Network/src/NetworkEvents.h:204:8: note: declared here
204 | void removeEvent(NetworkEventFuncCb cbEvent, arduino_event_id_t event = ARDUINO_EVENT_MAX)
| ^~~~~~~~~~~
make[2]: *** [esp-idf/espressif__arduino-esp32/CMakeFiles/__idf_espressif__arduino-esp32.dir/build.make:1434: esp-idf/espressif__arduino-esp32/CMakeFiles/__idf_espressif__Lösung
Dieser Fehler tritt auf, weil du SPI-Ethernet in der sdkconfig deaktiviert hast, aber obwohl du SPI-Ethernet nicht in deinem Projekt verwendest, versucht die arduino-esp32-Bibliothek dennoch, es einzubinden.
Um dies zu beheben, musst du SPI-Ethernet in deiner sdkconfig-Datei aktivieren.
sdkconfig
CONFIG_ETH_USE_SPI_ETHERNET=yDanach kompilierst du neu und der Fehler wird verschwunden sein.
Wenn dieser Beitrag dir geholfen hat, erwäge, mir einen Kaffee zu spendieren oder per PayPal zu spenden, um die Recherche und Veröffentlichung neuer Beiträge auf TechOverflow zu unterstützen