25浏览
查看: 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-C5 测试2--AI编程控制机器人图1
开发板管理输入esp32,选择3.3.0-alpha1-cn
ESP32-C5 测试2--AI编程控制机器人图2
ESP32-C5 测试2--AI编程控制机器人图3
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;
    }
  }
}

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail