Background: I need more outputs (RC channel PWM outputs, GPIO outputs) for my KakuteH7 quadcopter build.
Since all the serial ports are already used up for various sensors, I’d like to find a module that connects to I2C.
Does such an animal exist?
If not, is there protocol to be used so I can design this myself (I have the ability).
Yes, PCA9685-like boards exist for Raspberry Pi-like computers, and you can theoretically stack a lot of these on the same bus with different I2C addresses to control just a lot of servos. But no support for that is implemented in Ardupilot right now (source: libraries/SRV_Channel/SRV_Channels.cpp in master).
While one can write their own driver, I am not sure that supporting more than 32 servo outputs in a generic way is feasible in the current Ardupilot framework (rather, your new code shall also make all the servo output decisions as well).
Though Kakute H7 doesnt have CAN, Kakute H7 has plenty serial ports and if you are willing to do the work, I think you could get CAN working on that board. I am pretty sure you can hardware reconfigure one set Kakute H7 serial port pins as CAN. You need to look in the datasheet for STM32H743 and then the hwdef.dat file for KakuteH7 in ardupilot/libraries/AP_Hal_Chi bios/hwdef/ directory on github. Then you need a can interface module based on e.g. TJA1051. You can get from ebay or aliexpress to connect to the pins. Finally you need to build a custom version of Ardupilot based on Kakute hwdef but changing the serial port to CAN.
Somewhat involved but all the documentation to do all these things is available on Ardupilot docs site. Probably easier than trying to get a custom I2c to PWM ic working.
That seems like a lot more than $60 worth of work, which is what it would cost to replace the Kakute with a more capable board like the TBS Lucid H7 or similar.