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

Changing mobility one trip at a time.
#17950
MrSpriggs1 wrote:
Fri Dec 06, 2019 5:29 pm
So after a bunch of time painting my new pretty scooter.
I found out you only need these 5 hex numbers to make it light up and go. Now how do you go fast?
Code: Select all
#include <Arduino.h>

int powerPin = 5;
byte messageA[] = {0xA6, 0x12, 0x02, 0x10, 0x14, 0xCF};
byte messageB[] = {0xA6, 0x12, 0x02, 0x11, 0x14, 0x0B};
byte messageC[] = {0xA6, 0x12, 0x02, 0x15, 0x14, 0x30};

void setup() {
  // initialize Serial1:
  Serial1.begin(9600);

  pinMode(powerPin, OUTPUT);
  digitalWrite(powerPin, HIGH);

}

void loop() {
  delay(500);
  Serial1.write(messageC, sizeof(messageC));
}
This works so far on VOI ES-100D! Thank you very much.
#17951
Ok found out a little bit more. I fiddled with the Hex code the Basti plug of his scooter's GPS and there is an off code. I haven't written it into anything useful yet. Here's my sample on/off code.

#include <Arduino.h>

int powerPin = 5;
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 yet. It came with Basti's code.
byte messageStart[] = {0xA6, 0x12, 0x02, 0x15, 0x14, 0x30}; //This is the unlock code.

void setup() {
// initialize Serial:
Serial.begin(9600);

pinMode(powerPin, OUTPUT);
digitalWrite(powerPin, HIGH);

Serial.write(messageStart, sizeof(messageStart));
}

void loop() {

delay(1000);
Serial.write(messageStart, sizeof(messageStart));
pinMode(powerPin, INPUT); //Set to Hi-Z not needed after scooter starts
delay(5000);
Serial.write(messageOff, sizeof(messageOff));
}
#17959
MrSpriggs1 wrote:
Fri Dec 06, 2019 10:37 pm
Well, I see my mistake Im working with an Adafruit feather M0 not a Nano. You might want to remove the one from Serial1. Here is a correction below. Im not going to make any promises but hopefully it might help. You might have to get a logic analyzer and hook up to the GPS
electricool wrote:
Fri Dec 06, 2019 7:34 pm
MrSpriggs1 wrote:
Fri Dec 06, 2019 5:29 pm
So after a bunch of time painting my new pretty scooter.
I found out you only need these 5 hex numbers to make it light up and go. Now how do you go fast?
Code: Select all
#include <Arduino.h>

int powerPin = 5;
byte messageA[] = {0xA6, 0x12, 0x02, 0x10, 0x14, 0xCF};
byte messageB[] = {0xA6, 0x12, 0x02, 0x11, 0x14, 0x0B};
byte messageC[] = {0xA6, 0x12, 0x02, 0x15, 0x14, 0x30};

void setup() {
  // initialize Serial:
  Serial.begin(9600);

  pinMode(powerPin, OUTPUT);
  digitalWrite(powerPin, HIGH);

}

void loop() {
  delay(500);
  Serial.write(messageC, sizeof(messageC));
}
hello and thank you for sharing the result of your work, I wanted to know on which ESC you used this code, I have a ESC100 of the company bird but it does not work on

thank you and good luck
Hello and thank you for having your solution
I encounter a problem, I wanted to test your code on an arduino uno on which I solder the wire: blue 3v3 the black GND and green on the pin D5, I have a bird zero ESC100
I transfer your code on the arduino I can see the LED flashed TX but the bird remains dormant, you could look if I made no mistake on the wiring please
I thank you very much
Image
#17964
electricool wrote:
Sat Dec 07, 2019 7:23 pm
MrSpriggs1 wrote:
Fri Dec 06, 2019 10:37 pm
Well, I see my mistake Im working with an Adafruit feather M0 not a Nano. You might want to remove the one from Serial1. Here is a correction below. Im not going to make any promises but hopefully it might help. You might have to get a logic analyzer and hook up to the GPS
electricool wrote:
Fri Dec 06, 2019 7:34 pm


hello and thank you for sharing the result of your work, I wanted to know on which ESC you used this code, I have a ESC100 of the company bird but it does not work on

thank you and good luck
Hello and thank you for having your solution
I encounter a problem, I wanted to test your code on an arduino uno on which I solder the wire: blue 3v3 the black GND and green on the pin D5, I have a bird zero ESC100
I transfer your code on the arduino I can see the LED flashed TX but the bird remains dormant, you could look if I made no mistake on the wiring please
I thank you very much
Image
The setup is wrong. The blue wire is on its right place. Solder the yellow wire to the RX0 and the green wire to the TX1. The black wire actually you don’t need - you can unplug it.
#17968
Marius Petz wrote:
Sat Dec 07, 2019 9:04 pm
electricool wrote:
Sat Dec 07, 2019 7:23 pm
MrSpriggs1 wrote:
Fri Dec 06, 2019 10:37 pm
Well, I see my mistake Im working with an Adafruit feather M0 not a Nano. You might want to remove the one from Serial1. Here is a correction below. Im not going to make any promises but hopefully it might help. You might have to get a logic analyzer and hook up to the GPS

Hello and thank you for having your solution
I encounter a problem, I wanted to test your code on an arduino uno on which I solder the wire: blue 3v3 the black GND and green on the pin D5, I have a bird zero ESC100
I transfer your code on the arduino I can see the LED flashed TX but the bird remains dormant, you could look if I made no mistake on the wiring please
I thank you very much
Image
The setup is wrong. The blue wire is on its right place. Solder the yellow wire to the RX0 and the green wire to the TX1. The black wire actually you don’t need - you can unplug it.
Hello and thank you for answering me, I work on a bird but with very little means, I followed the wiring diagram of BASTI256 that I thank in passing for his work
  To react the bird but without success, my bird will turn into raven soon 😊, in the code a var is declared on the port 5 that's why I solder my TX on, I tried your connection but I'm not reporting either, I have an ESC100 from BIRD and I use the code of a forum contributor
Code: Select all
#include <Arduino.h>

int powerPin = 5;
byte messageA[] = {0xA6, 0x12, 0x02, 0x10, 0x14, 0xCF};
byte messageB[] = {0xA6, 0x12, 0x02, 0x11, 0x14, 0x0B};
byte messageC[] = {0xA6, 0x12, 0x02, 0x15, 0x14, 0x30};

void setup() {
  // initialize Serial1:
  Serial1.begin(9600);

  pinMode(powerPin, OUTPUT);
  digitalWrite(powerPin, HIGH);

}

void loop() {
  delay(500);
  Serial1.write(messageC, sizeof(messageC));
}


#17971
Before I gonna open a new thread for it, do we have some CAN experts here? Today a lonely ES400 in a dark corner crossed old grandpa Ricks way and I happened to do a first sneaky scan on its BUS we supposed to be CAN. Looks like it is CAN for real due to the fact I found 2 signals working inversed to each other and with different high/low specs but what surprised me is that I found packets going for 100µS per bit (aka 10khz) while other packets go for 20µS per bit (aka 50 khz) and every shot I tried translates into a lot of errors on both packet types. My first theory was that they may copied the analogy of CANs signal structure as an differential readout and stuffed it with any other protocol but none of Digilents Digital Discovery decoders did a proper readout and due to the limitations of the Digital Discovery that just allows a logic and threshold level to be adjusted for all channels in common I just got a proper record of the CAN high signal. I'll go for a next run as soon I designed a little adaptor fitting the CAN low signal into something that fits the general threshold level adjustment with opamps and as soon as I repaired the scope in my RV because I had to notice that its NVram battery died while standing around in the attic what took all calibration data to Valhalla and making it impossible to make a new calibration :x .......if anyone got a working Dallas 1235 laying around collecting dust before I dremel my one to get this antique battery out of the chip (even when I like massive overconstructions like a Dallas NVRAM/RTC modded with a piggypacked 26650 cell on its back limited by a serial 1N4148 Diode :lol: ) or got some hints to the the problems I was chatting above please let me know :?
Last edited by Rick Sanchez on Sun Dec 08, 2019 1:25 am, edited 2 times in total.
#17972
Pata27 wrote:
Fri Nov 29, 2019 11:41 am
Hey everybody.
As basti256 was saying it is quite simple to use a logic analyser to find out what the program is sending.
So if someone want to make a custom one you can use this code as a starting point.
Code: Select all
void setup() {
  // initialize serial:
  Serial.begin(9600);
  Serial.write(0xA6);
  Serial.write(0x12);
  Serial.write(0x02);
  Serial.write(0x10);
  Serial.write(0x14);
  Serial.write(0xCF);
  delay(500);
  Serial.write(0xA6);
  Serial.write(0x12);
  Serial.write(0x02);
  Serial.write(0x11);
  Serial.write(0x14);
  Serial.write(0x0B);
}

void loop() {
  delay(500);
  Serial.write(0xA6);
  Serial.write(0x12);
  Serial.write(0x02);
  Serial.write(0x15);
  Serial.write(0x14);
  Serial.write(0x30);
}
Hope it can help people that wanted the code to do a custom version with nfc reader or some more feature.

hello and thank you for sharing your code, I wanted to know if it works on a ESC100 BIRD ZERO?
thank you
  • 1
  • 6
  • 7
  • 8
  • 9
  • 10
  • 80

As this was a rental version whos overstock was […]

Any one got any info on beryl bikes I seen a few[…]

LH/ TF-100 Style Display.

Hi I recently converted a Bird Zero to a personal […]

How do you operate dash without button? I have[…]