基于Micropython的桌面信息小摆件

文章目录

    • [1. 硬件设备](#1. 硬件设备)
    • [2. Micropython](#2. Micropython)
    • [2.1 准备开发环境](#2.1 准备开发环境)
    • [2.2 信息获取](#2.2 信息获取)
    • [2.3 代码实现](#2.3 代码实现)
    • [3. 总结](#3. 总结)

转眼2023年已快到十一了,突然发现今年还没有任何产出,赶紧抓紧时间搜寻一番,更新一个简单的小制作。后续再努力,多写写正经内容,以便更好的总结之前的经验。

本次将介绍一个基于Micropython的桌面信息小摆件,可以显示实时时间、日期、天气等信息,在此基础上添加股票信息显示,可以为办公或生活空间增添一抹趣味。

1. 硬件设备

这次用的硬件实际是开源的pyClock,可以自己制作,不过为了方便我是直接买了成品,外形就是一个小电视。注意要买基于ESP32主控的模块,这样性能强一些,可以实现更多功能。

2. Micropython

首先,我们需要了解一下Micropython是什么。Python相信大部分人都不陌生,而Micropython是一种轻量级的Python编程语言,专为微控制器(如Arduino)设计。这意味着我们可以使用Python编写代码来控制硬件设备,从而实现更多功能。

本模块自带了支持Micropython的固件,如果没有自己更新一下即可,ESP32本身也是可以支持Micropython的,总的来说使用起来非常方便。不过,脚本语言的缺点同样存在,如资源消耗太多,运行比较慢,时不时有莫名其妙的BUG😔。

2.1 准备开发环境

Micropython不同于Python,这里使用的开发环境是Thonny 4.0,软件比较简单,支持基本的代码编写、运行,上传下载代码、文件等功能。具体如何使用参考相关的教程,下载好代码后载入已有的开源工程就可以开始写代码了。

2.2 信息获取

模块自带的有时间、天气等信息,作为一个桌面小摆件已经可以用了,不过实用价值不大,所以本文添加了获取股票信息的功能。这样在开盘时间就可以实时关注自己的股票信息,防止错过关键时间。

股票信息获取很简单,只需要访问"http://qt.gtimg.cn/q="+"股票ID"就可以获取相关的信息。比如,访问"https://qt.gtimg.cn/q=sh600519"就可以获得茅台的当前股价信息,每个信息由'~'符号分隔,只需要选择自己关注的值就可以了,具体每个含义建议比对各股票App的信息。

python 复制代码
v_sh600519="1~贵州茅台~600519~1781.99~1818.69~1819.00~28431~11863~16569~1781.99~0~1781.98~26~1781.92~15~1781.88~7~1781.71~1~1782.00~1~1782.99~27~1783.00~4~1784.00~1~1784.46~3~~20230915155953~-36.70~-2.02~1819.78~1781.30~1781.99/28431/5105749077~28431~510575~0.23~32.49~~1819.78~1781.30~2.12~22385.32~22385.32~11.14~2000.56~1636.82~1.84~13~1795.84~31.11~35.69~~~1.16~510574.9077~0.0000~0~ ~GP-A~4.76~-2.01~2.68~34.29~29.64~1935.00~1285.18~-3.73~-1.14~4.21~1256197800~1256197800~15.29~5.37~1256197800~~~-2.74~0.00~~CNY~0~___D__F__N";

为了在小电视上显示股票信息,只要定时访问这个网址获取信息,然后显示到屏幕上。

2.3 代码实现

在原始代码的'ui'目录下新建'stock.py'用于实现股票信息相关的获取和显示,新增一个UI显示的函数,这里是一分钟刷新一次,实际可以根据需求自己修改。

python 复制代码
stock_tick = 61

def UI_Display(datetime):
    global stock_tick

    if global_var.UI_Change:
        global_var.UI_Change = 0        
        d.fill(BLACK)

    if stock_tick != datetime[5]:
        stock_tick = datetime[5]
        stock_display(sgm, sgm_name, sgm_img)

具体实现在stock_display()函数中,传入股票的ID和名字,这里有个小trick,输入的股票名字并没有使用,而是使用图片显示。原因有两个,一是本身汉字的字库不全,没法显示太多汉字,使用图片则无所谓显示的是什么;另一点是文字显示格式不太好调,直接用图片则简单又美观。

python 复制代码
def stock_display(stock_id, stock_name, stock_img):
    for i in range(5):#失败会重试,最多5次
        try:
            stockURL = urequest.urlopen(stock_url+stock_id)
            text = stockURL.read(1000).split(b'~')

            curr_price = text[3].decode('utf-8')
            today_open = text[5].decode('utf-8')
            up_down = text[31].decode('utf-8')
            up_down_per = text[32].decode('utf-8') + r'%'

            if up_down[0] == '-':
                color = GREEN
            else:
                color = RED
            
            if stock_img is not None:
                d.Picture(0, 0, stock_img)
            else:
                d.printStr(stock_id, 0, 0, color, size=3)

            printChinese('当 前 ',10,50,color=color,backcolor=BLACK,size=2)
            d.printStr('          ', 110, 50, BLACK, size=3)
            d.printStr(curr_price, 110, 50, color, size=3)
            printChinese('今 开 ',10,100,color=color,backcolor=BLACK,size=2)
            d.printStr('          ', 110, 100, BLACK, size=3)
            d.printStr(today_open, 110, 100, color, size=3)
            printChinese('涨 跌 ',10,150,color=color,backcolor=BLACK,size=2)
            d.printStr('          ', 110, 150, BLACK, size=3)
            d.printStr(up_down, 110, 150, color, size=3)
            printChinese('涨跌幅 ',10,200,color=color,backcolor=BLACK,size=2)
            d.printStr('          ', 110, 200, BLACK, size=3)
            d.printStr(up_down_per, 110, 200, color, size=3)
            return None
        except:
            d.printStr("Can not get stock!", 0, 0, WHITE, size=2)
            print("Can not get stock!",i)
            gc.collect() #内存回收
        time.sleep_ms(1000)

实际代码比较简单,使用urequest库直接读取然后显示,这里有几点注意事项:

  1. ESP32性能有限,所以返回内容最大只读取1000,然后以b'~'分割。
  2. 输出内容要以'utf-8'解码,否则可能会乱码。
  3. 部分汉字原生不支持,需要找个取字模软件,添加到hanzi_24x24_dict字典里
  4. 屏幕刷新速度比较慢,更新内容如果整个清屏则会有闪烁感,所以使用部分更新的办法,即要更新部分先显示黑色空格,然后再显示内容。

最后,显示效果如下:

PS.本文部分内容由AI生成,如有雷同纯属巧合。

PS.PS.最近股票跌的好惨 /(ㄒoㄒ)/~~

3. 总结

在这个简短的文章中,介绍了基于Micropython的桌面信息小摆件。这个小摆件可以显示实时时间、日期、天气、股票等信息,为您的办公或生活空间增添一抹趣味。

Github: https://github.com/songdaw/py_stock

码云:https://gitee.com/songdaw/py_stock

相关推荐
梧桐树04292 小时前
python常用内建模块:collections
python
Dream_Snowar2 小时前
速通Python 第三节
开发语言·python
蓝天星空4 小时前
Python调用open ai接口
人工智能·python
jasmine s4 小时前
Pandas
开发语言·python
郭wes代码4 小时前
Cmd命令大全(万字详细版)
python·算法·小程序
leaf_leaves_leaf4 小时前
win11用一条命令给anaconda环境安装GPU版本pytorch,并检查是否为GPU版本
人工智能·pytorch·python
夜雨飘零14 小时前
基于Pytorch实现的说话人日志(说话人分离)
人工智能·pytorch·python·声纹识别·说话人分离·说话人日志
404NooFound4 小时前
Python轻量级NoSQL数据库TinyDB
开发语言·python·nosql
天天要nx5 小时前
D102【python 接口自动化学习】- pytest进阶之fixture用法
python·pytest
minstbe5 小时前
AI开发:使用支持向量机(SVM)进行文本情感分析训练 - Python
人工智能·python·支持向量机