【好奇心驱动力】基于MicroPython的ESP8266连接OLED显示实时天气

0.前言

之前写了一个ESP8266刷MicroPython及OLED显示,不断思考一下ESP8266连接OLED还能显示什么,于是想到了之前利用树莓派连接墨水屏显示天气信息的实验,功耗比树莓派更低,就此改造一下。

1.实验目的

基于MicroPython的ESP8266连接OLED显示天气信息。

2.实验方法

之前提到了向ESP8266上传main.py,上电ESP8266可以自动加载脚本,在main.py中提前写好连接openweather的API内容,获取json格式数据,然后进行显示。

#encoding=utf-8
import network
import time
import os
import urequests
import ujson

from machine import Pin,I2C
import ssd1306

i2c = I2C(scl=Pin(5), sda=Pin(4))
oled = ssd1306.SSD1306_I2C(128,64,i2c)

ssid = 'wifiname'#wifi名
password = '12345678'#密码

#openweather的api链接,需要替换location和id/key
url = 'http://api.openweathermap.org/data/2.5/weather?q={location}&appid={id}'

#连接wifi
def Connect_Network (ssid,password):
    wifi_network =  network.WLAN(network.STA_IF)
    wifi_network.connect(ssid,password)

    while True:
        if(wifi_network.isconnected()):
            break
        else:
            time.sleep(1)
    print(wifi_network.ifconfig())


Connect_Network(ssid,password)

while True:
    result = urequests.get(url)
    j = ujson.loads(result.text)
    j0 = j['name']
    j1 = j['main']['temp']
    j2 = j['main']['feels_like']
    j3 = j['weather'][0]['main']
    j6 = j['wind']['speed']
    j7 = j['main']['humidity']
    #oled清屏
    oled.fill(0)
    oled.show()
    oled.text(j0+' '+j3,0,5)
    oled.text('Temp:'+str(round(j1-273.15)),0,15)
    oled.text('FeelLike:'+str(round(j2-273.15)),0,25)
    oled.text('WindSpeed:'+str(j6)+'m/s',0,35)
    oled.text('Humidity:'+str(j7)+'%',0,45)
    oled.show()
    #每20秒刷新一次
    time.sleep(20)

3.实验结果

由于没有弄字模所以显示不了中文,显示图案也还需要再测试,暂且只显示天气数据,但能脱离连接笔记本,直接上电使用也还算可以,后续还会尝试加入温湿度传感器。
在这里插入图片描述

4.后续

购买了一个DHT11温湿度传感器,直接利用dht库进行测量(code),然后输出显示。

from machine import Pin
import dht 
dd = dht.DHT11(Pin(14))
dd.measure()
t = dd.temperature()
h = dd.humidity()

在这里插入图片描述


版权声明:本文为m0_46622606原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。