(See the README.md file in the upper level 'examples' directory for more information about examples.)
This example demonstrates basic usage of Ethernet driver together with tcpip_adapter. The work flow of the example could be as follows:
If you have a new Ethernet application to go (for example, connect to IoT cloud via Ethernet), try this as a basic template, then add your own code.
To run this example, it's recommended that you have an official ESP32 Ethernet development board - ESP32-Ethernet-Kit. This example should also work for 3rd party ESP32 board as long as it's integrated with a supported Ethernet PHY chip. Up until now, ESP-IDF supports four Ethernet PHY: LAN8720, IP101, DP83848 and RTL8201, additional PHY drivers should be implemented by users themselves.
Enter make menuconfig if you are using GNU Make based build system or enter idf.py menuconfig if you' are using CMake based build system.
Example Configuration menu:Ethernet PHY Device, by default, the ESP32-Ethernet-Kit has an IP101 on board.Component config > Ethernet menu:Use ESP32 internal EMAC controller, and then go into this menu.PHY interface, it's highly recommended that you choose Reduced Media Independent Interface (RMII) which will cost fewer pins.RMII clock mode, you can choose the source of RMII clock (50MHz): Input RMII clock from external or Output RMII clock from internal.Output RMII clock from internal is enabled, you also have to set the number of the GPIO used for outputting the RMII clock under RMII clock GPIO number. In this case, you can set the GPIO number to 16 or 17.Output RMII clock from GPIO0 (Experimental!) is enabled, then you have no choice but GPIO0 to output the RMII clock.| Default Example GPIO | RMII Signal | Notes | | -------------------- | ----------- | ------------- | | GPIO23 | MDC | Output to PHY | | GPIO18 | MDIO | Bidirectional |
Use Reset Pin of PHY Chip and set the GPIO number under PHY RST GPIO number.1, but you can alway reconfigure this value after eth_phy_config_t phy_config = ETH_PHY_DEFAULT_CONFIG();. The actual PHY address should depend on the hardware you use, so make sure to consult the schematic and datasheet.
Enter make -j4 flash monitor if you are using GNU Make based build system or enter idf.py build flash monitor if you' are using CMake based build system.
(To exit the serial monitor, type Ctrl-].)
See the Getting Started Guide for full steps to configure and use ESP-IDF to build projects.
I (336) cpu_start: Starting scheduler on PRO CPU.
I (0) cpu_start: Starting scheduler on APP CPU.
I (382) system_api: Base MAC address is not set, read default base MAC address from BLK0 of EFUSE
I (392) eth_example: Ethernet Started
I (3922) eth_example: Ethernet Link Up
I (5862) tcpip_adapter: eth ip: 192.168.2.151, mask: 255.255.255.0, gw: 192.168.2.2
I (5862) eth_example: Ethernet Got IP Address
I (5862) eth_example: ~~~~~~~~~~~
I (5862) eth_example: ETHIP:192.168.2.151
I (5872) eth_example: ETHMASK:255.255.255.0
I (5872) eth_example: ETHGW:192.168.2.2
I (5882) eth_example: ~~~~~~~~~~~
RMII Clock
GPIO connections
| GPIO | RMII Signal | ESP32 EMAC Function | | ------ | ----------- | ------------------- | | GPIO21 | TX_EN | EMAC_TX_EN | | GPIO19 | TX0 | EMAC_TXD0 | | GPIO22 | TX1 | EMAC_TXD1 | | GPIO25 | RX0 | EMAC_RXD0 | | GPIO26 | RX1 | EMAC_RXD1 | | GPIO27 | CRS_DV | EMAC_RX_DRV |
(For any technical queries, please open an issue on GitHub. We will get back to you as soon as possible.)