src/eric7/MicroPython/Devices/MCUScripts/esp32WiFiConnect.py

Sun, 16 Mar 2025 12:53:12 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 16 Mar 2025 12:53:12 +0100
branch
eric7
changeset 11170
6d6199d668fb
parent 11038
918bc08e1f89
permissions
-rw-r--r--

Added the Adafruit Feather nRF52840 to the list of known NRF52 boards and changed the list of known CircuitPython boards to be more explicit with respect to Adafruit boards (i.e. VID 0x239A).

11038
918bc08e1f89 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10153
diff changeset
1 def has_ntp():
918bc08e1f89 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10153
diff changeset
2 try:
918bc08e1f89 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10153
diff changeset
3 import ntptime
918bc08e1f89 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10153
diff changeset
4 return True
918bc08e1f89 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10153
diff changeset
5 except ImportError:
918bc08e1f89 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10153
diff changeset
6 return False
918bc08e1f89 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10153
diff changeset
7
918bc08e1f89 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10153
diff changeset
8 def set_ntp_time(server, tz_offset, timeout):
918bc08e1f89 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10153
diff changeset
9 import ntptime
918bc08e1f89 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10153
diff changeset
10 import machine
918bc08e1f89 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10153
diff changeset
11
918bc08e1f89 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10153
diff changeset
12 ntptime.host = server
918bc08e1f89 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10153
diff changeset
13 ntptime.timeout = timeout
918bc08e1f89 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10153
diff changeset
14 ntptime.settime()
918bc08e1f89 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10153
diff changeset
15
918bc08e1f89 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10153
diff changeset
16 rtc = machine.RTC()
918bc08e1f89 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10153
diff changeset
17 t = list(rtc.datetime())
918bc08e1f89 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10153
diff changeset
18 t[4] += tz_offset
918bc08e1f89 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10153
diff changeset
19 rtc.datetime(t)
918bc08e1f89 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10153
diff changeset
20
9890
66a6d3f131cc Changed the MCU script to a pythonic naming.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
21 def connect_wifi():
9795
11b4d39d7584 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 import esp32
11b4d39d7584 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 import network
11b4d39d7584 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 from time import sleep
11b4d39d7584 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25
11b4d39d7584 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 try:
11b4d39d7584 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 nvs = esp32.NVS("wifi_creds")
11b4d39d7584 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 buf = bytearray(1024)
11b4d39d7584 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 size = nvs.get_blob("ssid", buf)
11b4d39d7584 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 ssid = buf[:size].decode()
11b4d39d7584 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 size = nvs.get_blob("password", buf)
11b4d39d7584 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 password = buf[:size].decode()
10153
ffe7432f716b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9890
diff changeset
33 size = nvs.get_blob("hostname", buf)
ffe7432f716b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9890
diff changeset
34 hostname = buf[:size].decode()
ffe7432f716b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9890
diff changeset
35 size = nvs.get_blob("country", buf)
ffe7432f716b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9890
diff changeset
36 country = buf[:size].decode()
ffe7432f716b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9890
diff changeset
37
ffe7432f716b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9890
diff changeset
38 print("Connecting WiFi to '{0}'...".format(ssid))
ffe7432f716b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9890
diff changeset
39
ffe7432f716b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9890
diff changeset
40 if country:
ffe7432f716b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9890
diff changeset
41 try:
ffe7432f716b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9890
diff changeset
42 network.country(country)
ffe7432f716b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9890
diff changeset
43 except AttributeError:
ffe7432f716b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9890
diff changeset
44 pass
ffe7432f716b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9890
diff changeset
45
ffe7432f716b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9890
diff changeset
46 if hostname:
ffe7432f716b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9890
diff changeset
47 try:
ffe7432f716b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9890
diff changeset
48 network.hostname(hostname)
ffe7432f716b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9890
diff changeset
49 except AttributeError:
ffe7432f716b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9890
diff changeset
50 pass
9795
11b4d39d7584 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51
11b4d39d7584 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 wifi = network.WLAN(network.STA_IF)
11b4d39d7584 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 wifi.active(False)
11b4d39d7584 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 wifi.active(True)
11b4d39d7584 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 wifi.connect(ssid, password)
11b4d39d7584 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 max_wait = 140
11038
918bc08e1f89 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10153
diff changeset
57 while max_wait and wifi.status() != network.STAT_GOT_IP:
9795
11b4d39d7584 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 max_wait -= 1
11b4d39d7584 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 sleep(0.1)
11038
918bc08e1f89 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10153
diff changeset
60 if wifi.isconnected():
918bc08e1f89 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10153
diff changeset
61 print("WiFi connected:", wifi.ifconfig()[0])
918bc08e1f89 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10153
diff changeset
62 if has_ntp():
918bc08e1f89 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10153
diff changeset
63 set_ntp_time("pool.ntp.org", 0, 10)
918bc08e1f89 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10153
diff changeset
64 print("Time snchronized to network time (UTC).")
918bc08e1f89 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10153
diff changeset
65 else:
918bc08e1f89 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10153
diff changeset
66 print("WiFi connection failed. Status:", wifi.status())
9795
11b4d39d7584 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 except:
9828
32c8a5b57332 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9795
diff changeset
68 print("WiFi secrets are kept in NVM. Please store them there!")
9795
11b4d39d7584 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69
9890
66a6d3f131cc Changed the MCU script to a pythonic naming.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9828
diff changeset
70 connect_wifi()

eric ide

mercurial