基于Micropython的桌面信息小摆件

news/2024/4/19 3:29:36

文章目录

    • 1. 硬件设备
    • 2. Micropython
    • 2.1 准备开发环境
    • 2.2 信息获取
    • 2.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的信息。

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显示的函数,这里是一分钟刷新一次,实际可以根据需求自己修改。

stock_tick = 61def UI_Display(datetime):global stock_tickif 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,输入的股票名字并没有使用,而是使用图片显示。原因有两个,一是本身汉字的字库不全,没法显示太多汉字,使用图片则无所谓显示的是什么;另一点是文字显示格式不太好调,直接用图片则简单又美观。

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 = GREENelse:color = REDif 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 Noneexcept: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


https://dhexx.cn/news/show-5071426.html

相关文章

分支和远程仓库

分支 查看分支 git branch -v 创建分支 git branch 分支名 切换分支 git checkout 分支名 合并分支 git merge 分支名 把指定的分支合并到当前分支上 查看当前所有远程地址别名: git remote -v 起别名: git remote add 别名 远程地址推送本地分支上的…

Linux安全加固:保护你的服务器

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

css中BFC外边距塌陷解决办法

什么是BFC 块级格式化上下文&#xff0c;独立的渲染区域&#xff0c;与外部毫不相干&#xff0c;上下两个元素都设置了外边距&#xff0c;结果会出现重叠的部分合并 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /&…

Java | UDP协议

不爱生姜不吃醋⭐️ 如果本文有什么错误的话欢迎在评论区中指正 与其明天开始&#xff0c;不如现在行动&#xff01; 文章目录 &#x1f334;前言&#x1f334;一、TCP/IP参考模型&#x1f334;二、UDP协议1. 概念2. 发送数据3.接收数据5.运行结果 &#x1f334;总结 &#x1f…

许可分析 license分析 第十一章

许可分析是指对软件许可证进行详细的分析和评估&#xff0c;以了解组织内部对软件许可的需求和使用情况。通过许可分析&#xff0c;可以帮助组织更好地管理和优化软件许可证的使用。以下是一些可能的许可分析方法和步骤&#xff1a; 软件许可证监管合规性&#xff1a;严格遵守软…

Redis集群总结

Redis&#xff0c;作为一款开源的、内存中的数据结构存储系统&#xff0c;以其出色的性能和丰富的数据结构在业界赢得了广泛的认可。然而&#xff0c;当我们面临大量数据和高并发请求时&#xff0c;单个 Redis 实例可能无法满足我们的需求。这时&#xff0c;我们就需要使用到 R…

[NLP] LLM---<训练中文LLama2(五)>对SFT后的LLama2进行DPO训练

简介 大型语言模型&#xff08;LLM&#xff09;使 NLP 中微调模型的过程变得更加复杂。最初&#xff0c;当 ChatGPT 等模型首次出现时&#xff0c;最主要的方法是先训练奖励模型&#xff0c;然后优化 LLM 策略。从人类反馈中强化学习&#xff08;RLHF&#xff09;极大地推动了…

openGauss学习笔记-72 openGauss 数据库管理-创建和管理分区表

文章目录 openGauss学习笔记-72 openGauss 数据库管理-创建和管理分区表72.1 背景信息72.2 操作步骤72.2.1 使用默认表空间72.2.1.1 创建分区表&#xff08;假设用户已创建tpcds schema&#xff09;72.2.1.2 插入数据72.2.1.3 修改分区表行迁移属性72.2.1.4 删除分区72.2.1.5 增…

RHCSA 重定向、vim练习题

1.重定向练习题 (1)新建一个文件redirect.txt&#xff0c;并在其中写入20210804RHCSA,保存并退出 先输入命令 [rootlocalhost ~]# vim redirect.txt进入vim编辑器后&#xff0c;按快捷键“i”进入编辑模式&#xff0c;再写入数据&#xff0c;写完之后按“esc"键退出编辑…

【多线程案例】定时器

1. 定时器是什么&#xff1f; 定时器也是软件开发中的一个重要组件. 类似于一个 "闹钟". 达到一个设定的时间之后, 就执行某个指定好的代码. 定时器是一种实际开发中非常常用的组件. 比如网络通信中, 如果对方 500ms 内没有返回数据, 则断开连接尝试重连. 比如一个 …