MobaTools nicht kompatibel mit ESP32?

Nabend Leute

Für eine Schrittmotorsteuerung brauche ich mehr Clockspeed, als die 16MHz vom Arduino Uno. Deshalb wollte ich auf ein Adafruit Feather ESP32 wechseln. Doch leider motzt der Compiler übelst wegen der MobaTools library (beim Uno compiliere ich fehlerfrei). Hatte jemand schon dieses Problem?
Hier der Log von der Arduino IDE:

C:\Users\leich\OneDrive\Dokumente\Arduino\libraries\MobaTools\src\esp32\driversESP32.c:236:1: warning: ignoring attribute 'section (".iram1.1")' because it conflicts with previous 'section (".iram1.0")' [-Wattributes]
  236 | void IRAM_ATTR setPwmDuty(int8_t pwmNbr, uint32_t duty ){
      | ^~~~
In file included from C:\Users\leich\OneDrive\Dokumente\Arduino\libraries\MobaTools\src\esp32\driversESP32.c:5:
C:\Users\leich\OneDrive\Dokumente\Arduino\libraries\MobaTools\src\esp32\drivers.h:106:16: note: previous declaration here
  106 | void IRAM_ATTR setPwmDuty(int8_t pwmNbr, uint32_t duty );
      |                ^~~~~~~~~~
"C:\\Users\\leich\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\xtensa-esp32-elf-gcc\\esp-12.2.0_20230208/bin/xtensa-esp32-elf-g++" -MMD -c "@C:\\Users\\leich\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp32-arduino-libs\\idf-release_v5.1-3662303f31/esp32/flags/cpp_flags" -Wall -Werror=all -Wextra -Os -DF_CPU=240000000L -DARDUINO=10819 -DARDUINO_ADAFRUIT_FEATHER_ESP32_V2 -DARDUINO_ARCH_ESP32 "-DARDUINO_BOARD=\"ADAFRUIT_FEATHER_ESP32_V2\"" "-DARDUINO_VARIANT=\"adafruit_feather_esp32_v2\"" -DARDUINO_PARTITION_default_8MB "-DARDUINO_HOST_OS=\"windows\"" "-DARDUINO_FQBN=\"esp32:esp32:adafruit_feather_esp32_v2:LoopCore=1,EventsCore=1,PSRAM=enabled,PartitionScheme=default_8MB,CPUFreq=240,FlashFreq=80,FlashSize=8M,UploadSpeed=921600,DebugLevel=none,EraseFlash=none,ZigbeeMode=default\"" -DESP32 -DCORE_DEBUG_LEVEL=0 -DARDUINO_RUNNING_CORE=1 -DARDUINO_EVENT_RUNNING_CORE=1 -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue -mfix-esp32-psram-cache-strategy=memw -DARDUINO_USB_CDC_ON_BOOT=0 "@C:\\Users\\leich\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp32-arduino-libs\\idf-release_v5.1-3662303f31/esp32/flags/defines" "-IC:\\Users\\leich\\OneDrive\\Dokumente\\Arduino\\Slider_Control_Moba_display_switch_case_Feather" -iprefix "C:\\Users\\leich\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp32-arduino-libs\\idf-release_v5.1-3662303f31/esp32/include/" "@C:\\Users\\leich\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp32-arduino-libs\\idf-release_v5.1-3662303f31/esp32/flags/includes" "-IC:\\Users\\leich\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp32-arduino-libs\\idf-release_v5.1-3662303f31/esp32/dio_qspi/include" "-IC:\\Users\\leich\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.0-alpha3\\cores\\esp32" "-IC:\\Users\\leich\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.0-alpha3\\variants\\adafruit_feather_esp32_v2" "-IC:\\Users\\leich\\OneDrive\\Dokumente\\Arduino\\libraries\\MobaTools\\src" "-IC:\\Users\\leich\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.0-alpha3\\libraries\\Wire\\src" "-IC:\\Users\\leich\\OneDrive\\Dokumente\\Arduino\\libraries\\Adafruit_GFX_Library" "-IC:\\Users\\leich\\OneDrive\\Dokumente\\Arduino\\libraries\\Adafruit_BusIO" "-IC:\\Users\\leich\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.0-alpha3\\libraries\\SPI\\src" "-IC:\\Users\\leich\\OneDrive\\Dokumente\\Arduino\\libraries\\Adafruit_SSD1306" "@C:\\Users\\leich\\AppData\\Local\\Temp\\arduino_build_110345/build_opt.h" "@C:\\Users\\leich\\AppData\\Local\\Temp\\arduino_build_110345/file_opts" "C:\\Users\\leich\\OneDrive\\Dokumente\\Arduino\\libraries\\MobaTools\\src\\esp32\\MoToESP32.cpp" -o "C:\\Users\\leich\\AppData\\Local\\Temp\\arduino_build_110345\\libraries\\MobaTools\\esp32\\MoToESP32.cpp.o"
C:\Users\leich\OneDrive\Dokumente\Arduino\libraries\MobaTools\src\esp32\MoToESP32.cpp: In function 'void ISR_Stepper()':
C:\Users\leich\OneDrive\Dokumente\Arduino\libraries\MobaTools\src\esp32\MoToESP32.cpp:32:5: error: 'timerAlarmWrite' was not declared in this scope; did you mean 'timerWrite'?
   32 |     timerAlarmWrite(stepTimer, aktAlarm , false); // no autorelaod
      |     ^~~~~~~~~~~~~~~
      |     timerWrite
C:\Users\leich\OneDrive\Dokumente\Arduino\libraries\MobaTools\src\esp32\MoToESP32.cpp:33:5: error: 'timerAlarmEnable' was not declared in this scope; did you mean 'timerAlarm'?
   33 |     timerAlarmEnable(stepTimer);
      |     ^~~~~~~~~~~~~~~~
      |     timerAlarm
C:\Users\leich\OneDrive\Dokumente\Arduino\libraries\MobaTools\src\esp32\MoToESP32.cpp: In function 'void seizeTimerAS()':
C:\Users\leich\OneDrive\Dokumente\Arduino\libraries\MobaTools\src\esp32\MoToESP32.cpp:49:31: error: too many arguments to function 'hw_timer_t* timerBegin(uint32_t)'
   49 |         stepTimer = timerBegin(STEPPER_TIMER, DIVIDER, true); // true= countup
      |                     ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from C:\Users\leich\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.0-alpha3\cores\esp32/esp32-hal.h:84,
                 from C:\Users\leich\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.0-alpha3\cores\esp32/Arduino.h:36,
                 from C:\Users\leich\OneDrive\Dokumente\Arduino\libraries\MobaTools\src/utilities/MoToBase.h:11,
                 from C:\Users\leich\OneDrive\Dokumente\Arduino\libraries\MobaTools\src/MobaTools.h:199,
                 from C:\Users\leich\OneDrive\Dokumente\Arduino\libraries\MobaTools\src\esp32\MoToESP32.cpp:3:
C:\Users\leich\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.0-alpha3\cores\esp32/esp32-hal-timer.h:35:14: note: declared here
   35 | hw_timer_t * timerBegin(uint32_t frequency);
      |              ^~~~~~~~~~
C:\Users\leich\OneDrive\Dokumente\Arduino\libraries\MobaTools\src\esp32\MoToESP32.cpp:50:29: error: too many arguments to function 'void timerAttachInterrupt(hw_timer_t*, void (*)())'
   50 |         timerAttachInterrupt(stepTimer, &ISR_Stepper, true);  // true= edge Interrupt
      |         ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\Users\leich\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.0-alpha3\cores\esp32/esp32-hal-timer.h:50:6: note: declared here
   50 | void timerAttachInterrupt(hw_timer_t * timer, void (*userFunc)(void));
      |      ^~~~~~~~~~~~~~~~~~~~
C:\Users\leich\OneDrive\Dokumente\Arduino\libraries\MobaTools\src\esp32\MoToESP32.cpp:51:9: error: 'timerAlarmWrite' was not declared in this scope; did you mean 'timerWrite'?
   51 |         timerAlarmWrite(stepTimer, ISR_IDLETIME*TICS_PER_MICROSECOND , false); // false = no autoreload );
      |         ^~~~~~~~~~~~~~~
      |         timerWrite
C:\Users\leich\OneDrive\Dokumente\Arduino\libraries\MobaTools\src\esp32\MoToESP32.cpp:52:9: error: 'timerAlarmEnable' was not declared in this scope; did you mean 'timerAlarm'?
   52 |         timerAlarmEnable(stepTimer);
      |         ^~~~~~~~~~~~~~~~
      |         timerAlarm

Das sind Fehler beim Aufruf aus den Hardware Ordner.

Hat du auch die Hardware-Hilfs-Treiber in der Arduino IDE installiert.

Und auch das ESP32 ** Board angemeldet. Wenn JA, dann steht das bei der 2.* IDE unten Rechts in der Ecke.

Spiel mal Blinki auf den ESP32 und sage ob das funktioniert.

Lt. Github laufen die Mobatools mit den ESP-Teilen.

Was mir noch aufgefallen ist. Der ruft die Libs aus "Dokumenten" auf.

Mach mal folgendes. Klicke auf Einstellungen. Da ist ein Pfad angegeben.
In diese Pfad muss der Ordner "libraries" sein. In den Ordner "libraries" sollte der Ordner Mobatools sein.

Ansonsten findet der Compiler die nicht.

Gruß

Pucki

Ohne den Sketch ist das nur Wahrsagen.
Zeig mal den Code, damit man eine Chance hat das nachzuvollziehen.
Die verstümmelte Meldung ist dafür nicht geeignet.

Kannst die mir mall zeigen?
Da zu, ich sehe keine Meldung wo sich der Compiler beschwert das er irgend was nicht findet.

Das ist meine Bezeichnung für die Board-Treiber die unter HARDWARE im Arduino-Ordner installiert werden.

HILFS-Treiber deshalb weil sie nicht (bei Windows) als Systemtreiber installiert werden.

Sonst verwechselt das noch einer mit einen "Normalen" Hardware-Treiber (wie ein CH340 Treiber z.b.)

Gruß

Pucki

Schon allein zwei Fehler:
Was Du wie bezeichnest, ist irrelevant.
Und nein, Board-Treiber sind Systemtreiber und gehören zum Betriebssystem.

Für das, was Du meinst, gibt es auch eine entsprechende Definition.

dann mach mich mal schlau.

Gruß

Pucki

Sind sie nicht.

Wenn ich meine Systemsteuerung aufrufe, steht da KEIN ESP32 drin.

Gruß

Pucki

Na ja, das alles hat eine Bezeichnung, oder bist der Meinung das alle wirklich alle müssen Deine Nomenklatur nutzen?

Unsere pucki war doch Win Admin :wink:

Was gefällt Dir an Definition nicht?
Ich kann es nicht ändern, aber es sind nunmal Boardefinitionen.

Jedenfalls bin ich der Meinung das du nur mobben tust, und nix fachliches was mich angeht beiträgst. Sonst hättest du mir dein Superwissen jedenfalls mitgeteilt.

Gruß

Pucki

Da ich das nicht habe tue auch das nicht, ist besser als falsches Halbwissen hier Streuen.
Und wen Du das als mobben abstempelst ist nur Deine Sache.

ist es klug eine Alpha Core Version zu installieren?

bei einer älteren 2.0.14 kompiliert ein Beispiel Stepper Sketch aus der Lib mit einem Wemos Lolin32 mit wenigen Warnings.

am besten einfach mal auf @MicroBahner warten
(und den Kindergarten vorbeiziehen lassen)

1 Like

Nur weil Du es behauptest und die Zusammenhänge nicht verstehst, wird sich daran nichts ändern.
Hinweis: Ein Originaler ARDUINO UNO meldet sich als Arduino UNO und ein Nachbau mit einem anderen Chipsatz benutzt die selben Bordeinstellungen ist aber im Gerätemanager als CH340 what ever zu sehen.

Ich kann nix dafür,dass Du es bis heute nicht geschafft hast die Zusammenhänge zu erlernen, aber bitte schieb Dein Unwissen nicht anderen unter, die dann evtl. den gleichen Mist benutzen und sich wundern, warum sie nicht verstanden werden.

Fachliches für Dich ist vergeudete Zeit, wie man immer noch an Deiner Aussage sieht Spannung wäre mA. Obwohl Dir das fachlich widerlegt wurde. Du bist nun mal lernresistent.

Gruß Tommy

1 Like

Mit der boards.local.txt vom @combie sagt er auch, dass er ein CH340 ist.

Gruß Tommy

Ich hatte die Freude, diese Bibliothek mit einem ESP32 zu testen, was problemlos funktionierte. Allerdings mit "ESP32 Dev Module" und IDE 1.8.19 und ESP32-Core 2.0.14. In dieser Konstellation ist die Kompatibilität also gegeben.

Wenn Du Deine Einstellungen in Richtung meiner Einstellungen veränderst, könntest Du Dich eventuell der Ursache der Fehlermeldungen nähern.

Es wäre durchaus spannend, in diesem deutschsprachigen Teil des Forum mehr über Adafruit Feather ESP32 zu erfahren :slightly_smiling_face:

Hat du auch die Hardware-Hilfs-Treiber in der Arduino IDE installiert.

Welche meinst Du?

Und auch das ESP32 ** Board angemeldet. Wenn JA, dann steht das bei der 2.* IDE unten Rechts in der Ecke.

Meinst Du das:

#include <MobaTools.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeMono9pt7b.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, 4);

const byte stepPin = 13;
const byte dirPin  = 12;
const int stepsPerRev = 400;   // Steps per Revolution ( example with 1/4 microsteps )
//const long  targetPos = 1600;         // stepper moves between 0 and targetpos
int enable = 27;

int Speed;
int Ramp;
int SpeedVal = A3;
int RampVal = A0;
int JoyStick = A4;
int Last = 0;
int LastR = 0;
long NewPos;
long NewPos2;
long OldPos = 0;
long OldPos2 = 0;
long Direction;
int SetZero = 32;
int GoToZero = 14;
long ActualStep;
int SetTarget = 33;
int GoToTarget = 15;
long TargetPosition;
char txtBuf[10];
char txtBuf2[10];
char txtBuf3[10];
char txtBuf4[10];

unsigned long currentMillis;
unsigned long startMillis;
const unsigned long period = 1000;

int cmd = 0;

MoToStepper myStepper ( stepsPerRev, STEPDIR );
MoToTimer stepperPause;                    // Pause between stepper moves
bool stepperRunning;

unsigned long MyTestTimer = 0;                   // Timer-variables MUST be of type unsigned long
const byte    OnBoard_LED = 13;


void setup() {

  Serial.begin(115200);
  myStepper.attach( stepPin, dirPin );
  myStepper.setSpeed( 2000 );  // 60 Rev/Min ( if stepsPerRev is set correctly )
  myStepper.setRampLen( 50 );
  stepperRunning = true;

  pinMode(SpeedVal, INPUT);
  pinMode(SpeedVal, INPUT);
  pinMode(RampVal, INPUT);
  pinMode(JoyStick, INPUT);
  pinMode(enable, OUTPUT);
  pinMode(SetZero, INPUT_PULLUP);
  pinMode(GoToZero, INPUT_PULLUP);
  pinMode(SetTarget, INPUT_PULLUP);
  pinMode(GoToTarget, INPUT_PULLUP);

  digitalWrite(enable, LOW);
  delay(500);


  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3D)) { // Address 0x3D for 128x64
    Serial.println(F("SSD1306 allocation failed"));
    for (;;);
  }
  delay(2000);
  display.clearDisplay();

  //display.setFont(&FreeMono9pt7b);
  display.setTextSize(1.5);
  display.setTextColor(WHITE, BLACK);
  display.setCursor(0, 5);
  display.println("Current:");
  display.setCursor(70, 5);
  display.println("Target:");
  display.setCursor(0, 40);
  display.println("Speed:");
  display.setCursor(70, 40);
  display.println("Ramp:");
  display.display();

  //startMillis = millis();
}


void loop() {



  NewPos = analogRead(SpeedVal);                              // read the Speed Value

  if ((NewPos - OldPos > 10) || (OldPos - NewPos > 10)) {     // only true if position of potentiometer has changed
    Speed = (analogRead(SpeedVal)) * 2;
    myStepper.setSpeed(Speed);
    //Serial.println("Speed:");
    //Serial.println(Speed);
    OldPos = NewPos;
  }

  NewPos2 = analogRead(RampVal);                              // read the Ramp value
  if ((NewPos2 - OldPos2 > 10) || (OldPos2 - NewPos2 > 10)) { // only true if position of potentiometer has changed
    Ramp = (analogRead(RampVal)) * 2;
    myStepper.setRampLen(Ramp);
    OldPos2 = NewPos2;
  }

  Direction = analogRead(JoyStick);                           //read the X axis of the joystick

  if (Direction <= 100) {                                   // Clockwise
    cmd = 1;
  }
  if (Direction >= 900) {                                   // Clockwise
    cmd = 2;
  }

  if (Direction <= 500 && Direction > 50) {                                   // Clockwise
    cmd = 3;
  }
  else if (Direction >= 520 && Direction < 950) {                              // Counterclockwise
    cmd = 4;
  }
  else if (Direction > 500 && Direction < 520) {            // stop the stepper
    cmd = 5;
  }

  if ((digitalRead(SetZero)) == LOW) {
    cmd = 6;
  }

  if ((digitalRead(SetTarget)) == LOW) {
    cmd = 7;
  }

  if ((digitalRead(GoToZero)) == LOW) {
    cmd = 8;
  }

  if ((digitalRead(GoToTarget)) == LOW) {
    cmd = 9;
  }



  switch (cmd) {

    case 1:                                   // move the stepper CW infinitively (Freerun Mode)
      myStepper.setSpeed(Speed);
      myStepper.setRampLen(0);
      myStepper.rotate(1);
      break;

    case 2:                                   // move the stepper CCW infinitively (Freerun Mode)
      myStepper.setSpeed(Speed);
      myStepper.setRampLen(0);
      myStepper.rotate(-1);
      break;

    case 3:                                   // move the stepper CW infinitively (Freerun Mode)
      myStepper.setSpeed(Speed/4);
      myStepper.setRampLen(0);
      myStepper.rotate(1);
      break;

    case 4:                                   // move the stepper CCW infinitively (Freerun Mode)
      myStepper.setSpeed(Speed/4);
      myStepper.setRampLen(0);
      myStepper.rotate(-1);
      break;


    case 5:                                   // stop the stepper
      myStepper.stop();
      break;

    case 6:                                   // set actual position to zero
      myStepper.setZero(0);
      break;

    case 7:                                   // set target position
      TargetPosition = myStepper.read();
      break;

    case 8:                                   // move to zero position

      myStepper.setSpeed(Speed);
      myStepper.setRampLen(Ramp);
      myStepper.write(0);
      while (myStepper.moving());
      break;

    case 9:                                   // move to target position
      myStepper.setSpeed(Speed);
      myStepper.setRampLen(Ramp);
      myStepper.write(TargetPosition);
      while (myStepper.moving());
      break;

    default:  //
      
      break;
  }

  if (Speed != Last) {
    //myStepper.setSpeed(Speed);
    display.setTextColor(WHITE, BLACK);
    display.setCursor(0, 50);
    sprintf(txtBuf, "%4d", Speed );
    display.println(txtBuf);
    display.display();
    Last = Speed;
  }

  if (Ramp != LastR) {
    //myStepper.setRampLen(Ramp);
    display.setTextColor(WHITE, BLACK);
    display.setCursor(70, 50);
    sprintf(txtBuf2, "%4d", Ramp );
    display.print(txtBuf2);
    display.display();
    LastR = Ramp;
  }

  currentMillis = millis();

  if (currentMillis - startMillis >= period) {
    display.setTextColor(WHITE, BLACK);
    display.setCursor(0, 20);
    long CurrentStep = myStepper.read();
    sprintf(txtBuf3, "%5ld", CurrentStep);
    display.println(txtBuf3);
    display.setCursor(70, 20);
    sprintf(txtBuf4, "%5ld", TargetPosition );
    display.println(txtBuf4);
    display.display();
    startMillis = currentMillis;
  }
}