1 Star 6 Fork 7

Walkline/MicroPython 资源管理器

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

MicroPython 资源管理器

项目介绍

将非.py文件打包进固件并调用(仅适用于乐鑫 ESP系列芯片)。

关于文件打包

MicroPython编译固件过程中可以自动编译打包用户添加的.py文件,对于其它类型的用户文件就无能为力了。

这里使用 littlefs for Python 工具,将文件写入littlefs v2分区并生成一个分区文件,再把这个分区文件写入已有固件中实现文件打包。

使用此方法打包的文件使用上与用户自行上传的文件无异。

分区表

注:以下提及的分区表均是以ESP32系列的partitions-4MiB.csv文件为例。

先观察一下分区表文件内容:

Name Type SubType Offset Size Flags
nvs data nvs 0x9000 0x6000
phy_init data phy 0xf000 0x1000
factory app factory 0x10000 0x1F0000
vfs data fat 0x200000 0x200000

其中:

  • factory:为MicroPython程序(app)分区
  • vfs:为用户分区,用于保存用户上传的代码文件

这两个分区之间已经没有可用空间了(参考提交 e1a84a),要打包文件可以选择以下两种方法。

1. 不修改分区表(简单)

先说缺点,那就是固件文件体积会增大,最终生成的固件大小为:

vfs_offset = 0x200000
vfs_size   = 0x200000
total_size = vfs_offset + vfs_size
#          = 4194304 bytes
#          = 4 MiB

也就是分区表文件名中注明的文件大小。

注:由于ESP32等芯片的固件烧录起始地址为0x1000,所以最终生成的固件大小为:

total_size = vfs_offset + vfs_size - 0x1000

具体操作方法如下:

  1. 修改config.py文件内容,将vfs_offsetvfs_size的值分别填入对应位置,例如:

    class Partition(object):
        # 根据实际情况设置
        IS_ESP32_ESP32S2 = False
    
        OFFSET = 0x200_000 # 偏移地址
        SIZE   = 0x200_000 # 分区大小
    
  2. 参考 如何打包文件 章节进行后续操作。

2. 修改分区表(复杂)

这里说的复杂不仅是指操作步骤较多,而且还要根据一些规则进行计算,最后也是最重要的,需要自行搭建MicroPython开发环境编译固件。

之前找到一个可以修改固件分区表的软件 mp-image-tool-esp32,如果可以修改的话就不需要自行编译固件了。

简单来说,这个方法的操作流程如下:

  • vfs分区之前(或之后)增加一个资源分区
  • 压缩vfs分区大小
  • 将打包好的文件写入资源分区

在开始具体操作之前,需要先计算出资源分区占用的存储空间大小,以/example/files文件夹下的文件为例,计算方法如下:

block_size  = 4096 # file system block size
total_size  = 195427 # 9 files, 2 folders
block_count = total_size // block_size + 10 # at least 10 blocks
image_size  = block_count * block_size
#           = 233472 = 0x39000

其中:

  • block_size:为块大小,固定值4096,可以使用 os.statvfs 查看,分区大小必须为块大小的整倍数

  • total_size:为文件夹下文件的总大小

  • block_count:为分区总块数,因为分区中还要保存文件属性等信息,所以块总数要在原有基础上至少增补 10 个大小

  • image_size:为资源分区实际大小,这个十六进制数0x39000后边需要用到

接下来就可以开始修改分区表了,这里只展示需要修改的部分。

  • 这是原分区表

    Name Type SubType Offset Size Flags
    vfs data fat 0x200000 0x200000
  • 这是修改后的分区,在vfs之前增加了一个resource分区。

    Name Type SubType Offset Size Flags
    resource data fat 0x200000 0x39000
    vfs data fat 0x239000 0x1c7000

其中:

  • resource_offset:保留原分区表vfs_offset的数值
  • resource_size:填写上边经过计算得到的image_size的数值
  • vfs_offset:填写resource_offset + resource_size的数值
  • vfs_size:填写原分区表vfs_offset + vfs_offset - vfs_offset的数值

分区表文件修改完成后,根据自己的需求编译固件并得到固件文件,之后参考 不修改分区表(简单) 章节进行后续操作,特别注意一点,修改config.py文件内容时,要将resource_offsetresource_size的值分别填入对应位置

如何打包文件

要将/example/files/文件夹中的所有文件打包进固件文件中,可以使用如下命令:

# 查看使用说明
$ python3 combine_files.py
# Usage:
#    python3 combine_files.py <firmware_file> <user_file_folder>

# 使用 不修改分区表 方法,按需修改 config.py 文件
# esp32c3_firmware_origin.bin 可视为从官方下载的固件文件
$ python3 combine_files.py ./example/esp32c3_firmware_origin.bin ./example/files/

# 或

# 使用 修改分区表 方法,按需修改 config.py 文件
# esp32c3_firmware_fixed.bin 为修改过分区表并自行编译的固件文件
$ python3 combine_files.py ./example/esp32c3_firmware_fixed.bin ./example/files/

如何读取文件

要读取资源文件,只需要将资源分区挂载到系统中即可:

注:使用 不修改分区表(简单) 方法打包的固件不需要挂载资源分区。

import esp32, os

res = esp32.Partition.find(esp32.Partition.TYPE_DATA, label='resource')

if res:
    os.mount(res[0], '/res')

查看演示内容

开发板使用repl模式运行main.py文件:

$ ab --repl
# 选择正确的端口,使用快捷键 ctrl + r 运行 main.py 文件

ab 工具使用方法见 AMPY Batch Tool 项目说明文档。

演示过程中将在repl中逐一显示以下内容:

  • mua.pbm图片
  • chushibiao.txt文本内容
  • chushibiao.bin字库信息
  • 汉字及数据内容
  • 汉字预览

完整输出内容如下:

>>> Run local file
    [1] main.py
    [3] config.py
    [4] combine_files.py
Choose a file: 1


Press enter to preview bitmap...
.....................................................................................
................@@@..................................................................
..........@@@@@@@@@@@@@..............................................................
.......@@@@@@@@@@@@@@@@@@............................................................
......@@@@@@@@@@@@@@@@@@@@...........................................................
.....@@@@@@@@@@@@@@@@@@@@@@..........................................................
....@@@@@@@@@@@@@@..@@@@@@@@.........................................................
...@@@@@@....@@.......@@@@@@@........................................................
..@@@@@@...............@@@@@@........................................................
..@@@@@................@@@@@@........................................................
..@@@@@................@@@@@@@.......................................................
..@@@@@.................@@@@@@.......................................................
.@@@@@@................@@@@@@@.......................................................
.@@@@@@................@@@@@@@.......................................................
.@@@@@@@...............@@@@@@..............@@@@@.....................................
.@@@@@@@@.............@@@@@@@............@@@@@@@.....................................
..@@@@@@@@...........@@@@@@@@...........@@@@@@@@@....................................
..@@@@@@@@@.........@@@@@@@@@..........@@@@@@@@@@@....................@@.............
..@@@@@@@@@@@.....@@@@@@@@@@..........@@@@@@.......................@@@@@@@...........
...@@@@@@@@@@@...@@@@@@@@@@@..........@@.........................@@@@@@@@@...........
....@@@@@@@@@@@@@@@@@@@@@@@................@@@@@@@@@@@@@@.......@@@@@@@@@@@..........
.....@@@@@@@@@@@@@@@@@@@@@..............@@@@@@@@@@@@@@@@@@@@@...@@@@@@@@@@@..........
.......@@@@@@@@@@@@@@@@..............@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@..........
..........@@@@@@@@@@...............@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@..........
................@@@@..............@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.........
.................@@@............@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.........
...................@...........@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.........
...............................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.........
..............................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.........
.............................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.........
............................@@@@...@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.....@@.
............................@@@.....@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.....@@.
...........................@@@......@@@@@@@@@@@@@@@@@@@@@@@@@@....@@@@@@@@@@@.....@@.
...........................@@........@@@@@@@@@@@@@@@@@@@@@@@@......@@@@@@@@@@@@@@@@@.
...........................@@........@@@@@@@@@@@@@@@@@@@@@@@@......@@@@@@@@@@@@@@@@@.
..........................@@@.......@@@@@@.@@..@@@@@@@@@@@@@.......@@@@@@@@@@@@@@@@@.
..........................@@@.......@@@@@@.......@@..@@@@@@@........@@@@@@@@@@@@@@@..
..........................@@@.......@@@@@@...........@@@@@@@.......@@@@@@@@@@@@@@@@..
..........................@@@@.....@@@@@@@..........@@@@@@@@.......@@@@@@@@@@@@@@@@..
..........................@@@@@@@@@@@@@@@@@.........@@@@@@@@.......@@@@@@@@@@@@@@@@..
..........................@@.@@@.@@.@@@@@@@.........@@@@@@@@@......@@@@@@@@@@@@@@@@..
..........................@@.@@..@@.@@@@@@@.........@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@..
..........................@@.@@.@@..@@@@@@@@.......@@@@@@@@.@@.@@@@@@@@@@@@@@@@@@@@..
..........................@@@@@.@@.@@@@@@@@@@......@@@@@@@..@@.@@..@@@@@@@@@@@@@@@@..
...........................@@@@@@@.@@@@@@@@@@@@..@@@@@@@@@.@@..@@..@@@@@@@@@@@@@@@...
...........................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@.@@@..@@@@@@@@@@@@@@@...
............................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@...
............................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@...
.............................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@....
.............................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@....
..............................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@....
...............................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@....
................................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.....
.................................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.....
..................................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.....
...................................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@......
....................................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@......
.......................................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@......
...........................................@@@@@@@@@@@@@@@@@@@@@@@@@..@@@....@@......
.......................................@.........@@@@@@@@@@@.@@@......@@.............
.......................................@@....................@@.......@@.............
.............................................................@@.......@@.............
.....................................................................................
.....................................................................................

Press enter to preview text...
出师表
  先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。然侍卫之臣不懈于内,忠志之士忘身于外者,盖追先帝之殊遇,欲报之于陛下也。诚宜开张圣听,以光先帝遗德,恢弘志士之气,不宜妄自菲薄
,引喻失义,以塞忠谏之路也。
  宫中府中,俱为一体,陟罚臧否,不宜异同。若有作奸犯科及为忠善者,宜付有司论其刑赏,以昭陛下平明之理,不宜偏私,使内外异法也。
  侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛下。愚以为宫中之事,事无大小,悉以咨之,然后施行,必得裨补阙漏,有所广益。
  将军向宠,性行淑均,晓畅军事,试用之于昔日,先帝称之曰能,是以众议举宠为督。愚以为营中之事,悉以咨之,必能使行阵和睦,优劣得所。
  亲贤臣,远小人,此先汉所以兴隆也;亲小人,远贤臣,此后汉所以倾颓也。先帝在时,每与臣论此事,未尝不叹息痛恨于桓、灵也。侍中、尚书、长史、参军,此悉贞良死节之臣,愿陛下亲之信之,则汉室之隆,可计
日而待也。
  臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸侯。先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。后值倾覆,受任于败军之际,奉命于危难之间,尔来二十有
一年矣。
  先帝知臣谨慎,故临崩寄臣以大事也。受命以来,夙夜忧叹,恐托付不效,以伤先帝之明,故五月渡泸,深入不毛。今南方已定,兵甲已足,当奖率三军,北定中原,庶竭驽钝,攘除奸凶,兴复汉室,还于旧都。此臣所
以报先帝而忠陛下之职分也。至于斟酌损益,进尽忠言,则攸之、祎、允之任也。
  愿陛下托臣以讨贼兴复之效,不效,则治臣之罪,以告先帝之灵。若无兴德之言,则责攸之、祎、允等之慢,以彰其咎;陛下亦宜自谋,以咨诹善道,察纳雅言,深追先帝遗诏,臣不胜受恩感激。
  今当远离,临表涕零,不知所言。

Press enter to preview fontlib...
HZK Info: /res/chushibiao.bin
    file size : 14350
  font height : 16
    data size : 32
    scan mode : 1 (Vertical)
   byte order : 0 (LSB)
       format : 0 (MONO_VLSB)
   characters : 427


Press enter to preview chars data...
半: b'\x00DHP@\xfe@PHD\x00\x00\x00\x00\x00\x00\x02\x02\x02\x02\x02\x1f\x02\x02\x02\x02\x02\x00\x00\x00\x00\x00'
中: b'\x00\xf8\x88\x88\x88\xfe\x88\x88\x88\x88\xf8\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x1f\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00'
而: b'\x02\xf2\x12\x12\xf2\x1a\x16\xf2\x12\x12\xf2\x02\x00\x00\x00\x00\x00\x1f\x00\x00\x0f\x00\x00\x0f\x00\x10\x1f\x00\x00\x00\x00\x00'
表: b'@DTT\xd4~\xd4TTTD@\x00\x00\x00\x00\x04\x04\x02\x1f\x10\x08\x01\x06\x04\x19\x08\x00\x00\x00\x00\x00'
业: b' @\x80\x00\xfe\x00\x00\xfe\x00\xc00\x00\x00\x00\x00\x00\x10\x10\x11\x10\x1f\x10\x10\x1f\x11\x10\x10\x10\x00\x00\x00\x00'
未: b'@HHHH\xfeHHHH@\x00\x00\x00\x00\x00\x08\x08\x04\x02\x01\x1f\x01\x02\x04\x08\x08\x00\x00\x00\x00\x00'
道: b'@B\xcc\x00\x04\xf4V\\TV\xf4\x04\x00\x00\x00\x00\x10\x08\x07\x08\x10\x17\x15\x15\x15\x15\x17\x10\x00\x00\x00\x00'
出: b'\x00\x00<  \xfe   <\x00\x00\x00\x00\x00\x00\x00\x1f\x08\x08\x08\x0f\x08\x08\x08\x08\x1f\x00\x00\x00\x00\x00'
天: b' """\xa2~\xa2"""" \x00\x00\x00\x00\x10\x10\x08\x06\x01\x00\x01\x02\x04\x08\x10\x10\x00\x00\x00\x00'
帝: b'\xe4$\xa4\xac\xb4\xe6\xb4\xac\xa4$\xe4\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x1f\x00\x08\x0f\x00\x00\x00\x00\x00\x00\x00'
 : b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
师: b'\x00\xf8\x00\xfe\x00\xf4\x14\x14\xfc\x14\x14\xf4\x00\x00\x00\x00\x10\x13\x08\x07\x00\x07\x00\x00\x1f\x00\x04\x07\x00\x00\x00\x00'
下: b'\x02\x02\x02\x02\x02\xfe\x12"B\xc2\x02\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
先: b'\x00PHN\xc8H~\xc8HH@@\x00\x00\x00\x00\x10\x10\x08\x06\x01\x00\x00\x0f\x10\x10\x10\x1c\x00\x00\x00\x00'
殂: b'\x84t\x9c\x14\xf6\x04\xfe"""\xfe\x00\x00\x00\x00\x00\x10\x08\x04\x03\x10\x10\x1f\x11\x11\x11\x1f\x10\x00\x00\x00\x00'
,: b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
创: b'@ \xf0(&$\xe8\x10\x00\xf8\x00\xfe\x00\x00\x00\x00\x00\x00\x0f\x10\x11\x12\x11\x1c\x00\x03\x10\x1f\x00\x00\x00\x00'
崩: b'\x00\x00\xee\xa8\xa8\xe8\x08\xee\xa8\xa8\xa8\xee\x00\x00\x00\x00\x10\x08\x07\x02\x12\x1f\x10\x0f\x02\x02\x12\x1f\x00\x00\x00\x00'
今: b'@@ \x10(F\x08\x10 @@\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x11\r\x03\x01\x00\x00\x00\x00\x00\x00\x00'

Press enter to preview chars...
................ ................ ................ ................ ................ ................ ................ 
.....@.......... ...@............ .....@.......... ................ ................ ...@..@......... .....@.......... 
..@..@...@...... ...@.@@@@@@@.... .@@@@@@@@@@..... ................ ................ ...@..@......... @@@@@@@@@@@..... 
..@..@...@...... .@.@....@....... .....@.......... ................ ................ ..@@@@@@@@...... ...@...@........ 
..@..@...@...... .@.@.@@@@@@@.... ..@@@@@@@@...... ................ ................ .@....@......... ....@.@......... 
..@@@@@@@@...... .@.@.@..@..@.... .....@.......... ................ ................ ......@......... @@@@@@@@@@@..... 
.....@.......... .@.@.@..@..@.... @@@@@@@@@@@@.... ................ ................ .@@@@@@@@@@@.... @....@....@..... 
.....@.......... .@.@.@..@..@.... ....@.@......... ................ ................ ....@..@........ @.@@@@@@@.@..... 
.@...@....@..... .@.@.@..@..@.... ...@..@..@...... ................ ................ ....@..@........ ..@..@..@....... 
.@...@....@..... .@.@.@..@..@.... ..@@...@........ ................ ................ ...@...@........ ..@..@..@....... 
.@...@....@..... ...@.@..@.@@.... @@.@...@@....... ................ ................ ...@...@...@.... ..@..@..@....... 
.@@@@@@@@@@..... ..@.....@....... ...@.@...@@..... ................ ................ ..@....@...@.... ..@..@.@@....... 
.@........@..... @@......@....... ...@@....@...... ................ ................ @@......@@@@.... .....@.......... 
................ ................ ................ ................ ................ ................ ................ 
................ ................ ................ ................ ................ ................ ................ 
................ ................ ................ ................ ................ ................ ................ 

................ ................ ................ ................ ................ ................ ................ 
....@......@.... ....@..@........ .....@.......... .....@.......... @@@@@@@@@@@@.... .....@.......... .@....@..@...... 
....@@.....@.... ....@..@........ .....@.......... .@...@...@...... ......@......... .....@.......... ..@.@@@@@@@@.... 
...@..@..@.@.... ....@..@........ .@@@@@@@@@...... ..@..@..@....... .....@.......... .@@@@@@@@@@..... ..@....@........ 
..@....@.@.@.... ....@..@..@..... .....@.......... ...@.@.@........ .@@@@@@@@@@..... .@...@....@..... .....@@@@@@..... 
.@@@@@@..@.@.... @...@..@..@..... .....@.......... .....@.......... .@..@..@..@..... .@...@....@..... .....@....@..... 
@.@...@..@.@.... .@..@..@.@...... @@@@@@@@@@@..... .@@@@@@@@@...... .@..@..@..@..... .@...@....@..... @@@..@@@@@@..... 
..@...@..@.@.... ..@.@..@.@...... .....@.......... .....@.......... .@..@..@..@..... .@@@@@@@@@@..... ..@..@....@..... 
..@.@.@..@.@.... ..@.@..@@....... ....@@@......... .....@.......... .@..@..@..@..... .@...@....@..... ..@..@@@@@@..... 
..@..@...@.@.... ....@..@........ ...@.@.@........ @@@@@@@@@@@..... .@..@..@..@..... .....@.......... ..@..@....@..... 
..@....@...@.... ....@..@........ ..@..@..@....... .....@.......... .@..@..@..@..... .....@.......... ..@..@@@@@@..... 
..@....@...@.... ....@..@........ @@...@...@@..... .....@.......... .@..@..@..@..... .....@.......... .@.@............ 
...@@@@@..@@.... @@@@@@@@@@@@.... .....@.......... .....@.......... .@.......@@..... .....@.......... @...@@@@@@@@.... 
................ ................ ................ ................ ................ ................ ................ 
................ ................ ................ ................ ................ ................ ................ 
................ ................ ................ ................ ................ ................ ................ 

................ ................ ................ ................ ................ ................ 
..@....@...@.... ....@.@@@@@..... ................ .....@.......... .@@@@@@@@@@..... @@@@@@@@@@@@.... 
..@....@...@.... @@@@@@@...@..... ................ .....@.......... .....@.......... .....@.......... 
..@@@@@@@@@@.... ..@...@...@..... ................ ....@.@......... .....@.......... .....@.......... 
................ .@@@@.@...@..... ................ ...@...@........ .....@.......... .....@@......... 
..@@@@.@@@@@.... .@..@.@@@@@..... ................ ..@.@...@....... @@@@@@@@@@@@.... .....@.@........ 
..@..@.@...@.... .@..@.@...@..... ................ @@...@...@@..... .....@.......... .....@..@@...... 
..@@@@.@@@@@.... @.@.@.@...@..... ................ ................ ....@.@......... .....@...@...... 
..@..@.@...@.... ...@..@@@@@..... ................ ..@@@@@@@....... ....@.@......... .....@.......... 
..@@@@.@@@@@.... ...@..@...@..... ...@@........... .......@........ ...@...@........ .....@.......... 
..@..@.@...@.... ..@...@...@..... ...@@........... ......@......... ...@....@....... .....@.......... 
.@...@.@...@.... .@....@...@..... ....@........... ......@......... ..@......@...... .....@.......... 
@...@@@...@@.... @...@@@@@@@@.... ...@............ .....@.......... @@........@@.... .....@.......... 
................ ................ ................ ................ ................ ................ 
................ ................ ................ ................ ................ ................ 
................ ................ ................ ................ ................ ................ 


Testing done.

参考资料

合作交流

走线物联扇贝物联

MIT License Copyright (c) 2022 Walkline Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

将非 .py 文件打包进固件并调用 展开 收起
README
MIT
取消

发行版

暂无发行版

贡献者

全部

语言

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Python
1
https://gitee.com/walkline/micropython-resource-manager.git
git@gitee.com:walkline/micropython-resource-manager.git
walkline
micropython-resource-manager
MicroPython 资源管理器
master

搜索帮助