首先,我们来复制一个简单的esp32工程项目作为基础工程,然后加载idf环境准备开启AI编程。
打开两个终端的原因是,我们需要在左边使用AI编程,右边烧录测试结果。
现在我们在网络上找到自己感觉还可以的颜色传感器的代码,复制到项目里。就像我这样

然后告诉AI要怎样做,就坐等代码出现吧。输入我们的要求后,就可以慢慢等AI完成了。

接下来,还需要提出一些方向性的指导,比如要求它生成一个标准化的esp32组件

并要求它对外的头文件仅包含外部需要使用的函数
很快,AI就生成好了相关的代码,并生成了相关的说明文档。

接下来,让AI使用这个组件,并编译测试,需要告诉AI智能体使用什么编译指令,以及环境是否已加载(防呆)
在接下来的过程里,AI会自己编译并修复相关的错误,例如类型错误,缺少函数(自己写或者找SDK里有没有相关的API),API不匹配等等问题,大部分时候AI智能体代理都能自动解决。
最后,AI智能体代理会完成这个传感器案例使用的修改和调整,输出以下的内容

我们需要在右边的命令行终端尝试编译,看看AI智能体代理有没有撒谎,这次也是顺利编译完成了。
接下来,我们直接拿出开发板,并接线、烧录测试就可以了。
由于这个颜色传感器是需要校准的,还需要反复和AI沟通校准和通信的问题。最终产出的代码如下main.c:
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
#include "tcs3200.h"
static const char *TAG = "TCS3200_MAIN";
// 中国传统色彩识别(包含70+传统色彩)
static const char* get_chinese_color_name(uint8_t r, uint8_t g, uint8_t b, const char* western_name) {
// === 红色系传统色 ===
if (r > 200) {
if (g < 50 && b < 50) return "中国红"; // 国旗红
if (g < 80 && b < 80) return "朱砂红"; // 朱砂矿物红
if (g < 100 && b < 100) return "胭脂红"; // 古代胭脂
if (g < 50 && b < 100) return "牡丹红"; // 牡丹花红
if (g < 100 && b < 50) return "樱桃红"; // 樱桃果红
if (g > 100 && b < 100) return "石榴红"; // 石榴籽红
if (g < 100 && b > 100) return "玫瑰红"; // 玫瑰花红
if (g > 50 && g < 150 && b > 50 && b < 150) return "妃色"; // 帝王妃子服色
if (g > 80 && b < 80) return "珊瑚红"; // 珊瑚色
}
// === 黄色系传统色 ===
if (r > 200 && g > 180) {
if (b < 50) return "明黄"; // 皇室明黄
if (b < 100) return "金黄"; // 金器金黄
if (b < 150) return "橙黄"; // 橙子橙黄
if (r > 230 && g > 230) return "杏黄"; // 杏子黄
if (r > 220 && g > 200) return "鹅黄"; // 鹅毛黄
if (r > 180 && g > 160 && b > 50) return "赭石色"; // 赭石矿物
if (g > 200 && b < 100) return "柠檬黄"; // 柠檬黄
}
// === 绿色系传统色 ===
if (g > 150) {
if (r < 80 && b < 80) return "竹青"; // 竹子青绿
if (r < 100 && b < 100) return "翡翠绿"; // 翡翠宝石绿
if (r < 120 && b < 120) return "松柏绿"; // 松柏深绿
if (b > 120 && r < 100) return "青瓷绿"; // 青瓷器绿
if (r > 100 && b < 100) return "苔藓绿"; // 苔藓绿
if (b > 100 && r > 100) return "春绿"; // 春天新绿
if (g > 200) return "碧绿"; // 碧玉绿
}
// === 蓝色系传统色 ===
if (b > 150) {
if (r < 50 && g < 50) return "群青"; // 深海群青
if (r < 80 && g < 80) return "靛蓝"; // 靛染植物蓝
if (r < 100 && g < 100) return "藏青"; // 西藏藏青
if (r < 100 && g > 100) return "天青"; // 天空青蓝
if (r > 100 && g < 100) return "宝蓝"; // 宝石蓝
if (r > 120 && g > 120) return "湖蓝"; // 湖水蓝
if (g > 150) return "蔚蓝"; // 天空蔚蓝
}
// === 紫色系传统色 ===
if (r > 120 && g < 120 && b > 120) {
return "紫檀"; // 紫檀木紫
}
if (r > 140 && g < 100 && b > 140) {
return "丁香紫"; // 丁香花紫
}
// === 褐色系传统色 ===
if (r > 120 && g > 80 && b < 80 && r > g && g > b) {
if (r > 160) return "琥珀色"; // 琥珀褐色
if (r > 140) return "咖啡色"; // 咖啡色
return "赭石色"; // 赭石矿物
}
if (r > 150 && g < 100 && b < 100) return "赤褐色"; // 赤褐色
if (r > 120 && g > 100 && b < 80) return "茶褐色"; // 茶叶褐色
if (r > 140 && g > 100 && b < 60) return "栗色"; // 栗子色
// === 灰色系传统色 ===
if (r > 100 && r < 200 && g > 100 && g < 200 && b > 100 && b < 200) {
if (r > 180) return "月白"; // 月光白色
if (r > 160) return "银灰"; // 银器灰色
if (r > 140) return "苍色"; // 天空苍色
if (r < 140) return "墨灰"; // 墨汁灰色
return "铅灰"; // 铅器灰色
}
// === 白色系传统色 ===
if (r > 230 && g > 230 && b > 230) {
if (r > 250) return "雪白"; // 雪花白
return "宣纸白"; // 宣纸白色
}
// === 黑色系传统色 ===
if (r < 50 && g < 50 && b < 50) {
return "墨黑"; // 墨汁黑色
}
// === 特殊传统色 ===
if (r > 200 && g > 140 && b < 80) return "琥珀色"; // 琥珀色
if (r > 180 && g > 120 && b < 60) return "朱标色"; // 印章朱标
if (r > 160 && g > 140 && b < 100) return "象牙色"; // 象牙色
if (r > 140 && g > 100 && b < 50) return "古铜色"; // 青铜器色
// === 淡雅色彩 ===
if (r > 180 && g > 170 && b > 160) return "粉黛"; // 古代粉黛
if (r > 200 && g > 180 && b > 170) return "胭脂水"; // 淡胭脂色
return western_name; // 回退到西方色彩名称
}
void app_main(void)
{
ESP_LOGI(TAG, "=== TCS3200 颜色传感器测试程序 ===");
ESP_LOGI(TAG, "硬件连接说明:");
ESP_LOGI(TAG, " TCS3200 S0 → GPIO18");
ESP_LOGI(TAG, " TCS3200 S1 → GPIO17");
ESP_LOGI(TAG, " TCS3200 S2 → GPIO16");
ESP_LOGI(TAG, " TCS3200 S3 → GPIO15");
ESP_LOGI(TAG, " TCS3200 OUT → GPIO14");
ESP_LOGI(TAG, " TCS3200 VCC → 3.3V/5V");
ESP_LOGI(TAG, " TCS3200 GND → GND");
// 声明传感器句柄
tcs3200_handle_t sensor;
// 初始化传感器
ESP_LOGI(TAG, "正在初始化TCS3200颜色传感器...");
esp_err_t ret = tcs3200_init(&sensor);
if (ret != ESP_OK) {
ESP_LOGE(TAG, "传感器初始化失败: %s", esp_err_to_name(ret));
return;
}
ESP_LOGI(TAG, "✅ 传感器初始化成功!");
// 设置频率缩放为20%(默认设置)
ret = tcs3200_set_freq_scaler(&sensor, TCS3200_SCALE_20_PCT);
if (ret != ESP_OK) {
ESP_LOGE(TAG, "设置频率缩放失败: %s", esp_err_to_name(ret));
tcs3200_deinit(&sensor);
return;
}
ESP_LOGI(TAG, "✅ 频率缩放设置为20%%");
// 执行白平衡校准(新功能)
ESP_LOGI(TAG, "
我要赚赏金
