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

732
January 10, 2017, at 00:02 AM

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.

Answer 1

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/master/esp8266/modnetwork.c#L430. 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
Rent Charter Buses Company
READ ALSO
Python marionette client doesn't close last window

Python marionette client doesn't close last window

Here's a small program that doesn't seem to close the last tab

467
Why Doesn't Pandas Produce an Ambiguous Time Error?

Why Doesn't Pandas Produce an Ambiguous Time Error?

In 2016 daylight savings time started at 2am on 2016-03-13 for US Eastern time, and ended at 2am on 2016-11-06So, 2016-03-13 02:30:00 is not a valid timestamp, and 2016-11-06 01:30:00 occurred twice

480
Only output the first line in a for loop [on hold]

Only output the first line in a for loop [on hold]

I'm currently trying mysqlf on parsing some live game logsI have a function for parsing through the log that looks like this:

344