Servo ansteuern mit Arduino ESP32

Hallo, kann mir vieleicht jemand sagen was ich falsch mache. Ich möchte grad erst mal zu test zwecken einen Servo mit einen Arduino Nano ESP32 ansteuern.

Ich verwende dafür die ESP32Servo.h Bibliothek

Beim Hochladen wir dann folgender Fehler ausgeworfen.

In file included from C:\Users\weste\OneDrive\Dokumente\ArduinoData\packages\arduino\hardware\esp32\2.0.13\cores\esp32/Arduino.h:223,
                 from C:\Users\weste\OneDrive\Dokumente\Arduino\libraries\ESP32Servo\src/ESP32PWM.h:12,
                 from C:\Users\weste\OneDrive\Dokumente\Arduino\libraries\ESP32Servo\src\ESP32PWM.cpp:8:
C:\Users\weste\OneDrive\Dokumente\Arduino\libraries\ESP32Servo\src\ESP32PWM.cpp: In member function 'void ESP32PWM::attachPin(uint8_t)':
C:\Users\weste\OneDrive\Dokumente\ArduinoData\packages\arduino\hardware\esp32\2.0.13\cores\esp32/io_pin_remap.h:56:91: error: void value not ignored as it ought to be
 #define ledcAttachPin(pin, channel)     ledcAttachPin(digitalPinToGPIONumber(pin), channel)
                                                                                           ^
C:\Users\weste\OneDrive\Dokumente\Arduino\libraries\ESP32Servo\src\ESP32PWM.cpp:312:11: note: in expansion of macro 'ledcAttachPin'
   success=ledcAttachPin(pin, getChannel());
           ^~~~~~~~~~~~~
exit status 1
Fehler beim Kompilieren für das Board Arduino Nano ESP32.

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden.
Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

Meiner Meinung ist da ein Leerzeichen vor cannel zuviel.

Grüße Uwe

Hallo Uwe, das was ich oben gepostet gabe ist der Fehlercode der mir beim Hochladen ausgegben wir. Mein Code den ich Hochladen will ist folgender:

#include <ESP32Servo.h>

Servo myservo;

void setup() {
  myservo.attach(2);

}

void loop() {
  myservo.write(0);
  delay(1000);
  myservo.write(180);
  delay(1000);

}

Schau dir mal die Beispiele in ESP32Servo an.
Bei dir fehlen noch div. Informationen.
Ich vermute, du hast nur ein Beispiel aus der AVR-Servo-Library genommen.

Ich habe mir alle Beispiele von der Bibliothek angeschaut und auch die versucht Hochzuladen. Leider bei jedem Beispiel das Gleiche Problem.

Der Code Sweep wäre meinem am änlichsten der geht jedoch leider auch nicht. Ich habe mir auch auf YT schon Videos angeschaut und dort wird es genau so gemacht wie ich es gemacht habe und bei denen geht das anscheinend alles. Jedoch verwenden die keinen ESP32 von Arduino. Kann es sein das die von Arduino einfach damit nicht Kompatiebel sind:

Hier mal der Sweep Code:

#include <ESP32Servo.h>

Servo myservo;  // create servo object to control a servo
// 16 servo objects can be created on the ESP32

int pos = 0;    // variable to store the servo position
// Recommended PWM GPIO pins on the ESP32 include 2,4,12-19,21-23,25-27,32-33 
// Possible PWM GPIO pins on the ESP32-S2: 0(used by on-board button),1-17,18(used by on-board LED),19-21,26,33-42
// Possible PWM GPIO pins on the ESP32-S3: 0(used by on-board button),1-21,35-45,47,48(used by on-board LED)
// Possible PWM GPIO pins on the ESP32-C3: 0(used by on-board button),1-7,8(used by on-board LED),9-10,18-21
#if defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32S3)
int servoPin = 17;
#elif defined(CONFIG_IDF_TARGET_ESP32C3)
int servoPin = 7;
#else
int servoPin = 18;
#endif

void setup() {
	// Allow allocation of all timers
	ESP32PWM::allocateTimer(0);
	ESP32PWM::allocateTimer(1);
	ESP32PWM::allocateTimer(2);
	ESP32PWM::allocateTimer(3);
	myservo.setPeriodHertz(50);    // standard 50 hz servo
	myservo.attach(servoPin, 1000, 2000); // attaches the servo on pin 18 to the servo object
	// using default min/max of 1000us and 2000us
	// different servos may require different min/max settings
	// for an accurate 0 to 180 sweep
}

void loop() {

	for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
		// in steps of 1 degree
		myservo.write(pos);    // tell servo to go to position in variable 'pos'
		delay(15);             // waits 15ms for the servo to reach the position
	}
	for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
		myservo.write(pos);    // tell servo to go to position in variable 'pos'
		delay(15);             // waits 15ms for the servo to reach the position
	}
}

Hallo,
ja, sorry, ich habe bisher noch keinen Servo am ESP32 betrieben und mit nur ein Beispiel angesehen. Das kam mir aufwändiger vor, als dein Sketch.
Habe jetzt das Beispiel selbst getestet und kannte an einem ESP32 DEV Modul sowie an einem ESP32-C3 den Fehler feststellen.
Habe aber leider keine Idee, wie der zu beheben ist.
Habe es noch mit einer älteren core-Version 1.0.6 getestet. Da gibt es auch Warnungen, aber er kompiliert.

Evtl. hilft das hier weiter.

Es gibt auch noch eine servoESP32.h. Habe die nicht getestet.

Habe das grad mal mit der IDE1.8.19 und core 1.0.6 getestet.
Damit läuft der Servo auch an meinem ESP32 WROOM 32 unter ESP32 DEV Modul.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.