Build your own EMU Bluetooth Display for ~$20

Hi guys, After many hours of trial and error, I have completed the V2 of my EMU Bluetooth display and the code is available for free, and you can buy the hardware from AliExpress, Ebay or from your local shops. (V3 will include touch functions and multiple tabs)

You can find the complete source code and the hardware information here https://github.com/danuecumaster/ECUMaster-Black-ESP32-Bluetooth-Display

Video: https://jmp.sh/s/WEkvVIzCmtFlNIeilFbQ | https://jmp.sh/s/iN8ujgNTJGvjnUhCfg7O

11 Likes

Good Job. Videos are not working though

Looks good! Just ordered the screen to give it a try

This is so good… I’d love to do a Portrait GUI version, to fit where the old, analogue clock is, in my E30. I’ll have to put this on the list of things to have a crack at!!! Thanks for sharing

1 Like

This is great, I’ll definitely be giving this a try

Mybad, here you go

https://youtu.be/b16–jYl7CY

https://youtu.be/1yv-feC6I2c

Video links updated

By default, it’s supposed to be portrait (240x320 px). There are also 320x480px 3.5" models available.

I have just enough space to keep it portrait in my setup, so I rotated the screen via code.

Good luck. My code is synchronous because while (SerialBT.available() >= 5) {

It works fine for my use-case but if you want to use touch controls, you should probably change to to async by doing something like this. (I will also fix this in V3)

static uint8_t frame[5];
static int frameIndex = 0;
void loop() {
frame[frameIndex++] = SerialBT.read();
if (frameIndex == 5) {

This is really awesome work! I have this board laying around from another project. And this will be the perfect use for it.

I got as far as getting the display to function but was not successful with the blue tooth connection. I’ll figure it out tomorrow.

Thanks again for sharing this with the community!

2 Likes

Did you update the MAC address?
If not, you can also uncomment //#define USE_NAME and use the BT name and pin
Also, EMU CAN BT Adapter can only connect to 1 device at a time, so do make sure you are not connected to it with your mobile or any other devices. (connecting via MAC address is much faster though)

If nothing works, try changing the ESP32’s BT name String myBtName = ā€œESP32-BT-Masterā€; to something else.

I just checked the EMU BT module and the led goes solid when I power up the ESP32, so it is connecting. its just staying on the screen in my picture.

No I am relatively new to Arduino, so this is something I am doing wrong.

I am using the esp32 board manage by Espressif Systems, v2.0.17

I selected the ā€œESP32 DEV MODULEā€

And the following libraries:
Bluetoothserial v1.1.0
lvgl v8.3.0
TST_eSPI v2.5.43

Initially I was getting a complication error: ā€˜LV_HOR_RES_MAX’ was not declared in this scope

So I added the following to lv_conf.h
#define LV_HOR_RES_DEF 320
#define LV_VER_RES_DEF 240
#define LV_HOR_RES_MAX 320
#define LV_VER_RES_MAX 240

Again, I am new at this so it’s a lot of reading followed by trial and error.

@Stauff

You can find my LVGL and eSPI config files here https://we.tl/t-lKPrbiwG9I.

But if your issue is with the BT connection, please follow this.


#4 is the fastest method, but you need to find your EMU MAC address and update it.
#3 is the BT name of EMU
#2 is the BT pin of EMU
#1 when commented, ESP will use MAC address to connect. If uncommented, ESP will use name and pin to connect, MAC address is faster.

If BT connection / display driver is not the issue, you can post the latest error you get in your serial monitor, and I’ll try to help.

Thank you so much!

Looks like my error was in how I setup the TFT file.

It works amazing! Now to make a nice mount for it.

1 Like

@Stauff Great. There’s a link to a 3d printable case in my GIT. Feel free to use it and print using ASA or ABS if you are living in a high temp location.

Hello, it is a bit off topic but I don’t get any reply on my other post: I am using EMU black with CAN to BT Module and the dash3 App on my phone. But I cant get it to work. The LED turns solid indicating a connection but I get error code 1 on the app and it ask to reconnect endlessly. Settings in EMU should be correct. CAN is green and I tried with and without termination resistors. Anybody has an idea what error code one means? Thanks

@Quattro_Racer EMU App V2 & V3 seem to have issues with Android 15. My old Android 13 phone works fine, a colleague has a Android 14 and it works fine too. My Android 15 cannot connect. (too small of a sample size to know for sure)

Tunerview works fine.

The whole reason I made the DIY display was because my new phone couldn’t connect to EMU and I didn’t want to carry a second phone just for this.

I would recommend to try with Tunerview or try an older phone first.

@Quattro_racer If you check the EDL-1 documentation , ecumaster recommends to use realdash , you can dl it from playstore.
It works for me. EMU Dash3 is not available anymore, and even I found a way to dl it, it didn’t work (connection issue)

@danu91 Thanks for you work. I ordered a esp32. Impatient to test it, and adapt it a bit to suit my use case. :+1:

1 Like

@eudes Just out of curiosity, is RealDash better than TunerView?

As for the ESP32 option - I’ve added a few extra documents in the Git, so you can decide what kinda data you want to show / what kinda warnings you want to give and update your code accordingly. (mostly just have to change channel IDs, conversions and if/else conditions)

1 Like

I don’t know if it’s better or not.
I only installed realdash to test the installation.
But as I’m not a big fan of big screen etc, I definitely prefer your proposal.

I just want to see some specific value in one sight like oil temp/pressure.
Currently I’m using an innovate gauge, but not able to connect the sensor to both gauge and EMU.

I read your code, even I didn’t touch c++ since years, It’s readable and can be easily modified.

Do you know if we can connect multiple device to EDL 1, it will continue to work fluently?