339浏览
查看: 339|回复: 7

[K10教程] 在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
在micropython中使用nano-gui点亮K10屏幕显示温度曲线图1

如果电脑上没有安装Python,可以参考 DFRobot官方提供的micropython固件烧录方式。
如果电脑上已经安装Python,那么可以使用如下的方式。
在micropython中使用nano-gui点亮K10屏幕显示温度曲线图2
先把K10连接到电脑,然后按住BOOT按键不放,再按一下复位按键,3秒钟以后,再松开BOOT按键。
再打开电脑的命令行黑窗口(command),依次输入如下的命令:
  1. # 查看python版本
  2. python -V
  3. # 安装esptool工具
  4. python -m pip install esptool
  5. # 情况K10的Flash
  6. esptool erase_flash
  7. # 烧录固件
  8. esptool write_flash -z 0x00 ESP32_GENERIC_S3-SPIRAM_OCT-20241129-v1.24.1.bin
复制代码
最后一步需要注意,请把bin固件文件放到黑窗口显示的目录,或者使用CD命令切换到bin固件所在的目录

烧录完成后,按一下K10的复位按键,然后使用micropython开发工具如Thonny连接,得到如下的MicroPython环境就表示成功:
在micropython中使用nano-gui点亮K10屏幕显示温度曲线图3

二、检查当前micropython运行环境
直接运行下面的代码来检查:
  1. import os
  2. import gc
  3. import time
  4. try:
  5.     import micropython
  6.     import esp
  7.     IS_MPY = True
  8. except (Exception) as e:
  9.     IS_MPY = False   
  10. try:
  11.     import board
  12.     import espidf
  13.     IS_CPY = True
  14. except (Exception) as e:
  15.     IS_CPY = False   
  16.    
  17. BOARD_NAME = os.uname().machine
  18. IS_ESP32 = True if 'esp32' in BOARD_NAME.lower() else False
  19. gc.collect()
  20. statvfs_fields = ['bsize','frsize','blocks','bfree','bavail','files','ffree',]
  21. ss = dict(zip(statvfs_fields, os.statvfs('/')))
  22. print(os.uname())
  23. print("开发板:%s" % BOARD_NAME)
  24. print("剩余内存: %0.2fM" % (gc.mem_free()/1024/1024))
  25. print("剩余存储: %0.2fM" % (ss['bsize'] * ss['bfree'] / 1024 / 1024))
  26. if IS_MPY:
  27.     ts = esp.flash_size()
  28.     print("总计存储: %0.2fM" % (ts / 1024 / 1024))
  29. if IS_MPY:
  30.     print("内存使用:", end="")
  31.     micropython.mem_info()
复制代码


运行正常的情况下,输出如下:
在micropython中使用nano-gui点亮K10屏幕显示温度曲线图4

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

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


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

然后,使用开发工具,把下图中的文件,全部上传到K10上:
在micropython中使用nano-gui点亮K10屏幕显示温度曲线图6

最终K10上的文件如下:
在micropython中使用nano-gui点亮K10屏幕显示温度曲线图8


然后,打开color_setup.py,设置如下:
  1. from machine import Pin, SPI, SoftSPI
  2. import gc
  3. from drivers.ili93xx.ili9341 import ILI9341 as SSD
  4. TFT_MOSI = 21
  5. TFT_SCLK  = 12
  6. TFT_CS  = 14
  7. TFT_DC  = 13
  8. TFT_RST = 46 # 占位
  9. pdc = Pin(TFT_DC, Pin.OUT, value=0)  # Arbitrary pins
  10. pcs = Pin(TFT_CS, Pin.OUT, value=1)
  11. prst = Pin(TFT_RST, Pin.OUT, value=1)
  12. gc.collect()
  13. <blockquote>try:
复制代码


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



然后就可以正常显示了:
在micropython中使用nano-gui点亮K10屏幕显示温度曲线图9

这是一个时钟的演示。

五、显示温度曲线
首先,安装aht20驱动,可以从 https://github.com/targetblank/micropython_ahtx0 下载,或者使用我下载的压缩包:下载附件micropython_ahtx0-master.zip
下载后,将其中的 ahtx0.py 上传到 K10:
在micropython中使用nano-gui点亮K10屏幕显示温度曲线图11

然后参考gui/demos/fpt.py,编写代码:
  1. from color_setup import ssd  # Create a display instance
  2. import cmath
  3. import math
  4. import utime
  5. import uos
  6. from gui.core.writer import Writer, CWriter
  7. from gui.core.fplot import PolarGraph, PolarCurve, CartesianGraph, Curve, TSequence
  8. from gui.core.nanogui import refresh
  9. from gui.widgets.label import Label
  10. from machine import I2C, Pin
  11. import xl9535_relay
  12. from ahtx0 import AHT20
  13. i2c = I2C(scl=Pin(48), sda=Pin(47),freq=400000)
  14. aht = AHT20(i2c)
  15. board = xl9535_relay.XL9535_KXV5(i2c, 0x20)
  16. board.init()
  17. board.relay(0, True)
  18. refresh(ssd, True)  # Initialise and clear display.
  19. # K10设置
  20. ssd._wcd(b'\x36', int.to_bytes(0x88, 1, 'little'))
  21. refresh(ssd, True)
  22. # Fonts
  23. import gui.fonts.arial10 as arial10
  24. import gui.fonts.freesans20 as freesans20
  25. from gui.core.colors import *
  26. CWriter.set_textpos(ssd, 0, 0)  # In case previous tests have altered it
  27. wri = CWriter(ssd, arial10, GREEN, BLACK, verbose=False)
  28. wri.set_clip(True, True, False)
  29. # y axis at t==now, no border
  30. g = CartesianGraph(wri, 0, 0, xorigin = 10, width=240-1, height=320-1, fgcolor=WHITE,
  31.                    gridcolor=DARKGREEN, bdcolor=False)
  32. tsy = TSequence(g, YELLOW, 50)
  33. tsr = TSequence(g, RED, 50)
  34. for t in range(1000):
  35.     g.clear()
  36.     temp = aht.temperature
  37.     humi = aht.relative_humidity
  38.     tsy.add(temp/100)
  39.     tsr.add(humi/100)
  40.     refresh(ssd)
  41.     utime.sleep_ms(100)
复制代码
保存后运行,显示效果如下:
在micropython中使用nano-gui点亮K10屏幕显示温度曲线图12

TueDecember-202412241636..png

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的便携生命体征检测仪原型机



就是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

最新效果展示:
在micropython中使用nano-gui点亮K10屏幕显示温度曲线图1
回复

使用道具 举报

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) ,或者使用我已下载的文件【推荐】下载附件ESP32_GENERIC_S3-SPIRAM_OCT-20241129-v1.24.1.zip
回复

使用道具 举报

HonestQiao  初级技匠
 楼主|

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


【补充说明】
具体的项目实例,请参考:https://makelog.dfrobot.com.cn/article-315750.html,提供了完整的项目说明,以及所有的代码。
回复

使用道具 举报

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

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

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

mail