449|1

8

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

【得捷电子Follow me第2期】+任务4:天气和时间 [复制链接]

 

主要分为这几步

  • 导入必要的库,如网络请求、WiFi、屏幕显示等

  • 定义获取数据的URL和请求对象

  • 定义显示文字的函数refresh_screen

  • get_data函数通过请求URL获取时间和天气数据,拼接成字符串返回

  • 初始化WiFi连接

  • 主循环:

    • 调用get_data获取数据字符串

    • 刷新显示refresh_screen

    • 每60s更新一次

 然后代码中有:

city_code = "101020100"
url = JSON_weather_URL.format(city_code)

这里使用了北京市的城市代码"101020100"。

城市代码是一个唯一标识每个城市的编号。不同天气API可能有不同的城市代码系统。

这个天气API文档中给出了常见城市及其代码:

  • 北京:101010100
  • 上海:101020100
  • 广州:101280601

所以通过传入正确的城市代码,就可以从API获取对应城市的天气数据。

这样设计可以支持获取全球任意城市天气,只需要知道对应的城市代码即可。

代码

import board, os, wifi
import time
import ssl
import socketpool
import adafruit_requests

from adafruit_display_text import label, wrap_text_to_lines
from adafruit_bitmap_font import bitmap_font

color = 0xFFFFFF
font = bitmap_font.load_font("fonts\wenquanyi_10pt.pcf")

display = board.DISPLAY
display.brightness = 1
display.rotation = 0

JSON_TIME_URL = "http://quan.suning.com/getSysTime.do"
JSON_weather_URL = "http://t.weather.sojson.com/api/weather/city/{}"

pool = socketpool.SocketPool(wifi.radio)
requests = adafruit_requests.Session(pool, ssl.create_default_context())

def screen(print_text):
    text_area = label.Label(font, text=print_text, scale=1)
    text_area.x = 5
    text_area.y = 15
    text_area.scale = 1
    text_area.color = color
    display.show(text_area)

def get_data():
    try:
        response = requests.get(JSON_TIME_URL)
    except ConnectionError as e:
        print("Connection Error:", e)
        print("Retrying in 60 seconds")
    time_data = response.json()['sysTime2'][:-3]

    try:
        city_code = "101020100"
        url = JSON_weather_URL.format(city_code)
        response = requests.get(url)
    except ConnectionError as e:
        print("connect error:{},retry in 60s".format(e))
    weather_data = response.json()
    cityInfo = weather_data['cityInfo']
    city_weather = weather_data['data']
    forecast = city_weather['forecast']
    dis_str = cityInfo['city'] + ' ' + forecast[0]['week']
    dis_str += "\n时间:"+time_data
    dis_str += '\n空气质量:' + city_weather['quality']
    dis_str += "\n温度:"+city_weather['wendu']+"℃"
    dis_str += "\n湿度:" + city_weather['shidu']
    return dis_str

while not wifi.radio.ipv4_address:
    try:
        wifi.radio.connect('ZZ', '12138888')
    except ConnectionError as e:
        print("connecti error:{},retry in 2s".format(e))
    time.sleep(2)

print("get ip:", wifi.radio.ipv4_address)

while True:
    info = get_data()
    screen(info)
    time.sleep(60)
任务四 天气时间.rar (464.73 KB, 下载次数: 0)

最新回复

显示天气和时间,主循环获取数据字符串每60s更新一次   详情 回复 发表于 2023-10-4 10:12
点赞 关注
 
 

回复
举报

6807

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

显示天气和时间,主循环获取数据字符串每60s更新一次

 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

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

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