Prototype | Boot screen |
---|---|
![]() |
![]() |
Main menu | Left trunk closed, right trunk open |
---|---|
![]() |
![]() |
Temperature sensors calibration screen | Fully functional main screen |
---|---|
![]() |
![]() |
PCB - soldered bottom | PCB - soldered top |
---|---|
![]() |
![]() |
In this repository you'll find the source code, custom PCB project, connection schematics of a simple digital dashboard tailored for the bike of one of my friends.
- The device is supposed to show live view of the engine's the outside world's temperature.
- The device shows also the state of 2 trunks - either if they are closed or open.
- The physical design has to enable the temperature sensors to be attached even more than 1 meter away from the microcontroller
- The lcd screen should be attached approx. 1.5 meters away from the microcontroller.
- Main electronics should be mounted in a custom 3d printed case bellow the seat.
- There is a need for a step-down voltage regulator to connect DIY equipment to the battery.
- ESP32-C3 Super-Mini board
- LM2596 step-down voltage regulator
- limit switches
- DS18B20 temperature sensors
- 4 x 20 character display
- I2C converter for character display
- bi-directional 4 channel logic level converter
- 4.7 kOhm resistors
- some wires
- some pcb connectors
- PETG 3d printer filament
The source code of the scripts running on the board is kept in the firmware folder residing in main path of the repository. It contains two subfolders: lib and functions. Main scripts executed on the board are: boot.py and main.py. All the folder and files, which need to be transferred to the microcontroller board are visible on the tree bellow.
firmware
│
├──── functions
│ ├── display.py
│ ├── temperature.py
│ └── trunk.py
│
├──── lib
│ ├── i2c_lcd.py
│ ├── lcd_api.py
│ └── WIFI_CONFIG.py
│
├── boot.py
└── main.py
In the boot.py there is some initial configurations and start on boot code. In the main.py there is code with the main logic of the application. In lib there are libraries used to talk with the display and a wifi configuration file, as the OTA updates are one of the project goals. In functions there are modules with classes used to invoke all the individually tailored operations made on display, interactions with the temperature sensor and the limit switches.
In this project I'm using a custom designed PCB board. All the design files can be found in the pcb folder.
pcb
│
├──── gerber
│ ├── Kokpit Final-B_Cu.gbr
│ ├── Kokpit Final-B_Mask.gbr
│ ├── Kokpit Final-B_Paste.gbr
│ ├── Kokpit Final-B_Silkscreen.gbr
│ ├── Kokpit Final-Edge_Cuts.gbr
│ ├── Kokpit Final-F_Cu.gbr
│ ├── Kokpit Final-F_Mask.gbr
│ ├── Kokpit Final-F_Paste.gbr
│ ├── Kokpit Final-F_Silkscreen.gbr
│ ├── Kokpit Final-job.gbrjob
│ ├── Kokpit Final-NPTH.drl
│ └── Kokpit Final-PTH.drl
│
├──── renders
│ ├── Back.png
│ └── Front.png
│
└── BikeDashboard_KiCad.zip
In gerber folder there are all the generated gerber files. The BikeDashboard_KiCad.zip is a export of the whole KiCad project.
PCB - front render | PCB - back render |
---|---|
![]() |
![]() |
All of the interface is designed in Polish, you can freely customize it with the translation from translations.json file.
In the .sidetools folder you'll find some small scripts I used to scan the one wire and i2c bus and to test the display.
I'm the only author of all the work covered in this repository. All the files made publicly available in the repository are licensed under the BikeDasboard project license. The full licence text is available in LICENSE file.