You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于远程信息处理数据的避障机器人代码编译报错求助

ESP32+Blynk避障机器人:WiFi头文件编译报错解决方案

问题描述

开发基于远程信息处理数据的避障机器人,使用Blynk平台。尝试引入<WiFi.h>头文件时编译失败;移除<WiFi.h>后,<WiFiClient.h>又报错,后续代码也出现编译错误,无法完成编译。项目包含温度检测模块用于测试,代码如下:

#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>

#define BLYNK_TEMPLATE_ID ""
#define BLYNK_TEMPLATE_NAME ""
#define BLYNK_AUTH_TOKEN ""


// #define BLYNK_PRINT Serial

char ssid[] = "Wokwi-GUEST";
char pass[] = "";

BlynkTimer timer;

int dirPin[] = {33, 13, 18, 16};
int stepPin[] = {32, 12, 19, 17}; 

#define pin_trig1 26
#define pin_echo1 27
#define pin_echo2 22
#define pin_trig2 23

long duration=0;
int distance=0;

const int stepsPerRevolution=300;

void setup()
{
  Serial.begin(115200);
  Serial.print("Connecting to WiFi");
  WiFi.begin("Wokwi-GUEST", "", 6);
  while (WiFi.status() != WL_CONNECTED) {
    delay(100);
    Serial.print(".");
  }
  Serial.println(" Connected!");  

  Blynk.begin(BLYNK_AUTH_TOKEN,ssid,pass );
  timer.setInterval(1000L,temperature);

  pinMode(pin_trig1, OUTPUT);
  pinMode(pin_echo1, INPUT);
  pinMode(pin_trig2, OUTPUT);
  pinMode(pin_echo2, INPUT);

  for(int i=0;i<4;i++)
  {
    pinMode(dirPin[i], OUTPUT);
    pinMode(stepPin[i], OUTPUT);
    
  }
}

void forward()
{
  digitalWrite(dirPin[0],HIGH);
  digitalWrite(dirPin[1],LOW);
  digitalWrite(dirPin[2],HIGH);
  digitalWrite(dirPin[3],LOW);

  for(int i=0;i<stepsPerRevolution;i++)
  {
    for(int x=0;x<4;x++)
    {
      digitalWrite(stepPin[x],HIGH);
    }
    delayMicroseconds(7000);
    for(int x=0;x<4;x++)
    {
      digitalWrite(stepPin[x],LOW);
    }
    delayMicroseconds(7000);

  }
  Serial.println("Going forward");

}

void backward()
{
  digitalWrite(dirPin[0],LOW);
  digitalWrite(dirPin[1],HIGH);
  digitalWrite(dirPin[2],LOW);
  digitalWrite(dirPin[3],HIGH);

  for(int i=0;i<stepsPerRevolution;i++)
  {
    for(int x=0;x<4;x++)
    {
      digitalWrite(stepPin[x],HIGH);
    }
    delayMicroseconds(7000);
    for(int x=0;x<4;x++)
    {
      digitalWrite(stepPin[x],LOW);
    }
    delayMicroseconds(7000);

  }
  Serial.println("Going backward");
}


int total_distance(int trigPin, int echoPin)
{
  digitalWrite(trigPin,LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin,HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin,LOW);

  duration=pulseIn(echoPin,HIGH);
  distance=duration*(0.034/2);
  return distance;

}


//!!! There is no use of the temperature in this project !!!  It was just for experimenting

void temperature()
{
  int analogValue=analogRead(21);
  float celsius= (analogValue ) / 10.24;
  Serial.print("Temperature: ");
  Serial.print(celsius);
  Serial.println(" in celsius!!");
  delay(1000);
  Blynk.virtualWrite(V1,celsius);
}

void loop()
{
  int forward_distance=total_distance(pin_trig1,pin_echo1);
  Blynk.virtualWrite(V0,forward_distance);
  Serial.print("forward_distance: ");
  Serial.print(forward_distance);

  if(forward_distance<100)
  {
    Blynk.logEvent("obstacles_detected","Obstacles are detected !! Take action!!");
    backward();
  }
  else
  {
    int backward_distance=total_distance(pin_trig2,pin_echo2);
    Blynk.virtualWrite(V0,forward_distance);
    Serial.print("backward_distance: ");
    Serial.print(backward_distance);

    if(backward_distance<100)
    {
      forward();
    }
    else
    {
      Serial.println("NO OBSTACLES DETECTED!!!");
      delay(1000);
    }
  }
  temperature();
  Serial.println("-_-_-_-_-_-_");
  Blynk.run();
  timer.run();
  
}

解决方案

1. 头文件冲突根源

BlynkSimpleEsp32.h库内部已经自动包含了WiFi.h和WiFiClient.h,手动重复引入会导致编译器符号冲突,引发编译错误。

2. 直接修复步骤

删除代码中的#include <WiFi.h>和#include <WiFiClient.h>,仅保留#include <BlynkSimpleEsp32.h>即可。

3. 其他潜在问题修正

  • WiFi连接参数优化:WiFi.begin的第三个参数是WiFi信道,Wokwi-GUEST无需指定信道,修改为:
    WiFi.begin(ssid, pass);
    
  • 定时任务重复执行问题:timer.setInterval(1000L, temperature)已经定时调用temperature函数,无需在loop中手动调用temperature(),删除该行。
  • 温度函数延迟冲突:temperature函数内的delay(1000)会和定时任务的1秒间隔叠加,导致实际执行间隔变为2秒,删除该delay。
  • Blynk参数补全:必须填写自己的BLYNK_TEMPLATE_ID、BLYNK_TEMPLATE_NAME、BLYNK_AUTH_TOKEN,否则无法连接Blynk平台。

修正后完整代码

#include <BlynkSimpleEsp32.h>

// 填写你的Blynk信息
#define BLYNK_TEMPLATE_ID "你的模板ID"
#define BLYNK_TEMPLATE_NAME "你的模板名称"
#define BLYNK_AUTH_TOKEN "你的授权令牌"

// #define BLYNK_PRINT Serial

char ssid[] = "Wokwi-GUEST";
char pass[] = "";

BlynkTimer timer;

int dirPin[] = {33, 13, 18, 16};
int stepPin[] = {32, 12, 19, 17}; 

#define pin_trig1 26
#define pin_echo1 27
#define pin_echo2 22
#define pin_trig2 23

long duration=0;
int distance=0;

const int stepsPerRevolution=300;

void setup()
{
  Serial.begin(115200);
  Serial.print("Connecting to WiFi");
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED) {
    delay(100);
    Serial.print(".");
  }
  Serial.println(" Connected!");  

  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
  timer.setInterval(1000L, temperature);

  pinMode(pin_trig1, OUTPUT);
  pinMode(pin_echo1, INPUT);
  pinMode(pin_trig2, OUTPUT);
  pinMode(pin_echo2, INPUT);

  for(int i=0;i<4;i++)
  {
    pinMode(dirPin[i], OUTPUT);
    pinMode(stepPin[i], OUTPUT);
    
  }
}

void forward()
{
  digitalWrite(dirPin[0],HIGH);
  digitalWrite(dirPin[1],LOW);
  digitalWrite(dirPin[2],HIGH);
  digitalWrite(dirPin[3],LOW);

  for(int i=0;i<stepsPerRevolution;i++)
  {
    for(int x=0;x<4;x++)
    {
      digitalWrite(stepPin[x],HIGH);
    }
    delayMicroseconds(7000);
    for(int x=0;x<4;x++)
    {
      digitalWrite(stepPin[x],LOW);
    }
    delayMicroseconds(7000);

  }
  Serial.println("Going forward");

}

void backward()
{
  digitalWrite(dirPin[0],LOW);
  digitalWrite(dirPin[1],HIGH);
  digitalWrite(dirPin[2],LOW);
  digitalWrite(dirPin[3],HIGH);

  for(int i=0;i<stepsPerRevolution;i++)
  {
    for(int x=0;x<4;x++)
    {
      digitalWrite(stepPin[x],HIGH);
    }
    delayMicroseconds(7000);
    for(int x=0;x<4;x++)
    {
      digitalWrite(stepPin[x],LOW);
    }
    delayMicroseconds(7000);

  }
  Serial.println("Going backward");
}


int total_distance(int trigPin, int echoPin)
{
  digitalWrite(trigPin,LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin,HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin,LOW);

  duration=pulseIn(echoPin,HIGH);
  distance=duration*(0.034/2);
  return distance;

}


//!!! There is no use of the temperature in this project !!!  It was just for experimenting

void temperature()
{
  int analogValue=analogRead(21);
  float celsius= (analogValue ) / 10.24;
  Serial.print("Temperature: ");
  Serial.print(celsius);
  Serial.println(" in celsius!!");
  Blynk.virtualWrite(V1,celsius);
}

void loop()
{
  int forward_distance=total_distance(pin_trig1,pin_echo1);
  Blynk.virtualWrite(V0,forward_distance);
  Serial.print("forward_distance: ");
  Serial.print(forward_distance);

  if(forward_distance<100)
  {
    Blynk.logEvent("obstacles_detected","Obstacles are detected !! Take action!!");
    backward();
  }
  else
  {
    int backward_distance=total_distance(pin_trig2,pin_echo2);
    Blynk.virtualWrite(V0,forward_distance);
    Serial.print("backward_distance: ");
    Serial.print(backward_distance);

    if(backward_distance<100)
    {
      forward();
    }
    else
    {
      Serial.println("NO OBSTACLES DETECTED!!!");
      delay(1000);
    }
  }
  Serial.println("-_-_-_-_-_-_");
  Blynk.run();
  timer.run();
  
}

内容的提问来源于stack exchange,提问作者DURVESH NIRANJAN GANGAN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 09:07:02