Wie man arduino-esp32-Fehler behebt: 'spi_host_device_t' has not been declared
Problem
Beim Versuch, Ihr arduino-esp32-Projekt zu kompilieren, erhalten Sie 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 Sie SPI-Ethernet in der sdkconfig deaktiviert haben, aber obwohl Sie SPI-Ethernet nicht in Ihrem Projekt verwenden, versucht die arduino-esp32-Bibliothek dennoch, es einzubinden.
Um dies zu beheben, müssen Sie SPI-Ethernet in Ihrer sdkconfig-Datei aktivieren.
sdkconfig
CONFIG_ETH_USE_SPI_ETHERNET=yDanach kompilieren Sie neu und der Fehler wird verschwunden sein.
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow