7 Commits

Author SHA1 Message Date
c1b42b5508 Update README.md 2026-05-20 15:24:16 +00:00
da708b38fb Update README.md 2026-03-29 11:51:55 +00:00
220fd22594 Update README.md 2026-03-27 21:57:01 +00:00
Finn Tews
64b39a29d5 Removed COMM Port as its no loger in use 2026-03-27 22:55:29 +01:00
Finn Tews
9cd6574abf fixed canbus 2026-03-22 22:22:23 +01:00
379b28ef50 Update README.md 2026-03-22 13:16:46 +00:00
ea01ed80f0 Update README.md 2026-03-22 13:09:29 +00:00
12 changed files with 9593 additions and 6385 deletions

View File

@@ -8,56 +8,70 @@ Community Telegram channel [Ninebot Bridges](https://t.me/NinebotBridges)
Also check out this repository which is used to drive the lights on your X3 Series Scooter [LightBoard](https://gitea.overkill.cc/morss12/LightBoard.git)
# Features & Abilities
## Additional material needed for the bridge (Spintend Ubox)
Battery voltage to 12V 5A DC DC converter (Power for bridge, display and lights)
1x JST GH 1.25 7pin (Ignition port)
1x JST GH 1.25 6pin (LightBoard data and 5V supply)
1x JST GH 1.25 5pin (Canbus)(If you have 2 Motors you need two)
Dont forget to swap the 5V pin with the PWR.ON if running two VESCS
1x JST GH 1.25 4pin (LightBoard 12V supply)
## Features & Abilities
A simple overview of everything the VESC2G3Bridge can do.
## What Is It?
### What Is It?
The VESC2X3Bridge is a project I started at the end of 2025. It aims to integrate the X3 Scooter Series from Ninebot into the world of VESC, an open-source project by Benjamin Vedder.
The VESC2G3Bridge is a small computer that sits between your scooter's motor controller (VESC) and its dashboard (G3). Without it, the dashboard and the motor controller don't understand each other — the bridge acts like a translator so they can work together.
## What It Does
### What It Does
### Shows Your Speed
#### Shows Your Speed
The device reads how fast the motor is spinning and works out your actual riding speed. It then sends that number to the dashboard so you can see it while you ride.
### Shows Battery Level
#### Shows Battery Level
It checks how much battery you have left and tells the dashboard, so you always know when to charge.
### Controls the Lights
#### Controls the Lights
- Turns on the **rear light** just like the stock X3 Series.
- Flashes the **left and right indicators** (turn signals) when you signal a turn.
- Supports **horn** activation from the dashboard button (GT3).
### Switches Ride Profiles
#### Switches Ride Profiles
The scooter can have different power modes (WALK,ECO,NORMAL,SPORT). The bridge listens to the dashboard buttons and tells the VESC which mode to switch to. You can also set it to block the switching of modes when the battery is low, bypassing the dashboards auto apply of a slow profile.
### Controls the Throttle and Brake
#### Controls the Throttle and Brake
By running a small script on the VESC, the VESC can directly read the inputs from the dashboard, giving the VESC full control over how you accelerate and slow down.
### Updates Itself Over Wi-Fi
#### Updates Itself Over Wi-Fi
The device creates its own Wi-Fi network and you can upload new firmware right from your phone or computer's web browser.
### Has a Built-In Settings Page
#### Has a Built-In Settings Page
Connect to its Wi-Fi and open a web page to change settings. [Config page](https://192.168.5.1/)
### Works With Different Battery Systems
#### Works With Different Battery Systems
Some scooter battery packs have their own battery management board (BMS). The bridge can read battery info from:
- The VESC itself
- The Ninebot Original BMS
- A JBD (Xiaoxiang) BMS
### Supports Two Board Versions
#### Supports Two Board Versions
There are two hardware versions of the board (V1.0 and V2.1+). You pick which one you have in the settings page and the device automatically uses the right pins.
### Tracks Multiple Motor Controllers
#### Tracks Multiple Motor Controllers
If your scooter has more than one VESC (e.g. dual motors), the bridge reads speed data from all of them and averages the values together for a smooth, accurate speed reading.
## Quick Summary Table
### Quick Summary Table
| Feature | What it means |
|---|---|
| Designed for Spintend Ubox series | Supports 85V150A, 100V100A, 85V240A, 126V160A, 85V250A |
| X3 Series Support | Supports G3, ZT3 and GT3* |
| Speed display | Shows km/h on the dashboard |
| Battery display | Shows battery % on the dashboard |
@@ -76,34 +90,29 @@ If your scooter has more than one VESC (e.g. dual motors), the bridge reads spee
*This device was originally developed for the G3
---
## How to create a PCB from the files
### How to create a PCB from the files
1. Clone this repository and open it with KiCad.
2. Use the **"Fabrication Outputs"** option to generate the required files for your PCB manufacturer.
[Tutorial here](https://wiki.scooter-labs.com/docs/guides/VESC2X3Bridge/Tutorials/OrderingPCB/)
<img src="https://media.discordapp.net/attachments/1484589733932830810/1484589753570693221/image.png?ex=69bec773&is=69bd75f3&hm=8f9db0c190a1125b79901996c782525d298798a685708147448ac20ca4147bc0&=&format=webp&quality=lossless" alt="PCB preview">
3. Upload the files to a PCB manufacturer (for example, JLCPCB) and choose a 2-layer PCB board.
4. Once you receive your PCB, development can begin. :)
## Firmware flashing
### Firmware flashing
1. The board uses an **ESP32-S3-WROOM-1** chip, which has exposed USB D+, D-, and GND pins on the PCB.
2. Use these pins to connect a USB cable to your computer and flash your firmware.
## Flashing Service
### Flashing Service
We offer a PCB flashing service for those who prefer a ready-to-use board:
I offer a PCB flashing service for those who prefer a ready-to-use board:
- **You** send me your VESC2X3Bridge and i will flash it with the VESC2X3bridge firmware.
- **Cost:** Listed on our [shop page](https://scooter-labs.com/shop)
- **Includes:** Lifetime free firmware updates
- **How it works:** Simply order the service, and we will program your PCB with the latest firmware and ship it to you ready to use.
This service is optional — you can still build and flash the PCB yourself if you prefer.
This service is optional
---
# License
## License
This PCB design is released under the [CC BY-NC-SA 4.0 License](https://creativecommons.org/licenses/by-nc-sa/4.0/).
## What you can do

File diff suppressed because it is too large Load Diff

View File

@@ -15,6 +15,7 @@
"vias": 1.0,
"zones": 0.6
},
"prototype_zone_fills": false,
"selection_filter": {
"dimensions": true,
"footprints": true,
@@ -107,6 +108,7 @@
"filter_text": "",
"group_by_constraint": false,
"group_by_netclass": false,
"show_time_domain_details": false,
"show_unconnected_nets": false,
"show_zero_pad_nets": false,
"sort_ascending": true,
@@ -117,6 +119,7 @@
"files": []
},
"schematic": {
"hierarchy_collapsed": [],
"selection_filter": {
"graphics": true,
"images": true,
@@ -124,6 +127,7 @@
"lockedItems": false,
"otherItems": true,
"pins": true,
"ruleAreas": true,
"symbols": true,
"text": true,
"wires": true

View File

@@ -3,6 +3,8 @@
"3dviewports": [],
"design_settings": {
"defaults": {
"apply_defaults_to_fp_barcodes": false,
"apply_defaults_to_fp_dimensions": false,
"apply_defaults_to_fp_fields": false,
"apply_defaults_to_fp_shapes": false,
"apply_defaults_to_fp_text": false,
@@ -77,6 +79,7 @@
"extra_footprint": "warning",
"footprint": "error",
"footprint_filters_mismatch": "ignore",
"footprint_symbol_field_mismatch": "warning",
"footprint_symbol_mismatch": "warning",
"footprint_type_mismatch": "ignore",
"hole_clearance": "error",
@@ -94,6 +97,7 @@
"mirrored_text_on_front_layer": "warning",
"missing_courtyard": "ignore",
"missing_footprint": "warning",
"missing_tuning_profile": "warning",
"net_conflict": "warning",
"nonmirrored_text_on_back_layer": "warning",
"npth_inside_courtyard": "ignore",
@@ -113,9 +117,12 @@
"too_many_vias": "error",
"track_angle": "error",
"track_dangling": "warning",
"track_not_centered_on_via": "ignore",
"track_on_post_machined_layer": "error",
"track_segment_length": "error",
"track_width": "error",
"tracks_crossing": "error",
"tuning_profile_track_geometries": "ignore",
"unconnected_items": "error",
"unresolved_variable": "error",
"via_dangling": "warning",
@@ -228,17 +235,28 @@
"zones_allow_external_fillets": false
},
"ipc2581": {
"bom_rev": "",
"dist": "",
"distpn": "",
"internal_id": "",
"mfg": "",
"mpn": ""
"mpn": "",
"sch_revision": ""
},
"layer_pairs": [],
"layer_presets": [],
"viewports": []
},
"boards": [],
"component_class_settings": {
"assignments": [],
"meta": {
"version": 0
},
"sheet_component_classes": {
"enabled": false
}
},
"cvpcb": {
"equivalence_files": []
},
@@ -428,11 +446,14 @@
"duplicate_sheet_names": "error",
"endpoint_off_grid": "warning",
"extra_units": "error",
"field_name_whitespace": "warning",
"footprint_filter": "ignore",
"footprint_link_issues": "warning",
"four_way_junction": "ignore",
"global_label_dangling": "warning",
"ground_pin_not_ground": "warning",
"hier_label_mismatch": "error",
"isolated_pin_label": "warning",
"label_dangling": "error",
"label_multiple_wires": "warning",
"lib_symbol_issues": "warning",
@@ -455,6 +476,7 @@
"similar_power": "warning",
"simulation_model_issue": "ignore",
"single_global_label": "ignore",
"stacked_pin_name": "warning",
"unannotated": "error",
"unconnected_wire_endpoint": "warning",
"undefined_netclass": "error",
@@ -487,13 +509,14 @@
"priority": 2147483647,
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.2,
"tuning_profile": "",
"via_diameter": 0.6,
"via_drill": 0.3,
"wire_width": 6
}
],
"meta": {
"version": 4
"version": 5
},
"net_colors": null,
"netclass_assignments": null,
@@ -515,6 +538,10 @@
},
"schematic": {
"annotate_start_num": 0,
"annotation": {
"method": 0,
"sort_order": 0
},
"bom_export_filename": "${PROJECTNAME}.csv",
"bom_fmt_presets": [],
"bom_fmt_settings": {
@@ -586,6 +613,7 @@
"sort_asc": true,
"sort_field": "Reference"
},
"bus_aliases": {},
"connection_grid_size": 50.0,
"drawing": {
"dashed_lines_dash_length_ratio": 12.0,
@@ -593,6 +621,7 @@
"default_line_thickness": 6.0,
"default_text_size": 50.0,
"field_names": [],
"hop_over_size_choice": 0,
"intersheets_ref_own_page": false,
"intersheets_ref_prefix": "",
"intersheets_ref_short": false,
@@ -616,6 +645,7 @@
"net_format_name": "",
"page_layout_descr_file": "",
"plot_directory": "",
"reuse_designators": true,
"space_save_all_events": true,
"spice_current_sheet_as_root": false,
"spice_external_command": "spice \"%I\"",
@@ -624,13 +654,28 @@
"spice_save_all_dissipations": false,
"spice_save_all_voltages": false,
"subpart_first_id": 65,
"subpart_id_separator": 0
"subpart_id_separator": 0,
"top_level_sheets": [
{
"filename": "VESC2X3Bridge.kicad_sch",
"name": "VESC2X3Bridge",
"uuid": "6d3f2fcd-699e-4cab-a29d-29e0e0aa88b8"
}
],
"used_designators": "",
"variants": []
},
"sheets": [
[
"6d3f2fcd-699e-4cab-a29d-29e0e0aa88b8",
"Root"
"VESC2X3Bridge"
]
],
"text_variables": {}
"text_variables": {},
"tuning_profiles": {
"meta": {
"version": 0
},
"tuning_profiles_impedance_geometric": []
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1 @@
{"ARCHIVE_NAME": "VESC2X3Bridge V2.3", "EXTRA_LAYERS": "", "ALL_ACTIVE_LAYERS": false, "EXTEND_EDGE_CUT": false, "ALTERNATIVE_EDGE_CUT": false, "AUTO TRANSLATE": true, "AUTO FILL": true, "EXCLUDE DNP": false, "OPEN BROWSER": true, "NO_BACKUP_OPT": false}

View File

@@ -1,4 +1,4 @@
117062066228469
117063765842045
JBD2X3Bridge
39288040