目录
引言
前面已经介绍过Mind+的原理就是将Scratch的积木生成C++代码在行空板K10上运行。它整个平台是基于Ardunino的。今天再来详细说说。
工作原理
Mind+实际上是将Stretch转化为Arduino工程,再使用arduino-builder进行编译。
在执行arduino-builder
之前,需要先执行:
cmd /c if not exist "C:\Users\haili_10137664\AppData\Local\DFScratch\build\partitions.csv" COPY "D:\Mind+20241220\Arduino\hardware\dfrobot\esp32s3\tools\partitions\large_spiffs_16MB.csv" "C:\Users\haili_10137664\AppData\Local\DFScratch\build\partitions.csv"
arduino-builder命令行如下:
arduino-builder.exe -logger=machine -hardware D:\Mind+20241220\Arduino\hardware -tools D:\Mind+20241220\Arduino\arduino-builder -tools D:\Mind+20241220\Arduino\hardware\tools\avr -libraries C:\Users\haili_10137664\AppData\Local\DFScratch\extensions\yuntian-json-thirdex\arduinoC\libraries -built-in-libraries D:\Mind+20241220\Arduino\libraries -fqbn=dfrobot:esp32s3:esp32s3bit:JTAGAdapter=default,PSRAM=opi,FlashMode=qio,FlashSize=16M,LoopCore=1,EventsCore=1,USBMode=hwcdc,CDCOnBoot=cdc,MSCOnBoot=default,DFUOnBoot=default,UploadMode=default,PartitionScheme=app3M_fat9M_16MB,CPUFreq=240,UploadSpeed=921600,DebugLevel=none,EraseFlash=none,Model=None -vid-pid=303A_1001 -ide-version=10808 -build-path C:\Users\haili_10137664\AppData\Local\DFScratch\build -warnings=none -build-cache C:\Users\haili_10137664\AppData\Local\DFScratch\cache -prefs=build.warn_data_percentage=75 -verbose C:\Users\haili_10137664\AppData\Local\DFScratch\dfrobot\dfrobot.ino
该命令是用于Arduino IDE的构建工具 arduino-builder
的命令行参数,用于预处理Arduino代码。以下是该命令中各个参数的解释:
-
-logger=machine
:指定日志记录器的类型为“machine”,通常用于机器可读的输出格式,便于自动化工具解析。 -
-hardware D:\Mind+20241220\Arduino\hardware
:指定硬件相关的文件夹路径。Arduino IDE会在这个路径下查找板卡定义文件(boards.txt)和相关的库文件。 -
-tools D:\Mind+20241220\Arduino\arduino-builder
:指定构建工具的路径。arduino-builder
本身就是一个构建工具,这里指定其路径。 -
-tools D:\Mind+20241220\Arduino\hardware\tools\avr
:指定额外的工具路径,这里指定了AVR工具链的路径,用于编译AVR芯片的代码。 -
-libraries C:\Users\haili_10137664\AppData\Local\DFScratch\extensions\yuntian-json-thirdex\arduinoC\libraries
:指定用户库文件夹的路径。Arduino IDE会在这个路径下查找用户自定义的库文件。 -
-built-in-libraries D:\Mind+20241220\Arduino\libraries
:指定内置库文件夹的路径。Arduino IDE会在这个路径下查找Arduino IDE自带的库文件。 -
-fqbn=dfrobot:esp32s3:esp32s3bit:JTAGAdapter=default,PSRAM=opi,FlashMode=qio,FlashSize=16M,LoopCore=1,EventsCore=1,USBMode=hwcdc,CDCOnBoot=cdc,MSCOnBoot=default,DFUOnBoot=default,UploadMode=default,PartitionScheme=app3M_fat9M_16MB,CPUFreq=240,UploadSpeed=921600,DebugLevel=none,EraseFlash=none,Model=None
:指定完整的板卡名称(FQBN,Fully Qualified Board Name),用于确定编译的板卡类型和配置。这里指定了DFRobot的ESP32-S3板卡,并且定义了多种配置选项,如PSRAM类型、Flash模式、大小、CPU频率等。 -
-vid-pid=303A_1001
:指定USB设备的制造商ID(VID)和产品ID(PID)。这用于识别连接到计算机的Arduino板卡。 -
-ide-version=10808
:指定Arduino IDE的版本号。这通常用于确保构建过程与特定版本的IDE兼容。 -
-build-path C:\Users\haili_10137664\AppData\Local\DFScratch\build
:指定构建过程中的临时文件存放路径。 -
-warnings=none
:指定警告级别的设置,这里是“none”,表示不显示任何警告信息。 -
-build-cache C:\Users\haili_10137664\AppData\Local\DFScratch\cache
:指定构建缓存的路径。构建缓存用于存储中间编译结果,以加快后续构建速度。 -
-prefs=build.warn_data_percentage=75
:设置构建偏好,这里指定了数据使用百分比的警告阈值为75%。 -
-verbose
:开启详细输出模式,会显示更多的构建过程信息,便于调试和查看构建细节。 -
C:\Users\haili_10137664\AppData\Local\DFScratch\dfrobot\dfrobot.ino
:指定要预处理的Arduino源文件路径。这个文件是Arduino程序的主文件,通常包含setup()
和loop()
函数。
Mind+编译的时候,第一步先加了-preprocess参数。-preprocess
:指示 arduino-builder
进行预处理操作。预处理通常包括展开宏定义、包含头文件等操作,生成一个预处理后的代码文件,通常是 .cpp
文件。第二步才会进行编译。而且Mind+在编译后会删除所有中间文件,只保留build目录中的三个文件。
当然也可以不用那么麻烦,直接把ino文件的内容复制到Mind+手工代码窗口也行。
例子演示
Mind+所带的库代码中有很多不错的例子,都是用Arduino写的,比如\Mind+20241220\Arduino\hardware\dfrobot\esp32s3\libraries\unihiker_k10\examples目录下的就有很多。
比如下面就是unihiker_k10\examples\lcd\canvas\canvas.ino的运行结果。
结语
直接写Arduino的代码有方便的地方,特别是对于熟悉C++的开发者而言。不过这显然不是官方所支持的方式。行空板K10是面向中小学的开发板,对于大多数学生来说,积木式的开发仍然是最好选择。