HonestQiao 发表于 2024-12-24 18:16:51

在micropython中使用nano-gui点亮K10屏幕显示温度曲线

本帖最后由 HonestQiao 于 2025-1-3 13:32 编辑

上一篇帖子 【在Arduino中使用TFT_eSPI点亮K10屏幕】分享了在Arduino中使用TFT_eSPI点亮K10屏幕,这一篇,再分享一下在标准micropython中使用micropython-nano-gui点亮K10屏幕。

一、安装micropython可以参考 unihiker.com.cn/wiki/k10/micropython_unihiker_k10 来烧录DFRobot官方提供的micropython固件,也可以到micropython官方下载固件烧录。

如果是自己下载安装的,需要下载对应的bin固件:Firmware (Support for Octal-SPIRAM)
下载地址:MicroPython - Python for microcontrollers


如果电脑上没有安装Python,可以参考 DFRobot官方提供的micropython固件烧录方式。
如果电脑上已经安装Python,那么可以使用如下的方式。

先把K10连接到电脑,然后按住BOOT按键不放,再按一下复位按键,3秒钟以后,再松开BOOT按键。
再打开电脑的命令行黑窗口(command),依次输入如下的命令:
# 查看python版本
python -V

# 安装esptool工具
python -m pip install esptool

# 情况K10的Flash
esptool erase_flash

# 烧录固件
esptool write_flash -z 0x00 ESP32_GENERIC_S3-SPIRAM_OCT-20241129-v1.24.1.bin最后一步需要注意,请把bin固件文件放到黑窗口显示的目录,或者使用CD命令切换到bin固件所在的目录

烧录完成后,按一下K10的复位按键,然后使用micropython开发工具如Thonny连接,得到如下的MicroPython环境就表示成功:


二、检查当前micropython运行环境
直接运行下面的代码来检查:
import os
import gc
import time

try:
    import micropython
    import esp
    IS_MPY = True
except (Exception) as e:
    IS_MPY = False   

try:
    import board
    import espidf
    IS_CPY = True
except (Exception) as e:
    IS_CPY = False   
   

BOARD_NAME = os.uname().machine

IS_ESP32 = True if 'esp32' in BOARD_NAME.lower() else False

gc.collect()

statvfs_fields = ['bsize','frsize','blocks','bfree','bavail','files','ffree',]
ss = dict(zip(statvfs_fields, os.statvfs('/')))

print(os.uname())
print("开发板:%s" % BOARD_NAME)
print("剩余内存: %0.2fM" % (gc.mem_free()/1024/1024))
print("剩余存储: %0.2fM" % (ss['bsize'] * ss['bfree'] / 1024 / 1024))
if IS_MPY:
    ts = esp.flash_size()
    print("总计存储: %0.2fM" % (ts / 1024 / 1024))

if IS_MPY:
    print("内存使用:", end="")
    micropython.mem_info()



运行正常的情况下,输出如下:


需要注意的是:
如果剩余内存小于1M,说明安装的固件不正确,不是:Firmware (Support for Octal-SPIRAM) 。
同时,开发板名称中,需要包含Octal,才表示正确。
另外,这里显示的总计存储: 8.00M,是因为microython官方固件,是按照8Mb Flash编译的,如果不需要存大的文件,基本够用了。

三、安装扩展IO芯片支持库
可以直接从 https://github.com/mcauser/micropython-xl9535-kxv5-relay 下载扩展IO芯片支持库,也可以用我下载的压缩包:
然后将 src/xl9535_relay.py 上传到K10。
然后用下面的脚本测试:
from machine import I2C, Pin
import time
import xl9535_relay正常运行时,屏幕背光将会开启、关闭循环。


四、安装屏幕显示支持库
micropython环境下,驱动屏幕的库很多。
这篇分享使用的是micropython-nano-gui,小巧好用,支持的类型很多。
可以从其官方下载:https://github.com/peterhinch/micropython-nano-gui,也可以使用我下载的压缩包:

然后,使用开发工具,把下图中的文件,全部上传到K10上:


最终K10上的文件如下:



然后,打开color_setup.py,设置如下:
from machine import Pin, SPI, SoftSPI
import gc

from drivers.ili93xx.ili9341 import ILI9341 as SSD

TFT_MOSI = 21
TFT_SCLK= 12
TFT_CS= 14
TFT_DC= 13
TFT_RST = 46 # 占位

pdc = Pin(TFT_DC, Pin.OUT, value=0)# Arbitrary pins
pcs = Pin(TFT_CS, Pin.OUT, value=1)
prst = Pin(TFT_RST, Pin.OUT, value=1)

gc.collect()

<blockquote>try:

然后,就可以打开gui/demos/aclock.py进行测试。
不过,默认的测试程序,显示方向和K10的方向,不一定对应,可以在 refresh(ssd, True) 前后加入对应的代码。
最终添加的代码如下:refresh(ssd, True)# Initialise and clear display.
# K10设置
ssd._wcd(b'\x36', int.to_bytes(0x88, 1, 'little'))


然后就可以正常显示了:


这是一个时钟的演示。

五、显示温度曲线
首先,安装aht20驱动,可以从 https://github.com/targetblank/micropython_ahtx0 下载,或者使用我下载的压缩包:
下载后,将其中的 ahtx0.py 上传到 K10:


然后参考gui/demos/fpt.py,编写代码:
from color_setup import ssd# Create a display instance

import cmath
import math
import utime
import uos
from gui.core.writer import Writer, CWriter
from gui.core.fplot import PolarGraph, PolarCurve, CartesianGraph, Curve, TSequence
from gui.core.nanogui import refresh
from gui.widgets.label import Label

from machine import I2C, Pin
import xl9535_relay
from ahtx0 import AHT20

i2c = I2C(scl=Pin(48), sda=Pin(47),freq=400000)
aht = AHT20(i2c)
board = xl9535_relay.XL9535_KXV5(i2c, 0x20)
board.init()
board.relay(0, True)

refresh(ssd, True)# Initialise and clear display.
# K10设置
ssd._wcd(b'\x36', int.to_bytes(0x88, 1, 'little'))

refresh(ssd, True)

# Fonts
import gui.fonts.arial10 as arial10
import gui.fonts.freesans20 as freesans20

from gui.core.colors import *

CWriter.set_textpos(ssd, 0, 0)# In case previous tests have altered it
wri = CWriter(ssd, arial10, GREEN, BLACK, verbose=False)
wri.set_clip(True, True, False)

# y axis at t==now, no border
g = CartesianGraph(wri, 0, 0, xorigin = 10, width=240-1, height=320-1, fgcolor=WHITE,
                   gridcolor=DARKGREEN, bdcolor=False)
tsy = TSequence(g, YELLOW, 50)
tsr = TSequence(g, RED, 50)
for t in range(1000):
    g.clear()
    temp = aht.temperature
    humi = aht.relative_humidity
    tsy.add(temp/100)
    tsr.add(humi/100)
    refresh(ssd)
    utime.sleep_ms(100)

保存后运行,显示效果如下:


PY学习笔记 发表于 2024-12-25 17:15:19

建议用lvgl,会更方便一点

HonestQiao 发表于 2024-12-26 08:53:52

PY学习笔记 发表于 2024-12-25 17:15
建议用lvgl,会更方便一点

多谢大佬指导!

我用的GUi驱动库有好多,LVGL我也用。
可以看这个:基于乐鑫ESP32-S3-Box-Lite 和EPC001的便携生命体征检测仪原型机
https://qn.eetree.cn/FhY1-GP7Db8VnGjBWkhoOf4d8spf


就是ESP32S3 + MicroPython + LVGL。

PY学习笔记 发表于 2024-12-26 09:10:58

我也有发一些K10+LVGL+micropython的东西你可以看一下

HonestQiao 发表于 2024-12-26 09:30:13

PY学习笔记 发表于 2024-12-26 09:10
我也有发一些K10+LVGL+micropython的东西你可以看一下

多谢指导,一定好好学习。

后面我也会再分享一篇 Arduino环境中用LVGL的。

HonestQiao 发表于 2024-12-26 12:09:22

最新效果展示:

HonestQiao 发表于 2025-1-3 12:53:55

回复:[K10教程]在micropython中使用nano-gui点亮K10屏幕...

本帖最后由 HonestQiao 于 2025-1-3 13:22 编辑

【补充说明】

DFRobot官方的micropython版本可能存在问题:unihiker.com.cn/wiki/k10/micropython_unihiker_k10,硬件SPI不能初始化,所以会自动切换到软SPI,显示速度可能不快。因此,可以先尝试,如果显示速度满足要求,就可以继续使用,不用切换了。
否则的话,请使用 micropython官方固件版本,可从 MicroPython - Python for microcontrollers 下载Firmware (Support for Octal-SPIRAM) ,或者使用我已下载的文件【推荐】:

HonestQiao 发表于 2025-1-3 13:34:33

HonestQiao 发表于 2024-12-26 12:09
最新效果展示:

【补充说明】
具体的项目实例,请参考:https://makelog.dfrobot.com.cn/article-315750.html,提供了完整的项目说明,以及所有的代码。
页: [1]
查看完整版本: 在micropython中使用nano-gui点亮K10屏幕显示温度曲线