ESP8266 Micropython - connecting to University Wi-fi ( WPA2 Enterprise PEAP )

3.7k views Asked by At

I have a board with an ESP8266 chip running Micropython firmware v1.8.7. My requirement is to use WebREPL via the University Wi-Fi, which uses WPA2 Enterprise EAP-MSCHAPv2 authentication. My Google-fu so far has informed me that Arduino users have been able to connect to WPA2 Enterprise EAP-TLS (certificate based authentication) (link) but not (SSID, username, pwd) networks.

All the threads I've seen so far on the subject seem to be from mid-2016 at the very latest, so I'm wondering whether someone's been able to figure out how to do this since then. I've never dabbled in network related stuff before (nor am I a great programmer), so all the big words above are pretty new to me. I thus have the following questions:

  1. Is this just an inherent limitation of the ESP8266? Or can it be done? This discussion seems to suggest it can be done but the capability needs to be coded in.
  2. Is it possible to somehow branch out a WPA2 Personal connection from the WPA2 Enterprise that can be used by the ESP8266 as well as my PC? What I've tried so far is to attempt a hotspot using Connectify but there's been no luck there.

I appreciate any help you guys can provide. If there's any relevant info I haven't included, please let me know and I'll edit it in.

Edit: @MaximilianGerhardt This is what works for me on a WPA2 Personal:

import network
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect('ssid','pwd')
wlan.ifconfig()

import webrepl
webrepl.start()

On a WPA2 Enterprise, I had hoped changing this line would work, but no joy:

wlan.connect('ssid',auth=WPA2_ENT,'user','pwd')

Thanks, I'll look into the Espressif Non-OS SDK V2.0.0 and see if I can make it work.

1

There are 1 answers

1
Maximilian Gerhardt On BEST ANSWER

As I linked in the comments the problem has apparently been solved in the newest 2.0 Espressif SDK. But since you're not using the Espressif C SDK, but the python "Micropython" firmware, this change has not been yet propagated into this python firmware.

You can see the mapping of the network functions (active(), connect(), ifconfig() etc) in the firmware here: https://github.com/micropython/micropython/blob/52df2f889e3315a4ced5a81e80efbb138182cd1b/esp8266/modnetwork.c. In line 115 you can also see the call to wifi_station_connect(), which is a native Espressif-SDK function. Thus you'll see, the firmware doesn't yet make use of the new functions for WPA2 authentication. In line 490 you can see all the available options for authentication:

MP_OBJ_NEW_SMALL_INT(AUTH_OPEN) ,
MP_OBJ_NEW_SMALL_INT(AUTH_WEP) ,
MP_OBJ_NEW_SMALL_INT(AUTH_WPA_PSK) ,
MP_OBJ_NEW_SMALL_INT(AUTH_WPA2_PSK) ,
MP_OBJ_NEW_SMALL_INT(AUTH_WPA_WPA2_PSK)

WPA2 enterprise authentication is not yet one of them.

So now I'd say your options are:

  1. Open a github issue https://github.com/micropython/micropython/ in which you ask them to implement WPA2 authentication for the ESP8266
  2. Switch to the C SDK from Espressif

EDIT: This is still an issue and tracked in https://github.com/micropython/micropython/issues/2778.