比派科技banana pi专区
直播中

大菠萝Alpha

3年用户 674经验值
擅长:嵌入式技术
私信 关注
[经验]

【Banana PI Leaf S3开发板试用体验】基于Banana PI Leaf S3的天气预报系统

本次主要利用Banana PI Leaf S3开发板 和 SSD1306的OLED屏幕,实现一个简易的天气预报系统。

一、系统架构

直接在Banana PI Leaf S3开发板发出HTTP GET request获取本地天气预报,然后再解析返回的JSON,实现几个关键词的内容在OLED上 的显示。

BP9.png

至于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、天气预报内容显示的流程,具体如下:
BP10.png

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上执行。
BP11.png
具体效果如下:
BP12.jpg

感谢阅读

BP3

更多回帖

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