Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding ethernet support #20

Open
wants to merge 6 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ set(SRCS "mros2/src/mros2.cpp"
"cmsis-esp32/lwip.c"
"cmsis-esp32/cmsis-esp.c"
"platform/wifi/wifi.c"
"platform/ethernet/ethernet.c"
"platform/mros2-platform.cpp"
)

Expand All @@ -32,6 +33,7 @@ set(INCS "mros2/include"
"cmsis-esp32/include"
"platform"
"platform/wifi"
"platform/ethernet"
${CMAKE_SOURCE_DIR}/main
)

Expand All @@ -42,14 +44,14 @@ endif()
idf_component_register(
SRCS ${SRCS}
INCLUDE_DIRS ${INCS}
REQUIRES nvs_flash esp_wifi)
REQUIRES nvs_flash esp_wifi esp_eth)

# Generate plaform/templates.hpp from mros2 application code
## You can add dir(s) in `--indir` if you have several dirs
## that contain application code files
add_custom_command(
OUTPUT templates.hpp
COMMAND python3 ${COMPONENT_PATH}/mros2/mros2_header_generator/templates_generator.py --outdir ${COMPONENT_PATH}/platform --indir ${CMAKE_SOURCE_DIR}/main)
COMMAND python ${COMPONENT_PATH}/mros2/mros2_header_generator/templates_generator.py --outdir ${COMPONENT_PATH}/platform --indir ${CMAKE_SOURCE_DIR}/main)
add_custom_target(Template SOURCES templates.hpp)
add_dependencies(${COMPONENT_LIB} Template)

Expand Down
204 changes: 204 additions & 0 deletions Kconfig.projbuild
Original file line number Diff line number Diff line change
@@ -0,0 +1,204 @@
menu "mROS Settings"

##################################
# CHOOSE NETWORK INTERFACE #
##################################

choice
prompt "mROS network interface select"
config M_ROS_ESP_NETIF_WLAN
bool "WLAN interface"
config M_ROS_ESP_NETIF_ENET
bool "Ethernet interface"
endchoice


#####################
# WLAN CONFIG #
#####################

if M_ROS_ESP_NETIF_WLAN

menu "WiFi Configuration"

config ESP_WIFI_SSID
string "WiFi SSID"
default "myssid"
help
SSID (network name) for the example to connect to.

config ESP_WIFI_PASSWORD
string "WiFi Password"
default "mypassword"
help
WiFi password (WPA or WPA2) for the example to use.

config ESP_MAXIMUM_RETRY
int "Maximum retry"
default 5
help
Set the Maximum retry to avoid station reconnecting to the AP unlimited when the AP is really inexistent.
endmenu

endif # M_ROS_ESP_NETIF_WLAN

#########################
# ETHERNET CONFIG #
#########################

if M_ROS_ESP_NETIF_ENET

menu "Ethernet Configuration"
config M_ROS_USE_SPI_ETHERNET
bool

choice M_ROS_ETHERNET_TYPE
prompt "Ethernet Type"
default M_ROS_USE_INTERNAL_ETHERNET if IDF_TARGET_ESP32
default M_ROS_USE_W5500
help
Select which kind of Ethernet will be used in the example.

config M_ROS_USE_INTERNAL_ETHERNET
depends on IDF_TARGET_ESP32
select ETH_USE_ESP32_EMAC
bool "Internal EMAC"
help
Select internal Ethernet MAC controller.

config M_ROS_USE_DM9051
bool "DM9051 Module"
select M_ROS_USE_SPI_ETHERNET
select ETH_USE_SPI_ETHERNET
select ETH_SPI_ETHERNET_DM9051
help
Select external SPI-Ethernet module (DM9051).

config M_ROS_USE_W5500
bool "W5500 Module"
select M_ROS_USE_SPI_ETHERNET
select ETH_USE_SPI_ETHERNET
select ETH_SPI_ETHERNET_W5500
help
Select external SPI-Ethernet module (W5500).
endchoice # M_ROS_ETHERNET_TYPE

if M_ROS_USE_INTERNAL_ETHERNET
choice M_ROS_ETH_PHY_MODEL
prompt "Ethernet PHY Device"
default M_ROS_ETH_PHY_LAN8720
help
Select the Ethernet PHY device to use in the example.

config M_ROS_ETH_PHY_IP101
bool "IP101"
help
IP101 is a single port 10/100 MII/RMII/TP/Fiber Fast Ethernet Transceiver.
Goto http://www.icplus.com.tw/pp-IP101G.html for more information about it.

config M_ROS_ETH_PHY_RTL8201
bool "RTL8201/SR8201"
help
RTL8201F/SR8201F is a single port 10/100Mb Ethernet Transceiver with auto MDIX.
Goto http://www.corechip-sz.com/productsview.asp?id=22 for more information about it.

config M_ROS_ETH_PHY_LAN8720
bool "LAN8720"
help
LAN8720A is a small footprint RMII 10/100 Ethernet Transceiver with HP Auto-MDIX Support.
Goto https://www.microchip.com/LAN8720A for more information about it.

config M_ROS_ETH_PHY_DP83848
bool "DP83848"
help
DP83848 is a single port 10/100Mb/s Ethernet Physical Layer Transceiver.
Goto http://www.ti.com/product/DP83848J for more information about it.

config M_ROS_ETH_PHY_KSZ8041
bool "KSZ8041"
help
The KSZ8041 is a single supply 10Base-T/100Base-TX Physical Layer Transceiver.
Goto https://www.microchip.com/wwwproducts/en/KSZ8041 for more information about it.
endchoice # M_ROS_ETH_PHY_MODEL

config M_ROS_ETH_MDC_GPIO
int "SMI MDC GPIO number"
default 23
help
Set the GPIO number used by SMI MDC.

config M_ROS_ETH_MDIO_GPIO
int "SMI MDIO GPIO number"
default 18
help
Set the GPIO number used by SMI MDIO.
endif # M_ROS_USE_INTERNAL_ETHERNET

if M_ROS_USE_SPI_ETHERNET
config M_ROS_ETH_SPI_HOST
int "SPI Host Number"
range 0 2
default 1
help
Set the SPI host used to communicate with the SPI Ethernet Controller.

config M_ROS_ETH_SPI_SCLK_GPIO
int "SPI SCLK GPIO number"
range 0 33
default 20
help
Set the GPIO number used by SPI SCLK.

config M_ROS_ETH_SPI_MOSI_GPIO
int "SPI MOSI GPIO number"
range 0 33
default 19
help
Set the GPIO number used by SPI MOSI.

config M_ROS_ETH_SPI_MISO_GPIO
int "SPI MISO GPIO number"
range 0 33
default 18
help
Set the GPIO number used by SPI MISO.

config M_ROS_ETH_SPI_CS_GPIO
int "SPI CS GPIO number"
range 0 33
default 21
help
Set the GPIO number used by SPI CS.

config M_ROS_ETH_SPI_CLOCK_MHZ
int "SPI clock speed (MHz)"
range 5 80
default 36
help
Set the clock speed (MHz) of SPI interface.

config M_ROS_ETH_SPI_INT_GPIO
int "Interrupt GPIO number"
default 4
help
Set the GPIO number used by the SPI Ethernet module interrupt line.
endif # M_ROS_USE_SPI_ETHERNET

config M_ROS_ETH_PHY_RST_GPIO
int "PHY Reset GPIO number"
default -1
help
Set the GPIO number used to reset PHY chip.
Set to -1 to disable PHY chip hardware reset.

config M_ROS_ETH_PHY_ADDR
int "PHY Address"
range 0 31
default 0
help
Set PHY address according your board schematic.
endmenu

endif # M_ROS_ESP_NETIF_ENET

endmenu
20 changes: 14 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ Please also check [mros2 repository](https://github.com/mROS-base/mros2) for mor
- [M5Stack Core2](http://docs.m5stack.com/en/core/core2)
- [M5Stack CoreS3](http://docs.m5stack.com/en/core/CoreS3)
- [XIAO ESP32C3](https://www.seeedstudio.com/Seeed-XIAO-ESP32C3-p-5431.html) (see [#7](https://github.com/mROS-base/mros2-esp32/issues/7))
- [Olimex ESP32-POE (ISO/EA)](https://www.olimex.com/Products/IoT/ESP32/ESP32-POE/open-source-hardware)
- Kernel: [ESP-IDF FreeRTOS](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/freertos_idf.html)
- Host environment
- [ROS 2 Humble Hawksbill](https://docs.ros.org/en/humble/index.html) on Ubuntu 22.04 LTS
Expand Down Expand Up @@ -63,17 +64,24 @@ cd mros2-esp32

Note that you cannot change the directory name from `mros2-esp32` since it is used as the component name in `CMakeLists.txt`.

### Setup your SSID and PASS
### Select network platform

Please setup SSID and PASS for your Wi-Fi AP in `platform/wifi/wifi.h` (be careful that we should not commit and push your network environment to the world :D)
We support Wi-Fi and Ethernet. User `idf.py menuconfig` and go to `mROS Settings -> mROS network interface select` to choose the mode. Note that only one mode is supported at the same time.

```platform/wifi/wifi.h
#define ESP_WIFI_SSID "SSID"
#define ESP_WIFI_PASS "PASS"
```
#### Setup your SSID and PASS

Please setup SSID and PASS for your Wi-Fi AP in `idf.py menuconfig` and go to `mROS Settings -> Wifi Configuration` (be careful that we should not commit and push your network environment to the world :D)

Again, make sure that its SSID assigns IP by DHCP and is dedicated to 2.4 GHz band.

### Setup ethernet

See the [configuration guidline](https://github.com/espressif/esp-idf/blob/master/examples/ethernet/README.md#common-configurations) of espressif to setup your ethernet correctly.

We selected the default settings to support the following boards out of the box:

- [Olimex ESP32-POE (ISO/EA)](https://www.olimex.com/Products/IoT/ESP32/ESP32-POE/open-source-hardware)

### Set target

Go to `workspace/echoback_string/` and do the below to setup the target device.
Expand Down
Loading