本站改版新增arduino频道
boot.py
"""
The MIT License (MIT)
Copyright © 2020 Walkline Wang (https://walkline.wang)
https://gitee.com/walkline/MicroPython-with-Aligenie-Voice-Skill
"""
import gc
import ntptime
from utime import sleep_ms
from machine import Pin, Timer
from wifihandler import WifiHandler
def hard_reset():
from machine import reset
reset()
def blink():
led = Pin(2, Pin.OUT, value=0)
for count in range(20):
led.value(not led.value())
sleep_ms(200)
def sync_ntp():
ntptime.NTP_DELTA = 3155644800
ntptime.host = "ntp1.aliyun.com"
ntptime.settime()
def connect_to_wifi():
WifiHandler.set_ap_status(False)
sleep_ms(1000)
result_code = WifiHandler.set_sta_mode("NBWIFI", "z7758521")
return result_code
def check_internet_cb(timer):
if not WifiHandler.get_sta_status() or not WifiHandler.check_internet_connection():
print("Wifi disconnected or lost internet connection, restarting now...")
hard_reset()
gc.collect()
if __name__ == "__main__":
if WifiHandler.STATION_CONNECTED == connect_to_wifi():
if WifiHandler.check_internet_connection():
sync_ntp()
Pin(2, Pin.OUT, value=1)
check_internet_timer = Timer(1)
check_internet_timer.init(
mode=Timer.PERIODIC,
period=(Config.MQTT_KEEPALIVE - 5) * 1000,
callback=check_internet_cb
)
print("Timer started, periodic {} seconds".format(Config.MQTT_KEEPALIVE))
gc.collect()
else:
print("Connected to wifi, but no internet connection, restarting now...")
blink()
sleep_ms(1000)
hard_reset()
else:
print("Cannot connect to specified wifi, restarting now...")
blink()
sleep_ms(1000)
hard_reset()wifihandler.py
"""
The MIT License (MIT)
Copyright © 2020 Walkline Wang (https://walkline.wang)
https://gitee.com/walkline/MicroPython-with-Aligenie-Voice-Skill
"""
import network
import urequests
__station_status_message = {
network.STAT_IDLE: "network idle",
# network.STAT_CONNECT_FAIL: "network connect failed",
network.STAT_CONNECTING: "",
network.STAT_GOT_IP: "Connected",
network.STAT_NO_AP_FOUND: "could not found ap",
network.STAT_WRONG_PASSWORD: "wrong password given",
network.STAT_BEACON_TIMEOUT: "beacon timeout",
network.STAT_ASSOC_FAIL: "assoc fail",
network.STAT_HANDSHAKE_TIMEOUT: "handshake timeout"
}
class WifiHandler(object):
AP_MODE = 0
STA_MODE = 1
STATION_CONNECTED = network.STAT_GOT_IP
INTERNET_TESTING_URL = "https://gitee.com/walkline/WeatherStation/raw/master/success.html"
def __init__(self):
pass
@staticmethod
def set_sta_status(active: bool):
station = network.WLAN(network.STA_IF)
station.active(active)
@staticmethod
def set_ap_status(active: bool):
access_point = network.WLAN(network.AP_IF)
access_point.active(active)
@staticmethod
def get_sta_status():
station = network.WLAN(network.STA_IF)
return station.isconnected()
@staticmethod
def set_sta_mode(essid, password, timeout_sec=120):
from utime import sleep_ms
station = network.WLAN(network.STA_IF)
print("\nConnecting to network...")
if not station.isconnected():
station.active(True)
station.connect(essid, password)
# station.config(dhcp_hostname="esp32")
retry_count = 0
while not station.isconnected():
if timeout_sec > 0:
if retry_count >= timeout_sec * 2:
break
result_code = station.status()
if result_code == network.STAT_IDLE or\
result_code == network.STAT_GOT_IP or\
result_code == network.STAT_NO_AP_FOUND or\
result_code == network.STAT_WRONG_PASSWORD:
break
elif result_code == network.STAT_CONNECTING:
pass
retry_count += 1
sleep_ms(500)
status_code = station.status()
print(__station_status_message[status_code])
print(station.ifconfig())
return status_code
@staticmethod
def check_internet_connection():
status = False
try:
res = urequests.get(WifiHandler.INTERNET_TESTING_URL, timeout=4.0)
if res:
if res.text == "Success":
status = True
except:
pass
return status
@staticmethod
def gateway():
import network
gateway = None
station = network.WLAN(network.STA_IF)
if station.status() == network.STAT_GOT_IP:
gateway = station.ifconfig()[2]
return gateway
Copyright © 2014 ESP56.com All Rights Reserved
晋ICP备14006235号-22 晋公网安备14108102001165号
执行时间: 0.0093100070953369 seconds