ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

【行空板K10】从环境搭建到用华为云码道生成「中秋快乐」

【行空板K10】从环境搭建到用华为云码道生成「中秋快乐」 文章目录一、前言二、软件安装与工程配置2.1 安装 PlatformIO以 VSCode 为例2.2 新建工程并配置 platformio.ini2.3 跑通官方测试代码三、踩坑记录中文路径/文件名导致的编译错误四、用华为云码道(CodeArts)生成「中秋快乐」彩色文字4.1 需求拆解4.2 完整代码4.3 关键点说明五、运行效果六、总结配套环境行空板 UniHiker K10 · PlatformIO · Arduino 框架官方安装文档https://www.unihiker.com.cn/wiki/k10/platform_io_prepare一、前言行空板 K10 是 DFRobot 出品的一块带屏幕的 ESP32 类开发板官方同时支持 Mind 图形化、MicroPython、Arduino IDE 以及PlatformIO几种开发方式。对于习惯写代码、想要更专业工程化开发的同学来说PlatformIO VSCode 的组合体验非常顺手。本文记录我从零搭建 PlatformIO 开发 K10 的完整过程重点分享两个内容一个让我折腾很久的坑——中文路径/文件名导致的编译错误如何用华为云码道CodeArts代码智能体一句自然语言就让 K10 屏幕显示「中秋快乐」四个彩色汉字。二、软件安装与工程配置官方文档已经把安装流程写得很清楚了这里做一份精简梳理详细步骤请参考上面的官方链接。2.1 安装 PlatformIO以 VSCode 为例打开 VSCode进入扩展市场CtrlShiftX搜索platformio ide安装PlatformIO IDE扩展安装后左侧会出现「航天小人」的工具栏图标点击即可打开 PlatformIO Home。注意首次创建项目时 PlatformIO 会从服务器拉取依赖文件如果超过 10 分钟没有反应一般是网络问题建议把代理切换到 TUN/全局模式。这一步当年卡了我很久2.2 新建工程并配置platformio.ini点击 PlatformIO Home 里的New Project任意选择一个 DFRobot 开发板先创建出工程骨架然后把platformio.ini改成下面的内容并保存[env:unihiker] platform https://github.com/DFRobot/platform-unihiker.git board unihiker_k10 framework arduino build_flags -DARDUINO_USB_CDC_ON_BOOT1 -DARDUINO_USB_MODE1 -DModelNone保存后 PlatformIO 会自动下载platform-unihiker平台和 Arduino 框架耐心等待即可。2.3 跑通官方测试代码把src/main.cpp替换为官方示例屏幕上画一个绿色圆点循环闪烁#includeunihiker_k10.hUNIHIKER_K10 k10;uint8_tscreen_dir2;voidsetup(){k10.begin();k10.initScreen(screen_dir);k10.creatCanvas();k10.setScreenBackground(0xFFFFFF);}voidloop(){// Draw a green circle on the screenk10.canvas-canvasCircle(120,160,10,0x00FF00,0x00FF00,true);k10.canvas-updateCanvas();delay(1000);// Clear the circlek10.canvas-canvasCircle(120,160,10,0xFFFFFF,0xFFFFFF,true);k10.canvas-updateCanvas();delay(1000);}快捷键VSCodeCtrlAltB编译CtrlAltU上传CLionCtrlF5编译并上传。三、踩坑记录中文路径/文件名导致的编译错误这是本文最想分享的一个坑。我第一次做课程作业时把工程直接放在了下面这样带中文的路径里D:\课程\开发板试用\K10\Test\结果编译到最后的链接阶段直接抛了下面的错误Building in release mode Linking .pio\build\unihiker\firmware.elf c:/users/haili/.platformio/packages/toolchain-xtensa-esp32s3/bin/../lib/gcc/ xtensa-esp32s3-elf/8.4.0/../../../../xtensa-esp32s3-elf/bin/ld.exe: cannot open map file D:/课程/开发板试用/K10/Test/.pio/build/unihiker/firmware.map: No such file or directory collect2.exe: error: ld returned 1 exit status *** [.pio\build\unihiker\firmware.elf] Error 1看着像是「找不到文件」但文件其实就在那里——报错里那个firmware.map是链接器ld.exe自己要在构建目录里生成的中间产物跟你的源码没有任何关系。当时我换了好几次代码、改了好几遍参数都无济于事一度怀疑是自己代码写错了。后来翻官方文档才发现 Wiki 里的「CLion 安装」章节早就写了这么一句项目名称请仅使用英文a-z以避免后续项目编译问题。原因其实不难理解PlatformIO 最终调用的是 ESP32-S3 的xtensa 交叉编译工具链链接器ld.exe在生成firmware.map文件时无法正确处理包含非 ASCII 字符中文的路径于是抛出cannot open map file ... No such file or directory。这是工具链对非 ASCII 路径支持不完善导致的属于环境/路径问题和代码逻辑一点关系都没有。解决办法很简单把整个工程目录搬到纯英文、无空格的路径下。我当时是先用下面的命令把工程复制了一份到D:\K10再重新编译就通过了mkdir D:\K10 xcopy D:\课程\开发板试用\K10\Test D:\K10\Test /E /I /H然后用 VSCode 打开D:\K10\Test重新platformio run。这次日志里Linking .pio\build\unihiker\firmware.elf顺利通过并生成firmware.bincannot open map file不再出现。所以这里郑重提醒K10 的工程路径和文件名务必全程英文能少走很多弯路。四、用华为云码道(CodeArts)生成「中秋快乐」彩色文字环境搞定之后我想来点更有意思的——让 K10 屏幕显示中秋祝福。这次我直接在华为云码道CodeArts代码智能体里输入了这样一句自然语言需求修改当前程序在屏幕上显示“中秋快乐”4 个汉字字体为楷体每个字的颜色随机每 2 秒字的颜色循环变化。码道很快就生成了完整可用的 Arduino 代码下面结合最终代码聊聊关键点。4.1 需求拆解显示 4 个汉字中 秋 快 乐每个字独立随机颜色每 2 秒刷新一次颜色循环变化。4.2 完整代码#includeunihiker_k10.hUNIHIKER_K10 k10;uint8_tscreenDir2;constchar*greetingChars[4]{中,秋,快,乐};constintcharCount4;constintcharSize24;// 内置中文字库最大字号24x24点阵constintcharGap40;// 相邻两个汉字的水平间距constinttextY160-charSize/2;// 随机生成一个较亮的颜色每个分量 0x40~0xFF避免与黑色背景混淆uint32_trandomBrightColor(){uint8_trrandom(0x40,0x100);uint8_tgrandom(0x40,0x100);uint8_tbrandom(0x40,0x100);return((uint32_t)r16)|((uint32_t)g8)|b;}// 绘制“中秋快乐”四个汉字每个字一种随机颜色voiddrawGreeting(){inttotalWidthcharCount*charSize(charCount-1)*(charGap-charSize);intstartX(240-totalWidth)/2;k10.canvas-canvasClear();for(inti0;icharCount;i){uint32_tcolorrandomBrightColor();k10.canvas-canvasText(greetingChars[i],startXi*charGap,textY,color,Canvas::eCNAndENFont24,50,false);}k10.canvas-updateCanvas();}voidsetup(){k10.begin();k10.initScreen(screenDir);k10.creatCanvas();k10.setScreenBackground(0x000000);randomSeed(millis());drawGreeting();}voidloop(){delay(2000);drawGreeting();}4.3 关键点说明每个字单独绘制才能得到独立颜色。K10 的canvasText一次只能对整段文本设置一种颜色所以要把 4 个字拆开逐个调用canvasText每个字传入一个随机颜色。屏幕坐标。screenDir 2时 K10 是 240×320 竖屏4 个 24 号字加上间距总宽约 120 像素startX计算公式(240 - totalWidth) / 2用于水平居中textY 160 - 12用于垂直居中。关于“楷体”。K10 屏幕用的是GT30L24A3W点阵字库硬件上只有标准宋体风格的点阵字形Canvas提供的字体类型里没有楷体所以这里用内置最大号的eCNAndENFont2424×24 中文点阵来替代。随机颜色与刷新。randomBrightColor()让 RGB 每个分量在0x40~0xFF之间取值保证颜色够亮、不会和黑色背景混在一起loop()里每delay(2000)重新调用一次drawGreeting()实现每 2 秒换一次颜色。五、运行效果上传后可以看到K10 屏幕中央显示「中秋快乐」四个大字四个字各自是随机的红、绿、蓝、黄等颜色每 2 秒颜色整体「换一轮」节日氛围拉满。如果你也遇到了编译一直不通过、报一堆看不懂的错误先别怀疑代码检查一下工程路径里是不是有中文十有八九就是它。六、总结K10 用 PlatformIO 开发体验很好但工程路径务必全英文首次拉取依赖慢多半是网络问题开代理能省很多时间让 AI 辅助写嵌入式代码把 Natural Language 需求丢给华为云码道能快速拿到可直接套用的代码骨架再结合硬件 API 手册微调即可。希望这篇笔记能帮到同样被中文路径坑到的你。
返回列表