@gunnm I do not have any experience with ESPHOME, I use Arduino and write directly with C, C++! The PaHub (named after the 'Grove port A' I2C port in the M5Stack system) is an i2c expander. So if you have a bunch of i2c devices they can be plugged in and "polled" and read over a single i2c connection. The devices can even have the same i2c address, like having two ENV sensors, without conflict. Works very well. 'Polled' is where sensors are read one at a time and their value 'at that moment' is read and transmitted to the Atom
The PbHub (also polled) on the other hand connects to your controller the same way, i2c, but hosts almost any 'discrete' sensor like a switch or a lamp (GPIO, PWM, Servo control, ADC sampling, RGB light control) but remember that it has to squish the signals of all those devices into one i2c channel, so some very high speed devices may jitter. Very short signals such as an encoder blip could be missed altogether, periodically.