An Electric Scooter Community on a Mission to Stamp out Transportation Mediocrity.

Changing mobility one trip at a time.
#18374
Hey All
It's sharing time. I have an upgraded debugged ESP32 version. It's working great, its got bluetooth to your phone. It should work with the Android and iPhone through the RemoteXY app. It also has a feature to allow test commands in decimal format. So you can test out all of the features that have been unlocked. It is so much easier to ride around with a phone and test the commands out. You will need to down load FastCRC Library and the RemoteXY Library for the ESP32. This is only compatible with the ESP32 not the Nano. So good Luck with unlocking your scooters. I will be adding a complete set of libraries and files to my Hackaday.io
Code: Select all
/*
   -- Scooter Freedom --

   This source code of graphical user interface
   has been generated automatically by RemoteXY editor.
   To compile this code using RemoteXY library 2.4.3 or later version
   download by link http://remotexy.com/en/library/
   To connect using RemoteXY mobile app by link http://remotexy.com/en/download/
     - for ANDROID 4.3.1 or later version;
     - for iOS 1.3.5 or later version;

   This source code is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.
*/

//////////////////////////////////////////////
//        RemoteXY include library          //
//////////////////////////////////////////////

// RemoteXY select connection mode and include library
#define REMOTEXY_MODE__ESP32CORE_BLE

#include <RemoteXY.h>
#include <FastCRC.h>

// RemoteXY connection settings
#define REMOTEXY_BLUETOOTH_NAME "Scoot_Free"


// RemoteXY configurate
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =
  { 255,3,0,2,0,64,0,8,13,1,
  2,1,20,82,22,11,2,26,31,31,
  79,78,0,79,70,70,0,7,52,21,
  61,20,5,2,26,2,65,4,16,37,
  9,9,65,1,37,37,9,9,129,0,
  9,19,49,6,17,83,99,111,111,116,
  101,114,32,70,114,101,101,100,111,109,
  0 };

// this structure defines all the variables of your control interface
struct {

    // input variable
  uint8_t switch_1; // =1 if switch ON and =0 if OFF
  int16_t edit_1;  // −32767.. +32767

    // output variable
  uint8_t led_1_r; // =0..255 LED Red brightness
  uint8_t led_2_b; // =0..255 LED Blue brightness

    // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0

} RemoteXY;
#pragma pack(pop)

/////////////////////////////////////////////
//           END RemoteXY include          //
/////////////////////////////////////////////

#define PIN_SWITCH_1 13

////////////////////////////////////////////
//         Scooter Starter include        //
///////////////////////////////////////////
#define INTERVAL 1000
unsigned long start_time = 0;
int run_once = 0;

byte messageOff[] = {0xA6, 0x12, 0x02, 0x10, 0x14, 0xCF}; //If the scooter is on turn it off.
byte messageB[] = {0xA6, 0x12, 0x02, 0x11, 0x14, 0x0B}; //Not sure what this does?
byte messageStart[] = {0xA6, 0x12, 0x02, 0x15, 0x14, 0x30}; //This is the unlock code.


////////////////////////////////////////////
//         Scooter Command include        //
///////////////////////////////////////////
FastCRC8 CRC8; //Checksum Library
uint32_t crc;

byte commandByte = 0; // for incoming BLE data
byte commandbyteOld = 0; // last incoming BLE data

uint8_t buf[] = {0xA6, 0x12, 0x02, 0x00, 0x14, 0x00};
#define BUFSIZE 5

void setup()
{
  RemoteXY_Init ();

  Serial.begin(9600);
  Serial1.begin(9600);

  pinMode (PIN_SWITCH_1, OUTPUT);

  Serial1.write(messageOff, sizeof(messageOff));
  delay(500);
  Serial1.write(messageStart, sizeof(messageStart));

}

void loop()
{
  RemoteXY_Handler ();

  //digitalWrite(PIN_SWITCH_1, (RemoteXY.switch_1==0)?LOW:HIGH);
  digitalWrite(PIN_SWITCH_1, HIGH);

   if(RemoteXY.switch_1 == 1){
    if(millis() > start_time + INTERVAL){
        start_time = millis();
        Serial1.write(messageStart, sizeof(messageStart));
        run_once = 0;
      }
    RemoteXY.led_1_r = 255;
    }
    else{
      RemoteXY.led_1_r = 0;
      if (run_once == 0){
      Serial1.write(messageOff, sizeof(messageOff));
      run_once = 1;
      }
    }
   Serial.print(RemoteXY.switch_1);
   Serial.print(" ");
   Serial.print(RemoteXY.led_1_r);
   Serial.print(" ");
   Serial.println(RemoteXY.connect_flag);

   if(RemoteXY.connect_flag == 1){ //BLE connection indication for the smartphone;
    RemoteXY.led_2_b = 255;
    }
    else{
      RemoteXY.led_2_b = 0;
    }

   commandByte = RemoteXY.edit_1;  //
     if (commandByte != commandbyteOld)
     {
      buf[3] = commandByte;
      crc = CRC8.maxim(buf, BUFSIZE); //CRC-8 MAXIM Check Sum Calculator
      buf[5] = crc;
      delay(400);
      Serial1.write(buf, sizeof(buf));
      delay(400);
      Serial1.write(buf, sizeof(buf));
      commandbyteOld = commandByte;
     }

}
#18376
Loxe420 wrote:
Sun Dec 22, 2019 10:11 pm
Hello guys, i tried several Versions of the arduino scripts from this thread here on the e-200g with everything correctly wired but the Only thing they do is activate the rear + front lights and showing 15e or 06e in the display and the scooters brake is active..does somebody has an idea?😅

Image
Hello everyone.

Congratulations for the excellent work you have done.

I have an ES-100, has the display always on with battery information. When I call Arduino I get the same message as my friend Loxe420. 06E

The only way I had to turn off the display was to remove the 30A fuse.

May I have some wiring badly connected to the display does not turn off?

Thank you
#18377
Zoki wrote:
Mon Dec 23, 2019 6:32 am
thisisstan85 wrote:
Wed Dec 18, 2019 3:18 am
For everyone struggling to convert the power down to 5v.

Remove the simcard from the gps.

Cut green, yellow and blue from the gps julet cable but leave black and red (gnd and power) connected to gps.

Now solder extra red Wire to pad marked "bat 5v" on the gps board. There are plenty of "gnd" pads on the gps board. Solder extra black wire to one of those.

Now connect the Green, yellow and blue wire according to instructions in this thread to the Arduino. Next solder the two extra wires (red and black) according to the instructions in this thread.

The battery will power the gps board and the board Will power the Arduino with correct voltage.Image
Image

Hey @thisisstan85 could you upload your first image again, it's not loading.
or if you could take photo of your wiring.

Thanks :P
Is this the Es200A?
#18381
MrSpriggs1 wrote:
Mon Dec 23, 2019 1:01 pm
Hey All
It's sharing time. I have an upgraded debugged ESP32 version. It's working great, its got bluetooth to your phone. It should work with the Android and iPhone through the RemoteXY app. It also has a feature to allow test commands in decimal format. So you can test out all of the features that have been unlocked. It is so much easier to ride around with a phone and test the commands out. You will need to down load FastCRC Library and the RemoteXY Library for the ESP32. This is only compatible with the ESP32 not the Nano. So good Luck with unlocking your scooters. I will be adding a complete set of libraries and files to my Hackaday.io
Code: Select all
/*
   -- Scooter Freedom --

   This source code of graphical user interface
   has been generated automatically by RemoteXY editor.
   To compile this code using RemoteXY library 2.4.3 or later version
   download by link http://remotexy.com/en/library/
   To connect using RemoteXY mobile app by link http://remotexy.com/en/download/
     - for ANDROID 4.3.1 or later version;
     - for iOS 1.3.5 or later version;

   This source code is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.
*/

//////////////////////////////////////////////
//        RemoteXY include library          //
//////////////////////////////////////////////

// RemoteXY select connection mode and include library
#define REMOTEXY_MODE__ESP32CORE_BLE

#include <RemoteXY.h>
#include <FastCRC.h>

// RemoteXY connection settings
#define REMOTEXY_BLUETOOTH_NAME "Scoot_Free"


// RemoteXY configurate
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =
  { 255,3,0,2,0,64,0,8,13,1,
  2,1,20,82,22,11,2,26,31,31,
  79,78,0,79,70,70,0,7,52,21,
  61,20,5,2,26,2,65,4,16,37,
  9,9,65,1,37,37,9,9,129,0,
  9,19,49,6,17,83,99,111,111,116,
  101,114,32,70,114,101,101,100,111,109,
  0 };

// this structure defines all the variables of your control interface
struct {

    // input variable
  uint8_t switch_1; // =1 if switch ON and =0 if OFF
  int16_t edit_1;  // −32767.. +32767

    // output variable
  uint8_t led_1_r; // =0..255 LED Red brightness
  uint8_t led_2_b; // =0..255 LED Blue brightness

    // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0

} RemoteXY;
#pragma pack(pop)

/////////////////////////////////////////////
//           END RemoteXY include          //
/////////////////////////////////////////////

#define PIN_SWITCH_1 13

////////////////////////////////////////////
//         Scooter Starter include        //
///////////////////////////////////////////
#define INTERVAL 1000
unsigned long start_time = 0;
int run_once = 0;

byte messageOff[] = {0xA6, 0x12, 0x02, 0x10, 0x14, 0xCF}; //If the scooter is on turn it off.
byte messageB[] = {0xA6, 0x12, 0x02, 0x11, 0x14, 0x0B}; //Not sure what this does?
byte messageStart[] = {0xA6, 0x12, 0x02, 0x15, 0x14, 0x30}; //This is the unlock code.


////////////////////////////////////////////
//         Scooter Command include        //
///////////////////////////////////////////
FastCRC8 CRC8; //Checksum Library
uint32_t crc;

byte commandByte = 0; // for incoming BLE data
byte commandbyteOld = 0; // last incoming BLE data

uint8_t buf[] = {0xA6, 0x12, 0x02, 0x00, 0x14, 0x00};
#define BUFSIZE 5

void setup()
{
  RemoteXY_Init ();

  Serial.begin(9600);
  Serial1.begin(9600);

  pinMode (PIN_SWITCH_1, OUTPUT);

  Serial1.write(messageOff, sizeof(messageOff));
  delay(500);
  Serial1.write(messageStart, sizeof(messageStart));

}

void loop()
{
  RemoteXY_Handler ();

  //digitalWrite(PIN_SWITCH_1, (RemoteXY.switch_1==0)?LOW:HIGH);
  digitalWrite(PIN_SWITCH_1, HIGH);

   if(RemoteXY.switch_1 == 1){
    if(millis() > start_time + INTERVAL){
        start_time = millis();
        Serial1.write(messageStart, sizeof(messageStart));
        run_once = 0;
      }
    RemoteXY.led_1_r = 255;
    }
    else{
      RemoteXY.led_1_r = 0;
      if (run_once == 0){
      Serial1.write(messageOff, sizeof(messageOff));
      run_once = 1;
      }
    }
   Serial.print(RemoteXY.switch_1);
   Serial.print(" ");
   Serial.print(RemoteXY.led_1_r);
   Serial.print(" ");
   Serial.println(RemoteXY.connect_flag);

   if(RemoteXY.connect_flag == 1){ //BLE connection indication for the smartphone;
    RemoteXY.led_2_b = 255;
    }
    else{
      RemoteXY.led_2_b = 0;
    }

   commandByte = RemoteXY.edit_1;  //
     if (commandByte != commandbyteOld)
     {
      buf[3] = commandByte;
      crc = CRC8.maxim(buf, BUFSIZE); //CRC-8 MAXIM Check Sum Calculator
      buf[5] = crc;
      delay(400);
      Serial1.write(buf, sizeof(buf));
      delay(400);
      Serial1.write(buf, sizeof(buf));
      commandbyteOld = commandByte;
     }

}

Hello, good evening,
can you please give me the connection plan for the esp32 pinout

greetings Stefan

Merry Christmas
#18387
Hey my Glip Glops, ol grandpa Rick C-137 is back. Merry f**king christmas "buuurrrrb". I was stuck on Gazorpazorp with no juice left on my portalgun while I had a "buuurrrrbb" breakthrough on one of the first readout that was plausible decoding from the ES400 (that is quite hard to find on foreign planets ;) )
Image
In the pic you can see a "burrrrbb" pack of 42 bytes in the boot process of the IOT board communicating down to the ESC. Surprisingly it is not CAN like we expected it is still UART with 9,6kbit/s. In the next days I might hit on the next herd of "buuuuuuuurrrbb" ES400s with my travelling laboratory and with enough time to start the readout of the unlock and lock sequence, so keep beeing horny for that :mrgreen:
AND NOW ENJOY YOUR PRESENTS, TO BE DRUNK AND TO KICK THE ASSES OF YOUR JERRIES :D
Last edited by Rick Sanchez on Tue Dec 24, 2019 1:50 am, edited 2 times in total.
#18388
@Loxe420 E15 and E6 are failurecodes for Electisan scooters and both are pointing on a failing line on the motor. (broken mosfet/solder joint in the ESC or a broken/shorted motor winding or a broken hall sensor) Typically in cases like that the scooter makes a short twitching impulse when activating and when beeing pushed under activation the motor movement gives a rippely feedback. You have to disassemble your scooter and measure for the failure, sorry buddy
#18394
I will write up a bit of info after the X-mas has ended, bah humbug
glub,glub burp
Hey dude, puff puff pass...
lipoly wrote:
Mon Dec 23, 2019 8:13 pm
MrSpriggs1 wrote:
Mon Dec 23, 2019 1:01 pm
Hey All
It's sharing time. I have an upgraded debugged ESP32 version. It's working great, its got bluetooth to your phone. It should work with the Android and iPhone through the RemoteXY app. It also has a feature to allow test commands in decimal format. So you can test out all of the features that have been unlocked. It is so much easier to ride around with a phone and test the commands out. You will need to down load FastCRC Library and the RemoteXY Library for the ESP32. This is only compatible with the ESP32 not the Nano. So good Luck with unlocking your scooters. I will be adding a complete set of libraries and files to my Hackaday.io
Code: Select all
/*
   -- Scooter Freedom --

   This source code of graphical user interface
   has been generated automatically by RemoteXY editor.
   To compile this code using RemoteXY library 2.4.3 or later version
   download by link http://remotexy.com/en/library/
   To connect using RemoteXY mobile app by link http://remotexy.com/en/download/
     - for ANDROID 4.3.1 or later version;
     - for iOS 1.3.5 or later version;

   This source code is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.
*/

//////////////////////////////////////////////
//        RemoteXY include library          //
//////////////////////////////////////////////

// RemoteXY select connection mode and include library
#define REMOTEXY_MODE__ESP32CORE_BLE

#include <RemoteXY.h>
#include <FastCRC.h>

// RemoteXY connection settings
#define REMOTEXY_BLUETOOTH_NAME "Scoot_Free"


// RemoteXY configurate
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =
  { 255,3,0,2,0,64,0,8,13,1,
  2,1,20,82,22,11,2,26,31,31,
  79,78,0,79,70,70,0,7,52,21,
  61,20,5,2,26,2,65,4,16,37,
  9,9,65,1,37,37,9,9,129,0,
  9,19,49,6,17,83,99,111,111,116,
  101,114,32,70,114,101,101,100,111,109,
  0 };

// this structure defines all the variables of your control interface
struct {

    // input variable
  uint8_t switch_1; // =1 if switch ON and =0 if OFF
  int16_t edit_1;  // −32767.. +32767

    // output variable
  uint8_t led_1_r; // =0..255 LED Red brightness
  uint8_t led_2_b; // =0..255 LED Blue brightness

    // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0

} RemoteXY;
#pragma pack(pop)

/////////////////////////////////////////////
//           END RemoteXY include          //
/////////////////////////////////////////////

#define PIN_SWITCH_1 13

////////////////////////////////////////////
//         Scooter Starter include        //
///////////////////////////////////////////
#define INTERVAL 1000
unsigned long start_time = 0;
int run_once = 0;

byte messageOff[] = {0xA6, 0x12, 0x02, 0x10, 0x14, 0xCF}; //If the scooter is on turn it off.
byte messageB[] = {0xA6, 0x12, 0x02, 0x11, 0x14, 0x0B}; //Not sure what this does?
byte messageStart[] = {0xA6, 0x12, 0x02, 0x15, 0x14, 0x30}; //This is the unlock code.


////////////////////////////////////////////
//         Scooter Command include        //
///////////////////////////////////////////
FastCRC8 CRC8; //Checksum Library
uint32_t crc;

byte commandByte = 0; // for incoming BLE data
byte commandbyteOld = 0; // last incoming BLE data

uint8_t buf[] = {0xA6, 0x12, 0x02, 0x00, 0x14, 0x00};
#define BUFSIZE 5

void setup()
{
  RemoteXY_Init ();

  Serial.begin(9600);
  Serial1.begin(9600);

  pinMode (PIN_SWITCH_1, OUTPUT);

  Serial1.write(messageOff, sizeof(messageOff));
  delay(500);
  Serial1.write(messageStart, sizeof(messageStart));

}

void loop()
{
  RemoteXY_Handler ();

  //digitalWrite(PIN_SWITCH_1, (RemoteXY.switch_1==0)?LOW:HIGH);
  digitalWrite(PIN_SWITCH_1, HIGH);

   if(RemoteXY.switch_1 == 1){
    if(millis() > start_time + INTERVAL){
        start_time = millis();
        Serial1.write(messageStart, sizeof(messageStart));
        run_once = 0;
      }
    RemoteXY.led_1_r = 255;
    }
    else{
      RemoteXY.led_1_r = 0;
      if (run_once == 0){
      Serial1.write(messageOff, sizeof(messageOff));
      run_once = 1;
      }
    }
   Serial.print(RemoteXY.switch_1);
   Serial.print(" ");
   Serial.print(RemoteXY.led_1_r);
   Serial.print(" ");
   Serial.println(RemoteXY.connect_flag);

   if(RemoteXY.connect_flag == 1){ //BLE connection indication for the smartphone;
    RemoteXY.led_2_b = 255;
    }
    else{
      RemoteXY.led_2_b = 0;
    }

   commandByte = RemoteXY.edit_1;  //
     if (commandByte != commandbyteOld)
     {
      buf[3] = commandByte;
      crc = CRC8.maxim(buf, BUFSIZE); //CRC-8 MAXIM Check Sum Calculator
      buf[5] = crc;
      delay(400);
      Serial1.write(buf, sizeof(buf));
      delay(400);
      Serial1.write(buf, sizeof(buf));
      commandbyteOld = commandByte;
     }

}

Hello, good evening,
can you please give me the connection plan for the esp32 pinout

greetings Stefan

Merry Christmas
#18398
PTbig wrote:
Mon Dec 23, 2019 1:39 pm
Loxe420 wrote:
Sun Dec 22, 2019 10:11 pm
Hello guys, i tried several Versions of the arduino scripts from this thread here on the e-200g with everything correctly wired but the Only thing they do is activate the rear + front lights and showing 15e or 06e in the display and the scooters brake is active..does somebody has an idea?
Here are the only error codes I have found. I get a 12e on start up for a few seconds and another ES4 scooter gets a really annoying 42 That beeps over and over

Diagnostic Codes
01E ~ High current protect
02E ~ Low voltage protect (battery or cHigh current protect)
03E ~ High voltage protect (controller problem)
04E ~ Locked motor protect
05E ~ Controller problem (MOS burned)
06E ~ Controller problem
07E ~ Motor problem
08E ~ Motor OT
09E ~ Throttle problem
10E ~ Brake problem (Usually broken brake lever)
11E ~ Signal transmission problem (controller problem)
12E ~ me, Signal transmission problem (controller problem)
  • 1
  • 16
  • 17
  • 18
  • 19
  • 20
  • 76

Did you use the 25km/h Firmware ? Obviosly not..

For anyone interested: I've created an app with […]

Hi! I am from Germany and I have a myTier ES200D-B[…]

There are many advantages of a web software soluti[…]