Lopy4 433MHz

  • @robert-hh - Thanks, really good point.

    I hadn't looked that deeply. As you say, the specs for EU433 are very similar to EU866, though the default channel frequencies are different. Still that should be easy to fix up by removing the defaults and adding in new defaults.

    So we know that we CAN'T use something like this:

     lora = LoRa(mode=LoRa.LORAWAN, region=LoRa.EU433, ....) 

    But it looks like we can use:

     LoRa(mode=LoRa.LORAWAN, region=LoRa.EU866)

    Followed by removing the 3 default channels (0, 1, 2) and adding them back in manually. Except in the documentation, it says:

    On the 868MHz band the channels 0 to 2 cannot be removed, they can only be replaced by other channels using the lora.add_channel method. 

    So, it looks like the pseudo-code to use EU433, ON A LOPY-4 is:

    # Using EU433, but have to select region EU866 on the LOPY-4 to access EU433
    # Put any other arguments into this call that you need
    LoRa(mode=LoRa.LORAWAN, region=LoRa.EU866)
    # Replace the three default channels:
    lora.add_channel(index=0, frequency=433175000, dr_min=0, dr_max=5)
    lora.add_channel(index=1, frequency=433375000, dr_min=0, dr_max=5)
    lora.add_channel(index=2, frequency=433575000, dr_min=0, dr_max=5)

    It looks like this is a work-around until the actual region parameter handling is hooked up. @Mladen I would love to know if this actually works in the field.

  • @mladen The code seems inconsistent. The settings and QSTR for EU433 are not included, but using EU868, you can set the frequency to as low as 410 MHz. (esp32/mods/modlora.c, line 1143 ff)

            case LORAMAC_REGION_EU868:
                    #if defined(LOPY4)
                        if (frequency < 410000000 || frequency > 870000000) {
                        if (frequency < 863000000 || frequency > 870000000) {
                            goto freq_error;

    Besides the frequencies, the spec for EU433 and EU868 seem very similar.

  • @mladen Have you tried just adding the EU433 setting when you setup LoRa in your code? The device-level setting (in the firmware update tool) is just a default anyway...

  • Actual LoPy4 specification on the WEB site says:


    According to this EU433 must be working!

  • From what I could tell from looking at the code, the front ends to the update tool, and the python interfaces to the LoRaWAN stack only support a subset of regions:

    (from pycom-micropython-sigfox/esp32/mods/modlora.c)

    static void lora_validate_region (LoRaMacRegion_t region) {
        if (region != LORAMAC_REGION_AS923 && region != LORAMAC_REGION_AU915
            && region != LORAMAC_REGION_EU868 && region != LORAMAC_REGION_US915) {
                nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "invalid region %d", region));

    The regions are supported in the main LoRaWAN stack, but it doesn't look like the support has trickled through to the pycom code yet.

    I wonder if anyone from pycom could tell us where EU433 is on the priority list?

Log in to reply

Pycom on Twitter