基于远程信息处理数据的避障机器人代码编译报错求助
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
相关产品推荐
相关产品推荐

