# Webcontroller with multiple dual motors

**URL:** https://community.simplefoc.com/t/webcontroller-with-multiple-dual-motors/7986
**Category:** developement
**Tags:** webcontroller, esp32
**Created:** [February 10, 2026, 2:47pm UTC](https://community.simplefoc.com/t/webcontroller-with-multiple-dual-motors/7986 "2026-02-10T14:47:56Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![OiD-W](https://community.simplefoc.com/user_avatar/community.simplefoc.com/oid-w/32/5431_2.png) [@OiD-W](https://community.simplefoc.com/u/OiD-W)
#### Post date: [February 10, 2026, 2:47pm UTC](https://community.simplefoc.com/t/webcontroller-with-multiple-dual-motors/7986/1 "2026-02-10T14:47:56Z")

</div>

Hi again!

I’m trying to get two motors to show up in the Webcontroller but i can only get one or the other to work.  
I can’t find any examples of two motors being used in the Webcontroller.

Here is the code I’m using:

```auto
Commander command0 = Commander(Serial);
Commander command1 = Commander(Serial);
void doMotor0(char* cmd){command0.motor(&motor0, cmd);}
void doMotor1(char* cmd){command1.motor(&motor1, cmd);}

void setup() {
  SimpleFOCDebug::enable(&Serial);

  char motor0_id = 'L';
  command0.add(motor0_id,doMotor0,"motor0");
  char motor1_id = 'R';
  command1.add(motor1_id,doMotor1,"motor1");

  motor1.useMonitoring(Serial);
  motor1.monitor_start_char = motor1_id;
  motor1.monitor_end_char = motor1_id;
  command1.verbose = VerboseMode::machine_readable;

  motor0.useMonitoring(Serial);
  motor0.monitor_start_char = motor0_id;
  motor0.monitor_end_char = motor0_id;
  command0.verbose = VerboseMode::machine_readable;

  motor0.monitor_variables = _MON_TARGET | _MON_VEL | _MON_ANGLE | _MON_TARGET | _MON_VOLT_Q | _MON_VEL | _MON_ANGLE;
  motor0.monitor_downsample = 10;
  motor1.monitor_variables = _MON_TARGET | _MON_VEL | _MON_ANGLE | _MON_TARGET | _MON_VOLT_Q | _MON_VEL | _MON_ANGLE;
  motor1.monitor_downsample = 10;
}

void loop() {
  motor0.loopFOC();
  motor1.loopFOC();

  motor0.move(2);
  motor1.move(2);

  motor0.monitor();
  motor1.monitor();

  command0.run();
  command1.run();
}

```

Is there anything I’m missing to have more than one motor?

Thanks 💚

---

<div class="post-metadata">

### Author: ![Antun\_Skuric](https://community.simplefoc.com/user_avatar/community.simplefoc.com/antun_skuric/32/21_2.png) [@Antun\_Skuric](https://community.simplefoc.com/u/Antun_Skuric)
#### Post date: [February 14, 2026, 5:25am UTC](https://community.simplefoc.com/t/webcontroller-with-multiple-dual-motors/7986/2 "2026-02-14T05:25:59Z")

</div>

Hmm, are they discovered by the webcontroller?  
Or you don’t see them at all?

Maybe try using “motor 0” and “motor 1” in the `commander.add`.  
Webcontroller relies on the keyword “motor” to discover the motors, so with “motor1” it’s not well parsed.

---

<div class="post-metadata">

### Author: ![OiD-W](https://community.simplefoc.com/user_avatar/community.simplefoc.com/oid-w/32/5431_2.png) [@OiD-W](https://community.simplefoc.com/u/OiD-W)
#### Post date: [February 15, 2026, 2:55am UTC](https://community.simplefoc.com/t/webcontroller-with-multiple-dual-motors/7986/3 "2026-02-15T02:55:47Z")

</div>

Hi @Antun_Skuric  
Thanks for that tip. I changed it to “motor x” and instead of having two commanders i set both motors to the same commander`command0` and removed `command1` :

```auto
Commander command0 = Commander(Serial);
void doMotor0(char* cmd){command0.motor(&motor0, cmd);}
void doMotor1(char* cmd){command0.motor(&motor1, cmd);}

void setup() {
  SimpleFOCDebug::enable(&Serial);

  char motor0_id = 'L';
  command0.add(motor0_id,doMotor0,"motor0");
  char motor1_id = 'R';
  command0.add(motor1_id,doMotor1,"motor 1");

  motor1.useMonitoring(Serial);
  motor1.monitor_start_char = motor1_id;
  motor1.monitor_end_char = motor1_id;

  motor0.useMonitoring(Serial);
  motor0.monitor_start_char = motor0_id;
  motor0.monitor_end_char = motor0_id;
  command0.verbose = VerboseMode::machine_readable;

  motor0.monitor_variables = _MON_TARGET | _MON_VEL | _MON_ANGLE | _MON_TARGET | _MON_VOLT_Q | _MON_VEL | _MON_ANGLE;
  motor0.monitor_downsample = 10;
  motor1.monitor_variables = _MON_TARGET | _MON_VEL | _MON_ANGLE | _MON_TARGET | _MON_VOLT_Q | _MON_VEL | _MON_ANGLE;
  motor1.monitor_downsample = 10;
}

void loop() {
  motor0.loopFOC();
  motor1.loopFOC();

  motor0.move(2);
  motor1.move(2);

  motor0.monitor();
  motor1.monitor();

  command0.run();
}

```

Will continue when i have time but finally it looks like i can start tuning both motors :3

Thanks!
