Skip to main content

KSP-N51U Send Data

After the KSP-N51U is attached to the LTE-M / NB-IoT network, the next step is to send real application data.

This guide walks through a simple MQTT publish workflow:

  1. Confirm that the module already has a data connection.
  2. Configure the MQTT client.
  3. Connect to an MQTT broker.
  4. Publish a message.
  5. Verify that the broker received the message.
  6. Disconnect cleanly.

The KSP-N51U is controlled by AT-COMMAND over UART, and the product platform supports protocols such as MQTT, CoAP, HTTP, and LwM2M. This page focuses on MQTT because it is one of the most common telemetry paths for cellular IoT devices.

note

This page is a practical send-data workflow. It is not a full AT command reference. Always check the Serial Modem command reference for the exact syntax supported by the firmware version running on your KSP-N51U.


Before You Start

This page assumes the module is already attached to the cellular network.

Before continuing, complete Network Attach and confirm the following items.

Check ItemCommand / SourcePass Condition
AT command pathATReturns OK
SIM statusAT+CPIN?SIM is ready
Network registrationAT+CEREG?Registered status
Signal qualityAT+CESQUsable RSRP / RSRQ values
IP addressAT+CGPADDRNon-empty IP address
Broker informationMQTT broker settingsHostname, port, username/password if required
tip

If the module does not have an IP address yet, finish Network Attach first.

This page keeps the same idea, but refers to Network Attach as the owner of registration details. This avoids repeating the full CEREG explanation in multiple pages.


MQTT Send Data Flow

Use the following flow to publish one test message to an MQTT broker.

StepActionCommandExpected Result
1Configure the MQTT clientAT#XMQTTCFGOK
2Connect to the brokerAT#XMQTTCONOK, then #XMQTTEVT: 0,0
3Publish a messageAT#XMQTTPUBOK; for QoS 1/2, check the related #XMQTTEVT acknowledgement and verify the message at the broker
4Verify deliveryExternal MQTT client or cloud consoleMessage is visible on the subscribed topic
5DisconnectAT#XMQTTCON=0OK, then disconnect event
note

OK confirms that the publish command was accepted by the AT interface. For QoS 1 or QoS 2, check the MQTT event acknowledgement. For final confirmation, verify the message at the broker or subscriber side.


Step 1 — Configure the MQTT Client

Set the MQTT client identity before connecting to the broker.

AT#XMQTTCFG="korlinx-ksp-n51u",60,1

OK

The parameters are:

ParameterExampleDescription
Client ID"korlinx-ksp-n51u"MQTT client identifier. It should be unique on the broker.
Keep-alive60Keep-alive interval in seconds.
Clean session1Use a clean session. Use 0 for persistent session if your broker workflow requires it.
note

AT#XMQTTCFG also supports the optional clean session parameter. The example now includes it explicitly so the behavior is clear.


Step 2 — Connect to the MQTT Broker

Open the connection to your MQTT broker.

AT#XMQTTCON=1,"","","broker.example.com",1883

OK
#XMQTTEVT: 0,0

The parameters are:

ParameterExampleDescription
Operation1Connect using IPv4.
Username""Empty when the broker does not require authentication.
Password""Empty when the broker does not require authentication.
Broker hostname"broker.example.com"MQTT broker hostname.
Port1883Standard non-TLS MQTT port.

AT#XMQTTCON=1,... returns OK first. The actual connection result is reported asynchronously.

EventMeaning
#XMQTTEVT: 0,0Connection request acknowledged successfully
Negative result valueConnection failed; check broker, port, credentials, TLS, or network path
note

For TLS, use the TLS MQTT port, commonly 8883, and provide the security tag configured for the broker certificate if your firmware and broker setup require it.


Step 3 — Publish a Message

Publish a simple payload to a topic.

AT#XMQTTPUB="korlinx/ksp-n51u/status","online",0,0

OK

The parameters are:

ParameterExampleDescription
Topic"korlinx/ksp-n51u/status"MQTT topic to publish to
Payload"online"Message payload
QoS0MQTT QoS value
Retain00 = do not retain, 1 = broker retains the message
note

The maximum payload size depends on the Serial Modem firmware version. In Nordic NCS 3.x documentation, the non-empty AT#XMQTTPUB payload size is up to 1024 bytes. Check the command reference for the exact firmware version used by your KSP-N51U.

QoS and Publish Acknowledgement

The QoS parameter uses MQTT QoS values 0, 1, or 2.

QoSTypical MeaningWhat to Check
0No publish acknowledgement requiredOK, then verify at the subscriber/broker side
1Broker acknowledgement expected#XMQTTEVT: 3,0
2QoS 2 publish flow#XMQTTEVT: 4,0, then #XMQTTEVT: 6,0
note

The Serial Modem MQTT client uses MQTT QoS values, but it does not fully guarantee retransmission or delivery behavior according to MQTT v3.1.1 QoS classes. For reliable application behavior, verify delivery at the broker or application layer.

For QoS 2, the module may report #XMQTTEVT: 4,0 followed by #XMQTTEVT: 6,0.


Step 4 — Verify the Message Arrived

Use an external MQTT client, cloud dashboard, or broker console to subscribe to the same topic.

Example using mosquitto_sub:

mosquitto_sub -h broker.example.com -t "korlinx/ksp-n51u/status"

Expected received message:

online
tip

Use an external subscriber during first testing. It helps confirm that the message reached the broker, not only that the AT command returned OK.


Step 5 — Receive a Message on the Module

To receive messages on the KSP-N51U, subscribe to a command topic.

AT#XMQTTSUB="korlinx/ksp-n51u/cmd",0

OK
#XMQTTEVT: 7,0

When a message is published to the subscribed topic, the module reports an incoming message notification.

#XMQTTMSG: 20,6
korlinx/ksp-n51u/cmd
reboot

The notification contains:

FieldMeaning
Topic lengthLength of the received topic
Message lengthLength of the received payload
TopicTopic that received the message
PayloadReceived message content

Step 6 — Disconnect from the Broker

Disconnect cleanly when the test is complete.

AT#XMQTTCON=0

OK
#XMQTTEVT: 1,0
EventMeaning
#XMQTTEVT: 1,0MQTT client disconnected successfully

Full Example

The sequence below shows a minimal end-to-end MQTT publish test.

AT
OK

AT#XMQTTCFG="korlinx-ksp-n51u",60,1
OK

AT#XMQTTCON=1,"","","broker.example.com",1883
OK
#XMQTTEVT: 0,0

AT#XMQTTPUB="korlinx/ksp-n51u/status","online",0,0
OK

AT#XMQTTCON=0
OK
#XMQTTEVT: 1,0

Verify the Checkpoints

CheckpointCommand / ToolPass Condition
Data connection is readyAT+CGPADDRNon-empty IP address
MQTT broker is connectedAT#XMQTTCON=1,...#XMQTTEVT: 0,0
Message command is acceptedAT#XMQTTPUBOK
Message is deliveredExternal MQTT subscriber / broker consolePayload appears on the target topic
MQTT client disconnects cleanlyAT#XMQTTCON=0Disconnect event is reported
note

Publish acceptance and broker-side delivery are separated into two checkpoints.


🎉 You're Ready!

Your KSP-N51U has sent data successfully

You've completed the send-data flow from UART communication to MQTT publish verification.

From module bring-up to broker-side confirmation — your KSP-N51U is now ready for host integration.

Here's what you accomplished:
  • ✅ Confirmed that the KSP-N51U responds to AT commands over UART
  • ✅ Verified LTE-M / NB-IoT network attach
  • ✅ Confirmed that the module has an IP address
  • ✅ Connected to an MQTT broker
  • ✅ Published a test message
  • ✅ Verified the message using a broker console or external subscriber

What's next?

📡

Send Telemetry

Replace the test payload with real sensor, device, or application data.

🧩

Host Integration

Move the tested AT command flow into your MCU or host firmware.

☁️

Cloud Integration

Connect the MQTT topic structure to your IoT platform or dashboard.

🔐

Secure Transport

Add broker authentication, TLS, and production topic rules when needed.

Your KSP-N51U module is now sending data through the cellular network. You can continue with firmware integration and real application payloads.


Troubleshooting

SymptomLikely CauseRecommended Action
No IP from AT+CGPADDRModule is not attached or PDP context is not readyComplete Network Attach first
AT#XMQTTCON returns OK but no success eventBroker unreachable, DNS issue, blocked port, wrong credentials, or TLS issueCheck broker hostname, port, credentials, TLS settings, and network path
Connects, then disconnectsDuplicate client ID, keep-alive issue, broker policy, or unstable networkUse a unique client ID and verify keep-alive / broker settings
Publish returns ERRORInvalid topic, payload format, command syntax, or connection stateCheck command syntax and confirm MQTT is connected
Publish returns OK, but subscriber sees nothingTopic mismatch, QoS/event issue, broker ACL, or wrong brokerVerify topic, broker, subscriber, QoS events, and broker permissions
TLS connection failsMissing or incorrect certificate/security tagProvision the correct CA certificate and use the correct security tag
Incoming message is not receivedNot subscribed, wrong topic, or broker permission issueCheck AT#XMQTTSUB, topic name, and broker ACL
note

The FAQ page may contain deeper troubleshooting once it is completed. Until then, keep this page focused on MQTT send-data checks and use Network Attach for registration and IP-related issues.


Runnable Code

If your project uses the korlinx-at-examples sample repository, start from the MQTT publish and subscribe examples.

Suggested example names:

ExamplePurpose
mqtt_publishPublish telemetry to a broker
mqtt_subscribeSubscribe to a command topic and receive messages
note

This statement is now softer because the availability, naming, or visibility of the sample repository may depend on the project setup. If the repository is private or not yet published, the command sequence above remains the reference workflow.


Examples Data

The korlinx-at-examples repository provides runnable AT command examples for KORLINX LTE-M products.

Use this repository when you want to test the same send-data flow from a real host environment instead of typing every AT command manually in a serial terminal.

ExamplePurposeWhen to Use
helloOpen the serial port, send AT, and check for OKFirst communication test
attach_networkConfirm or trigger network attach, then check registration, signal, and IP addressBefore sending data
mqtt_publishConnect to an MQTT broker and publish a messageMain send-data test
mqtt_subscribeSubscribe to an MQTT topic and receive messagesCommand / downlink test
http_getFetch a URL over HTTPHTTP data test
tcp_socketOpen a raw TCP socket and exchange dataCustom TCP workflow
coap_clientMake a CoAP request over UDPCoAP workflow
gnss_fixAcquire a GNSS position fixLocation-related workflow

Quick Python Test

The fastest path is to start from the Python examples on a PC.

git clone https://github.com/KORLINX/korlinx-at-examples.git
cd korlinx-at-examples/python
pip install -r requirements.txt

Run the basic communication test first:

python hello.py --port /dev/ttyUSB0

On Windows, the port may look like this:

python hello.py --port COM5

On macOS, the port may look like this:

python hello.py --port /dev/cu.usbserial-0001

Other Protocols and Services

The Serial Modem firmware can support more than MQTT depending on the firmware build.

Protocol / ServiceUse ForSuggested Page / Example
HTTPCalling a REST / web APIHTTP send-data guide or sample
TCP / UDP socketRaw or custom transportSocket guide or sample
CoAPConstrained REST over UDPCoAP guide or sample
GNSSPosition acquisitionGNSS guide or sample
note

Keep this page focused on MQTT send-data. Add separate task pages for HTTP, TCP/UDP socket, CoAP, and GNSS when those workflows are ready.