# Supported Module Functions ## Modem - GSM Modem Constructor | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | TinyGsm(Stream& stream) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | TinyGsm(Stream& stream, int8_t resetPin) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ## Modem - Basic functions | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | begin(const char* pin=nullptr) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | init(const char* pin=nullptr) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | sendAT(Args... cmd) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | setBaud(uint32_t baud) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | setDefaultBaud(uint32_t baud) | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | forceModemBaud(StreamObject& at_serial, uint32_t targetBaud) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | testAT(uint32_t timeout_ms=10000L) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | waitResponse(uint32_t timeout_ms, String& data, [GsmConstStr](_tiny_gsm_common_8h.md#a9c8c9c8249f99863e157f8fae76e7cab) r1=[GFP(ModemConfig::GSM_OK)](_tiny_gsm_common_8h.md#aeb13a6f7de94e1e36a4ecad3d1abb6d8), [GsmConstStr](_tiny_gsm_common_8h.md#a9c8c9c8249f99863e157f8fae76e7cab) r2=[GFP(ModemConfig::GSM_ERROR)](_tiny_gsm_common_8h.md#aeb13a6f7de94e1e36a4ecad3d1abb6d8), [GsmConstStr](_tiny_gsm_common_8h.md#a9c8c9c8249f99863e157f8fae76e7cab) r3=nullptr, [GsmConstStr](_tiny_gsm_common_8h.md#a9c8c9c8249f99863e157f8fae76e7cab) r4=nullptr, [GsmConstStr](_tiny_gsm_common_8h.md#a9c8c9c8249f99863e157f8fae76e7cab) r5=nullptr, [GsmConstStr](_tiny_gsm_common_8h.md#a9c8c9c8249f99863e157f8fae76e7cab) r6=nullptr, [GsmConstStr](_tiny_gsm_common_8h.md#a9c8c9c8249f99863e157f8fae76e7cab) r7=nullptr, [GsmConstStr](_tiny_gsm_common_8h.md#a9c8c9c8249f99863e157f8fae76e7cab) r8=nullptr) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | waitResponse(uint32_t timeout_ms, [GsmConstStr](_tiny_gsm_common_8h.md#a9c8c9c8249f99863e157f8fae76e7cab) r1=[GFP(ModemConfig::GSM_OK)](_tiny_gsm_common_8h.md#aeb13a6f7de94e1e36a4ecad3d1abb6d8), [GsmConstStr](_tiny_gsm_common_8h.md#a9c8c9c8249f99863e157f8fae76e7cab) r2=[GFP(ModemConfig::GSM_ERROR)](_tiny_gsm_common_8h.md#aeb13a6f7de94e1e36a4ecad3d1abb6d8), [GsmConstStr](_tiny_gsm_common_8h.md#a9c8c9c8249f99863e157f8fae76e7cab) r3=nullptr, [GsmConstStr](_tiny_gsm_common_8h.md#a9c8c9c8249f99863e157f8fae76e7cab) r4=nullptr, [GsmConstStr](_tiny_gsm_common_8h.md#a9c8c9c8249f99863e157f8fae76e7cab) r5=nullptr, [GsmConstStr](_tiny_gsm_common_8h.md#a9c8c9c8249f99863e157f8fae76e7cab) r6=nullptr, [GsmConstStr](_tiny_gsm_common_8h.md#a9c8c9c8249f99863e157f8fae76e7cab) r7=nullptr, [GsmConstStr](_tiny_gsm_common_8h.md#a9c8c9c8249f99863e157f8fae76e7cab) r8=nullptr) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | waitResponse([GsmConstStr](_tiny_gsm_common_8h.md#a9c8c9c8249f99863e157f8fae76e7cab) r1=[GFP(ModemConfig::GSM_OK)](_tiny_gsm_common_8h.md#aeb13a6f7de94e1e36a4ecad3d1abb6d8), [GsmConstStr](_tiny_gsm_common_8h.md#a9c8c9c8249f99863e157f8fae76e7cab) r2=[GFP(ModemConfig::GSM_ERROR)](_tiny_gsm_common_8h.md#aeb13a6f7de94e1e36a4ecad3d1abb6d8), [GsmConstStr](_tiny_gsm_common_8h.md#a9c8c9c8249f99863e157f8fae76e7cab) r3=nullptr, [GsmConstStr](_tiny_gsm_common_8h.md#a9c8c9c8249f99863e157f8fae76e7cab) r4=nullptr, [GsmConstStr](_tiny_gsm_common_8h.md#a9c8c9c8249f99863e157f8fae76e7cab) r5=nullptr, [GsmConstStr](_tiny_gsm_common_8h.md#a9c8c9c8249f99863e157f8fae76e7cab) r6=nullptr, [GsmConstStr](_tiny_gsm_common_8h.md#a9c8c9c8249f99863e157f8fae76e7cab) r7=nullptr, [GsmConstStr](_tiny_gsm_common_8h.md#a9c8c9c8249f99863e157f8fae76e7cab) r8=nullptr) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | getConfiguredModem() | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | getModemInfo() | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | getModemName() | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | getModemManufacturer() | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | getModemModel() | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | getModemRevision() | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | getModemSerialNumber() | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | factoryDefault() | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ## Modem - Power functions | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | restart(const char* pin=nullptr) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | powerOff() | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | radioOff() | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | sleepEnable(bool enable=true) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | setPhoneFunctionality(uint8_t fun, bool reset=false) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ## Modem - Generic network functions | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | getLocalIPSecure() | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | getRegistrationStatus() | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | isNetworkConnected() | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | waitForNetwork(uint32_t timeout_ms=60000L, bool check_signal=false) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | getSignalQuality() | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | getLocalIP() | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | localIP() | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ## Modem - Network mode / type / technology functions | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | getNetworkModes() | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | setRadioAccessTechnology(uint8_t, uint8_t) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | | getCurrentRadioAccessTechnology() | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | | getNetworkMode() | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | setNetworkMode(uint8_t mode) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | getPreferredModes() | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | getPreferredMode() | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | setPreferredMode(uint8_t mode) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | getNetworkSystemMode(bool& n, int16_t& stat) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | setNetworkSystemMode(bool n) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ## Modem - SIM card functions | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | simUnlock(const char* pin) | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | getSimCCID() | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | getIMEI() | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | getIMSI() | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | getSimStatus(uint32_t timeout_ms=10000L) | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ## Modem - Cellular data functions | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | dataConnect(const char*apn, const char* user=nullptr, const char* pwd=nullptr) | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | dataDisconnect() | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | isDataConnected() | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | gprsConnect(const char*apn, const char* user=nullptr, const char* pwd=nullptr) | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | gprsDisconnect() | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | isGprsConnected() | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | getOperator() | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | getProvider() | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ## Modem - WiFi functions | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | networkConnect(const char*ssid, const char* pwd) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | networkDisconnect() | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ## Modem - Socket listening functions | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | maintain() | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ## Modem - Secure socket layer (SSL) certificate management functions | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | loadCACert(uint8_t certNumber, const char* cert, const uint16_t len) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | loadCertificate(const char*certificateName, const char* cert, const uint16_t len) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | loadCertificate(const char* certificateName, GsmConstStr cert, const uint16_t len) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | loadClientCert(uint8_t certNumber, const char* cert, const uint16_t len) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | loadCertificate(const String& certificateName, const String& cert, const uint16_t len) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | loadPrivateKey(uint8_t keyNumber, const char* key, const uint16_t len) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | loadCertificateByNumber(CertificateType cert_type, uint8_t certNumber, const char* cert, const uint16_t len) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | loadCertificateByNumber(CertificateType cert_type, uint8_t certNumber, GsmConstStr cert, const uint16_t len) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | printCertificate(const char* filename, Stream& print_stream) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | deleteCertificateByNumber(CertificateType cert_type, uint8_t certNumber) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | printCertificate(const String& filename, Stream& print_stream) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | convertCertificate(CertificateType cert_type, const char* filename) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | printCertificateByNumber(CertificateType cert_type, uint8_t certNumber, Stream& print_stream) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | convertCertificate(CertificateType cert_type, const String& filename) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | convertCACertificate(const char* ca_cert_name) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | convertCACertificate(const String& ca_cert_name) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | convertClientCertificates(const char*client_cert_name, const char* client_cert_key) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | convertClientCertificates(const String& client_cert_name, const String& client_cert_key) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | convertPSKTable(const char* psk_table_name) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | convertPSKTable(const String& psk_table_name) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ## Modem - SSL context functions | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | configureSSLContext(uint8_t context_id, SSLAuthMode sslAuthMode, SSLVersion sslVersion) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | configureSSLContext(uint8_t context_id, SSLAuthMode sslAuthMode, SSLVersion sslVersion, const char*CAcertName, const char* clientCertName, const char* clientKeyName) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | configureSSLContext(uint8_t context_id) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | configureSSLSNI(uint8_t context_id, const char* sni) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | applySSLCertificates(uint8_t mux, uint8_t context_id, SSLAuthMode sslAuthMode, const char*CAcertName, const char* clientCertName, const char* clientKeyName) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | applySSLCertificates(uint8_t mux, uint8_t context_id) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | applySSLPSK(uint8_t mux, uint8_t context_id, const char* pskTableName) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | applySSLPSK(uint8_t mux, uint8_t context_id) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | linkSSLContext(uint8_t mux, uint8_t context_id) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ## Modem - Phone call functions | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | callAnswer() | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ❌ | ✅ | | setGsmBusy(bool busy=true) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | | callNumber(const String& number) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | | callHangup() | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | | dtmfSend(char cmd, int duration_ms=100) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ## Modem - Audio functions | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | audioSetHeadphones() | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | setVolume(uint8_t volume=50) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | | audioSetSpeaker() | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | getVolume() | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | | audioMuteMic(bool mute) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | setMicVolume(uint8_t channel, uint8_t level) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | | setAudioChannel(uint8_t channel) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | | playToolkitTone(uint8_t tone, uint32_t duration) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ## Modem - Text messaging (SMS) functions | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | sendUSSD(const String& code) | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | | deleteAllSMS() | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | sendSMS(const String& number, const String& text) | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | sendSMS_UTF16(const char*const number, const void* text, size_t len) | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ## Modem - GSM location functions | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | getGsmLocationRaw() | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | | getGsmLocation() | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | | getGsmLocation(float*lat, float* lon, float*accuracy=0, int* year=0, int*month=0, int* day=0, int*hour=0, int* minute=0, int* second=0) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | | getGsmLocationTime(int*year, int* month, int*day, int* hour, int*minute, int* second) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ## Modem - GPS (GNSS, GLONASS) functions | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | enableGPS() | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | | disableGPS() | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | | getGPSraw() | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | | getGPS(float*lat, float* lon, float*speed=0, float* alt=0, int*vsat=0, int* usat=0, float*accuracy=0, int* year=0, int*month=0, int* day=0, int*hour=0, int* minute=0, int* second=0) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | | getGPSTime(int*year, int* month, int*day, int* hour, int*minute, int* second) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | | setGNSSMode(uint8_t mode, bool dpo) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | getGNSSMode() | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ## Modem - NTP server functions | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | NTPServerSync(const char* server="pool.ntp.org", int TimeZone=0) | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | | NTPServerSync(const String& server, int TimeZone=0) | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | | waitForTimeSync(uint16_t timeout_s=120) | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ## Modem - Time functions | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | getGSMDateTime(TinyGSMDateTimeFormat format) | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | setTimeZone(int8_t timezone, bool enable_sync=true) | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | getNetworkTime(int*year, int* month, int*day, int* hour, int*minute, int* second, float* timezone) | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | setTimeSyncInterval(uint16_t seconds) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | getNetworkUTCTime(int*year, int* month, int*day, int* hour, int*minute, int* second, float* timezone) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | getNetworkEpoch([TinyGSM_EpochStart](_tiny_gsm_time_8tpp.md#a5addcc95a1822928505c18c8b9b9a277) epoch=[TinyGSM_EpochStart::UNIX](_tiny_gsm_time_8tpp.md#a5addcc95a1822928505c18c8b9b9a277a15395d0642f86c5992abbca5e56e2b29)) | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ## Modem - Battery functions | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | getBattVoltage() | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | | getBattPercent() | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | | getBattChargeState() | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | | getBattStats(int8_t& chargeState, int8_t& percent, int16_t& milliVolts) | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ## Modem - Temperature functions | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | getTemperature() | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ## Modem - Utilities | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | streamPrint(T last) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | streamPrint(T head, Args... tail) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | streamWrite(const char* data, uint16_t len) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | streamWrite(GsmConstStr data, uint16_t len) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | streamClear() | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | streamDump(int16_t expected_len) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ## Modem - XBee identifier functions | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | getBeeType() | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | getBeeName() | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | getSeries(void) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ## Modem - XBee specific utilities | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | commandMode(uint8_t retries=5) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | writeChanges(void) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | exitCommand(void) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | exitAndFail(void) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | readResponseString(uint32_t timeout_ms=1000L) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | readResponseInt(uint32_t timeout_ms=1000L) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | sendATGetString(GsmConstStr cmd) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | changeSettingIfNeeded(commandType cmd, uint16_t newValue, uint32_t timeout_ms=1000L) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | changeSettingIfNeeded(commandType cmd, String newValue, uint32_t timeout_ms=1000L) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ## TCP Client - Client constructors and initialization | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | TinyGsmClient() | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | TinyGsmClient(TinyGsm& modem) | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | | TinyGsmClient(TinyGsm& modem, uint8_t mux=0) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | init(TinyGsm* modem) | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | | init(TinyGsm* modem, uint8_t mux) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | init(TinyGsm* modem, uint8_t mux=0) | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ## TCP Client - Arduino Client interface | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | connect(const char* host, uint16_t port, int timeout_s) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | connect(IPAddress ip, uint16_t port, int timeout_s) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | connect(const char* host, uint16_t port) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | connect(IPAddress ip, uint16_t port) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | stop(uint32_t maxWaitMs) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | stop() | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | write(const uint8_t* buf, size_t size) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | write(uint8_t c) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | available() | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | read(uint8_t* buf, size_t size) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | read() | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | peek() | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | flush() | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | connected() | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ## TCP Client - Extended Client API | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | remoteIP() | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | getMux() | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | getConnectionID() | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | beginWrite(uint16_t size) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | | endWrite(uint16_t expected_size=0) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ## Secure Client - Constructors and initialization | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | TinyGsmClientSecure() | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | TinyGsmClientSecure(TinyGsm& modem) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | | TinyGsmClientSecure(TinyGsm& modem, uint8_t mux=0) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | TinyGsmClientSecure(TinyGsm& modem, uint8_t mux, uint8_t sslCtxIndex) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | init(TinyGsm* modem) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | | init(TinyGsm* modem, uint8_t mux) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | init(TinyGsm* modem, uint8_t mux=0) | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ## Secure Client - Arduino Client interface | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | connect(const char* host, uint16_t port, int timeout_s) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | connect(IPAddress ip, uint16_t port, int timeout_s) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | connect(const char* host, uint16_t port) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | connect(IPAddress ip, uint16_t port) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | stop(uint32_t maxWaitMs) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | stop() | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | write(const uint8_t* buf, size_t size) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | write(uint8_t c) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | available() | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | read(uint8_t* buf, size_t size) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | read() | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | peek() | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | flush() | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | connected() | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ## Secure Client - Configuration | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | setSSLContextIndex(uint8_t sslCtxIndex) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | setStrictSSL(bool strict) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ## Secure Client - Extended Client API | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | remoteIP() | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | getMux() | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | getConnectionID() | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | beginWrite(uint16_t size) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | | endWrite(uint16_t expected_size=0) | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ## Secure Context - Constructors and initialization | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | TinyGsmSecureContext() | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | TinyGsmSecureContext(TinyGsm& modem, uint8_t contextIndex=TINY_GSM_DEFAULT_SSL_CTX) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | TinyGsmSecureContext(TinyGsm& modem, int contextIndex) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | TinyGsmSecureContext(TinyGsm& modem, [SSLAuthMode](_tiny_gsm_s_s_l_8tpp.md#ae4aaaef78c1c56ea03b96c5d9fbc7de6) sslAuthMode, [SSLVersion](_tiny_gsm_s_s_l_8tpp.md#a4cec5319261492fb0afbc8c3aded7055) sslVersion=[SSLVersion::TLS1_2](_tiny_gsm_s_s_l_8tpp.md#a4cec5319261492fb0afbc8c3aded7055a856386e3fab2cb40740622b380459862), const char*CAcertName=nullptr, const char* clientCertName=nullptr, const char* clientKeyName=nullptr) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | TinyGsmSecureContext(TinyGsm& modem, uint8_t contextIndex, [SSLAuthMode](_tiny_gsm_s_s_l_8tpp.md#ae4aaaef78c1c56ea03b96c5d9fbc7de6) sslAuthMode, [SSLVersion](_tiny_gsm_s_s_l_8tpp.md#a4cec5319261492fb0afbc8c3aded7055) sslVersion=[SSLVersion::TLS1_2](_tiny_gsm_s_s_l_8tpp.md#a4cec5319261492fb0afbc8c3aded7055a856386e3fab2cb40740622b380459862), const char*CAcertName=nullptr, const char* clientCertName=nullptr, const char* clientKeyName=nullptr) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | TinyGsmSecureContext(TinyGsm& modem, const char*pskIdent, const char* psKey, [SSLVersion](_tiny_gsm_s_s_l_8tpp.md#a4cec5319261492fb0afbc8c3aded7055) sslVersion=[SSLVersion::TLS1_2](_tiny_gsm_s_s_l_8tpp.md#a4cec5319261492fb0afbc8c3aded7055a856386e3fab2cb40740622b380459862)) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | TinyGsmSecureContext(TinyGsm& modem, uint8_t contextIndex, const char*pskIdent, const char* psKey, [SSLVersion](_tiny_gsm_s_s_l_8tpp.md#a4cec5319261492fb0afbc8c3aded7055) sslVersion=[SSLVersion::TLS1_2](_tiny_gsm_s_s_l_8tpp.md#a4cec5319261492fb0afbc8c3aded7055a856386e3fab2cb40740622b380459862)) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | TinyGsmSecureContext(TinyGsm& modem, const char* pskTableName, [SSLVersion](_tiny_gsm_s_s_l_8tpp.md#a4cec5319261492fb0afbc8c3aded7055) sslVersion=[SSLVersion::TLS1_2](_tiny_gsm_s_s_l_8tpp.md#a4cec5319261492fb0afbc8c3aded7055a856386e3fab2cb40740622b380459862)) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | TinyGsmSecureContext(TinyGsm& modem, uint8_t contextIndex, const char* pskTableName, [SSLVersion](_tiny_gsm_s_s_l_8tpp.md#a4cec5319261492fb0afbc8c3aded7055) sslVersion=[SSLVersion::TLS1_2](_tiny_gsm_s_s_l_8tpp.md#a4cec5319261492fb0afbc8c3aded7055a856386e3fab2cb40740622b380459862)) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | TinyGsmSecureContext(TinyGsm& modem, int contextIndex, const char* pskTableName, [SSLVersion](_tiny_gsm_s_s_l_8tpp.md#a4cec5319261492fb0afbc8c3aded7055) sslVersion=[SSLVersion::TLS1_2](_tiny_gsm_s_s_l_8tpp.md#a4cec5319261492fb0afbc8c3aded7055a856386e3fab2cb40740622b380459862)) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | init(TinyGsm* modem, uint8_t contextIndex=TINY_GSM_DEFAULT_SSL_CTX) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | isAttached() | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | getSSLContextIndex() | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ## Secure Context - Configuration functions | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | setSSLAuthMode(SSLAuthMode mode) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | setSSLVersion(SSLVersion version) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ## Secure Context - Certificate assignment functions | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | setCACertName(const char* CAcertName) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | setCACertName(const String& CAcertName) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | setClientCredentials(const char*clientCertName, const char* clientKeyName) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | setClientCredentials(const String& clientCertName, const String& clientKeyName) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | setCACertificateNumber(uint8_t certNumber) | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | setClientCredentialNumber(uint8_t certNumber) | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ## Secure Context - PSK assignment functions | | Ai-Thinker A6 | Digi XBee | Espressif ESP32 | Espressif ESP8266 | Espressif ESP8266 (NonOS) | Neoway M590 | Quectel BG96 | Quectel M95 | Quectel MC60 | SIMCom A7672x | SIMCom SIM5360 | SIMCom SIM7000 | SIMCom SIM7000 (SSL) | SIMCom SIM7080 | SIMCom SIM7600 | SIMCom SIM800 | Sequans Monarch | u-blox 2G and 3G modules | u-blox SARA-R4 | u-blox SARA-R5 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | setPSKTableName(const char* pskTableName) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | setPSKTableName(const String& pskTableName) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | setPreSharedKey(const char*pskIdent, const char* psKey) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | setPreSharedKey(const String& pskIdent, const String& psKey) | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | --- Generated by [Doxygen](https://www.doxygen.nl) and [m.css](https://mcss.mosra.cz/) with templates from [doxybook2](https://github.com/matusnovak/doxybook2)