查看: 252|回复: 2

[入门教程] 掌控板独立显示天气信息

[复制链接]
本帖最后由 kylinpoet 于 2019-11-25 12:55 编辑

上个星期在群里看到阿豪发了一篇文章说,掌控板不支持某个不需要apikey的天气网站的返回信息解码,今天研究了下,发现
http://wthrcdn.etouch.cn/weather_mini?citykey=101110101
这个天气网站的返回信息在掌控板里不能正常显示的原因是:它的内容是经过gzip压缩的,虚谷号因为使用的是完整的requests库,默认自动解压,所以返回数据是没有问题。
而掌控板自带的库 urequests 是阉割版的,没有提供解压功能,所以造成数据的乱码。
上午研究并解决了这个问题,发文记录下。
解决此问题,引入一个函数即可,具体请看代码:
[Python] 纯文本查看 复制代码
from mpython import *
import network
import urequests
import ujson

def decompress(data):
    FTEXT    = 1
    FHCRC    = 2
    FEXTRA   = 4
    FNAME    = 8
    FCOMMENT = 16
    
    assert data[0] == 0x1f and data[1] == 0x8b
    assert data[2] == 8
    flg = data[3]
    assert flg & 0xe0 == 0
    i = 10
    if flg & FEXTRA:
        i += data[11] << 8 + data[10] + 2
    if flg & FNAME:
        while data[i]:
            i += 1
        i += 1
    if flg & FCOMMENT:
        while data[i]:
            i += 1
        i += 1
    if flg & FHCRC:
        i += 2
    return zlib.decompress(memoryview(data)[i:], -15)


my_wifi = wifi()
my_wifi.connectWiFi("wifi账号", 'wifi密码')
 
oled.fill(0)
oled.DispChar(my_wifi.sta.ifconfig()[0], 0, 0, 1)
oled.show()

url = 'http://wthrcdn.etouch.cn/weather_mini?citykey=101110101'
r = urequests.get(url)
result = ujson.loads(bytes(decompress(r.content)))
print(result)
oled.DispChar(result['data']['ganmao'], 0, 16, 1)
oled.show()






gada888  版主

发表于 2019-11-25 14:25:53

多点图就更好了
回复 支持 反对

使用道具 举报

rzyzzxw  版主

发表于 2019-12-1 09:06:41

陈老师,高人也
回复 支持 反对

使用道具 举报

高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
wifi气象站

硬件清单

btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2020 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail