17
17
|[ WiFi101] [ 104 ] | 2015 | in fw | WiFi STA and local AP (ATWINC1500) | Arduino
18
18
|[ WiFiNINA] [ 103 ] | 2018 | in fw | WiFi STA and SoftAP (ESP32 with nina-fw) | Arduino
19
19
|[ WiFiS3] [ 105 ] | 2023 | in fw | WiFi STA and SoftAP (ESP32S3 with Uno R4 WiFi fw) |Arduino
20
- |[ Mbed core] [ 106 ] | 2018 | LwIP | Ethernet/WiFi (any hw supported by Mbed OS ) | Arduino
21
- |[ C33 core] [ 108 ] | 2023 | LwIP | Ethernet (Eth peripheral), WiFi STA and SoftAP (on board ESP32C3) | Arduino
22
- |[ ESP8266 core] [ 110 ] | 2014 | LwIP | WiFi STA and SoftAP, W5500, ENC28J60, PPP | community
23
- |[ ESP32 core] [ 112 ] | 2016 | LwIP | WiFi STA and SoftAP, Ethernet (Eth peripheral) | Espressif
20
+ |[ Mbed core] [ 106 ] | 2018 | LwIP | Ethernet/WiFi (any HW with Mbed EMAC driver ) | Arduino
21
+ |[ C33 core] [ 108 ] | 2023 | LwIP | Ethernet (MAC peripheral), WiFi STA and SoftAP (on board ESP32C3) | Arduino
22
+ |[ ESP8266 core] [ 110 ] | 2014 | LwIP | WiFi STA and SoftAP, Ethernet ( W5500, ENC28J60) , PPP | community
23
+ |[ ESP32 core] [ 112 ] | 2016 | LwIP | WiFi STA and SoftAP, Ethernet (MAC peripheral, W5500 ) | Espressif
24
24
|[ WiFiEspAT] [ 114 ] | 2019 | in fw | WiFi STA and SoftAP (ESP8266 or ESP32 with AT fw) | Juraj A
25
25
|[ EthernetENC] [ 115 ] | 2013 | uIP | Ethernet (ENC28J60) | Juraj A
26
- |[ STM32Ethernet] [ 116 ] | 2017 | LwIP | Erhernet (STM32 Eth peripheral) | STM
26
+ |[ STM32Ethernet] [ 116 ] | 2017 | LwIP | Ethernet (STM32 Eth peripheral) | STM
27
27
|[ QNEthernet] [ 117 ] | 2021 | LwIP | Ethernet (Teensy 4.1 Eth peripheral) | Shawn S
28
28
29
29
(1) The Arduino WiFi library is obsolete. It is included in the research only because it was the first WiFi library.
30
30
31
- In following tables * marks the official Arduino library with the first introduction of the API function(s).
31
+ Legend for the tables in this document:
32
32
33
+ * ` ✓ ` library has the function
34
+ * ` * ` the official Arduino library with the first introduction of the API function(s).
35
+ * ` + ` the function was added in API unification effort after the research
36
+ * ` ✗ ` library can't support the function
33
37
34
38
## Ethernet/WiFi object
35
39
@@ -46,15 +50,15 @@ In following tables * marks the official Arduino library with the first introduc
46
50
|[ C33 Wifi] [ 8 ] | |status| ✓ | ✓ | lowPowerMode
47
51
| [ C33 Ethernet] [ 9 ] | | hardwareStatus | | | |
48
52
|[ esp8266 WiFi] [ 10 ] | | status|||sleepMode
49
- | [ esp8266 Ethernet] [ 11 ] | constructor | status| | ✓ |
53
+ | [ esp8266 Ethernet] [ 11 ] | constructor | status | | ✓ [ PR ] ( https://github.com/esp8266/Arduino/pull/9023 ) |
50
54
| [ esp32 WiFi] [ 12 ] | | status||| sleep |
51
55
| [ esp32 Ethernet] [ 13 ] | | | | | |
52
56
| [ WiFiEspAT] [ 14 ] | init(Stream&) | status | ✓ | | sleepMode |
53
- | [ EthernetENC] [ 15 ] | init(CS) | hardwareStatus | | | |
57
+ | [ EthernetENC] [ 15 ] | init(CS) | hardwareStatus | | + | |
54
58
| [ STM32Ethernet] [ 16 ] | | | | | |
55
59
| [ QNEthernet] [ 17 ] | | hardwareStatus | | ✓ | |
56
60
57
- (1) status is for WiFi station state, but returns WL_NO_SHIELD/WL_NO_MODULE if the hardware is not detected
61
+ (1) status() is for the WiFi state, but returns WL_NO_SHIELD/WL_NO_MODULE if the hardware is not detected
58
62
59
63
### Ethernet network interface
60
64
@@ -63,7 +67,7 @@ In following tables * marks the official Arduino library with the first introduc
63
67
| [ Ethernet] [ 1 ] * | ✓| ✓ | ✓ | ✓ | ✓ |
64
68
| [ Mbed Ethernet] [ 7 ] | ✓| ✓ | ✓ | ✓| ✓ |
65
69
| [ C33 Ethernet] [ 9 ] | ✓ | ✓ | ✓ | ✓ | ✓ |
66
- | [ esp8266 Ethernet] [ 11 ] | ✓ | ✓ | config | | |
70
+ | [ esp8266 Ethernet] [ 11 ] | ✓ | ✓ | ✓ | + | |
67
71
| [ esp32 Ethernet] [ 13 ] | linkUp | ✓ | config | | |
68
72
| [ EthernetENC] [ 15 ] | ✓| ✓ | ✓ | ✓ | ✓ |
69
73
| [ STM32Ethernet] [ 16 ] | ✓ | ✓ | ✓| ✓ | ✓ |
@@ -78,7 +82,7 @@ In following tables * marks the official Arduino library with the first introduc
78
82
| [ WiFiNINA] [ 3 ] | ✓| ✓| ✓* | ✓| [ PR] ( https://github.com/arduino-libraries/WiFiNINA/pull/219 ) | ✓|
79
83
| [ WiFiS3] [ 5 ] | ✓ | ✓| | ✓| ✓ | ✓|
80
84
| [ Mbed WiFi] [ 6 ] | ✓ | ✓| | ✓ | ? | ✓|
81
- | [ C33 Wifi] [ 8 ] | ✓ | ✓| | ✓| ? | ✓ |
85
+ | [ C33 Wifi] [ 8 ] | ✓ | ✓| | ✓| ✓ | ✓ |
82
86
| [ esp8266 WiFi] [ 18 ] | ✓| not blocking| | ✓| | ✓|
83
87
| [ esp32 WiFi] [ 19 ] | ✓ | not blocking| | wrong param. order| | ✓|
84
88
| [ WiFiEspAT] [ 14 ] | ✓| ✓| ✓ | ✓| ✓| ✓|
@@ -89,37 +93,39 @@ All libraries have [localIP()](https://www.arduino.cc/reference/en/libraries/eth
89
93
90
94
| library | [ setHostname] ( https://www.arduino.cc/reference/en/libraries/wifinina/wifi.sethostname/ ) | [ setDNS] ( https://www.arduino.cc/reference/en/libraries/wifinina/wifi.setdns/ ) | dnsIP | [ macAddress] ( https://www.arduino.cc/reference/en/libraries/wifinina/wifi.macaddress/ )
91
95
| ---| :---:| :---:| :---:| :---:|
92
- |[ Ethernet] [ 1 ] | [ PR] ( https://github.com/arduino-libraries/Ethernet/pull/223 ) or [ PR ] ( https://github.com/arduino-libraries/Ethernet/pull/ 233) | setDnsServerIP [ PR] ( https://github.com/arduino-libraries/Ethernet/pull/231 ) | dnsServerIP PR | MACAddress PR
93
- |[ WiFi] [ 2 ] | | ✓* | | ✓*
94
- | [ WiFi101] [ 4 ] | hostname [ PR] ( https://github.com/arduino-libraries/WiFi101/pull/337 ) | | [ PR] ( https://github.com/arduino-libraries/WiFi101/pull/344 ) | ✓|
95
- |[ WiFiNINA] [ 3 ] | ✓* | ✓ | [ PR] ( https://github.com/arduino-libraries/WiFiNINA/pull/251 ) | ✓
96
- |[ WiFiS3] [ 5 ] | ✓| ✓ | ✓* | ✓
97
- | [ Mbed WiFi] [ 6 ] | ✓| ✓ | dnsServerIP [ issue ] ( https://github.com/arduino/ArduinoCore-mbed/issues/732 ) | ✓ |
98
- | [ Mbed Ethernet] [ 7 ] | ✓ | ✓ | dnsServerIP | ✓|
99
- |[ C33 Wifi] [ 8 ] | ✓ | ✓ | [ issue ] ( https://github.com/arduino/ArduinoCore-renesas/issues/155 ) | ✓
100
- | [ C33 Ethernet] [ 9 ] | | ✓ | dnsServerIP | MACAddress|
101
- | [ esp8266 WiFi] [ 18 ] | ✓ | | ✓ | ✓ |
102
- | [ esp8266 Ethernet] [ 11 ] | ✓ |
103
- | [ esp32 WiFi] [ 19 ] | ✓ | | ✓ | ✓ |
96
+ |[ Ethernet] [ 1 ] | [ PR] ( https://github.com/arduino-libraries/Ethernet/pull/233 ) | setDnsServerIP [ PR] ( https://github.com/arduino-libraries/Ethernet/pull/231 ) | dnsServerIP PR | MACAddress PR
97
+ |[ WiFi] [ 2 ] | | ✓* | | ✓* R
98
+ | [ WiFi101] [ 4 ] | hostname [ PR] ( https://github.com/arduino-libraries/WiFi101/pull/337 ) | | [ PR] ( https://github.com/arduino-libraries/WiFi101/pull/344 ) | ✓ R |
99
+ |[ WiFiNINA] [ 3 ] | ✓* | ✓ | [ PR] ( https://github.com/arduino-libraries/WiFiNINA/pull/251 ) | ✓ R
100
+ |[ WiFiS3] [ 5 ] | ✓| ✓ | ✓* | ✓ R [ PR ] ( https://github.com/arduino/ArduinoCore-renesas/pull/183 )
101
+ | [ Mbed WiFi] [ 6 ] | ✓| ✓ | dnsServerIP [ PR ] ( https://github.com/arduino/ArduinoCore-mbed/pull/756 ) | ✓ R |
102
+ | [ Mbed Ethernet] [ 7 ] | ✓ | ✓ | dnsServerIP | ✓ R |
103
+ |[ C33 Wifi] [ 8 ] | ✓ | ✓ | [ PR ] ( https://github.com/arduino/ArduinoCore-renesas/pull/176 ) | ✓ R [ PR ] ( https://github.com/arduino/ArduinoCore-renesas/pull/184 )
104
+ | [ C33 Ethernet] [ 9 ] | | ✓ | dnsServerIP | MACAddress without param |
105
+ | [ esp8266 WiFi] [ 18 ] | ✓ | + | ✓ | ✓ |
106
+ |[ esp8266 Ethernet] [ 11 ] | ✓ | + | + | +
107
+ | [ esp32 WiFi] [ 19 ] | ✓ | + | ✓ | ✓ |
104
108
| [ esp32 Ethernet] [ 13 ] | ✓ | | ✓ | ✓|
105
- | [ WiFiEspAT] [ 14 ] | ✓| ✓ | ✓ | ✓ |
106
- | [ EthernetENC] [ 15 ] | ✓ | ✓ | ✓ | ✓ |
109
+ | [ WiFiEspAT] [ 14 ] | ✓| ✓ | + | ✓ R |
110
+ | [ EthernetENC] [ 15 ] | + | + | + | ✓ |
107
111
|[ STM32Ethernet] [ 16 ] | | | dnsServerIP | MACAddress
108
112
| [ QNEthernet] [ 17 ] | ✓ | setDnsServerIP | dnsServerIP | ✓ |
109
113
114
+ Flag R is for "reversed". Arduino WiFi libraries copied the bug of the first WiFi library. The bytes of the MAC address are returned in reversed order from ` macAddress ` getter.
115
+
110
116
### WiFi station getters
111
117
112
118
| library | SSID | [ BSSID] ( https://www.arduino.cc/reference/en/libraries/wifi/wifi.bssid/ ) | [ encryptionType] ( https://www.arduino.cc/reference/en/libraries/wifinina/wifi.encryptiontype/ ) | channel | RSSI | <del >reasonCode</del > |
113
119
| ---| :---:| :---:| :---:| :---:| :---:| :---:|
114
- | [ WiFi] [ 2 ] * | ✓ | ✓ | ✓ | | ✓ | |
115
- | [ WiFi101] [ 4 ] | ✓ | ✓ | ✓ | ✓ | ✓ | |
116
- | [ WiFiNINA] [ 3 ] | ✓ | ✓ | ✓ | | ✓ | ✓* |
120
+ | [ WiFi] [ 2 ] * | ✓ | ✓ R | ✓ | | ✓ | |
121
+ | [ WiFi101] [ 4 ] | ✓ | ✓ R | ✓ | ✓ | ✓ | |
122
+ | [ WiFiNINA] [ 3 ] | ✓ | ✓ R | ✓ | | ✓ | ✓* |
117
123
| [ WiFiS3] [ 5 ] | ✓ | ✓ | ✓ | | ✓ | returns 0 |
118
124
| [ Mbed WiFi] [ 6 ] | ✓ | ✓ | ✓ | | ✓ | |
119
- | [ C33 Wifi] [ 8 ] | ✓ | ✓ | ✓ | | ✓ | returns 0 |
120
- | [ esp8266 WiFi] [ 18 ] | ✓ | without param [ PR ] ( https://github.com/esp8266/Arduino/pull/9008 ) | | | ✓ | |
121
- | [ esp32 WiFi] [ 19 ] | ✓ | without param | | | ✓ | |
122
- | [ WiFiEspAT] [ 14 ] | ✓ | ✓ | || ✓ | |
125
+ | [ C33 Wifi] [ 8 ] | ✓ | ✓ | returns 0 | | ✓ | returns 0 |
126
+ | [ esp8266 WiFi] [ 18 ] | ✓ | + | | | ✓ | |
127
+ | [ esp32 WiFi] [ 19 ] | ✓ | + | | | ✓ | |
128
+ | [ WiFiEspAT] [ 14 ] | ✓ | ✓ R | || ✓ | |
123
129
124
130
### WiFi AP network interface
125
131
@@ -153,7 +159,9 @@ All researched libraries have method [`scanNetworks()`](https://www.arduino.cc/r
153
159
154
160
To get the result of networks scan, all libraries have methods defined by the first WiFi library: ` SSID(n) ` , ` encryptionType(n) ` and ` RSSI(n) ` . Additionally all libraries except of the old WiFi library have ` channel(n) ` .
155
161
156
- All libraries except of the old WiFi library have [ BSSID] ( https://www.arduino.cc/reference/en/libraries/wifinina/wifi.bssid/ ) , but the esp8266 and the esp32 WiFi library have ` BSSID(n) ` without the parameter for the user provided array. ([ PR for esp8266] ( https://github.com/esp8266/Arduino/pull/9008 ) )
162
+ Enumeration of encryption type constant names for` encryptionType(n) ` are in esp32 and Portenta C33 very different from the common set used in WiFi, WiFi101, WiFiNINA, WiFiS3, esp8266 and WiFiEspAT.
163
+
164
+ All libraries except of the old WiFi library have [ BSSID] ( https://www.arduino.cc/reference/en/libraries/wifinina/wifi.bssid/ ) . WiFi, WiFi101 and WiFiNINA return reversed ordering of bytes.
157
165
158
166
### Network services
159
167
@@ -175,7 +183,7 @@ The Ethernet/WiFi objects have some common names for simple services. (Libraries
175
183
| [ esp32 WiFi] [ 12 ] | ✓ | | |
176
184
| [ esp32 Ethernet] [ 13 ] | | | |
177
185
| [ WiFiEspAT] [ 14 ] | ✓ | ✓ | ✓ |
178
- | [ EthernetENC] [ 15 ] | ✓ | | |
186
+ | [ EthernetENC] [ 15 ] | + | | |
179
187
| [ STM32Ethernet] [ 16 ] | | | |
180
188
| [ QNEthernet] [ 17 ] | | | |
181
189
@@ -220,9 +228,9 @@ C33 lwIpWrapper |[lwipClient][28] | | | ✓ | ✓ |
220
228
ESP8266WiFi |[ WiFiClient] [ 30 ] | ✓ | ✓ | ✓ | Stream's setTimeout [ discussion] ( https://github.com/esp8266/Arduino/discussions/9004 ) |
221
229
| esp32 WiFi | [ WiFiClient] [ 32 ] | ✓ | ✓ | | setTimeout(seconds) !!! [ issue] ( https://github.com/espressif/arduino-esp32/issues/5558 ) |
222
230
| WiFiEspAT| [ WiFiClient] [ 34 ] | | ✓ | ✓ | |
223
- | EthernetENC | [ EthernetClient] [ 35 ] | | | ✓ | ✓ |
231
+ | EthernetENC | [ EthernetClient] [ 35 ] | | | + | ✓ |
224
232
| STM32Ethernet| [ EthernetClient] [ 36 ] | | | ✓ | ✓ |
225
- | QNEthernet | [ EthernetClient] [ 37 ] | ✓ | ✓ | ✓ | ✓ |
233
+ | QNEthernet | [ EthernetClient] [ 37 ] | + | ✓ | + | ✓ |
226
234
227
235
228
236
## Server class
@@ -244,8 +252,8 @@ Arduino core has `Server` class which inherits from the `Print` class. The idea
244
252
| C33 lwIpWrapper | [ lwipServer] [ 48 ] | ✓| | ✓ |
245
253
| ESP8266WiFi | [ WiFiServer] [ 50 ] || | [ ArduinoWiFiServer] ( https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266WiFi/src/ArduinoWiFiServer.h ) |
246
254
| esp32 WiFi | [ WiFiServer] [ 52 ] | ✓ | ✓ || ✗ |
247
- | WiFiEspAT| [ WiFiServer] [ 54 ] | | ✓ | WiFiServerPrint |
248
- | EthernetENC | [ EthernetServer] [ 55 ] || ✓ | EthernetServerPrint |
255
+ | WiFiEspAT| [ WiFiServer] [ 54 ] | | + | WiFiServerPrint |
256
+ | EthernetENC | [ EthernetServer] [ 55 ] || + | EthernetServerPrint |
249
257
| STM32Ethernet | [ EthernetServer] [ 56 ] | ✓| ✓ | ✓ |
250
258
| QNEthernet | [ EthernetServer] [ 57 ] | ✓| ✓ | ✓ |
251
259
@@ -262,11 +270,11 @@ All Server classes have method [`begin`](https://www.arduino.cc/reference/en/lib
262
270
| WiFiS3 | [ WiFiServer] [ 45 ] | ✓* | ✓* | [ PR] ( https://github.com/arduino/ArduinoCore-renesas/pull/140 ) | | ✓ | [ PR] ( https://github.com/arduino/ArduinoCore-renesas/pull/144 ) |
263
271
|Mbed SocketWrapper | [ MbedServer] [ 46 ] | | [ PR] ( https://github.com/arduino/ArduinoCore-mbed/pull/751 ) | | returns 0 [ issue] ( https://github.com/arduino/ArduinoCore-mbed/issues/730 ) | (1) | [ PR] ( https://github.com/arduino/ArduinoCore-mbed/pull/750 )
264
272
| C33 lwIpWrapper | [ lwipServer] [ 48 ] | | | | | ✓ | |
265
- | ESP8266WiFi | [ WiFiServer] [ 50 ] | ✓ | stop() -> | [ PR ] ( https://github.com/esp8266/Arduino/pull/8995 ) | ✓ | (1)(2) | ✓ |
273
+ | ESP8266WiFi | [ WiFiServer] [ 50 ] | ✓ | + | + | ✓ | (1)(2) | ✓ |
266
274
| esp32 WiFi | [ WiFiServer] [ 52 ] | ✓ | ✓ | ✓ | ✓ | ✗(1) | ✓ |
267
- | WiFiEspAT| [ WiFiServer] [ 54 ] | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
268
- | EthernetENC | [ EthernetServer] [ 55 ] | ✓ | ✓ | ✓ | | ✓ | ✓ |
269
- | STM32Ethernet | [ EthernetServer] [ 56 ] | ✓ | -> | [ issue ] ( https://github.com/stm32duino/STM32Ethernet/issues/73 ) | | ✓ | ✓ |
275
+ | WiFiEspAT| [ WiFiServer] [ 54 ] | + | ✓ | ✓ | ✓ | ✓ | ✓ |
276
+ | EthernetENC | [ EthernetServer] [ 55 ] | + | ✓ | ✓ | | ✓ | ✓ |
277
+ | STM32Ethernet | [ EthernetServer] [ 56 ] | ✓ | + | + | | ✓ | ✓ |
270
278
| QNEthernet | [ EthernetServer] [ 57 ] | ✓ | ✓ | ✓ | | ✓ | ✓ |
271
279
272
280
1 ) the method called ` available ` in WiFiServer works like ` accept ` method
0 commit comments