I'm about done with a stand-alone G5 instrument using the 4" 480x480 LCD, it's associated ESP-32-S3 LCD Driver module and an RP2040. By "stand-alone" I mean all the display logic is in the device; it's not an HDMI monitor dependent on another G5 add-on.
The basic architecture uses the ESP32 as a custom MobiFlight device which drives the display and handles communication. I wanted the device to have a power button, power LED and a single encoder + button to mimic the real thing. However I couldn't figure out how to free up the five GPIO pins I would need, so I set up an RP2040 as a I2C slave to manage the inputs and send the input signals (rotary inc/dec, button press, etc) back to the ESP32.
After chatting with @elder star I think I should have used the RP2040 as the MobiFlight device and made the ESP32 the slave device to manage all the display calculations and functions. (So I'd be sending the all the MSFS variables over the i2c bus to the display.) This would balance the load across the two devices better and possibly improve frame rates.
Currently I only have the HSI coded. I'll try the different approach to do the PFD mode next.
I've tried to incorporate all the features of the real G5 as best as I could figure them out from the manual, YouTube videos, and comparing it to the G1000 functions. It has GPS and radio nav modes, glideslope and CDI offset display. The heading bug moves with the encoder and the menu function is implemented (adjust heading and course, but no "settings" menu yet.) I've not done bearing pointers yet, still debating if it's worth the work.
The code is up on my github, but I'll say that it needs a significant refactor. I made some bad, early decisions with the menu feature and it's kind of messy. I'm going to see how the PFD code turns out before refactoring. Still, this was a very fun challenge!