50浏览
查看: 50|回复: 1

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

[复制链接]
上一篇帖子 【在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
  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. spi = SPI(1, 30_000_000, sck=Pin(TFT_SCLK), mosi=Pin(TFT_MOSI))
  14. ssd = SSD(spi, height=320, width=240, dc=pdc, cs=pcs, rst=prst, usd=False)
复制代码


然后,就可以打开gui/demos/aclock.py进行测试。
不过,默认的测试程序,显示方向和K10的方向,不一定对应,可以在 refresh(ssd, True) 前后加入对应的代码。
最终添加的代码如下:
  1. <blockquote>from machine import I2C, Pin
复制代码
然后就可以正常显示了:
在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学习笔记  见习技师

发表于 昨天 17:15

建议用lvgl,会更方便一点
回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail