This is an example based on mbed-os cellular APIs that demonstrates a TCP or UDP echo transaction with a public echo server. Included TPB23 NB-IoT module which is can use LGU+ in Korea.

This example is showing how to use the NB-IoT(SECOM TPB23 module) of LGU plus network in Korea. The NB-IoT module' seller provided a document on how to start based on Mbed OS 5.11. (Created by CodeZoo) This guide has been supported to the latest os version which included 5.12 ~ 5.15.

  • if you need specific version of Mbed OS, please revision of TPB23_Driver and check it out.
  • Pelion ready example code is here!

Requirement

462 320 320

320

Tested with

1. Import the application into your desktop

mbed import http://os.mbed.com/users/Daniel_Lee/code/mbed-os-example-cellular-TPB23/

cd mbed-os-example-cellular-TPB23

2. Compile and program

mbed compile -t <toolchain> -m <TARGET_BOARD>

(supported toolchains : GCC_ARM / ARM / IAR)

3. Download binary to a target board

4. Result

mbed-os-example-cellular


Built: Aug  7 2019, 06:10:47


[MAIN], plmn: NULL
Establishing connection
[00000001ms][INFO][CELL]: New CellularContext  (20000a08)
[00000002ms][INFO][CELL]: CellularContext plmn NULL
[00000003ms][INFO][CELL]: CellularContext connect
[00000036ms][INFO][CELL]: RSSI -69 dBm
[00000036ms][INFO][CELL]: Start connecting (timeout 1 s)
[00000087ms][INFO][CELL]: RSSI -69 dBm
[00000116ms][INFO][CELL]: Modem ready
[00000146ms][INFO][CELL]: RSSI -69 dBm
[00000146ms][INFO][CELL]: Setup SIM (timeout 1 s)
[00001233ms][INFO][CELL]: Looked up APN internet
[00001362ms][ERR ][CELL]: AT error code 50
[00001362ms][WARN][CELL]: Packet domain event reporting set failed!
[00001393ms][INFO][CELL]: RSSI -65 dBm
[00001393ms][INFO][CELL]: Network registration (timeout 180 s)
[00001443ms][INFO][CELL]: Registering network => Attaching network
[00001473ms][INFO][CELL]: RSSI -65 dBm
[00001473ms][INFO][CELL]: Attaching network (timeout 60 s)
[00001601ms][INFO][CELL]: Found PDP context 1
[00001649ms][INFO][CELL]: Activate PDP context 1


Connection Established.
[00001671ms][INFO][CELL]: Socket 0 open
[00001707ms][INFO][CELL]: Socket 1 open
[00001748ms][INFO][CELL]: Socket create id: 1
[00001883ms][INFO][CELL]: Socket 1 sent 43 bytes to 8.8.8.8 port 53
[00004311ms][INFO][CELL]: Socket 1 recv 59 bytes from 8.8.8.8 port 53
[00004331ms][INFO][CELL]: Close socket: 1 error: 0
[00004331ms][INFO][CELL]: Socket 1 closed
[00004373ms][INFO][CELL]: Socket create id: 1
TCP: connected with echo.mbedcloudtesting.com server
[00004448ms][INFO][CELL]: Socket 0 sent 4 bytes to 52.215.34.155 port 7
TCP: Sent 4 Bytes to echo.mbedcloudtesting.com
[00007560ms][INFO][CELL]: Socket 0 recv 4 bytes
[00007580ms][INFO][CELL]: Close socket: 1 error: 0
[00007580ms][INFO][CELL]: Socket 0 closed
Received from echo server 4 Bytes
[00007581ms][INFO][CELL]: CellularContext disconnect()
[00007630ms][INFO][CELL]: cb: CellularContext disconnected


Success. Exiting

Files at this revision

API Documentation at this revision

Comitter:
mbed_official
Date:
Mon May 06 09:02:01 2019 +0100
Parent:
39:e57f130d65bd
Child:
41:1f13c9a6ee23
Commit message:
Merge pull request #135 from mirelachirica/nonip_socket_support

Added NonIP socket example
.
Commit copied from https://github.com/ARMmbed/mbed-os-example-cellular

Changed in this revision

README.md Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/README.md	Tue Apr 30 11:02:03 2019 +0100
+++ b/README.md	Mon May 06 09:02:01 2019 +0100
@@ -38,7 +38,7 @@
         "nsapi.default-cellular-password": 0
 ```
 
-### Selecting socket type (TCP or UDP)
+### Selecting socket type (TCP, UDP or NONIP)
 
 
 You can choose which socket type the application should use; however, please note that TCP is a more reliable transmission protocol. For example:
@@ -137,6 +137,7 @@
 * The modem may support only a fixed baud-rate, such as `"platform.default-serial-baud-rate": 9600`.
 * The modem and network may only support IPv6 in which case `"lwip.ipv6-enabled": true` shall be defined.
 * The SIM and modem must have compatible cellular technology (3G, 4G, NB-IoT, ...) supported and cellular network available.
+* Enable CIoT optimization for NONIP socket `control-plane-opt: true`.
 
 If you have problems to get started with debugging, you can review the [documentation](https://os.mbed.com/docs/latest/tutorials/debugging.html) for suggestions on what could be wrong and how to fix it.
 
--- a/main.cpp	Tue Apr 30 11:02:03 2019 +0100
+++ b/main.cpp	Mon May 06 09:02:01 2019 +0100
@@ -16,11 +16,14 @@
 
 #include "mbed.h"
 #include "common_functions.h"
+#include "CellularNonIPSocket.h"
+#include "CellularDevice.h"
 #include "UDPSocket.h"
 #include "CellularLog.h"
 
 #define UDP 0
 #define TCP 1
+#define NONIP 2
 
 // Number of retries /
 #define RETRY_COUNT 3
@@ -129,28 +132,59 @@
 }
 
 /**
- * Opens a UDP or a TCP socket with the given echo server and performs an echo
- * transaction retrieving current.
+ * Opens:
+ * - UDP or TCP socket with the given echo server and performs an echo
+ *   transaction retrieving current.
+ * - Cellular Non-IP socket for which the data delivery path is decided
+ *   by network's control plane CIoT optimisation setup, for the given APN.
  */
 nsapi_error_t test_send_recv()
 {
     nsapi_size_or_error_t retcode;
 #if MBED_CONF_APP_SOCK_TYPE == TCP
     TCPSocket sock;
-#else
+#elif MBED_CONF_APP_SOCK_TYPE == UDP
     UDPSocket sock;
+#elif MBED_CONF_APP_SOCK_TYPE == NONIP
+    CellularNonIPSocket sock;
 #endif
 
+#if MBED_CONF_APP_SOCK_TYPE == NONIP
+    retcode = sock.open((CellularContext*)iface);
+#else
     retcode = sock.open(iface);
+#endif
+
     if (retcode != NSAPI_ERROR_OK) {
 #if MBED_CONF_APP_SOCK_TYPE == TCP
         print_function("TCPSocket.open() fails, code: %d\n", retcode);
-#else
+#elif MBED_CONF_APP_SOCK_TYPE == UDP
         print_function("UDPSocket.open() fails, code: %d\n", retcode);
+#elif MBED_CONF_APP_SOCK_TYPE == NONIP
+        print_function("CellularNonIPSocket.open() fails, code: %d\n", retcode);
 #endif
         return -1;
     }
 
+    int n = 0;
+    const char *echo_string = "TEST";
+    char recv_buf[4];
+
+    sock.set_timeout(15000);
+
+#if MBED_CONF_APP_SOCK_TYPE == NONIP
+    retcode = sock.send((void*) echo_string, sizeof(echo_string));
+    if (retcode < 0) {
+        print_function("CellularNonIPSocket.send() fails, code: %d\n", retcode);
+        return -1;
+    } else {
+        print_function("CellularNonIPSocket: Sent %d Bytes\n", retcode);
+    }
+
+    n = sock.recv((void*) recv_buf, sizeof(recv_buf));
+
+#else
+
     SocketAddress sock_addr;
     retcode = iface->gethostbyname(host_name, &sock_addr);
     if (retcode != NSAPI_ERROR_OK) {
@@ -160,10 +194,6 @@
 
     sock_addr.set_port(port);
 
-    sock.set_timeout(15000);
-    int n = 0;
-    const char *echo_string = "TEST";
-    char recv_buf[4];
 #if MBED_CONF_APP_SOCK_TYPE == TCP
     retcode = sock.connect(sock_addr);
     if (retcode < 0) {
@@ -193,6 +223,7 @@
 
     n = sock.recvfrom(&sock_addr, (void*) recv_buf, sizeof(recv_buf));
 #endif
+#endif
 
     sock.close();
 
@@ -219,10 +250,17 @@
     dot_thread.start(dot_event);
 #endif // #if MBED_CONF_MBED_TRACE_ENABLE
 
-    // sim pin, apn, credentials and possible plmn are taken atuomtically from json when using get_default_instance()
-    iface = NetworkInterface::get_default_instance();
+#if MBED_CONF_APP_SOCK_TYPE == NONIP
+    iface = CellularContext::get_default_nonip_instance();
+#else
+    iface = CellularContext::get_default_instance();
+#endif
+
     MBED_ASSERT(iface);
 
+    // sim pin, apn, credentials and possible plmn are taken automatically from json when using NetworkInterface::set_default_parameters()
+    iface->set_default_parameters();
+
     nsapi_error_t retcode = NSAPI_ERROR_NO_CONNECTION;
 
     /* Attempt to connect to a cellular network */