Atom DTU NBIoT2 V11
This is the driver library for the ATOM DTU NBIoT2 V11 to accept and send data from the DTU NBIoT.
Support the following products:
Note
Please ensure that the device supports the NB-IoT frequency bands in your area before use.
Note
Please ensure that the firmware version of SIM7028 is greater than or equal to 2110B07SIM7028.
can be used to check the firmware version.
UiFlow2 Example
NBIoT HTTP Example
Open the atoms3_base_nbiot2v11_http_example.m5f2 project in UiFlow2.
This example shows how to send HTTP request using the Atom DTU NBIoT2 V11.
UiFlow2 Code Block:
Example output:
Output of received NBIoT message data via serial port.
MQTT Example
Open the atoms3_base_nbiot2v11_mqtt_example.m5f2 project in UiFlow2.
This example shows how to send MQTT message using the Atom DTU NBIoT2 V11.
UiFlow2 Code Block:
Example output:
Output of received NBIoT message data on screen.
MicroPython Example
NBIoT HTTP Example
This example shows how to send HTTP request using the Atom DTU NBIoT2 V11.
MicroPython Code Block:
1# SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD 2# 3# SPDX-License-Identifier: MIT 4 5import os, sys, io 6import M5 7from M5 import * 8from hardware import UART 9from base import AtomRS485 10from base import AtomDTUNBIoT2V11 11 12 13uart2 = None 14base_rs485 = None 15base_nbiot2v11 = None 16base_nbiot2v11_http_req = None 17 18 19def setup(): 20 global uart2, base_rs485, base_nbiot2v11, base_nbiot2v11_http_req 21 22 M5.begin() 23 Widgets.fillScreen(0x000000) 24 25 uart2 = UART(2, baudrate=115200, bits=8, parity=None, stop=1, tx=5, rx=6) 26 base_rs485 = AtomRS485( 27 1, 28 baudrate=115200, 29 bits=8, 30 parity=None, 31 stop=1, 32 tx=7, 33 rx=8, 34 txbuf=256, 35 rxbuf=256, 36 timeout=0, 37 timeout_char=0, 38 invert=0, 39 flow=0, 40 ) 41 base_nbiot2v11 = AtomDTUNBIoT2V11(uart2, verbose=False) 42 while not (base_nbiot2v11.isconnected()): 43 pass 44 base_nbiot2v11_http_req = base_nbiot2v11.post( 45 "http://httpbin.org/post", 46 json={"message": "Hello from M5Stack!", "status": "active"}, 47 headers={ 48 "Content-Type": "application/json", 49 "Custom-Header": "MyHeaderValue", 50 }, 51 ) 52 print((str("status code: ") + str((base_nbiot2v11_http_req.status_code)))) 53 print((str("content: ") + str((base_nbiot2v11_http_req.content)))) 54 55 56def loop(): 57 global uart2, base_rs485, base_nbiot2v11, base_nbiot2v11_http_req 58 M5.update() 59 60 61if __name__ == "__main__": 62 try: 63 setup() 64 while True: 65 loop() 66 except (Exception, KeyboardInterrupt) as e: 67 try: 68 from utility import print_error_msg 69 70 print_error_msg(e) 71 except ImportError: 72 print("please update to latest firmware")
Example output:
Output of received NBIoT message data via serial port.
MQTT Example
This example shows how to send MQTT message using the Atom DTU NBIoT2 V11.
MicroPython Code Block:
1# SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD 2# 3# SPDX-License-Identifier: MIT 4 5import os, sys, io 6import M5 7from M5 import * 8from hardware import UART 9from base import AtomRS485 10from base import AtomDTUNBIoT2V11 11 12 13label0 = None 14base_nbiot2v11 = None 15uart2 = None 16base_rs485 = None 17base_nbiot2v11_mqtt = None 18 19 20def base_nbiot2v11_testtopic_a_event(data): 21 global label0, base_nbiot2v11, uart2, base_rs485, base_nbiot2v11_mqtt 22 label0.setText(str(data[1])) 23 24 25def setup(): 26 global label0, base_nbiot2v11, uart2, base_rs485, base_nbiot2v11_mqtt 27 28 M5.begin() 29 Widgets.fillScreen(0x000000) 30 label0 = Widgets.Label("label0", 1, 5, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 31 32 uart2 = UART(2, baudrate=115200, bits=8, parity=None, stop=1, tx=5, rx=6) 33 base_rs485 = AtomRS485( 34 1, 35 baudrate=115200, 36 bits=8, 37 parity=None, 38 stop=1, 39 tx=7, 40 rx=8, 41 txbuf=256, 42 rxbuf=256, 43 timeout=0, 44 timeout_char=0, 45 invert=0, 46 flow=0, 47 ) 48 base_nbiot2v11 = AtomDTUNBIoT2V11(uart2, verbose=False) 49 while not (base_nbiot2v11.isconnected()): 50 pass 51 base_nbiot2v11_mqtt = base_nbiot2v11.MQTTClient( 52 "uiflow2-client", "mqtt.m5stack.com", port=1883, user="", password="", keepalive=120 53 ) 54 base_nbiot2v11_mqtt.connect(clean_session=True) 55 base_nbiot2v11_mqtt.subscribe("testtopic/a", base_nbiot2v11_testtopic_a_event, qos=0) 56 57 58def loop(): 59 global label0, base_nbiot2v11, uart2, base_rs485, base_nbiot2v11_mqtt 60 M5.update() 61 base_nbiot2v11_mqtt.check_msg() 62 63 64if __name__ == "__main__": 65 try: 66 setup() 67 while True: 68 loop() 69 except (Exception, KeyboardInterrupt) as e: 70 try: 71 from utility import print_error_msg 72 73 print_error_msg(e) 74 except ImportError: 75 print("please update to latest firmware")
Example output:
Output of received NBIoT message data on screen.
API
AtomDTUNBIoT2V11
- class base.dtu_nbiot2_v11.AtomDTUNBIoT2V11(uart, verbose=False)
Bases:
SIM7028Create an AtomDTUNBIoT2V11 object.
- Parameters:
uart (machine.UART) – The UART object to use.
verbose (bool) – Whether to print debug information.
UiFlow2 Code Block:

MicroPython Code Block:
from base import AtomDTUNBIoT2V11 from hardware import UART uart2 = UART(2, baudrate=115200, bits=8, parity=None, stop=1, tx=22, rx=19) base_nbiot2v11 = AtomDTUNBIoT2V11(uart2, verbose=False)
Note
See
NBIOT2Unitfor more details.- power_on()
Power on the DTU NB-IoT module.
UiFlow2 Code Block:

MicroPython Code Block:
base_nbiot2v11.power_on()
- power_off()
Power off the DTU NB-IoT module.
UiFlow2 Code Block:

MicroPython Code Block:
base_nbiot2v11.power_off()
AtomRS485
Note
See AtomRS485 for more details.



