587|2

6

帖子

2

TA的资源

一粒金砂(中级)

楼主
 

【得捷电子Follow me第2期】任务四:日历&时钟 [复制链接]

 

任务四:选了日历&时钟

这部分内容不太会,参考了一下其他大佬的,自己在别人的基础上面做了一些改动

先导入必要的库

# 导入所需的库
import board, os, wifi
import time
import ssl
import socketpool
import displayio
import adafruit_requests
import adafruit_imageload
import digitalio
from adafruit_display_text import label, wrap_text_to_lines
from adafruit_bitmap_font import bitmap_font

 

然后进行有关配置

# 设置字体颜色
color = 0x0000FF

# 加载字体文件
font = bitmap_font.load_font("/type/wenquanyi_9pt.pcf")

# 获取显示设备,初始化屏幕
display = board.DISPLAY

# 创建本例程里的唯一图像组
group = displayio.Group()

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

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

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

# 显示当前图像组
display.show(group)

 

这个api接口我申请了高德的,但是自己不会用,用了其他大佬的api,这个api也不是高德的,是中国天气网的

# 定义获取时间和天气的接口URL
JSON_TIME_URL = "http://quan.suning.com/getSysTime.do"
JSON_weather_URL = "http://t.weather.sojson.com/api/weather/city/{}"

 

再进行有关配置

# 创建一个socket连接池和一个请求会话
pool = socketpool.SocketPool(wifi.radio)
requests = adafruit_requests.Session(pool, ssl.create_default_context())

# 创建LED对象
led = digitalio.DigitalInOut(board.LED)
led.direction = digitalio.Direction.OUTPUT
# 先点亮LED
led.value = True

 

定义三个函数,因为把显示的内容分为了三个部分,每个部分作为一个块,分别显示,也可以使用不同的字体和颜色,但是我用的字体库太大了,就不加入其他字体库了

# 定义一个刷新地区的函数
def show_add(print_text):
    add_area = label.Label(font, text=print_text, color=color, scale=1)
    add_area.x = 10
    add_area.y = 120
    if len(group)==4:
        group[1]=add_area
    else:
        group.append(add_area)

# 定义一个刷新时间的函数
def show_time(print_text):
    time_area = label.Label(font, text=print_text, color=color, scale=2)
    time_area.x = 5
    time_area.y = -30
    if len(group)==4:
        group[2]=time_area
    else:
        group.append(time_area)

# 定义一个刷新温度和天气的函数
def show_tem(print_text):
    tem_area = label.Label(font, text=print_text, color=color, scale=3)
    tem_area.x = 10
    tem_area.y = -5
    if len(group)==4:
        group[3]=tem_area
    else:
        group.append(tem_area)

 

再写两个函数获取天气等有关信息

# 定义一个获取数据的函数,包括获取时间和天气信息,并处理异常情况
def get_data(url):
    response = requests.get(url)
    data = response.json()
    response.close()
    return data

# 使用这个函数来拆分数据,获得想要的信息
def get_weather_info():
    time_data = get_data(JSON_TIME_URL)['sysTime2'][:-3]
    city_code = "101280101"
    url = JSON_weather_URL.format(city_code)
    weather_data = get_data(url)
    cityInfo = weather_data['cityInfo']
    city_weather = weather_data['data']
    forecast = city_weather['forecast']
    dis_str = f"{cityInfo['parent']} {cityInfo['city']} {forecast[0]['week']}"
    show_add(dis_str)
    now_time = f"\n{time_data}"
    show_time(now_time)
    tem_and_weather_type = f"\n{city_weather['wendu']}℃ {forecast[0]['type']}"
    show_tem(tem_and_weather_type)

 

最后再来一个主函数,不断刷新屏幕的内容,并且用led提示程序正在运行

# 主循环,每5秒刷新一次屏幕显示的信息,并且闪烁一下led
while True:
    get_weather_info()
    led.value = True
    time.sleep(5)
    led.value = False

 

最后放一张效果图

 

最新回复

用腾讯地图估计好像也是中国天气网   详情 回复 发表于 2023-10-12 07:26
点赞 关注
 
 

回复
举报

6822

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

用腾讯地图估计好像也是中国天气网

点评

这个我倒是不清楚,没有用过  详情 回复 发表于 2023-10-12 10:46
 
 
 

回复

6

帖子

2

TA的资源

一粒金砂(中级)

板凳
 
Jacktang 发表于 2023-10-12 07:26 用腾讯地图估计好像也是中国天气网

这个我倒是不清楚,没有用过

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表