In case it helps others, this link is very good using Core2 and UNIT CatM+GNSS:
https://www.soracom.io/blog/how-to-use-nb-iot-in-the-us-with-soracom-and-m5stack/
For compatible UK SIM (and nice management platform), likewise see https://www.soracom.co.uk/pricing/eu-pricing/ to order, or there are partner resellers from the Store menu.
From my experience, a few extra AT commands to ease use with the base module in Arduino and help fault finding:
// Just in case (NB 0000 is default)
if (GSM_PIN && modem.getSimStatus() != 3) {
modem.simUnlock(GSM_PIN);
delay(500);
}
// 13 GSM only , 38 LTE only , 51 GSM and LTE only | 1 = CAT-M
modem.setNetworkMode(38);
delay(500);
modem.setPreferredMode(1);
delay(500);
And if you need to ping some extra AT commands while using tinyGSM
// Check the preferred selection between CAT-M and NB-IoT
String str1 = "CAT-M NB-IOT (1): ";
String str2 = "";
modem.sendAT(GF("+CMNB?"));
modem.waitResponse(1000L, str2);
log(str1 + str2);
str1 = "Preferred mode (38)";
str2 = "";
modem.sendAT(GF("AT+CNMP?"));
modem.waitResponse(1000L, str2);
log(str2 + str1);
For instructions/discussion on using raw AT commands with TinyGSM examples see here:
https://github.com/vshymanskyy/TinyGSM/issues/518
I'm using the Core2 and IoT BASE CatM, which I've now got working with Arduino. The blog article above uses Core2 and UNIT CatM+GNSS. There is also: UNIT CatM, ThermalOnline CatM and STAMP CATM with an unfortunate mixture of examples to contend with.
The bases all have examples that include TinyGSM (probably a good thing), but it makes it hard to compare i.e. when you have a Core2 not a Core or different units from examples. I found it very hard work. Ideally, the examples would benefit from being rationalised to be modular e.g. establish a comms layer first (separate examples with and without TinyGSM, then add MQTT, HTTP, etc. as layers on top. Cover this for all bases and units with SIM7080G.