25| 0
|
[ESP8266/ESP32] ESP32-C5 测试2--AI编程控制机器人 |
本帖最后由 Anders项勇 于 2025-10-20 23:20 编辑 这次幸运抽取到试用ESP32-C5,这次测试ai帮助其编程 1.Arduino环境: Arduino先安装ESP32-C5板子,首先项添加https://github.com/espressif/ard ... 2_dev_index_cn.json ![]() 开发板管理输入esp32,选择3.3.0-alpha1-cn ![]() ![]() 2.Ai编程控制ESP32-C5 上次我用Arduino Leonardo板子控制i-sobot机器人,曾经尝试使用ESP32-S3 AI控制,但是失败了(https://mc.dfrobot.com.cn/thread-324946-1-1.html),这次尝试使用ai来辅助编程,看看能否解决问题。 这次我们使用qwen来辅助编程。 1)注册魔搭社区,进入https://modelscope.cn/注册账号,然后用魔搭账号绑定阿里云账号 2)然后创建APi 3)在Vscode里面安装Roo Code插件,配置api和模型,就可以开始ai编程了。 4)在Vscode打开原来给Arduino Leonardo板子编的代码,在对话框输入以下要求内容执行就可以自动调用大模型更改代码:此代码是运行在Arduino Leonardo上的,需转化为ESP32-C5上,使用LEDC控制模块(特指其PWM脉冲宽度调制)作为时钟参考,因为ESP32无法使用自身的频率参考 5)最后在arduino里面上传代码测试通过: #include <Arduino.h> #include <driver/ledc.h> //-------------------动作编码------------------------- #define forward 898819 #define backward 964611 #define sideright 703491 #define sideleft 637699 #define p1 922368 #define k1 991744 #define g1 602624 #define zero 1034752 #define hp 775424 #define totallength 22 #define channelstart 0 #define commandstart 4 #define channellength 4 #define commandlength 18 #define headerlower 2300 #define headernom 2550 #define headerupper 2800 #define zerolower 300 #define zeronom 380 #define zeroupper 650 #define onelower 800 #define onenom 850 #define oneupper 1100 #define highnom 630 #define TXpin A1 // ESP32-C5 GPIO2 for PWM output #define RXpin 4 // ESP32-C5 GPIO4 for IR receiver input bool bit2[totallength]; // Changed from boolean to bool for ESP32 compatibility unsigned long buttonnum; unsigned long power2(int power){ unsigned long integer=1; for (int i=0; i<power; i++){ integer*=2; } return integer; } void ItoB(unsigned long integer, int length){ for (int i=0; i<length; i++){ if ((integer / power2(length-1-i))==1){ integer-=power2(length-1-i); bit2=1; } else bit2=0; } } unsigned long BtoI(int start, int numofbits, bool bit[]){ // Changed from boolean to bool unsigned long integer=0; int i=start; int n=0; while(n<numofbits){ integer+=bit*power2((numofbits-n-1)); i++; n++; } Serial.println(); return integer; } // LEDC PWM configuration constants #define LEDC_CHANNEL 0 #define LEDC_FREQ 38000 // 38kHz carrier frequency #define LEDC_RESOLUTION 8 // 8-bit resolution // Initialize LEDC PWM for ESP32-C5 void initLEDC() { ledcSetup(LEDC_CHANNEL, LEDC_FREQ, LEDC_RESOLUTION); ledcAttachPin(TXpin, LEDC_CHANNEL); } // LEDC PWM based oscillator write void oscWrite(int pin, int time) { // Generate 38kHz PWM for specified duration using LEDC ledcWrite(LEDC_CHANNEL, 128); // 50% duty cycle (128/256) delayMicroseconds(time); ledcWrite(LEDC_CHANNEL, 0); // Turn off PWM } void buttonwrite(int txpin, unsigned long integer){ ItoB(integer, 22); oscWrite(txpin, headernom); for(int i=0;i<totallength;i++){ if (bit2==0)delayMicroseconds(zeronom); else delayMicroseconds(onenom); oscWrite(txpin, highnom); } delay(205); } void setup() { Serial.begin(115200); // ESP32通常使用115200波特率 Serial.println("ESP32-C5 Isobot IR Remote with LEDC PWM"); pinMode(RXpin, INPUT); pinMode(TXpin, OUTPUT); initLEDC(); // Initialize LEDC PWM for 38kHz carrier } void loop(){ if(Serial.available()>0){ char switcher= Serial.read(); switch (switcher){ case 'w': buttonwrite(TXpin, forward); break; case 's': buttonwrite(TXpin, backward); break; case 'a': buttonwrite(TXpin, sideleft); break; case 'd': buttonwrite(TXpin, sideright); break; case 'p': buttonwrite(TXpin, p1); break; case 'k': buttonwrite(TXpin, k1); break; case 'g': buttonwrite(TXpin, g1); break; case 'h': buttonwrite(TXpin, hp); break; case '0': buttonwrite(TXpin, zero); break; } } } |
© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed