本次主要利用Banana PI Leaf S3开发板 和 SSD1306的OLED屏幕,实现一个简易的天气预报系统。
一、系统架构
直接在Banana PI Leaf S3开发板发出HTTP GET request获取本地天气预报,然后再解析返回的JSON,实现几个关键词的内容在OLED上 的显示。
至于HTTPS与HTTP的选择,当然是越简单越好了,找了个HTTP的天气网站(http://www.yytianqi.com/),注册个账号,使用API即可,这个API的格式类似这样:
http://api.yytianqi.com/接口名称?city=城市ID&key=用户key
二、功能设计与实现
(一)WIFI连接
采用模块化,基于MicroPython的network模块,WIFI.py的内容如下:
import network
import utime
def Connect():
wifi = network.WLAN(network.STA_IF)
if not wifi.isconnected():
wifi.active(True)
wifi.connect('AP-name', 'password')
while not wifi.isconnected():
utime.sleep()
print('network config:',wifi.ifconfig())
(二)核心业务逻辑
按照WIFI初始化、OLED初始化、HTTP请求发出、分析HTTP response、天气预报内容显示的流程,具体如下:
HTTP response parse主要通过MicroPython的JSON库将天气预报的几个重要字段提取。
{'sd': '56', 'numtq': '00', 'fl': '5-6\u7ea7', 'lastUpdate': '2022-10-17 19:16:33', 'cityName': '\u5b81\u6ce2', 'fx': '\u5317\u98ce', 'qw': '17', 'tq': '\u6674', 'numfx': '8', 'numfl': 3, 'cityId': 'CH210401'}
整体功能具体实现如下:
from machine import I2C,Pin
from SSD1306 import SSD1306_I2C
import WIFI
import time
import urequests
import ujson
WIFI.Connect()
i2c = I2C(sda=Pin(13), scl=Pin(14))
oled = SSD1306_I2C(128, 64, i2c, addr=0x3c)
oled.fill(0)
oled.show()
time.sleep(1)
response = urequests.get('http://api.yytianqi.com:8080/observe?city=XXXX&key=XXXX')
jo=ujson.loads(response.text)
temp=jo["data"]
print(temp)
showLine1 = 'Temperature:'+temp.get('qw')+ ' C'
oled.text(showLine1, 0, 0)
tq=temp.get('tq')
if tq == '\u9634':
wt = 'Cloud'
elif tq == '\u6674':
wt = 'Sun'
else:
wt='UNKNOW'
showLine2 = 'Weather:'+wt
oled.text(showLine2, 0, 21)
showLine3 = 'Date:'+temp.get('lastUpdate')
oled.text(showLine3, 0, 42)
oled.show()
(三)OLED显示
OLED驱动在上文中讲过,不再说明。
三、系统运行
直接在Thonny上执行。
具体效果如下:
感谢阅读