Cellular example code for Seeed Wio 3G and Wio LTE-M1/NB1(BG96)

Example cellular application for Mbed OS

This is an example based on `mbed-os` cellular APIs that demonstrates a TCP or UDP echo transaction with a public echo server.

(Note: To see this example in a rendered form you can import into the Arm Mbed Online Compiler, please see the documentation.)

Getting started

This particular cellular application uses a cellular network and network-socket APIs that are part of `mbed-os`.

The program uses a cellular modem driver using an external IP stack (LWIP) standard 3GPP AT 27.007 AT commands to setup the cellular modem and registers to the network.

After registration, the driver opens a point-to-point protocol (PPP) pipe using LWIP with the cellular modem and connects to internet. This driver currently supports UART data connection type only between your cellular modem and MCU.

For more information on Arm Mbed OS cellular APIs and porting guide, please visit the Mbed OS cellular API and contributing documentation.

Download the application

$ mbed import mbed-os-example-cellular
$ cd mbed-os-example-cellular
 
#OR
 
$ git clone git@github.com:ARMmbed/mbed-os-example-cellular.git
$ cd mbed-os-example-cellular

Change the network and SIM credentials

See the file `mbed_app.json` in the root directory of your application. This file contains all the user specific configurations your application needs. Provide the pin code for your SIM card, as well as any APN settings if needed. For example:

        "nsapi.default-cellular-plmn": 0,
        "nsapi.default-cellular-sim-pin": "\"1234\"",
        "nsapi.default-cellular-apn": 0,
        "nsapi.default-cellular-username": 0,
        "nsapi.default-cellular-password": 0

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:

 
     "sock-type": "TCP",
 

Turning modem AT echo trace on

If you like details and wish to know about all the AT interactions between the modem and your driver, turn on the modem AT echo trace.

        "cellular.debug-at": true

Turning on the tracing and trace level

If you like to add more traces or follow the current ones you can turn traces on by changing `mbed-trace.enable` in mbed_app.json

"target_overrides": {
        "*": {
            "mbed-trace.enable": true,

After you have defined `mbed-trace.enable: true`, you can set trace levels by changing value in `trace-level`

"trace-level": {
            "help": "Options are TRACE_LEVEL_ERROR,TRACE_LEVEL_WARN,TRACE_LEVEL_INFO,TRACE_LEVEL_DEBUG",
            "macro_name": "MBED_TRACE_MAX_LEVEL",
            "value": "TRACE_LEVEL_INFO"
        }

Board support

The cellular modem driver in this example uses PPP with an Mbed-supported external IP stack. It supports targets when modem exists on the Mbed Enabled target as opposed to plug-in modules (shields). For more details, please see our Mbed OS cellular documentation.

Compiling the application

The master branch is for daily development and it uses the latest mbed-os/master release.

To use older versions update Mbed OS release tag, for example:

mbed releases
 * mbed-os-5.10.4
   ...
mbed update mbed-os-5.10.4

You may need to use `clean` option to discard your local changes (use with caution).

Use Mbed CLI commands to generate a binary for the application. For example, in the case of GCC, use the following command:

$ mbed compile -m YOUR_TARGET_WITH_MODEM -t GCC_ARM

Running the application

Drag and drop the application binary from `BUILD/YOUR_TARGET_WITH_MODEM/GCC_ARM/mbed-os-example-cellular.bin` to your Mbed Enabled target hardware, which appears as a USB device on your host machine.

Attach a serial console emulator of your choice (for example, PuTTY, Minicom or screen) to your USB device. Set the baudrate to 115200 bit/s, and reset your board by pressing the reset button.

You should see an output similar to this:

mbed-os-example-cellular
Establishing connection ......
 
Connection Established.
TCP: connected with echo.mbedcloudtesting.com server
TCP: Sent 4 Bytes to echo.mbedcloudtesting.com
Received from echo server 4 Bytes
 
 
Success. Exiting

Troubleshooting

  • Make sure the fields `sim-pin-code`, `apn`, `username` and `password` from the `mbed_app.json` file are filled in correctly. The correct values should appear in the user manual of the board if using eSIM or in the details of the SIM card if using normal SIM.
  • Enable trace flag to have access to debug information `"mbed-trace.enable": true`.
  • Try both `TCP` and `UDP` socket types.
  • Try both `"lwip.ppp-enabled": true` and `"lwip.ppp-enabled": false`.
  • 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 for suggestions on what could be wrong and how to fix it.

License and contributions

The software is provided under Apache-2.0 license. Contributions to this project are accepted under the same license. Please see contributing.md for more info.

This project contains code from other projects. The original license text is included in those source files. They must comply with our license guide.

Committer:
MACRUM
Date:
Mon May 20 06:11:03 2019 +0000
Revision:
2:cf787cebee82
Parent:
0:fb5e1789de47
Fix configuration for the Wio 3G

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MACRUM 0:fb5e1789de47 1 # Example cellular application for Mbed OS
MACRUM 0:fb5e1789de47 2
MACRUM 0:fb5e1789de47 3 This is an example based on `mbed-os` cellular APIs that demonstrates a TCP or UDP echo transaction with a public echo server.
MACRUM 0:fb5e1789de47 4
MACRUM 0:fb5e1789de47 5 (Note: To see this example in a rendered form you can import into the Arm Mbed Online Compiler, please see [the documentation](https://os.mbed.com/docs/mbed-os/latest/apis/cellular-api.html#cellular-example-connection-establishment).)
MACRUM 0:fb5e1789de47 6
MACRUM 0:fb5e1789de47 7 ## Getting started
MACRUM 0:fb5e1789de47 8
MACRUM 0:fb5e1789de47 9 This particular cellular application uses a cellular network and network-socket APIs that are part of [`mbed-os`](https://github.com/ARMmbed/mbed-os).
MACRUM 0:fb5e1789de47 10
MACRUM 0:fb5e1789de47 11 The program uses a [cellular modem driver](https://github.com/ARMmbed/mbed-os/tree/master/features/cellular/framework/API) using an external IP stack (LWIP) standard 3GPP AT 27.007 AT commands to setup the cellular modem and registers to the network.
MACRUM 0:fb5e1789de47 12
MACRUM 0:fb5e1789de47 13 After registration, the driver opens a point-to-point protocol (PPP) pipe using LWIP with the cellular modem and connects to internet. This driver currently supports UART data connection type only between your cellular modem and MCU.
MACRUM 0:fb5e1789de47 14
MACRUM 0:fb5e1789de47 15 For more information on Arm Mbed OS cellular APIs and porting guide, please visit the [Mbed OS cellular API](https://os.mbed.com/docs/latest/reference/cellular.html) and [contributing documentation](https://os.mbed.com/docs/mbed-os/latest/contributing/index.html).
MACRUM 0:fb5e1789de47 16
MACRUM 0:fb5e1789de47 17 ### Download the application
MACRUM 0:fb5e1789de47 18
MACRUM 0:fb5e1789de47 19 ```sh
MACRUM 0:fb5e1789de47 20 $ mbed import mbed-os-example-cellular
MACRUM 0:fb5e1789de47 21 $ cd mbed-os-example-cellular
MACRUM 0:fb5e1789de47 22
MACRUM 0:fb5e1789de47 23 #OR
MACRUM 0:fb5e1789de47 24
MACRUM 0:fb5e1789de47 25 $ git clone git@github.com:ARMmbed/mbed-os-example-cellular.git
MACRUM 0:fb5e1789de47 26 $ cd mbed-os-example-cellular
MACRUM 0:fb5e1789de47 27 ```
MACRUM 0:fb5e1789de47 28
MACRUM 0:fb5e1789de47 29 ### Change the network and SIM credentials
MACRUM 0:fb5e1789de47 30
MACRUM 0:fb5e1789de47 31 See the file `mbed_app.json` in the root directory of your application. This file contains all the user specific configurations your application needs. Provide the pin code for your SIM card, as well as any APN settings if needed. For example:
MACRUM 0:fb5e1789de47 32
MACRUM 0:fb5e1789de47 33 ```json
MACRUM 0:fb5e1789de47 34 "nsapi.default-cellular-plmn": 0,
MACRUM 0:fb5e1789de47 35 "nsapi.default-cellular-sim-pin": "\"1234\"",
MACRUM 0:fb5e1789de47 36 "nsapi.default-cellular-apn": 0,
MACRUM 0:fb5e1789de47 37 "nsapi.default-cellular-username": 0,
MACRUM 0:fb5e1789de47 38 "nsapi.default-cellular-password": 0
MACRUM 0:fb5e1789de47 39 ```
MACRUM 0:fb5e1789de47 40
MACRUM 0:fb5e1789de47 41 ### Selecting socket type (TCP, UDP or NONIP)
MACRUM 0:fb5e1789de47 42
MACRUM 0:fb5e1789de47 43
MACRUM 0:fb5e1789de47 44 You can choose which socket type the application should use; however, please note that TCP is a more reliable transmission protocol. For example:
MACRUM 0:fb5e1789de47 45
MACRUM 0:fb5e1789de47 46
MACRUM 0:fb5e1789de47 47 ```json
MACRUM 0:fb5e1789de47 48
MACRUM 0:fb5e1789de47 49 "sock-type": "TCP",
MACRUM 0:fb5e1789de47 50
MACRUM 0:fb5e1789de47 51 ```
MACRUM 0:fb5e1789de47 52
MACRUM 0:fb5e1789de47 53 ### Turning modem AT echo trace on
MACRUM 0:fb5e1789de47 54
MACRUM 0:fb5e1789de47 55 If you like details and wish to know about all the AT interactions between the modem and your driver, turn on the modem AT echo trace.
MACRUM 0:fb5e1789de47 56
MACRUM 0:fb5e1789de47 57 ```json
MACRUM 0:fb5e1789de47 58 "cellular.debug-at": true
MACRUM 0:fb5e1789de47 59 ```
MACRUM 0:fb5e1789de47 60
MACRUM 0:fb5e1789de47 61 ### Turning on the tracing and trace level
MACRUM 0:fb5e1789de47 62
MACRUM 0:fb5e1789de47 63 If you like to add more traces or follow the current ones you can turn traces on by changing `mbed-trace.enable` in mbed_app.json
MACRUM 0:fb5e1789de47 64
MACRUM 0:fb5e1789de47 65 ```"target_overrides": {
MACRUM 0:fb5e1789de47 66 "*": {
MACRUM 0:fb5e1789de47 67 "mbed-trace.enable": true,
MACRUM 0:fb5e1789de47 68 ```
MACRUM 0:fb5e1789de47 69
MACRUM 0:fb5e1789de47 70 After you have defined `mbed-trace.enable: true`, you can set trace levels by changing value in `trace-level`
MACRUM 0:fb5e1789de47 71
MACRUM 0:fb5e1789de47 72 ```"trace-level": {
MACRUM 0:fb5e1789de47 73 "help": "Options are TRACE_LEVEL_ERROR,TRACE_LEVEL_WARN,TRACE_LEVEL_INFO,TRACE_LEVEL_DEBUG",
MACRUM 0:fb5e1789de47 74 "macro_name": "MBED_TRACE_MAX_LEVEL",
MACRUM 0:fb5e1789de47 75 "value": "TRACE_LEVEL_INFO"
MACRUM 0:fb5e1789de47 76 }
MACRUM 0:fb5e1789de47 77 ```
MACRUM 0:fb5e1789de47 78
MACRUM 0:fb5e1789de47 79 ### Board support
MACRUM 0:fb5e1789de47 80
MACRUM 0:fb5e1789de47 81 The [cellular modem driver](https://github.com/ARMmbed/mbed-os/tree/master/features/cellular/framework/API) in this example uses PPP with an Mbed-supported external IP stack. It supports targets when modem exists on the Mbed Enabled target as opposed to plug-in modules (shields). For more details, please see our [Mbed OS cellular documentation](https://os.mbed.com/docs/mbed-os/latest/apis/cellular-api.html).
MACRUM 0:fb5e1789de47 82
MACRUM 0:fb5e1789de47 83 Currently supported boards with onboard modem chips are:
MACRUM 0:fb5e1789de47 84
MACRUM 0:fb5e1789de47 85 [u-blox C027](https://os.mbed.com/platforms/u-blox-C027/)
MACRUM 0:fb5e1789de47 86 [MultiTech MTS Dragonfly](https://os.mbed.com/platforms/MTS-Dragonfly/)
MACRUM 0:fb5e1789de47 87
MACRUM 0:fb5e1789de47 88
MACRUM 0:fb5e1789de47 89 ## Compiling the application
MACRUM 0:fb5e1789de47 90
MACRUM 0:fb5e1789de47 91 The master branch is for daily development and it uses the latest mbed-os/master release.
MACRUM 0:fb5e1789de47 92
MACRUM 0:fb5e1789de47 93 To use older versions update Mbed OS release tag, for example:
MACRUM 0:fb5e1789de47 94
MACRUM 0:fb5e1789de47 95 ```
MACRUM 0:fb5e1789de47 96 mbed releases
MACRUM 0:fb5e1789de47 97 * mbed-os-5.10.4
MACRUM 0:fb5e1789de47 98 ...
MACRUM 0:fb5e1789de47 99 mbed update mbed-os-5.10.4
MACRUM 0:fb5e1789de47 100 ```
MACRUM 0:fb5e1789de47 101
MACRUM 0:fb5e1789de47 102 You may need to use `--clean` option to discard your local changes (use with caution).
MACRUM 0:fb5e1789de47 103
MACRUM 0:fb5e1789de47 104 Use Mbed CLI commands to generate a binary for the application. For example, in the case of GCC, use the following command:
MACRUM 0:fb5e1789de47 105
MACRUM 0:fb5e1789de47 106 ```sh
MACRUM 0:fb5e1789de47 107 $ mbed compile -m YOUR_TARGET_WITH_MODEM -t GCC_ARM
MACRUM 0:fb5e1789de47 108 ```
MACRUM 0:fb5e1789de47 109
MACRUM 0:fb5e1789de47 110 ## Running the application
MACRUM 0:fb5e1789de47 111
MACRUM 0:fb5e1789de47 112 Drag and drop the application binary from `BUILD/YOUR_TARGET_WITH_MODEM/GCC_ARM/mbed-os-example-cellular.bin` to your Mbed Enabled target hardware, which appears as a USB device on your host machine.
MACRUM 0:fb5e1789de47 113
MACRUM 0:fb5e1789de47 114 Attach a serial console emulator of your choice (for example, PuTTY, Minicom or screen) to your USB device. Set the baudrate to 115200 bit/s, and reset your board by pressing the reset button.
MACRUM 0:fb5e1789de47 115
MACRUM 0:fb5e1789de47 116 You should see an output similar to this:
MACRUM 0:fb5e1789de47 117
MACRUM 0:fb5e1789de47 118 ```
MACRUM 0:fb5e1789de47 119 mbed-os-example-cellular
MACRUM 0:fb5e1789de47 120 Establishing connection ......
MACRUM 0:fb5e1789de47 121
MACRUM 0:fb5e1789de47 122 Connection Established.
MACRUM 0:fb5e1789de47 123 TCP: connected with echo.mbedcloudtesting.com server
MACRUM 0:fb5e1789de47 124 TCP: Sent 4 Bytes to echo.mbedcloudtesting.com
MACRUM 0:fb5e1789de47 125 Received from echo server 4 Bytes
MACRUM 0:fb5e1789de47 126
MACRUM 0:fb5e1789de47 127
MACRUM 0:fb5e1789de47 128 Success. Exiting
MACRUM 0:fb5e1789de47 129 ```
MACRUM 0:fb5e1789de47 130
MACRUM 0:fb5e1789de47 131 ## Troubleshooting
MACRUM 0:fb5e1789de47 132
MACRUM 0:fb5e1789de47 133 * Make sure the fields `sim-pin-code`, `apn`, `username` and `password` from the `mbed_app.json` file are filled in correctly. The correct values should appear in the user manual of the board if using eSIM or in the details of the SIM card if using normal SIM.
MACRUM 0:fb5e1789de47 134 * Enable trace flag to have access to debug information `"mbed-trace.enable": true`.
MACRUM 0:fb5e1789de47 135 * Try both `TCP` and `UDP` socket types.
MACRUM 0:fb5e1789de47 136 * Try both `"lwip.ppp-enabled": true` and `"lwip.ppp-enabled": false`.
MACRUM 0:fb5e1789de47 137 * The modem may support only a fixed baud-rate, such as `"platform.default-serial-baud-rate": 9600`.
MACRUM 0:fb5e1789de47 138 * The modem and network may only support IPv6 in which case `"lwip.ipv6-enabled": true` shall be defined.
MACRUM 0:fb5e1789de47 139 * The SIM and modem must have compatible cellular technology (3G, 4G, NB-IoT, ...) supported and cellular network available.
MACRUM 0:fb5e1789de47 140 * Enable CIoT optimization for NONIP socket `control-plane-opt: true`.
MACRUM 0:fb5e1789de47 141
MACRUM 0:fb5e1789de47 142 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.
MACRUM 0:fb5e1789de47 143
MACRUM 0:fb5e1789de47 144 ### License and contributions
MACRUM 0:fb5e1789de47 145
MACRUM 0:fb5e1789de47 146 The software is provided under Apache-2.0 license. Contributions to this project are accepted under the same license. Please see [contributing.md](CONTRIBUTING.md) for more info.
MACRUM 0:fb5e1789de47 147
MACRUM 0:fb5e1789de47 148 This project contains code from other projects. The original license text is included in those source files. They must comply with our license guide.
MACRUM 0:fb5e1789de47 149