IoT Base CATm and Core 2

  • Couple of (hopefully) quick questions...

    I've just got hold of the IoT Base CATm and it looks amazing. A few extra ports, and 9-12v power.

    I have an AWS Core 2 AND a White Core 2, happy to use either... but favouring the White Core2 at the moment.

    I have pushed the White Core 2 onto the IoT Base, and plugged in the power adapter... assuming that the power from the adapter would automatically charge the Core 2... it doesnt seem to be doing anything!

    Second, I would like to use Blocky to code the Core 2, and use the additional ports from the IoTBase...but I cant find a 'unit' block to add for the IoT Base... am I being blind here.... Id like to use the two extra ports on the base to plug in the watering unit and the Env3 unit.

    Any help of advice would be gratefully received. Ive tried looking on the documentation and online but cant seem to find anything!

  • Hello @iamjameshannam

    I assume that on your M5Core2 (white) you first removed the bottom cover before stacking the IoT Base CatM, yes? As far as I can tell from the schematic the IoT Base CatM should power the M5Core2. And are you running UiFlow firmware on your M5Core2?

    Note: Sometimes when powered through a module M5Core2 needs its power button pushed to power up. Have you tried that?

    BTW: you won't find the IoT Base CatM in the units list as it is handled as a module - check under Modules, entry IoT Base CatM.


  • @felmue Hey Felix!

    So... Ive taken off the protective cover 'Core2' that covers up the female headers, and clicked it onto the Base. Ive even used some long m3 hex heads to secure the base in place with the Core2.

    It seems as though the power is now at least working, just glanced over to the setup and the screen is still on (Ive left it running for a while connected to the base/power).

    I'll give the Module Block a go and see how I get on!

    Thank you!

  • Hi Guys,

    I am in the same boat and trying to figure out how to access the CatM base's modem.

    I have Core2 (AWS), IoT Base Cat-M.
    I disconnected the battery (M5GO) from the Core2, then connected Core2 with the IoT Base CatM using the male/female headers on both boards.
    If I power up the CatM base, the Core2 does power up. But the example program cannot communicate with the modem at all.

    The example program listing is also given on File -> Examples ->M5Core2 -> CatM_GNSS_7080 -> MQTT

    I appreciate any pointers for help please.

    I just want to know if any additional steps are needed to perform AT commands to the modem. (SerialAT is defined as Serial2 in the program listing) But we get UART connect errors etc....

  • Hello @aliasgherman

    the example program CatM_GNSS_7080 is meant for the SIM7080 unit and not the IoT Base CatM module.

    The unit uses RX=GPIO13, TX=GPIO14, to talk to the modem whereas the IoT Base CatM module uses RX=GPIO35, TX=GPIO0 and EN=GPIO27.
    (Note: GPIO number are for M5Core2.)

    Try this example.
    You'll need to replace #include <M5Stack.h> with #include <M5Core2.h> and
    in IoT_BASE_SIM7080.h you'll need to change IoT_BASE_SIM7080_EN from 12 to 27.


  • @felmue Felix…

    If we want to use this in Block UIFlow how do we go about adding those kinds of code into the program? Is it as simple as adding it in the python tab?

    I’ve noticed a Custom block.. block. Is there a site or place where people have (or can) upload their own useful blocks?

  • Hello @iamjameshannam

    if you want to use this in Block UiFlow you'd need to convert the C code to Python first.

    I never used custom blocks, so I cannot answer that question, sorry.


  • In case it helps others, this link is very good using Core2 and UNIT CatM+GNSS:

    For compatible UK SIM (and nice management platform), likewise see 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) {

    // 13 GSM only , 38 LTE only , 51 GSM and LTE only | 1 = CAT-M

    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.waitResponse(1000L, str2);
    log(str1 + str2);

    str1 = "Preferred mode (38)";
    str2 = "";
    modem.waitResponse(1000L, str2);
    log(str2 + str1);

    For instructions/discussion on using raw AT commands with TinyGSM examples see here:

    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.