【悬赏10凯币】micropython语言

综合技术   © 文章版权由 admin 解释,禁止匿名转载

#楼主# 2022-12-10

使用esp32整点嗡鸣器响,下面是代码
import network
import machine
from machine import Pin
from machine import RTC
import urequests
import utime
import ujson
from ssd1306 import SSD1306_I2C

#从JSON字符串中提取时间戳
#注意由于计算精度问题时间戳最后3位不要
def getInfoFromJSONStr(jsonStr):
jo=ujson.loads(jsonStr)
timeStamp=jo["data"]
return int(timeStamp["t"][:-3])

#收数字转为字符串
#若数字不足两位补前导0
def fromNumToStr(n):
result=str(n)
if len(result)<2:
result="0"+result
return result

#将元组转换为时间字符串
#注意年份和时区自定义调整
def fromTurpleToTimeStr(tup):
return (str(tup[0]-30)+"-"+fromNumToStr(tup[1])+"-"+fromNumToStr(tup[2]+1),
fromNumToStr(tup[4]+8)+":"+fromNumToStr(tup[5])+":"+fromNumToStr(tup[6]))

#将utime时间元组转换为RTC时间元组
def convertTurple(tup):
return (tup[0],tup[1],tup[2],tup[6],tup[3],tup[4],tup[5],0)

#0.96 " I2C OLED屏
sda=Pin(13)
scl=Pin(14)
i2c=machine.I2C(sda=Pin(13),scl=Pin(14),freq=400000)
oled=SSD1306_I2C(128,64,i2c)
#调整亮度。0最暗,255最亮
oled.contrast(125)

#连接网络
station = network.WLAN(network.STA_IF)
while(not station.isconnected()):
station.active(True)
try:
station.connect("噔噔 6331", "00000001") # wifi网络信息
utime.sleep(5.0)
except OSError:
print("OSError")
utime.sleep(2.0)

#获取时间戳JSON
#苏宁API:

本帖含有隐藏内容,请您 回复 后查看
# 不能调用这个,json暂不匹配
# 淘宝API:
本帖含有隐藏内容,请您 回复 后查看
' target='_blank'>
本帖含有隐藏内容,请您 回复 后查看
[/reply]
response = urequests.get("
本帖含有隐藏内容,请您 回复 后查看
' target='_blank'>
本帖含有隐藏内容,请您 回复 后查看
[/reply]")
#将从JSON中提取的时间戳解析为日期时间信息元组
timeTup=utime.localtime(getInfoFromJSONStr(response.text))

#创建RTC对象
rtc=RTC()
#设置RTC时间
rtc.datetime(convertTurple(timeTup))

#不断循环显示实时时间
while True:
#基于日期时间信息元组生成显示所需的日期、时间字符串元组
timeNr=fromTurpleToTimeStr(rtc.datetime())
#清空屏幕
oled.fill(0)
#显示日期
oled.text(timeNr[0],26,20,1)
#显示时间
oled.text(timeNr[1],34,36,1)
#执行显示
oled.show()
#休眠
utime.sleep(0.3)

沙发
玖月๑ 2022-12-10
支持一下。
板凳
初念 2023-3-1
import network
import machine
from machine import Pin
from machine import RTC
import utime

# GPIO引脚定义
buzzer_pin = 15

# 0.96 " I2C OLED屏
sda = Pin(13)
scl = Pin(14)
i2c = machine.I2C(sda=sda, scl=scl, freq=400000)
oled = SSD1306_I2C(128, 64, i2c)
# 调整亮度。0最暗,255最亮
oled.contrast(125)

# 连接WiFi网络
station = network.WLAN(network.STA_IF)
while not station.isconnected():
station.active(True)
try:
station.connect("your_ssid", "your_password") # WiFi网络信息
utime.sleep(5.0)
except OSError:
print("Failed to connect to WiFi")
utime.sleep(2.0)

# 创建RTC对象
rtc = RTC()

# 循环执行
while True:
# 获取当前时间
time_now = rtc.datetime()

# 检查是否到整点
if time_now[6] == 0 and time_now[7] == 0:
# 触发嗡鸣器
buzzer = Pin(buzzer_pin, Pin.OUT)
buzzer.value(1)
utime.sleep(0.1)
buzzer.value(0)

# 显示时间
# 将日期时间信息元组转换为日期时间字符串
date_str = "{:02d}-{:02d}-{:02d}".format(time_now[0], time_now[1], time_now[2])
time_str = "{:02d}:{:02d}:{:02d}".format(time_now[4], time_now[5], time_now[6])

# 清空屏幕
oled.fill(0)

# 显示日期
oled.text(date_str, 26, 20, 1)

# 显示时间
oled.text(time_str, 34, 36, 1)

# 执行显示
oled.show()

# 休眠
utime.sleep(0.5)

评论

登录后才可发表内容
  • 主题

    3

  • 帖子

    1

  • 关注者

    0

Copyright © 2019 凯特网.   Powered by HYBBS 2.3.4  

Runtime:0.0858s Mem:2084Kb