638|1

10

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

【得捷电子Follow me第2期】+基于CircuitPython的桌面时钟 [复制链接]

 

任务4:日历&时钟

                                                                                                                                                                    ——完成一个可通过互联网更新的万年历时钟,并显示当地的天气信息

     效果图

            ​​​​​​​    ​​​​​​​    ​​​​​​​    ​​​​​​​    ​​​​​​​    ​​​​​​​    

 

 

首先把界面给弄好,文字显示位置,以及图片大小,文字大小都需要考虑,这些我都在 Pixso 上处理的

 

主要思路:

           先是处理界面根据在Pixso 上处理的图片,显示在TFT屏幕上面

# 使用固件自带的屏幕设备,不需要另行初始化屏幕参数
display = board.DISPLAY
############################图片显示##########################################
# 创建本例程里的唯一图像组
group = displayio.Group()

# 加载图片
image, palette = adafruit_imageload.load("/PIC/beijing.png")
# 是否开启透明
palette.make_transparent(1)

# 创建图片布局
grid = displayio.TileGrid(image, pixel_shader=palette)

# 将图片布局添加到图像组,由于是第一个添加的,默认是最下层
group.append(grid)

# 显示当前图像组
display.show(group)
###############################################################################
# 加载字体并定义字体颜色为黑色
font = bitmap_font.load_font("/font/MYout-24.bdf")
nun_font = bitmap_font.load_font("/font/UPO-48.bdf")
color = 0x000000

date = label.Label(font, text="10月 31日", color=color)
date.x = 25
date.y = 18
group.append(date)

# 初始化星期标签并设置x,y轴绘图坐标,然后将标签添加到图像组
week = label.Label(font, text="周六", color=color)
week.x = 179
week.y = 8
group.append(week)

# 初始化时间标签并设置x,y轴绘图坐标,然后将标签添加到图像组
time = label.Label(nun_font, text="22:59", color=0xF2C3BD)
# time.x = 20
# time.y = 60

time.x = 29
time.y = 65
group.append(time)

# 初始化天气标签并设置x,y轴绘图坐标,然后将标签添加到图像组
tempzh = label.Label(font, text="23°~34° 晴", color=color)
tempzh.x = 25
tempzh.y = 101
group.append(tempzh)

            再处理网络时间更新,调用RTC函数来更新时间  

pool = socketpool.SocketPool(wifi.radio)
ntp = adafruit_ntp.NTP(pool, tz_offset=8, server="ntp.aliyun.com")

# 使用ntp时间更新系统时间
rtc.RTC().datetime = ntp.datetime

            再去处理高德API接收的值,这里分别接收了 温度和天气信息

# 初始化requests对象
pool = socketpool.SocketPool(wifi.radio)
requests = adafruit_requests.Session(pool, ssl.create_default_context())

def get_weather():
    # 设置城市id
    city = "410702"
    # 这个函数使用的是高德API,使用该API需要先去注册相关账户,申请key。
    key = "7121e4b427fa6f27704655b62db83d61"
    # 拼接天气链接url
    getweather_url = "https://restapi.amap.com/v3/weather/weatherInfo?city=" + city + "&key=" + key
    # 获取天气json数据
    response = requests.get(getweather_url)
    json_resp = response.json()
    # 关闭连接
    response.close()
    # 解析json数据,并返回温度和天气信息
    for da in json_resp["lives"]:
        #print(da["temperature"])
        return da["temperature"], da["weather"]
# 先创建一个status变量,用来在设备启动时获取天气信息
status = "boot"

             接下来就是不断在循环里面获取时间,以及天气信息

# 主循环
while True:

    # 每秒获取一次本地RTC时间
    t = time.localtime()
    # 首次启动或者本地RTC时间的分钟属性为0时,更新日期标签和天气标签
    if (status == "boot" or t.tm_sec == 0):
        # 更新日期标签
        date.text = "%d月%d日" % (t.tm_mon, t.tm_mday)
        week.text = get_wday(t.tm_wday)
        # 获取天气信息
        str_t, str_tz =  get_weather()
        # 更新温度标签
        temp.text = "%s°" % (str_t)
        # 更新天气标签
        tempzh.text = str_tz
        status = "updated"
        print(ssid)
        print(str(wifi.radio.ipv4_address) )
        # 每隔1秒 更新一次时钟标签,用于动态显示
    if (t.tm_sec % 2 == 0):
        timel_s.text = ":%02d" % ( t.tm_sec)
    else:
        timel.text = "%02d:%02d" % ( t.tm_hour, t.tm_min)
        timel_s.text = ":%02d" % ( t.tm_sec)

    key_value=key.key()
    # 判断按键是否按下
    if  key_value!=0:
        # 若按键按下,则对led_color求余数,根据余数指定led颜色
        time.sleep(0.1)
        print(key_value)
        if key_value == 1:
            pixel.fill((JADE))# 玉色
            pixe2.fill((JADE))# 玉色
            timel_s.color = JADE
            timel.color = JADE
        elif  key_value == 2:
            pixel.fill((ORANGE))# 橙色
            pixe2.fill((ORANGE))# 橙色
            timel_s.color = ORANGE
            timel.color = ORANGE
        elif  key_value == 3:
            pixel.fill((GOLD))# 金色
            pixe2.fill((GOLD))# 金色
            timel_s.color = GOLD
            timel.color = GOLD
        elif  key_value == 4:
            pixel.fill((PINK))# 
            pixe2.fill((PINK))# 
            timel_s.color = PINK
            timel.color = PINK
        elif  key_value == 5:
            pixel.fill((BLACK))# 黑色
            pixe2.fill((BLACK))# 黑色
            timel_s.color = BLACK
            timel.color = BLACK

    else:
        pass# 空
    # 刷新屏幕
    display.show(group)

下面是效果视频:

VID_20231019_175404

 

下面是该工程所有文件:

任务4_天气时钟最终版.rar (124.3 KB, 下载次数: 8)

 

最新回复

这作品非常牛呀,关键是处理好了字库的导入,感觉分享!  详情 回复 发表于 2023-10-21 08:07
点赞 关注
 
 

回复
举报

6960

帖子

11

TA的资源

版主

沙发
 
这作品非常牛呀,关键是处理好了字库的导入,感觉分享!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表