核桃派
直播中

张峻巍

1年用户 42经验值
擅长:嵌入式技术 控制/MCU
私信 关注

【核桃派ZeroW开发板体验连载】小小气象站 最终

室外天气获取

我们使用和风天气获取,如果你之前没有使用过和风天气开发服务平台,需要注册账号。和风天气开发服务平台:https://dev.qweather.com/ 登录和风天气开发服务平台后,进入“开发服务控制台”,点击左侧“项目管理”,在右侧点击“创建项目”,然后填写“项目名称”,选择“免费订阅”,设置KEY为“Web API”,并给KEY起个名称,最后点击“创建”。下图是我创建好的项目。
天气获取.JPG
我们接着来获取地理ID,其中的xxx需要替换成你自己要查询的参数,就是点击查看的那一串。location填写你的市,可以通过下面的链接获得。

https://geoapi.qweather.com/v2/city/lookup?location=xxx&key=xxx

在里面找到自己的区,id是name底下的id把,id复制下来:
id.JPG

接着你的查看天气地址出来了,key写上面一样的key,location写获取到的ID:

https://devapi.qweather.com/v7/weather/now?location=xxx&key=xxx

字体

oled显示我们使用默认的所以不能显示中文,只能自己去导入字体。字体获得很简单,在win下我们打开C:\Windows\Fonts在文件夹下复制一个字体,用Thonny上传字体到程序文件夹下面即可。

最终代码

我们将上面的准备一个一个测试:
天气数据获取:

import requests
url = 'https://devapi.qweather.com/v7/weather/now?location=101230207&key=95ff6ba4fcfb4af3bbe88ec1ac49a6bd'
strhtml  = requests.get(url)
json_tq=strhtml.json()

print('室外温度:',json_tq['now']['temp'])
print('室外湿度:',json_tq['now']['humidity'])

中文字体:

'''
实验名称:小小气象站
实验平台:核桃派ZeroW
'''
import time,board,busio,adafruit_ssd1306,adafruit_ahtx0,adafruit_bmp280
from digitalio import DigitalInOut, Direction, Pull
from PIL import Image, ImageDraw, ImageFont

i = 0
url = 'https://devapi.qweather.com/v7/weather/now?location=101230207&key=95ff6ba4fcfb4af3bbe88ec1ac49a6bd'
i2c = busio.I2C(board.SCL1, board.SDA1)
disp = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3C)

# 清屏
disp.fill(0)
disp.show()

width = disp.width
height = disp.height
# 单色位图
image = Image.new("1", (width, height))

# 定义绘图对象
draw = ImageDraw.Draw(image)

# 绘制一个黑色填充的矩形以清屏
draw.rectangle((0, 0, width, height), outline=0, fill=0)
top = -2
# 定义字体
font = ImageFont.truetype("simhei.ttf", 16)

draw.text((0, top + 0), "中文", font=font, fill=255)

# 显示信息
disp.image(image)
disp.show()

最后,和上一篇的代码加在一起:

'''
实验名称:小小气象站
实验平台:核桃派ZeroW
'''
import time,board,busio,adafruit_ssd1306,adafruit_ahtx0,adafruit_bmp280
from digitalio import DigitalInOut, Direction, Pull
from PIL import Image, ImageDraw, ImageFont
import requests

i = 0
#构建人体感应传感器对象和初始化
irq = DigitalInOut(board.PC8) #定义引脚编号
irq.direction = Direction.INPUT #IO为输入
url = 'https://devapi.qweather.com/v7/weather/now?location=101230207&key=95ff6ba4fcfb4af3bbe88ec1ac49a6bd'
i2c = busio.I2C(board.SCL1, board.SDA1)
sensor = adafruit_ahtx0.AHTx0(i2c)
# #构建BMP280,模块I2C地址为默认的0x76.
bmp280 = adafruit_bmp280.Adafruit_BMP280_I2C(i2c,address=0x76)
disp = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3C)
bmp280.sea_level_pressure = 1013.25
# 清屏
disp.fill(0)
disp.show()

width = disp.width
height = disp.height
# 单色位图
image = Image.new("1", (width, height))

# 定义绘图对象
draw = ImageDraw.Draw(image)

# 绘制一个黑色填充的矩形以清屏
draw.rectangle((0, 0, width, height), outline=0, fill=0)
top = -2
# 定义字体
font = ImageFont.truetype("simhei.ttf", 10)
while True:
    if irq.value == 1:
        i = 0
        strhtml  = requests.get(url)
        json_tq=strhtml.json()
        draw.rectangle((0, 0, width, height), outline=0, fill=0)
        #time.strftime('%Y-%m-%d %H:%M',time.localtime(time.time()))
        draw.text((0, top + 1), time.strftime('%Y-%m-%d %H:%M',time.localtime(time.time())), font=font, fill=255)
        draw.text((0, top + 11), "室内温度: %.2fC"  %(sensor.temperature), font=font, fill=255)
        draw.text((0, top + 21), "室内湿度: %.2f"  %(sensor.relative_humidity)+'%', font=font, fill=255)
        draw.text((0, top + 31), "室外温度:"+json_tq['now']['temp']+'C', font=font, fill=255)
        draw.text((0, top + 41), "室外湿度:"+json_tq['now']['humidity']+'%', font=font, fill=255)
        draw.text((0, top + 51), "大气压强: %0.1f hPa" % bmp280.pressure, font=font, fill=255)
        #draw.text((0, top + 52), "海拔高度: %0.2f meters" % bmp280.altitude, font=font, fill=255)
        # 显示信息
        disp.image(image)
        disp.show()
    elif irq.value == 0:
        if i<=0:
            disp.fill(0)
            disp.show()
        else:
            pass
        i+=1
    time.sleep(1)

开机自动运行Python代码

我们到外面去展示不能现场操作运行吧,所以我们使用开机自动运行Python代码。为了节省时间我只讲终端方法:

sudo nano /lib/systemd/system/start.service

写入:

[Unit]
Description=Expand partition size

[Service]
Type=oneshot
ExecStart=Python3 /home/pi/python/XXX.py
RemainAfterExit=yes
StandardOutput=null

[Install]
WantedBy=multi-user.target

保存后给该文件最高权限:

sudochmod777 /lib/systemd/system/start.service

开启该服务:

sudo systemctl enable start.service

执行复位指令

sudo reboot

效果:
最终图.jpg

最终

更多回帖

发帖
×
20
完善资料,
赚取积分