[{"content":"If you have questions about the Landy Gauge project, found a bug, or want to contribute, feel free to get in touch.\nEmail: paulrbarnard@mac.com\nYou can also open an issue or pull request directly on the GitHub repository.\n","permalink":"http://www.toxiccelery.com/contact/","summary":"\u003cp\u003eIf you have questions about the Landy Gauge project, found a bug, or want to contribute, feel free to get in touch.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eEmail:\u003c/strong\u003e \u003ca href=\"mailto:paulrbarnard@mac.com\"\u003epaulrbarnard@mac.com\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eYou can also open an issue or pull request directly on the \u003ca href=\"https://github.com/paulrbarnard/LandyGaugeFirmware\"\u003eGitHub repository\u003c/a\u003e.\u003c/p\u003e","title":"Contact"},{"content":"I have been the owner of a 1996 Landrover 300TDi 110 CSW for the last 22 years. I had wanted a Landrover from the days of watching the Camel Trophy event and marvelling at their ability to survive and go places others couldn\u0026rsquo;t reach. After many years of waiting, marriage, family, work, \u0026hellip; I finally reached the stage in life where I could afford to buy one. I managed to find the Landrover locally with only 6000 miles on the clock and only the one previous owner. The Landrover was built for export to the Middle East but in the end never got shipped and sat in a Landrover factory warehouse for a few years until it was sold to the previous owner. I\u0026rsquo;m about to retire and while no longer expecting to circumnavigate the world or spend months in the wilds of Africa or Australia, I do plan on trips around Europe, Scandinavia and lots of shorter trips in the UK. Over the years the Landy had gained some additions, like long range fuel tanks, on-board water tank, dual battery system, extra gauges, lots of switches and dials. The last few MOTs had needed more and more attention to things like rust on the chassis and the age of the vehicle was showing with a drop in reliability and confidence in the ability to get home. I made the decision two years ago to go for a full restoration. This has been a two year project involving a 100% rebuild of the entire vehicle including a new chassis, full engine rebuild and I\u0026rsquo;m just awaiting the upgraded interior to come back from the upholsterers. One of the main aims was to make the Landrover look as standard as possible, but using seriously upgraded parts, and that also meant the removal of the extra gauges, buttons and various mods/bodges that have accumulated over the years. The vehicle is going to look original but I didn\u0026rsquo;t want to miss out on some of the additions that the Landrover enjoyed, like a Boost gauge, EGT, TPMS, and the sophisticated cooling system that I had installed.\nThis is how the dash looks completely standard and how I want it to look aftr the restoration, but shiney and new :-) My solution for the extra gauges is to reproduce the clock and have \u0026lsquo;hidden\u0026rsquo; gauges that pop up when attention is needed or that I can select manually. Here is a close up of the original clock and my reproduction. I took a couple of liberties as the straight hands were programmatically more efficient than the tapered ones on the real clock and I also added the old landrover logo to mine. My original didn\u0026rsquo;t have it but there are clocks with both the old flash logo and the newer oval logo. As I worked on this project it inevitably suffered from feature creep. When I designed the expansion board I realised I could incorporate monitoring of my cooling system, handle the switching from day to night mode. Defender gauges light up with a green glow and suffer from light bleed over the dial which I tried to replicate. My gauges feature images of my Landrover and I made the lights come on when it is dark\u0026hellip;\nI also realised that I could make it more generic, so useful for any vehicle with 52mm gauges. To that end it became configurable with replaceable images on the SDCard. If you want your partner\u0026rsquo;s voice telling you the car is going to tip over you can do that too and it actually waits until you are really likely to tip over\u0026hellip;\nI finished up with multiple possible versions. The gauge only, with touch and/or button interface, which provides clock, TPMS, tilt and incline screens. Add the additional expansion board to add EGT, Boost, Coolant temperature, Coolant level, lights on/off, ignition on/off and a compass. You can then add the fan relay board to have a sophisticated cooling solution including disabling fans for wading.\nI decided to make the whole project Open Source so that others who might be interested can either use what I have done or use it as a base for their own project. I actually discovered that a new old stock clock for my Defender is £487 inc VAT. I had 5 sets of PCB made in China by PCBWay including the assembly of the board for less than the cost of one replacement clock. I think I will have to pass the original clock down the family as an heirloom. An EGT and a Boost gauge from someone like Stack run to £250 a piece so this Landy Gauge with a parts cost of about £150 is a real bargain :-)\n","permalink":"http://www.toxiccelery.com/blog/why-i-did-it/","summary":"The reasoning behind the project and the motivations for open sourcing the project","title":"Why I did it"},{"content":"What is the Landy Gauge? The Landy Gauge is a 52mm standard vehicle instrument gauge. It is an open-source project built around the Waveshare ESP32-S3 1.85\u0026quot; round LCD module. Originally designed for my Land Rover Defender, it\u0026rsquo;s adaptable to any vehicle.\nIt packs a surprising number of features into a compact round display:\nCompass — digital compass with vehicle heading and bearing Inclinometer — pitch with customisable Landrover image Tyre Pressures — BLE TPMS sensor monitoring for up to 4 tyres Exhaust Gas Temperature — thermocouple-based EGT monitoring Boost Pressure — MAP sensor-based turbo boost gauge Clock — RTC-backed clock with NTP sync via WiFi Cooling — coolant temperature and fan status monitoring Tilt Meter — vehicle tilt angle display with customisable image The project supports both the touch and non-touch versions of the Waveshare 1.85 inch display. The expansion board is I2C connected to provide additional sensor and vehicle signal inputs. Without the expansion board the display provides clock, TPMS, tilt and incline. Add the expansion board for coolant temperature, EGT, Boost and some custom wadding and fan control specific to my Landrover. The expansion board has eight 12V safe inputs and eight outputs capable of switching automotive relays. Lots of expansion to develop your own custom functions. The gauge has an SDCard that hosts custom voice messages and the Waveshare display also supports voice input if your want to go that route.\nWhy Open Source? This project started as a personal build for my own Defender. I\u0026rsquo;ve shared it so others can build one, modify it, and hopefully contribute improvements back.\nEverything you need is here:\nFirmware source code — ESP-IDF based, fully documented. This was 100% vibe coded using Claude Circuit schematics — KiCad designs for the gauge, expansion board and fan relays 3D models — printable cases for the gauge, expansion board and fan relays Build instructions — step-by-step assembly guide Hardware Overview The gauge is built around:\nWaveshare ESP32-S3 1.85\u0026quot; Touch or non touch LCD — the main display module Supply PCB — connects 12V vehicle power or the expansion board to the Waveshare display. Ensuring safe powering from the vehicle and protected use of the USB-C port on the Waveshare in parallel Expansion Board (optional) — adds vehicle signal inputs (ignition, lights, fans, coolant). I built this as a prototype board but finished up using it in the vehicle. See the Hardware section for full details.\nFor complete usage instructions, see the User Manual.\n","permalink":"http://www.toxiccelery.com/about/","summary":"\u003ch2 id=\"what-is-the-landy-gauge\"\u003eWhat is the Landy Gauge?\u003c/h2\u003e\n\u003cp\u003eThe Landy Gauge is a 52mm standard vehicle instrument gauge.  It is an open-source project built around the Waveshare ESP32-S3 1.85\u0026quot; round LCD module. Originally designed for my Land Rover Defender, it\u0026rsquo;s adaptable to any vehicle.\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"Clock\" loading=\"lazy\" src=\"/images/Gauges.jpeg\"\u003e\u003c/p\u003e\n\u003cp\u003eIt packs a surprising number of features into a compact round display:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eCompass\u003c/strong\u003e — digital compass with vehicle heading and bearing\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eInclinometer\u003c/strong\u003e — pitch with customisable Landrover image\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTyre Pressures\u003c/strong\u003e — BLE TPMS sensor monitoring for up to 4 tyres\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eExhaust Gas Temperature\u003c/strong\u003e — thermocouple-based EGT monitoring\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBoost Pressure\u003c/strong\u003e — MAP sensor-based turbo boost gauge\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eClock\u003c/strong\u003e — RTC-backed clock with NTP sync via WiFi\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCooling\u003c/strong\u003e — coolant temperature and fan status monitoring\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTilt Meter\u003c/strong\u003e — vehicle tilt angle display with customisable image\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe project supports both the touch and non-touch versions of the Waveshare 1.85 inch display.  The expansion board is I2C connected to provide additional sensor and vehicle signal inputs.  Without the expansion board the display provides clock, TPMS, tilt and incline.  Add the expansion board for coolant temperature, EGT, Boost and some custom wadding and fan control specific to my Landrover.  The expansion board has eight 12V safe inputs and eight outputs capable of switching automotive relays.  Lots of expansion to develop your own custom functions.\nThe gauge has an SDCard that hosts custom voice messages and the Waveshare display also supports voice input if your want to go that route.\u003c/p\u003e","title":"About"},{"content":"Introduction This guide walks through building a Landy Gauge from scratch. You\u0026rsquo;ll need basic soldering skills and access to a 3D printer (or a printing service).\nWhat You\u0026rsquo;ll Need Main Gauge Waveshare ESP32-S3 1.85\u0026quot; Round Touch or non touch LCD module Custom gauge PCB (KiCad files provided) Components as per the BOM 3D printed case Expansion Board (Optional) Custom expansion board PCB MCP23017 I/O expander Components as per the BOM 6-wire cable (recommended: 500mm max). This is actually a Bambu labs AMS interconnect cable. 3D printed case Sensors EGT: K-type thermocouple. These are pretty standard. I used a generic K-type thermocouple from Amazon. Boost: MAP sensor (0.5V–4.5V output). There are many options but I went with a FEDLDM187 which is used by Renault TPMS: BLE tyre pressure sensors (4x). Any generic BLE sensor will work but you might need to change the format string used for reading. The specific ones I went for are AIYATO BLE TPMS from Amazon Assembly Steps 1. PCB Assembly I had all my PCB manufactured by PCBWay in China. It was fast and cheap with great results. I had them populate the boards for the supply and expansion board as they use SMD parts. The expansion board i did just as a desktop test board so had screw terminals for connections. My intension was to produce a smaller specific board for the final gauge but it didn\u0026rsquo;t turn out to be a high priority. I asked PCBWay not to populate the screw terminals so that I could solder wires directly to the connections to use in the Landrover. You could keep the screw terminals in the car but should seal the screw with some wax to stop them vibrating loose. A Landroiver vibrates a lot so I went for the solderd connections. The Fan Relay PCB layout can be improved a lot and I forgot to put pads on the vias I used for wire links to be able to use a single sided board. It also uses a thicker Cu layer to handle the current. If you go the fan control route don\u0026rsquo;t go with the layout as is\u0026hellip;\n2. WaveShare Preparation The Waveshare boards are great but they do have one design choice that makes their use difficult. They have put all the connections going out the sides of the board with rightangle connectors. It would have been much better if they had used verticle connectors. The problem with the 52mm gauge is it doesn\u0026rsquo;t have room for the connectors and cables sticking out the side. Fortunately the speaker connection is shallow enough that it just fits with a cut out in the case. The I2C and IO connectors however don\u0026rsquo;t. The solution is to replace the right angle connectors with vertical versions. This reverses the pin out of the connector but the gauge Supply PCB flips it back again letting you use a 1-1 cable. The challenge is that the Waveshare has the LCD fitted which is temperature sensitive so you need to be a bit careful when removing and reflowing the new conectors. I place the waveshare LCD down on a block of metal to keep the LCD cool as I used a hot air gun to remove the connector. A further complication once you have the connectors swapped is the cables are tiny. Making up cables needs, at least for my 66 year old eyes, a magnifing setup, tweezers and a lot of swearing. As a consequnce I now don\u0026rsquo;t replace the conector I just remove the right angle connector and solder the cables that come with the display directly to the PCB. A bit of resin over the soldered joint holds it all in place. The final step is to put a power connection on to the Waveshare. The LandySupply board provided a protected 5V supply that is fed to the Waveshare after the protection diode from the existing USB-C connection. The design lets you plug in a USB-C cable while the 12V supply is still connected without damaging either the gauge or the attached computer. This permits insitue reprogramming or monitoring of the gauge. Use a two pin JST plug and connect the positive wire to the end of the Waveshare protection diode, D3 at it\u0026rsquo;s connection with R3, being careful not to short both ends of the resistor. The negative (GND) connects to the ground pad of the I2C connector (which you have removed) You now have a Waveshare display with three cables attached one 4 way for I2C, a second 4 way for IO and a 2 way for the power. These need to be about 50mm long. The connector for the I2C and IO come with the Waveshare and you can buy made up cables for the two way from Amazon. I recomend doing that rather than buying a connector kit. Been there done that\u0026hellip;\nA note for tinkerers - Connecting the supply in this way creates a safe supply for the Waveshare but it does bypass the charging facility built in to the Waveshare. If you want to use the backup battery with charging from 12V as well as from USB-C then you can connect to the other side of D3. The 12V will now charge the optional backup battery as well but you MUST disconnect the 12V supply from the gauge before plugging in the USB-C or you can potentially damage your computer. Given that my Landrover has a big old lead acid starter battery the optional waveshare battery is a bit pointless.\n3. Case Printing Print the gauge case using the provided OBJ files. Recommended settings:\nMaterial: PETG with default setting. Other materials such as PLA work fine too. Layer height: 0.16mm Infill: 20% The back needs support and benifits from using an interface layer for clean removal. The bezel can be printed in teh same material for a one time assembly. If repeated assemble/disassembly is anticipated use a firm TPU (like Bambu TPU for AMS) for the bezel. The Button Plug also works best in TPU for AMS. The expansion board case can be printed in any material. I used PA6-GF as I used this for the Fan relay box that lives in the engine bay.\n4. Firmware Flashing See the Firmware page for build and flash instructions.\n5. Sensor Installation GaugeWire.kicad_sch\nExpansion Board Installation Wiring The expansion board connects to the main gauge via I2C:\nSDA, SCL, VCC (3.3V), GND Maximum recommended cable length: 500mm I2C speed: 100kHz (for cable reliability) Vehicle Signal Connections Connect vehicle signals to the expansion board inputs. All inputs are active-high, optically isolated:\nInput Connect to IO1 Ignition switched 12V IO2 Sidelights circuit IO3 Cooling fan low speed relay IO4 Cooling fan high speed relay IO5 Coolant level warning IO6 Dipped beam circuit IO7 Full beam circuit ","permalink":"http://www.toxiccelery.com/build-guide/","summary":"\u003ch2 id=\"introduction\"\u003eIntroduction\u003c/h2\u003e\n\u003cp\u003eThis guide walks through building a Landy Gauge from scratch. You\u0026rsquo;ll need basic soldering skills and access to a 3D printer (or a printing service).\u003c/p\u003e\n\u003ch2 id=\"what-youll-need\"\u003eWhat You\u0026rsquo;ll Need\u003c/h2\u003e\n\u003ch3 id=\"main-gauge\"\u003eMain Gauge\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWaveshare ESP32-S3 1.85\u0026quot; Round Touch or non touch LCD module\u003c/li\u003e\n\u003cli\u003eCustom gauge PCB (KiCad files provided)\u003c/li\u003e\n\u003cli\u003eComponents as per the BOM\u003c/li\u003e\n\u003cli\u003e3D printed case\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"expansion-board-optional\"\u003eExpansion Board (Optional)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCustom expansion board PCB\u003c/li\u003e\n\u003cli\u003eMCP23017 I/O expander\u003c/li\u003e\n\u003cli\u003eComponents as per the BOM\u003c/li\u003e\n\u003cli\u003e6-wire cable (recommended: 500mm max). This is actually a Bambu labs AMS interconnect cable.\u003c/li\u003e\n\u003cli\u003e3D printed case\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"sensors\"\u003eSensors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eEGT\u003c/strong\u003e: K-type thermocouple.  These are pretty standard.  I used a generic K-type thermocouple from Amazon.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBoost\u003c/strong\u003e: MAP sensor (0.5V–4.5V output).  There are many options but I went with a FEDLDM187 which is used by Renault\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTPMS\u003c/strong\u003e: BLE tyre pressure sensors (4x).  Any generic BLE sensor will work but you might need to change the format string used for reading.  The specific ones I went for are AIYATO BLE TPMS from Amazon\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"assembly-steps\"\u003eAssembly Steps\u003c/h2\u003e\n\u003ch3 id=\"1-pcb-assembly\"\u003e1. PCB Assembly\u003c/h3\u003e\n\u003cp\u003eI had all my PCB manufactured by PCBWay in China.  It was fast and cheap with great results.  I had them populate the boards for the supply and expansion board as they use SMD parts.  The expansion board i did just as a desktop test board so had screw terminals for connections.  My intension was to produce a smaller specific board for the final gauge but it didn\u0026rsquo;t turn out to be a high priority.  I asked PCBWay not to populate the screw terminals so that I could solder wires directly to the connections to use in the Landrover.  You could keep the screw terminals in the car but should seal the screw with some wax to stop them vibrating loose.  A Landroiver vibrates a lot so I went for the solderd connections.  The Fan Relay PCB layout can be improved a lot and I forgot to put pads on the vias I used for wire links to be able to use a single sided board.  It also uses a thicker Cu layer to handle the current.  If you go the fan control route don\u0026rsquo;t go with the layout as is\u0026hellip;\u003c/p\u003e","title":"Build Guide"},{"content":"Overview The firmware is written in C using the ESP-IDF v5.5.1 framework with LVGL v8.2 for the graphics. It runs on the ESP32-S3 with PSRAM.\nSource Code The full firmware source is available on GitHub:\nLandyGauge Firmware on GitHub Features Display Gauges Clock — RTC-backed with NTP time sync and timezone support (34 zones) Boost Gauge — turbo boost pressure from MAP sensor (ADS1115 ADC) EGT — exhaust gas temperature via K-type thermocouple (MCP9600) Cooling Status — coolant level and fan speed indicators. Coolant temperature from Defender temperature sender. TPMS - Tire preasure monitor supporting 4 BTLE sensors Tilt Meter — lateral tilt angle Inclinometer — pitch angle from IMU Compass — digital heading with lubber line, bearing display, magnetometer calibration Artificial Horizon — visual pitch/roll indicator (currently commented out of the gauge sequense) System Features Night Mode — automatic day/night switching via expansion board (headlights) or solar twilight calculation Custom Images — load personalised vehicle images from SD card WiFi — WPA2 connection for NTP time sync. Tried once a day to sync on home wifi and can be commanded to sync via smart phone hotspot. Selectable timezone for global use with automatic daylight saving. Audio — warning beeps via I2S amplifier. Voice warnings for critical events. Touch — capacitive touch for menu navigation with Touch version of Waveshare display Settings — persistent calibration and configuration via NVS Building the Firmware Prerequisites ESP-IDF v5.5.1 USB-C cable to the ESP32-S3 module Build \u0026amp; Flash # Source the ESP-IDF environment source ~/esp/v5.5.1/esp-idf/export.sh # Build idf.py build # Flash (adjust port as needed) idf.py -p /dev/tty.usbmodem21301 flash # Monitor serial output idf.py -p /dev/tty.usbmodem21301 monitor Configuration The gauge is configured through screen menus. Key settings include:\nWiFi SSID and password Timezone selection Compass calibration Tilt/incline offset calibration TPMS sensor pairing Temperature units (°C/°F) Boost display units (bar/psi) ","permalink":"http://www.toxiccelery.com/firmware/","summary":"\u003ch2 id=\"overview\"\u003eOverview\u003c/h2\u003e\n\u003cp\u003eThe firmware is written in C using the \u003cstrong\u003eESP-IDF v5.5.1\u003c/strong\u003e framework with \u003cstrong\u003eLVGL v8.2\u003c/strong\u003e for the graphics. It runs on the ESP32-S3 with PSRAM.\u003c/p\u003e\n\u003ch2 id=\"source-code\"\u003eSource Code\u003c/h2\u003e\n\u003cp\u003eThe full firmware source is available on GitHub:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/paulrbarnard/LandyGaugeFirmware\"\u003eLandyGauge Firmware on GitHub\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"features\"\u003eFeatures\u003c/h2\u003e\n\u003ch3 id=\"display-gauges\"\u003eDisplay Gauges\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eClock\u003c/strong\u003e — RTC-backed with NTP time sync and timezone support (34 zones)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBoost Gauge\u003c/strong\u003e — turbo boost pressure from MAP sensor (ADS1115 ADC)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eEGT\u003c/strong\u003e — exhaust gas temperature via K-type thermocouple (MCP9600)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCooling Status\u003c/strong\u003e — coolant level and fan speed indicators.  Coolant temperature from Defender temperature sender.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTPMS\u003c/strong\u003e - Tire preasure monitor supporting 4 BTLE sensors\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTilt Meter\u003c/strong\u003e — lateral tilt angle\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eInclinometer\u003c/strong\u003e — pitch angle from IMU\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCompass\u003c/strong\u003e — digital heading with lubber line, bearing display, magnetometer calibration\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eArtificial Horizon\u003c/strong\u003e — visual pitch/roll indicator (currently commented out of the gauge sequense)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"system-features\"\u003eSystem Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eNight Mode\u003c/strong\u003e — automatic day/night switching via expansion board (headlights) or solar twilight calculation\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCustom Images\u003c/strong\u003e — load personalised vehicle images from SD card\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eWiFi\u003c/strong\u003e — WPA2 connection for NTP time sync.  Tried once a day to sync on home wifi and can be commanded to sync via smart phone hotspot.  Selectable timezone for global use with automatic daylight saving.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAudio\u003c/strong\u003e — warning beeps via I2S amplifier.  Voice warnings for critical events.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTouch\u003c/strong\u003e — capacitive touch for menu navigation with Touch version of Waveshare display\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSettings\u003c/strong\u003e — persistent calibration and configuration via NVS\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"building-the-firmware\"\u003eBuilding the Firmware\u003c/h2\u003e\n\u003ch3 id=\"prerequisites\"\u003ePrerequisites\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://docs.espressif.com/projects/esp-idf/en/v5.5.1/esp32s3/get-started/\"\u003eESP-IDF v5.5.1\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUSB-C cable to the ESP32-S3 module\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"build--flash\"\u003eBuild \u0026amp; Flash\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# Source the ESP-IDF environment\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003esource ~/esp/v5.5.1/esp-idf/export.sh\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# Build\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eidf.py build\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# Flash (adjust port as needed)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eidf.py -p /dev/tty.usbmodem21301 flash\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# Monitor serial output\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eidf.py -p /dev/tty.usbmodem21301 monitor\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"configuration\"\u003eConfiguration\u003c/h2\u003e\n\u003cp\u003eThe gauge is configured through screen menus. Key settings include:\u003c/p\u003e","title":"Firmware"},{"content":"Main Gauge Board The gauge is built around the Waveshare ESP32-S3 1.85\u0026quot; Round LCD module, with a custom PCB providing sensor connections and power management.\nKey Components Component Purpose ESP32-S3 (N16R8) Main processor with WiFi and BLE PCF85063 Real-time clock (battery backed) QMI8658 6-axis IMU (accelerometer + gyroscope) MAX98357A I2S audio amplifier (warning beeps) Downloads — Gauge Supply PCB The power supply and interconnect PCB fits inside the 52mm gauge housing alongside the Waveshare module. KiCad project files and manufacturing outputs:\nFile Description GaugeSupply.kicad_sch Schematic GaugeSupply.kicad_pcb PCB layout GaugeSupply.kicad_pro KiCad project GaugeSupply.step 3D STEP model gerbers.zip Gerber files for manufacturing Expansion Board The optional expansion board connects to the gauge via a 6core cable supporting 4-wire I2C (500mm max, 100kHz) and the 12V vehicle supply.\nThe Expansion Board provides the additional IO functions below\nComponent Purpose LIS3MDL 3-axis magnetometer (compass) MCP9600 Thermocouple interface (EGT) ADS1115 16-bit ADC (boost pressure) MCP23017 I/O expander (expansion board inputs) Input Function IO0 Spare IO1 Ignition IO2 Sidelights IO3 Fan Low Speed IO4 Fan High Speed IO5 Coolant Level Low IO6 Low Beam (Dipped) IO7 Full Beam (High) Output Function Out2 Wadding enable Out3 Low Fan Enable Out4 High Fan Enable Other outputs are Spare\nDownloads — Expansion Board PCB File Description LandyGauge.kicad_sch Schematic LandyGauge.kicad_pcb PCB layout LandyGauge.kicad_pro KiCad project LandyGauge.step 3D STEP model gerbers.zip Gerber files ExpansionBoard.pdf Schematic PDF Fan Relay Board The fan relay board provides switched outputs for cooling fan control.\nDownloads — Fan Relay PCB File Description LandyFan.kicad_sch Schematic LandyFan.kicad_pcb PCB layout LandyFan.kicad_pro KiCad project LandyFan.step 3D STEP model gerbers.zip Gerber files for manufacturing Wiring File Description Gauge Wiring.pdf Wiring schematic PDF GaugeWire.kicad_sch Wiring schematic (KiCad) GaugeWire.kicad_pro KiCad project 3D Printed Cases The gauge housing is a 52mm case designed to hold the Waveshare module and gauge supply PCB. Two alternative bezels are provided to support Waveshare displays with and without touch support. I have had good results printing with PET-G on a BambuLabs printer using the default settings and 0.4mm nozzel. Note that the walls of the gauge are thinner than I would have liked to be able to fit the standard 52mm gauge opening in a dash. The Button Plug is to blank the connector for the buttons if using the touch interface. The buttons are optional on the touch version. The plug needs some flexibilty so I have printed it in TPU for AMS. If you anticipate dismantling the gauge then printing the bezel in TPU lets you put it on and off multiple times. Printing the bezel in PET-G makes for a one time assembly, as either the bezel or the body are likely to break on disassembly.\nDownloads — 3D Models File Description 52mm Gauge Housing.f3z Fusion 360 source (full assembly) Case.obj Main case body (printable) Cover.obj Rear cover (printable) Bezel - Touch.obj Front bezel for touch version (printable) Bezel - Non Touch.obj Front bezel for non-touch version (printable) Nut.obj Mounting nut (printable) ButtonPlug.obj Button plug (printable) Expansion Board Enclosure The expansion board enclosure is a separate printed box for mounting the optional expansion PCB. The assembly includes the main box, lid, cable management parts, and internal clamps to secure the PCB and wiring.\nFile Description ExpansionBox.f3z Fusion 360 source assembly Base.obj Main enclosure body lid.obj Enclosure lid BoardClamp.obj PCB retaining clamp CableClamp.obj Cable clamp wireGuide.obj Wire guide lockTab.obj Locking tab grommit.obj Cable grommet Fan Relay Enclosures Two fan relay enclosure variants are provided. Type1 is intended for interior mounting. Type2 is intended for use in the engine bay and includes sealing parts for a more protected installation.\nFan Relay Box Type1 File Description FanRelayBoxType1.f3z Fusion 360 source assembly Base.obj Main enclosure body lid.obj Enclosure lid gromit.obj Cable grommet Fan Relay Box Type2 File Description FanRelayBoxType2.f3z Fusion 360 source assembly FanBoxGaskit.f3d Fusion 360 gasket source Base.obj Main enclosure body lid.obj Enclosure lid Gaskit.obj Printable gasket lid washer.obj Lid washer Grommit.obj Cable grommet Bill of Materials Detailed BOM coming soon\n","permalink":"http://www.toxiccelery.com/hardware/","summary":"\u003ch2 id=\"main-gauge-board\"\u003eMain Gauge Board\u003c/h2\u003e\n\u003cp\u003eThe gauge is built around the \u003cstrong\u003eWaveshare ESP32-S3 1.85\u0026quot; Round LCD\u003c/strong\u003e module, with a custom PCB providing sensor connections and power management.\u003c/p\u003e\n\u003ch3 id=\"key-components\"\u003eKey Components\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eComponent\u003c/th\u003e\n          \u003cth\u003ePurpose\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eESP32-S3 (N16R8)\u003c/td\u003e\n          \u003ctd\u003eMain processor with WiFi and BLE\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003ePCF85063\u003c/td\u003e\n          \u003ctd\u003eReal-time clock (battery backed)\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eQMI8658\u003c/td\u003e\n          \u003ctd\u003e6-axis IMU (accelerometer + gyroscope)\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eMAX98357A\u003c/td\u003e\n          \u003ctd\u003eI2S audio amplifier (warning beeps)\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"downloads--gauge-supply-pcb\"\u003eDownloads — Gauge Supply PCB\u003c/h3\u003e\n\u003cp\u003eThe power supply and interconnect PCB fits inside the 52mm gauge housing alongside the Waveshare module. KiCad project files and manufacturing outputs:\u003c/p\u003e","title":"Hardware"},{"content":"The Landy Gauge project is now available as open source.\nWhat\u0026rsquo;s Included Firmware — full ESP-IDF source code for the ESP32-S3 gauge Schematics — KiCad circuit designs for the main gauge board and expansion board 3D Models — printable cases for both boards Documentation — build guide, user manual, and this website Features The gauge packs a lot into a 1.85\u0026quot; round LCD:\nDigital compass with magnetometer calibration Tilt meter Inclinometer BLE TPMS tyre pressure monitoring Exhaust gas temperature (K-type thermocouple) Turbo boost pressure Clock with WiFi NTP sync and 34 timezone support Coolant monitoring with fan status Automatic day/night mode Custom vehicle images from SD card Warning audio via I2S amplifier What\u0026rsquo;s Next I\u0026rsquo;ll be adding more detailed build instructions, wiring diagrams, and photos of the build process over the coming weeks. If you build one, I\u0026rsquo;d love to hear about it.\n","permalink":"http://www.toxiccelery.com/blog/project-launch/","summary":"The Landy Gauge project is now open source — firmware, schematics, and 3D models all available.","title":"Project Launch"},{"content":"Overview The Landy Gauge is a compact round instrument display designed for Land Rover vehicles. It features a 360×360 pixel circular screen with touch input, physical navigation buttons, and an expansion board for vehicle signal inputs and outputs.\nThe gauge provides eight display screens that cycle in order:\nClock Boost (turbo boost pressure) EGT (exhaust gas temperature) Cooling (fan status, coolant level, coolant temperature) Tire Pressure (BLE TPMS) Tilt (vehicle roll angle / inclinometer) Incline (vehicle pitch angle) Compass (magnetic heading) Gauges that require the expansion board (Boost, EGT, Compass, Cooling) are automatically skipped if the expansion board is not detected.\nDisplay Modes The gauge supports two display modes:\nDay Mode — White/bright accents on a dark background. Used when vehicle lights are off (or before dusk). Night Mode — Green accents on a dark background with reduced backlight brightness. This colour scheme is selected to reflect the existing landrover Defender gauges. The day and night colours and the accents can be changed in the code.\nWith expansion board: Night mode activates automatically when the sidelights AND headlights (dip or full beam) are both on. This prevents night mode triggering from a momentary headlight flash or parking lights alone.\nWithout expansion board: Night mode is determined automatically by the time of day using a civil twilight calculation (sun 6° below the horizon). The calculation uses the representative latitude of the selected timezone and the current date from the RTC, so it adjusts throughout the year — earlier dusk in winter, later in summer. For accurate results, ensure the correct timezone is selected and the clock has been synced via NTP.\nNavigation Touch Screen The circular screen is divided into touch zones:\nTap left half — Switch to the previous gauge Tap right half — Switch to the next gauge Double-tap centre — Jump directly to the Clock gauge from any screen Long press centre — Gauge-specific action (see individual gauge sections below) Note: Single taps on the centre zone only trigger the double-tap-to-clock detection. All gauge-specific actions require a long press.\nNote: On the Cooling gauge, the long-press zones are different — see the Cooling section for details.\nPhysical Buttons Three physical buttons are available on the Waveshare board:\nNext button (GPIO43) — Switch to the next gauge Previous button (GPIO44) — Switch to the previous gauge Boot button (GPIO0) — Also functions as a next gauge button Next + Previous held together — Emulates a select action (including double-tap-to-clock and long-press actions). A 150 ms tolerance window means you don\u0026rsquo;t need to press both buttons at the exact same instant. Power Management Ignition Detection The gauge monitors the vehicle ignition state through the expansion board:\nIgnition ON — Normal operation. All gauges and sensors are active. Ignition OFF — The gauge enters standby mode: the display turns off, WiFi and Bluetooth scanning stop, and the CPU reduces to 80 MHz to conserve power. Temporary Wake When the ignition is off, any of the following will temporarily wake the display for 5 minutes:\nTouching the screen Holding both physical buttons (Next + Previous) simultaneously After 5 minutes of ignition-off operation, the gauge returns to standby. Any interaction during the temporary wake resets the 5-minute timer.\nIf the ignition comes on during a temporary wake, the gauge stays active permanently.\nInactivity Timeout After 10 minutes of inactivity (no touch or button input) with the ignition on, the gauge automatically returns to the Clock screen.\nGauge Screens 1. Clock Displays an analogue clock face with hour and minute. Time is maintained by an onboard RTC (real-time clock).\nCentre tap action: None (double-tap from any gauge jumps to the Clock screen).\nLong press action: Force an NTP time sync via your iPhone hotspot. The gauge connects to your phone\u0026rsquo;s personal hotspot, synchronises the time via the internet, updates the RTC, then disconnects WiFi. This bypasses the 24-hour cooldown, so you can force a sync at any time regardless of when the last sync occurred.\nNote: An automatic NTP sync also runs once per day using the home WiFi network when it is in range. A 24-hour cooldown prevents unnecessary syncs on short drives. The automatic sync uses the home network; only the manual long-press sync uses the iPhone hotspot.\n2. Boost (Turbo Boost Pressure) Displays turbo boost pressure on an analogue dial gauge. The sensor is a 2-bar MAP (Manifold Absolute Pressure) sensor connected to the ADS1115 ADC on the expansion board.\nThe MAP sensor has a 0.5V offset at zero pressure (0 kPa absolute) and outputs 0–5V over its 0–300 kPa range. The zero-boost reference has been calibrated to the measured atmospheric voltage at the ADC (0.7735V after the resistor divider), so the gauge reads 0 Bar at rest with no boost.\nRange: 0–2.0 Bar (also displayable in PSI: 0–29 PSI) Warning zone: Above 1.5 Bar — the needle and tick marks turn red/orange Vacuum is not shown — negative pressure reads as zero Long press action: Toggle display units between Bar and PSI. The preference is saved and persists across reboots.\n3. EGT (Exhaust Gas Temperature) Displays exhaust gas temperature from an MCP9600 thermocouple converter on the expansion board.\nRange: 0–900°C (or 0–1650°F) Warning (yellow): Above 680°C / 1256°F Danger (red): Above 750°C / 1382°F Audio alerts play when entering each zone:\nWarning (680°C): Plays egtwar.mp3 once Danger (750°C): Plays egtdang.mp3 once When the EGT reaches the warning or danger threshold, the gauge will automatically switch to the EGT screen if you are viewing another gauge.\nLong press action: Toggle display units between °C and °F. The preference is saved and persists across reboots.\n4. Cooling Displays the cooling system status in three sectors:\nTop-left — Fan Low: Shows a rotating fan icon when the low-speed cooling fan is active (detected via expansion board input IN3). Top-right — Fan High: Shows a rotating fan icon when the high-speed cooling fan is active (detected via expansion board input IN4). Bottom — Coolant Level \u0026amp; Temperature: Shows a radiator icon with a water level indicator. Coolant level is monitored via a float switch (expansion board input IN5). Coolant temperature is read from an NTC sender via the ADS1115 ADC. Coolant Temperature Display:\nHidden below 60°C Normal colour above 60°C Yellow warning at 110°C Red danger at 115°C — plays an overheat audio alert The coolant level sensor uses an intelligent filter that considers vehicle tilt and G-forces (from the onboard IMU) to avoid false alarms caused by fluid sloshing during braking, acceleration, or cornering. A low-coolant alarm is only confirmed after 3 seconds of consistent low readings while the vehicle is settled.\nAutomatic alarm switch: The gauge automatically switches to the Cooling screen if fan low activates, coolant level drops, or coolant overtemperature is detected.\nCooling Gauge Touch Zones The Cooling gauge has three long-press zones (different from other gauges):\nScreen Area Long Press Action Top-left (over the Fan Low icon) Toggle manual fan low override ON/OFF Top-right (over the Fan High icon) Toggle manual fan high override ON/OFF Bottom half Toggle wading mode ON/OFF A confirmation beep sounds when each long press is accepted.\nManual Fan Override Press and hold over the fan low or fan high icon to manually activate or deactivate that fan relay:\nFan Low — Controls expansion board output GPA1 Fan High — Controls expansion board output GPA2 Audio confirmation plays when toggling (fanLowOn.mp3 / flooff.mp3, fhion.mp3 / fhioff.mp3).\nManual fan overrides automatically turn off after 5 minutes to prevent draining the vehicle battery. The off audio plays when the timeout expires.\nImportant: Manual fan override is blocked while wading mode is active. Fans cannot be manually toggled until wading mode is turned off.\nWading Mode Long-press the bottom half of the Cooling screen to toggle wading mode:\nWADING ON: Activates the wading output relay (expansion board output GPA0 / OUT1). Both fan icons turn red. Fan rotation animation stops. A \u0026ldquo;WADING\u0026rdquo; label appears on screen. Plays wadeOn.mp3. WADING OFF: Deactivates the relay. Fan icons return to normal colours. Plays wadeOff.mp3. When wading mode is activated:\nAny active manual fan overrides are automatically turned off You cannot navigate away from the Cooling gauge while wading mode is active — this prevents accidentally forgetting that wading mode is engaged Manual fan toggling is disabled Safety: Wading mode persists even if the gauge is reinitialised. It must be explicitly turned off by another long press.\n5. Tire Pressure (BLE TPMS) Displays tire pressure, temperature, and sensor battery level for all four tires. Data is received wirelessly via Bluetooth Low Energy (BLE) from TPMS sensors mounted on each wheel.\nThe display shows a roof-view outline of the vehicle with pressure readings at each corner:\nFront Left — top-left Front Right — top-right Rear Left — bottom-left Rear Right — bottom-right Each wheel position shows pressure, temperature, and battery percentage when data is available. Battery percentage is colour-coded:\nRed — below 2% Yellow — 2–5% Normal (white/green) — above 5% Long press action: Cycle through display unit combinations:\nBAR / °C PSI / °C BAR / °F PSI / °F The preference is saved and persists across reboots.\nAutomatic alarm switch: The gauge automatically switches to the Tire Pressure screen if:\nAny tire drops below 15 PSI (1.03 Bar) A rapid pressure drop of 5 PSI or more within 60 seconds is detected on any tire Battery alarm on ignition: When the ignition is turned on, the gauge waits 15 seconds for BLE sensor data to arrive, then checks all TPMS sensor batteries. If any battery is below 2% (red zone), the gauge plays an audio warning and automatically switches to the Tire Pressure screen. This check only runs once per ignition cycle and will not retrigger within 1 hour.\nNote: BLE scanning runs continuously in the background. When viewing the Tire Pressure gauge, a faster scan rate is used for quicker updates.\n6. Tilt (Inclinometer) Displays the vehicle\u0026rsquo;s roll angle using the onboard IMU (Inertial Measurement Unit). A rear-view image of the vehicle tilts to show the current inclination.\nNormal (white/green): 0–29° Yellow warning zone: 30°+ — triggers a warning audio alert Red danger zone: 35°+ — triggers a danger audio alert with more frequent beeps Long press action: Zero the tilt gauge at the current angle. This sets the current physical orientation as the 0° reference point. Useful for calibrating on uneven ground. The offset is saved and persists across reboots.\nAutomatic alarm switch: The gauge automatically switches to the Tilt screen when roll exceeds 30°.\nNote: After the alarm condition clears, the gauge automatically returns to your previous screen after 30 seconds.\n7. Incline (Pitch Angle) Displays the vehicle\u0026rsquo;s pitch angle (nose up/down) using the onboard IMU. A side-view image of the vehicle rotates to match the current pitch, with arc scales at the top and bottom of the display showing the inclination.\nRange: ±45° No warning zones — this gauge is informational only The arc scales feature graduated tick marks with small triangular pointers that track the current angle. The tick mark positions and labels change to match the selected display mode.\nLong press action: Cycle through three display unit modes:\nMode Scale Labels Example Ticks Degrees 15, 30, 45 Degrees of inclination 1:X Gradient 1:3, 1:2, 1:1 Rise-to-run ratio % Slope 25%, 50%, 75%, 100% Percentage grade The selected mode is saved and persists across reboots.\nZeroing: Not available via long press — zero calibration is performed on the Tilt gauge and applies the same IMU offset.\nNote: A low-pass damping filter smooths the display for a steadier readout while driving on uneven terrain.\n8. Compass Displays a compass rose with the current magnetic heading from a LIS3MDL magnetometer on the expansion board. The compass card rotates to show cardinal (N, E, S, W) and intercardinal directions with a fixed heading indicator at top.\nLong press action: Toggle compass calibration mode:\nFirst long press — Enters calibration mode. A \u0026ldquo;CALIBRATING\u0026rdquo; overlay appears. Slowly rotate the vehicle (or the gauge unit) through a full 360° in all orientations to allow the magnetometer to sample the full magnetic field. Second long press — Exits calibration mode. The hard-iron offsets and soft-iron scale factors are calculated, applied, and saved to permanent storage. The calibration data persists across reboots.\nAutomatic Alarm Switching The gauge monitors several alarm conditions in the background and will automatically switch to the relevant screen when triggered. Alarms are checked in priority order:\nPriority Alarm Condition Target Screen 1 (Highest) Tilt ≥ 30° Tilt 2 EGT over-temperature EGT 3 Cooling alarm (fan active, coolant low, or overtemp) Cooling 4 TPMS rapid pressure drop (≥5 PSI in 60s) Tire Pressure 5 (Lowest) TPMS low pressure (any tire \u0026lt; 15 PSI) Tire Pressure After an alarm switch:\nA 5-second lockout prevents the alarm from fighting with manual navigation If the alarm condition clears, the gauge returns to your previous screen after 30 seconds Manually navigating away from the alarm screen cancels the auto-return Audio Alerts The gauge plays audio alerts through the onboard speaker for various events. Audio files are stored on the SD card:\nEvent Audio File Tilt warning (30°+) warnroll.mp3 Tilt danger (35°+) dangroll.mp3 EGT warning (680°C+) egtwar.mp3 EGT danger (750°C+) egtdang.mp3 Coolant overtemperature overheat.mp3 Coolant level low coollow.mp3 Tire pressure warning tirewar.mp3 TPMS battery low tirebat.mp3 Wading mode ON wadeOn.mp3 Wading mode OFF wadeOff.mp3 Fan Low manual ON fanLowOn.mp3 Fan Low manual OFF flooff.mp3 Fan High manual ON fhion.mp3 Fan High manual OFF fhioff.mp3 Button/action confirmation Short beep (internal) Custom Vehicle Images The Tilt, Incline, Tire Pressure, and Clock gauges display custom images. By default, these are the compiled-in Land Rover 110 images and logo, but you can replace them with your own by placing .bin files on the SD card.\nExpected Files Place any or all of the following files in the root of the SD card:\nFile Gauge Mode Default Size rear.bin Tilt Day 204×235 reardark.bin Tilt Night 204×235 side.bin Incline Day 292×117 sidedark.bin Incline Night 292×117 roof.bin Tire Pressure Day 150×315 roofdark.bin Tire Pressure Night 150×315 logo.bin Clock Day 113×40 logodark.bin Clock Night 113×40 Each file is optional — if a file is missing, the compiled-in default is used for that slot. You can replace just one image (e.g. only rear.bin) without needing to provide all eight.\nImage Format Images must be in LVGL binary format (.bin): a 4-byte LVGL header followed by raw RGB565 + alpha pixel data (3 bytes per pixel). Maximum image dimensions are 400×400.\nNote: Filenames must follow 8.3 format (≤8 characters + .bin) since the SD card uses FAT without long filename support.\nGenerating .bin Files Use the included conversion script:\npython3 convert_image.py --bin This converts the source PNGs in the images/ folder to both C arrays and .bin files. The .bin files are written to the sdcard/ directory — copy them to the root of your SD card.\nTo generate only .bin files (skip C array output):\npython3 convert_image.py --bin-only To create custom images, replace the PNGs in the images/ folder with your own vehicle artwork (RGBA format, transparent background), then re-run the conversion script.\nLoading Behaviour Custom images are loaded once at boot (after SD card mount) Images are loaded into PSRAM and remain in memory until power off Invalid or corrupt files are silently skipped with a warning in the serial log Removing the SD card after boot does not affect loaded images Settings Persistence The following settings are saved to non-volatile storage (NVS) and persist across power cycles:\nBoost gauge units (Bar / PSI) Tire pressure display mode (Bar/PSI, °C/°F) EGT units (°C / °F) Tilt zero-offset angle Incline display mode (degrees / 1:X / % slope) Incline zero-offset angle (shared with Tilt) Compass calibration data (hard-iron offsets and soft-iron scales) TPMS sensor associations (BLE MAC addresses for each wheel position) NTP last-sync timestamp (24-hour cooldown) Settings are saved automatically when changed and restored at boot.\nExpansion Board Connections Digital Inputs (active high) Input Signal Description IO0 Reserved Reserved for future expansion IO1 Ignition Ignition on signal IO2 Sidelights Sidelights / parking lights on signal IO3 Fan Low Low-speed cooling fan active IO4 Fan High High-speed cooling fan active IO5 Coolant Low Coolant level float switch IO6 Low Beam Dipped headlights on signal IO7 Full Beam Full beam headlights on signal Digital Outputs Output Pin Function OUT1 / GPA0 MCP23017 GPA0 Wading mode relay Fan Low MCP23017 GPA1 Manual fan low speed relay Fan High MCP23017 GPA2 Manual fan high speed relay Analogue Inputs (ADS1115 ADC) Channel Signal Description AIN0 MAP Sensor 2-bar MAP sensor (0.5V offset, 0–5V output, via R26/R28 resistor divider) AIN1 Coolant Temp NTC temperature sender (Land Rover type, 50–120°C range) Magnetometer LIS3MDL 3-axis magnetometer for compass heading Thermocouple MCP9600 thermocouple-to-digital converter for EGT Quick Reference Action How To Next gauge Tap right side of screen, or press Next button Previous gauge Tap left side of screen, or press Prev button Jump to Clock Double-tap centre of screen, or double-tap Next+Prev combo Gauge action Long-press centre of screen, or hold Next+Prev combo for 1 second Toggle fan low (Cooling gauge) Long-press top-left of screen (over fan low icon) Toggle fan high (Cooling gauge) Long-press top-right of screen (over fan high icon) Toggle wading (Cooling gauge) Long-press bottom half of screen Force NTP sync (Clock gauge) Long-press centre of clock (uses iPhone hotspot) Toggle boost units Long-press centre of boost gauge Toggle EGT units Long-press centre of EGT gauge Toggle TPMS units Long-press centre of tire pressure gauge Zero tilt gauge Long-press centre of tilt gauge Cycle incline units Long-press centre of incline gauge Calibrate compass Long-press centre of compass gauge (long-press again to finish) Emulate Select action Hold Next + Previous buttons together Wake from standby Touch screen or hold both physical buttons (5-minute temporary wake) ","permalink":"http://www.toxiccelery.com/user-manual/","summary":"\u003ch2 id=\"overview\"\u003eOverview\u003c/h2\u003e\n\u003cp\u003eThe Landy Gauge is a compact round instrument display designed for Land Rover vehicles. It features a 360×360 pixel circular screen with touch input, physical navigation buttons, and an expansion board for vehicle signal inputs and outputs.\u003c/p\u003e\n\u003cp\u003eThe gauge provides eight display screens that cycle in order:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003eClock\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBoost\u003c/strong\u003e (turbo boost pressure)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eEGT\u003c/strong\u003e (exhaust gas temperature)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCooling\u003c/strong\u003e (fan status, coolant level, coolant temperature)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTire Pressure\u003c/strong\u003e (BLE TPMS)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTilt\u003c/strong\u003e (vehicle roll angle / inclinometer)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eIncline\u003c/strong\u003e (vehicle pitch angle)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCompass\u003c/strong\u003e (magnetic heading)\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eGauges that require the expansion board (Boost, EGT, Compass, Cooling) are automatically skipped if the expansion board is not detected.\u003c/p\u003e","title":"User Manual"}]