收藏

micropython wifi 获取网络时间设置Rtc并循环获取

分类: 基础知识篇 >> ESP32网络相关 发布于 2024-05-16 344次阅读0点赞0收藏

wifi 获取网络时间设置Rtc并循环获取

import uasyncio as asyncio
import urequests
import json
from machine import Pin, RTC, ADC
import network                   # Wi-Fi功能所在库
import utime                     # 延时API所在组件
import ujson                     # json字串解析库

wlan = None
# Wi-Fi SSID和Password设置
wifiSsid = "NBWIFI"
wifiPassword = "z7758521"


# 等待Wi-Fi成功连接到路由器
def get_wifi_status():
    print("wifi...")
    global wlan
    wifi_connected = False
    wlan.active(True)                  #激活界面
    wlan.scan()                        #扫描接入点
    #print("start to connect ", wifiSsid)
    wlan.connect(wifiSsid, wifiPassword)       # 连接到指定的路由器(路由器名称为wifiSsid, 密码为:wifiPassword)

    while True:
        wifi_connected = wlan.isconnected()    # 获取Wi-Fi连接路由器的状态信息
        if wifi_connected:                     # Wi-Fi连接成功则退出while循环
            break
        else:
            utime.sleep(0.5)
            print("wifi_connected:", wifi_connected)


    ifconfig = wlan.ifconfig()                    #获取接口的IP/netmask/gw/DNS地址
    print(ifconfig)
    utime.sleep(0.5)


rtc = RTC()

def setTime():
    url = "http://worldtimeapi.org/api/timezone/Europe/Moscow"
    response = urequests.get(url)
    if response.status_code == 200:
         datetime_str = str(response.json()["datetime"])
         year = int(datetime_str[0:4])
         month = int(datetime_str[5:7])
         day = int(datetime_str[8:10])
         hour = int(datetime_str[11:13])
         minute = int(datetime_str[14:16])
         second = int(datetime_str[17:19])
         subsecond = int(round(int(datetime_str[20:26]) / 10000))
         rtc.datetime((year, month, day, 0, hour, minute, second, subsecond))
         #date_str = "Date: {2:02d}.{1:02d}.{0:4d}".format(*rtc.datetime())
         #time_str = "Time: {4:02d}:{5:02d}:{6:02d}".format(*rtc.datetime())
         return True
    else:
        print("Time is not set")
        return False 
def getRtcTime():
    date_str = "{2:02d}.{1:02d}.{0:4d}".format(*rtc.datetime())
    time_str = "{4:02d}:{5:02d}".format(*rtc.datetime())
    return [date_str, time_str]

if __name__ == '__main__':
    wlan = network.WLAN(network.STA_IF)    #创建WLAN对象
    get_wifi_status()
    setTime()
    while True:
        print(getRtcTime())
        utime.sleep(1)
VIP
购买
建议
意见
联系
客服
在线咨询

您可以与在线客服进行沟通获得帮助

工作日:8:00~22:00节假日:9:00~20:00

微信号: mpyos01

Q Q号: 1401211620

免费
福利
0.042019s