• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..--

main/11-Mar-2024-706572

CMakeLists.txtD11-Mar-2024488 118

MakefileD11-Mar-2024489 156

README.mdD11-Mar-20246.8 KiB160120

iperf_test.pyD11-Mar-20243.8 KiB10877

partitions_example.csvD11-Mar-2024306 76

sdkconfig.defaultsD11-Mar-2024682 2618

sdkconfig.defaults.esp32D11-Mar-202453 32

sdkconfig.defaults.esp32s2D11-Mar-202458 32

README.md

1| Supported Targets | ESP32 | ESP32-S2 | ESP32-C3 |
2| ----------------- | ----- | -------- | -------- |
3
4# Ethernet iperf Example
5
6(See the README.md file in the upper level 'examples' directory for more information about examples.)
7
8## Overview
9
10This example demonstrates basic usage of [iperf](https://iperf.fr/) protocol to measure the throughout/bandwidth of Ethernet.
11
12The cli environment in the example is based on the [console component](https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/console.html).
13
14## How to use example
15
16### Hardware Required
17
18To run this example, it's recommended that you have an official ESP32 Ethernet development board - [ESP32-Ethernet-Kit](https://docs.espressif.com/projects/esp-idf/en/latest/hw-reference/get-started-ethernet-kit.html). 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 up to four Ethernet PHY: `LAN8720`, `IP101`, `DP83848` and `RTL8201`, additional PHY drivers should be implemented by users themselves.
19
20Besides that, `esp_eth` component can drive third-party Ethernet module which integrates MAC and PHY and provides common communication interface (e.g. SPI, USB, etc). This example will take the **DM9051** as an example, illustrating how to install the Ethernet driver in the same manner.
21
22#### Pin Assignment
23
24See common pin assignments for Ethernet examples from [upper level](../README.md#common-pin-assignments).
25
26### Software Tools Preparation
27
281. Install iperf tool on PC
29   * Debian/Ubuntu: `sudo apt-get install iperf`
30   * macOS: `brew install iperf`(if using Homebrew) or `sudo port install iperf`(if using MacPorts)
31   * Windows(MSYS2): Downloads binaries from [here]( https://iperf.fr/iperf-download.php#windows)
32
33### Configure the project
34
35```
36idf.py menuconfig
37```
38
39In addition to the common configurations for Ethernet examples from [upper level](../README.md#common-configurations), you might also need to update the default value of following configurations:
40
411. In the `Example Configuration` menu:
42    * Enable storing history commands in flash under `Store command history in flash`.
43
44### Build, Flash, and Run
45
46Build the project and flash it to the board, then run monitor tool to view serial output:
47
48```
49idf.py -p PORT build flash monitor
50```
51
52(Replace PORT with the name of the serial port to use.)
53
54(To exit the serial monitor, type ``Ctrl-]``.)
55
56See the [Getting Started Guide](https://docs.espressif.com/projects/esp-idf/en/latest/get-started/index.html) for full steps to configure and use ESP-IDF to build projects.
57
58## Example Output
59
60### Test uplink bandwidth
61
62* PC: run command: `iperf -u -s -i 3` to start iperf server in UDP mode, and report interval is 3 seconds.
63* ESP32: run command: `iperf -u -c PC_IP -i 3 -t 30` to start iperf client in UDP mode, and the test will last 30 seconds.
64
65#### PC output
66
67```bash
68------------------------------------------------------------
69Server listening on UDP port 5001
70Receiving 1470 byte datagrams
71UDP buffer size:  208 KByte (default)
72------------------------------------------------------------
73[  3] local 192.168.2.160 port 5001 connected with 192.168.2.156 port 49154
74[ ID] Interval       Transfer     Bandwidth        Jitter   Lost/Total Datagrams
75[  3]  0.0- 3.0 sec  26.1 MBytes  72.8 Mbits/sec   0.198 ms    1/18585 (0.0054%)
76[  3]  3.0- 6.0 sec  26.3 MBytes  73.7 Mbits/sec   0.192 ms    0/18792 (0%)
77[  3]  6.0- 9.0 sec  26.3 MBytes  73.5 Mbits/sec   0.189 ms    0/18741 (0%)
78[  3]  9.0-12.0 sec  26.2 MBytes  73.3 Mbits/sec   0.191 ms   43/18739 (0.23%)
79[  3] 12.0-15.0 sec  26.3 MBytes  73.5 Mbits/sec   0.194 ms    0/18739 (0%)
80[  3] 15.0-18.0 sec  26.3 MBytes  73.5 Mbits/sec   0.191 ms    0/18741 (0%)
81[  3] 18.0-21.0 sec  26.3 MBytes  73.5 Mbits/sec   0.187 ms    0/18752 (0%)
82[  3] 21.0-24.0 sec  26.3 MBytes  73.4 Mbits/sec   0.192 ms    0/18737 (0%)
83[  3] 24.0-27.0 sec  26.3 MBytes  73.5 Mbits/sec   0.188 ms    0/18739 (0%)
84```
85
86#### ESP32 output
87
88```bash
89mode=udp-client sip=192.168.2.156:5001, dip=192.168.2.160:5001, interval=3, time=30
90    Interval           Bandwidth
91   0-   3 sec       72.92 Mbits/sec
92   3-   6 sec       73.76 Mbits/sec
93   6-   9 sec       73.56 Mbits/sec
94   9-  12 sec       73.56 Mbits/sec
95  12-  15 sec       73.56 Mbits/sec
96  15-  18 sec       73.56 Mbits/sec
97  18-  21 sec       73.61 Mbits/sec
98  21-  24 sec       73.55 Mbits/sec
99  24-  27 sec       73.56 Mbits/sec
100  27-  30 sec       73.56 Mbits/sec
101   0-  30 sec       73.52 Mbits/sec
102```
103
104### Test downlink bandwidth
105
106* PC: run command: `iperf -u -c ESP_IP -b 80M -t 30 -i 3` to start iperf client in UDP mode with estimated bandwidth 100M, and report interval is 3 seconds.
107* ESP32: run command: `iperf -u -s -t 30 -i 3` to start iperf server in UDP mode, and the test will last 30 seconds.
108
109#### PC output
110```bash
111------------------------------------------------------------
112Client connecting to 192.168.2.156, UDP port 5001
113Sending 1470 byte datagrams
114UDP buffer size:  208 KByte (default)
115------------------------------------------------------------
116[  3] local 192.168.2.160 port 59581 connected with 192.168.2.156 port 5001
117[ ID] Interval       Transfer     Bandwidth
118[  3]  0.0- 3.0 sec  28.6 MBytes  80.0 Mbits/sec
119[  3]  3.0- 6.0 sec  28.6 MBytes  80.0 Mbits/sec
120[  3]  6.0- 9.0 sec  28.6 MBytes  80.0 Mbits/sec
121[  3]  9.0-12.0 sec  28.6 MBytes  80.0 Mbits/sec
122[  3] 12.0-15.0 sec  28.4 MBytes  79.5 Mbits/sec
123[  3] 15.0-18.0 sec  28.6 MBytes  79.9 Mbits/sec
124[  3] 18.0-21.0 sec  28.6 MBytes  79.9 Mbits/sec
125[  3] 21.0-24.0 sec  28.6 MBytes  79.9 Mbits/sec
126[  3] 24.0-27.0 sec  28.6 MBytes  80.0 Mbits/sec
127[  3] 27.0-30.0 sec  28.5 MBytes  79.7 Mbits/sec
128[  3]  0.0-30.0 sec   286 MBytes  79.9 Mbits/sec
129```
130
131#### ESP32 output
132```bash
133mode=udp-server sip=192.168.2.156:5001, dip=0.0.0.0:5001, interval=3, time=30
134    Interval           Bandwidth
135I (2534456) iperf: want recv=16384
136   0-   3 sec       79.36 Mbits/sec
137   3-   6 sec       79.56 Mbits/sec
138   6-   9 sec       79.51 Mbits/sec
139   9-  12 sec       79.24 Mbits/sec
140  12-  15 sec       77.33 Mbits/sec
141  15-  18 sec       79.01 Mbits/sec
142  18-  21 sec       78.58 Mbits/sec
143  21-  24 sec       78.24 Mbits/sec
144  24-  27 sec       79.56 Mbits/sec
145  27-  30 sec       77.20 Mbits/sec
146   0-  30 sec       78.76 Mbits/sec
147```
148
149## Suggestions of getting higher bandwidth
150
1511. Higher MCU working frequency will get higher bandwidth.
1522. Put frequently invoked functions into IRAM via macro `IRAM_ATTR` in code. Note that the lwIP IRAM optimization is already enabled by default.
1533. Priority of iperf task may also have effect.
154
155## Troubleshooting
156
157See common troubleshooting for Ethernet examples from [upper level](../README.md#common-troubleshooting).
158
159(For any technical queries, please open an [issue](https://github.com/espressif/esp-idf/issues) on GitHub. We will get back to you as soon as possible.)
160