|
发表于 2023-7-30 17:17:10
|
显示全部楼层
在代码中,加粗的部分涉及时间校准和设置时间。使用 ntptime.settime() 进行时间校准时可能会因为网络连接问题而导致运行较慢或失败。我们可以尝试使用更稳定的方式来获取当前时间。
一个较好的方法是使用RTC(实时时钟)来获取时间。这样可以不依赖于网络连接,提高成功率并减少时间校准的等待时间。Raspberry Pi Pico并没有内置RTC,但可以通过外部模块,如DS3231,来实现。
以下是修改后的代码,使用DS3231模块获取当前时间:
- import time
- import network
- from machine import Pin, I2C
- from ds3231 import DS3231 # 假设你已经安装了ds3231库
- def wifi_main():
- global inif
- wifi = network.WLAN(network.STA_IF) # WIFI模式
- if not wifi.isconnected():
- # print('wifi ing......')
- wifi.active(True)
- wifi.connect('xxxx', 'password') # 连接WIFI
- while not wifi.isconnected():
- pass
- print('Wifi connection succeeded')
- print('network config:', wifi.ifconfig())
- wifi_main()
- i2c = I2C(0, scl=Pin(1), sda=Pin(0), freq=100000) # 根据实际引脚连接调整
- try:
- rtc = DS3231(i2c)
- t = rtc.datetime()
- mytime = "{:04d}-{:02d}-{:02d} {:02d}:{:02d}:{:02d}".format(t[0], t[1], t[2], t[4], t[5], t[6])
- print("获取时间成功")
- except Exception as e:
- print("获取时间失败")
- mytime = time.localtime()
- mytime = "{:04d}-{:02d}-{:02d} {:02d}:{:02d}:{:02d}".format(mytime[0], mytime[1], mytime[2], mytime[3] + 8, mytime[4], mytime[5])
- print(mytime)
- time0 = mytime.split(' ')
- time_date = time0[0]
- time_time = time0[1]
- time_hour_etc = time_time.split(':')
- hour_full = int(time_hour_etc[0])
- if hour_full > 12:
- print(bin(hour_full - 12))
- else:
- print(hour_full)
- decimal_num = hour_full - 12
- binary_num = "{0:b}".format(decimal_num)
- print(binary_num)
- num = binary_num
- listn = [int(i) for i in str(num)]
- print(listn)
- try:
- n1 = listn[-1]
- except:
- n1 = 0
- try:
- n3 = listn[-3]
- except:
- n3 = 0
- try:
- n2 = listn[-2]
- except:
- n2 = 0
- try:
- n4 = listn[-4]
- except:
- n4 = 0
- print(n4, n3, n2, n1)
- led1 = Pin(21, Pin.OUT)
- led2 = Pin(20, Pin.OUT)
- led3 = Pin(19, Pin.OUT)
- led4 = Pin(18, Pin.OUT)
- while True:
- if n4 > 0:
- led1.on()
- else:
- led1.off()
- if n3 > 0:
- led2.on()
- else:
- led2.off()
- if n2 > 0:
- led3.on()
- else:
- led3.off()
- if n1 > 0:
- led4.on()
- else:
- led4.off()
复制代码
请注意,这里假设你已经安装了名为 ds3231 的库。这样修改后的代码应该更稳定,无需依赖网络连接,可以提高成功率并减少等待时间。同时,使用RTC可以更准确地获取时间,尤其是当网络不稳定或无网络连接时。 |
|