UIFlow是个挺不错的编程环境,适合新手学习。它基于MicroPython(Lobo版本),也可以脱离UIFlow的IDE来用Python编程。但是把玩了几天后,我发现M5Stack的原配UIFlow/MicroPython有如下问题:
- 系统带的东西不少,启动后运行的东西比较多,也有很多令我不明白的地方,而且官方文档也没有说清楚
- 我的M5Stack Fire有16M的Flash ROM,但是UIFlow启动后只有700k左右 ( https://blog.csdn.net/zhufu86/article/details/91049171 )
- 没有支持PSRAM(M5Stack Fire自带4M的PSRAM),相信我,对于MicroPython来说4M的RAM和520K的RAM有天壤之别
- UIFlow不适合希望深入研究MicroPython的人,而且,没有UIFlow的纯MicroPython更适合生产环境
那么,我来自己编译一个可以发挥M5Stack Fire的优势的MicroPython版本吧。
编译环境
首先,需要有一个编译环境。 按照Lobo MicroPython的wiki的说法,编译环境用各种平台都可以。乐鑫也说可以在win系统下用MSYS2环境来编译。 然而我尝试了一圈(Win&macOS),似乎都不太顺利。算了,还是用Linux吧。因为我没有安装了Linux的主机,所以只能用虚拟机。 为了不让安装的Linux占太多空间,我选择了Debian 9.9。
在macOS下使用VirtualBox安装Debian 9.9
详细安装过程省略……
- 下载debian-9.9.0-amd64-xfce-CD-1.iso
- VirtualBox设置:
内存设置2048MB
硬盘设置为16GB - 安装过程
选择文本安装界面
语言选择英语
国家选择中国
locale选择en_US.UTF-8
Use a network mirror? 选择No
安装的组件,取消选择 Debian desktop environment 和 … Xfce,只选standard system utilities - 安装完成后,用root登录。为了避免权限问题,所有的命令都使用root登录执行
- 为了方便执行命令,开启ssh-server
apt-get install openssh-server
- 修改sshd_config文件,命令为:vi /etc/ssh/sshd_config
- 将#PasswordAuthentication yes的注释去掉
- 将#PermitRootLogin prohibit-password的注释去掉,并把prohibit-password改为yes
- 启动SSH服务,命令为:
/etc/init.d/ssh start
// 或者service ssh start - 已经启动的话,
/etc/init.d/ssh resetart
- 验证SSH服务状态,命令为:
/etc/init.d/ssh status
- 添加开机自启动
update-rc.d ssh enable
(应该不需要,系统已经把ssh设为自启动了) - VirtualBox设置端口转发,把Host的2222端口转发到Guest的22端口
- 这样就可以在macOS的命令行用
ssh -p2222 root@127.0.0.1
登录到Debian Linux了 - 登录后修改apt源为国内源,参考:
http://mirrors.ustc.edu.cn/help/debian.html
http://mirrors.ustc.edu.cn/help/debian-security.html
下载MicroPython的源码
我选择了M5Stack放出的Lobo版本,地址在:
https://github.com/m5stack/M5Stack_MicroPython
点Clone or download直接下载zip包。 当然也可以git clone,但是我这边太慢。
下载完成后,从macOS拷贝到Debian Linux。
scp -P2222 M5Stack_MicroPython.zip root@127.0.0.1:/root/
准备编译环境
- 安装必要的包
apt-get install git wget make libncurses-dev flex bison gperf python python-serial g++ libfuse-dev picocom unzip
- 解压缩M5Stack_MicroPython.zip
unzip M5Stack_MicroPython.zip
-
把M5Stack插入USB口,并且在USBSettings里面增加Filter,让VirtualBox自动捕捉Silcon Labs CP2104 USB to UART Bridge Controller连接到Debian Linux。
-
在Debian里面查看M5Stack串口连接对应的设备名称
root@debian:~# ls /dev/ttyU*
/dev/ttyUSB0
多半可能是/dev/ttyUSB0
编译和烧写
编译
- 执行如下命令,会进入配置界面
root@debian:~# cd M5Stack_MicroPython/MicroPython_BUILD/
root@debian:~/M5Stack_MicroPython/MicroPython_BUILD# ./BUILD.sh menuconfig
- 其实我也没弄清所有的配置,以下是我觉得比较重要的地方:(如果发现编译烧写后不对,可以
./BUILD.sh clean
后./BUILD.sh menuconfig
重新配置) - Bootloader config
—> Bootloader log verbosity设为Verbose - Serial flasher config
—> Default serial port设置为(/dev/ttyUSB0
—> Flash SPI mode (DIO)
—> Flash SPI speed (80 MHz)
—> Flash size (16 MB) - MicroPython
—> (CST-8) Time zone
—> System settings
------> (24) MicroPython stack size (KB)
------> (2560) MicroPython heap size (KB) (你需要先打开ESP32-specific -> Support for external, SPI-connected RAM,否则会无法设置)
—> Modules
------> [*] Use Websockets
------> [*] Use Display module
------> [*] Use GSM module
------> [*] Use GPS module
------> [*] Use mDNS module
------> [*] Use requests module
------> [*] Use Curl module
------> [*] Enable TLS in Curl module (NEW)
------> [*] FTP support in Curl module
------> [*] Use SSH module
------> [*] Use Mqtt module
—> File systems
------> Set internal filesystem type (SPIFFS)
—> SD Card configuration
------> SD Card mode (SPI Mode)
------> [ ] Allow hispeed in SPI mode
------> (18) CLK pin
------> (23) MOSI pin
------> (19) MISO pin
------> (4) CS pin - Partition Table
—> Partition Table (Custom partition table CSV)
—> (partitions.csv) Custom partition CSV file (NEW) - Component config
—> Bluetooth 打开
—> ESP32-specific
------> [*] Support for external, SPI-connected RAM
------> SPI RAM config
---------> SPI RAM access method (Make RAM allocatable using heap_caps_malloc)
---------> Set RAM clock speed (40MHz clock speed) 设为80MHz会导致SD卡不能挂载,不知道为什么。
------> FAT Filesystem support
---------> OEM Code Page (Simplified Chinese (DBCS) (CP936))
其他未列出的,我保留默认了(其实是不知道怎么改。是时候深入学习一下ESP32了。)
-
Save然后Exit
-
新建一个文件 partitions.csv ,文件内容如下:
# -------------------------------------------------------
# - Partition layout generated by BUILD.sh script -
# -------------------------------------------------------
# Name, Type, SubType, Offset, Size, Flags
# -------------------------------------------------------
nvs, data, nvs, 0x9000, 24K,
phy_init, data, phy, 0xf000, 4K,
MicroPython, app, factory, 0x10000, 2304K,
internalfs, data, spiffs, 0x250000, 12288K,
-
运行
./BUILD.sh
编译,如果./BUILD.sh -v
会打印出比较“啰嗦的”