I have a device based upon an ESP32 and I would like to add a cellular modem to it. Ideally, it would either work globally or have various versions available for different countries. For now I'm primarily concerned with the US and Canada. My board currently has I2C and SPI available, but not a UART or any other GPIOs for bit banging. Ideally this would be a card I can plug into an expansion header on the I2C bus. I control the board, so I can add headers in whatever physical configuration is needed.
I'm confused about what I need to move data and SMS (although I would be very happy with just data if I can not have both). I'm not at all concerned about voice, as this is an IoT application. I see there are modems available in 2G, 3G, LTE and other things I'm not familiar with. I see Particle makes a few but it appears that their offerings are locked to their cloud. Mostly I want to move data without being locked to a particular vendor cloud. Can that be done? Are protocols, like RPC / HTTP / WS implemented in the modem, or by my application above it?
I'm sure I have other questions once I understand enough to ask them. Thank you!