AI 编程在嵌入式开发中能用吗?体验 Manus 编写 ESP32 固件

前段时间买了个 0.96 寸 80x160 的 LCD 屏幕,想要做一个模拟辉光管的时钟。

这第一步就用上了 AI,用 ChatGPT 生成了辉光管效果数字的图片,然后按数字裁切成 0-9 十张图,生成对应的图片 RGB565 格式数据,测试了一下,效果还不错。

视频

然后我就在想,那这个时钟的固件,是不是也可以用 AI 来生成呢?AI 现在已经验证了写一些前端项目相当高效,在嵌入式开发领域,是不是也可以有同样的能力,至少可以完成一个简单的项目?

刚好 Manus 开放注册了,我就拿它来尝试一下看看效果怎么样。

功能需求

为了防止项目失败,先把功能定义得简单一点,就是通过 ESP32 控制 6 个 LCD 来显示上面裁切生成的数字图片,并且需要提供 API 更新图片、AP 配置能力。

提示词

这里为了让生成的项目更可控,提示词中明确了工程框架为 PlatformIO,引脚使用宏定义等能力,

请使用 platformio + arduino 框架帮我写一个 esp32-s3 固件,实现以下功能:

  • 控制 6 个 st7735 驱动的 lcd 屏幕,分辨率为 80x160,颜色配置为 rgb565
  • st7735 使用 adafruit_st7735 库,spi 请使用硬件 spi
  • 6 个屏幕的 scl sda dc rst cs blk 引脚都使用宏定义
  • 使用 ntp 获取时间,并使用本地的 10 个图片数据数组来显示
  • 创建一个 webserver,提供一个 api 用来接收 6 张图片,并保存在本地 spiffs 中,用来在 6 个屏幕上分别显示,数据直接使用二进制,每个图片按顺序拼接
  • 提供 wifi ssid password 配置能力,在开机后不能连接到 wifi 时,进入 wifi ap 模式,由用户连接到 wifi ap 进行网络信息配置
  • 提供三个按钮检测能力,能检测短按、长按、双击,对应事件处理代码先留空
  • 请确保代码是可以编译的

生成工程

要让 Manus 生成一个 ESP32 项目代码固件比较简单,直接把上面的功能需求全丢给它就行了,它会去分析需求、生成每一步要做的事,然后按步完成。

manus-esp32-coding-2

经过 10 分钟,Manus 就完成了整个项目的编写,并且将所有项目代码打包成了 zip 来提供给用户下载。

manus-esp32-coding-3

不过下载之后才发现,Manus 忽略了提示词中“请确保代码是可以编译的”,解压出来的工程代码并不能直接编译,工程中引用的头文件、使用的库什么的都有问题,不得不再让它继续优化。

manus-esp32-coding-4

这样 Manus 就会真实地去创建一个开发环境,并且尝试使用工具链去将整个工程编译出来,在编译过程中碰到的编译错误,也可以直接去解决。

又经过 8 分钟,Manus 完成了所有编译错误的修复,给出了最终的项目代码。

项目代码

把 Manus 生成的工程代码下载下来,解压之后拖到 Visual Studio Code 中打开,大概看了下,整体结构还是比较规整的,模块划分清晰,代码也比较容易理解。

manus-esp32-coding-5

屏幕引脚的定义也是和预期一样,通过头文件宏的方式,这样在实际使用时,可以根据原理图和 PCB 设计灵活地改动。

manus-esp32-coding-6

虽然已经提示了使用硬件 SPI,但是 LCDManager 中初始化 Adafruit_ST7735 对象是,还是没有引用 SPIClass,导致最终实际上操作 LCD 还是使用了软件模拟 SPI。

manus-esp32-coding-7

生成的界面

在 Manus 生成固件代码过程中,也同时生成了 Wi-Fi 配置和图片上传界面的 HTML 代码,这块也没有额外说明,看看生成的样式效果也还凑合 😃。

Wi-Fi 配置界面

manus-esp32-coding-8

图片上传界面

manus-esp32-coding-9

存在的问题

虽然 Manus 生成的整个项目能编译,不过还是有一些问题存在,有些是在提项目需求的时候没有注意,有些是实现时没有完成目标。

  • platformio.ini 中指定了 lib_ldf_mode = deep+ 导致编译有问题,需要删除
  • LCDManager 没有使用硬件 SPI
  • 实现了图片上传但是没有实现图片读取
  • 图片上传和 Wi-Fi 配置的 WebServer 分别创建了实例,导致其中一个不可用
  • 没有明确 6 个 LCD 需要根据 秒 来更新,导致默认更新间隔是 1 分钟
  • 没有明确时区,默认用了 +1 时区来计算当地时间

其他问题不太大,稍微改一下基本上就能用了。

总结

要查看 Manus 生成项目的过程,可以通过下面这个链接来查看生成过程:

https://manus.im/share/1UbUKQ1xnsNXFC9EEK2TAY?replay=1

使用 Manus 生成这样一个简单需求的固件代码感觉还是蛮流畅的,虽然有一些小问题,如果本身了解嵌入式开发的话,解决起来问题不大,但是如果完全不知道嵌入式开发,可能就需要反复和 Manus 进行对话了。

另外这样一份代码生成的工作,消耗了 409 积分,如果从会员价格占比角度考虑,相当于花费了 $1.7,可能也不算便宜?

如果也想尝试一下使用 Manus 来玩嵌入式开发的话,可以使用我的邀请链接,可以各获得 500 积分:

https://manus.im/invitation/HRRUMLO0QL03A

也可以直接点击 阅读全文 跳转到 Manus 注册页面。

参考资料

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>