你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

测试在MicroPython中对于main.py进行修改

2021-11-7 21:00:53

简 介: 编写了python脚本程序,它可以自动生成MicroPython内部执行程序,借助于STM32-BOOTLOADER通过REPL发送MicroPython, 由MicroPython完成对SD卡中的main.py文件进行清空或者更新。这需要原来的main.py能够退回到REPL,与STM32-BOOTLOADER配合下载程序。否则需要通过USB SD卡读写器完成对于SD卡中的main.py的修改。

关键词 MicroPythonMM32F3277mainpy

 

 

§01 MicroPython执行main.py


一、MicroPython启动过程

  在 设计带有SD卡的 MM32F3277 MicroPython 实验板 测试了带有SD卡的 MM32F3277 MicroPython实验板。该电路移植MicroPython来自于MindMotion 苏勇(2021-11-5版本),在上电后确认SDIO端口是否连接有SD卡(现在这个版本需要SD卡的容量大于 4Gb),并检测其中是否具有main.py文件。如果找到main.py, 则开始执行main.py。

  对于SD卡main.py的文件,往往需要另外SD卡读写器有计算机写入和删除。下面测试是否可以借助于MicroPython软件完成对于main.py的修改与存储过程。

▲ 图1.1.1 读写SD卡USB接插口

▲ 图1.1.1 读写SD卡USB接插口

二、删除main.py

  在现在的版本中,并没有直接支持对于SD卡中文件删除的指令。不过可以借助写入功能,将原有的main.py的文件进行清空。

1、测试起始条件

  首先,使用SD卡USB读写器,在SD卡中写入一个测试main.py程序。

from machine                import Pin
import utime

for _ in range(10):
    print(_)
    utime.sleep_ms(100)

  测试电路在上点之后,会先执行main.py,在显示10个数字之后,退到REPL状态。


[Y] sdcard ready.
[Y] file system on sdcard ready.
[Y] run the main.py on disk ...

0
1
2
3
4
5
6
7
8
9
[Y] done. 1
MicroPython v1.16 on 2021-11-05; MB_F3270 with MM32F3277G7P
>>> 

2、清空main.py

  编写测试程序对于SD 卡中的main.py进行清空。

(1)清空代码

from machine                import Pin
import utime

with open('main.py', 'w') as f:
    f.write('')

(2)执行过程

Reset MicroPython...
Wait for MicroPython coming back...
Download MicroPython : 22 lines/507 characters.
Begin to download program...
-------------------------------------------------------------------------

0
>>> 

(3)检查清空效果

  上电执行,下面是显示信息。可以看到,此时MicroPython虽然检测到main.py的存在,但由于main.py是空文件,所以直接返回到 REPL .

[Y] sdcard ready.
[Y] file system on sdcard ready.
[Y] run the main.py on disk ...
[Y] done. 1
MicroPython v1.16 on 2021-11-05; MB_F3270 with MM32F3277G7P
>>> 

三、写入main.py

  将文件写入SD卡中的main.py,需要将待写入的程序编程一个可以执行的程序,吧main.py程序作MicroPython打开main.py之后需要写入的参数。

1、待写入测试main.py

  下面是需要在SD卡写入的main.py 代码。

from machine                import Pin
import utime

for _ in range(10):
    print(_)
    utime.sleep_ms(100)

2、Python命令

  编写Python脚本程序 pymain.py。它的功能:

  • 根据是否带有参数确定是生成清空main.py的执行程序,还是将当前编辑窗口程序写入SD卡main.py;
  • 生成MicroPython执行代码;
  • 拷贝到clipboard,往STM32-Bootloader发送"MPDLD"命令,由STM32-BOOTLOADER通过REPL送到MicroPython, 由其完成清空main.py,或者将程序写入main.py.

(1)pymain.py代码

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# PYMAIN.PY                    -- by Dr. ZhuoQing 2021-11-07
#
# Note:
#============================================================
from head import *
from tsmodule.tsstm32       import *
#------------------------------------------------------------
pastestr = ''
if len(sys.argv) == 1:
    tspcopyclipboard()
    pastestr = clipboard.paste().replace('\r', '').replace('\n', '\\n')
writestr = 'with open("main.py", "w") as f:\n    f.write("%s")\n\n'%pastestr
clipboard.copy(writestr)
stm32cmd("MPDLD")
tspfocuswindow("TEASOFT:1")
printf('\a')
#------------------------------------------------------------
#        END OF FILE : PYMAIN.PY
#============================================================

(2)功能测试

  使用TEASOFT编辑下载的main.py程序,执行下面pymain程序。

Ⅰ.清除main.py
  • 发送命令: pymain +
Ⅱ.写入main.py
  • 发送命令: pymain (无参数)

  经过测试,上面过程满足设计功能。

四、存在问题

  完成上面功能,需要MicroPython 能把返回REPL才行。如果原来main.py是一个死循环,无法有外部的条件退回到REPL,那么上述程序无法完成工作。只能通过USB SD读写器完成对于main.py的清除。

 

试总结 ※


  写了python脚本程序,它可以自动生成MicroPython内部执行程序,借助于STM32-BOOTLOADER通过REPL发送MicroPython, 由MicroPython完成对SD卡中的main.py文件进行清空或者更新。

  这需要原来的main.py能够退回到REPL,与STM32-BOOTLOADER配合下载程序。否则需要通过USB SD卡读写器完成对于SD卡中的main.py的修改。

一、完整的pymain.py程序

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# PYMAIN.PY                    -- by Dr. ZhuoQing 2021-11-07
#
#    Usage:
#       pymain *                    # Clear main.py content
#       pymain                      # Write the current edit file into micropython main.py
#
# Note:
#============================================================

from head import *
from tsmodule.tsstm32       import *

#------------------------------------------------------------

pastestr = ''

if len(sys.argv) == 1:
    tspcopyclipboard()
    pastestr = clipboard.paste().replace('\r', '').replace('\n', '\\n')
    printf("Write the main.py code.")
else:
    printf("Clear MicroPython main.py.")

writestr = 'with open("main.py", "w") as f:\n    f.write("%s")\n\n'%pastestr


clipboard.copy(writestr)
stm32cmd("MPDLD")
tspfocuswindow("TEASOFT:1")

printf('\a')



#------------------------------------------------------------
#        END OF FILE : PYMAIN.PY
#============================================================


■ 相关文献链接:

  • 设计带有SD卡的 MM32F3277 MicroPython 实验板

● 相关图表链接:

  • 图1.1.1 读写SD卡USB接插口