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

This code is forked from https://os.mbed.com/teams/mbed-os-examples/code/mbed-os-example-cellular/

This is an example showing how to use Skywire board with LE910-x module.

In this example, I had used the LE910-EUG module for 4G communication. Mbed OS code wasn't changed for LE910-x, because the Telit' HE910 is included mainline code on Mbed OS already. HE910 and LE910 are most similar. Therefore you can use LE910 via HE910 driver. Please check to configure of mbed_app.json, and initialize code for Skywire board of main.cpp.

Open mbed_app.json, you need to define a UART for the MCU to communicate with the xE910 module.

            "TELIT_HE910.tx"                 : "D1",
            "TELIT_HE910.rx"                 : "D0",
            "TELIT_HE910.provide-default"    : true

If you are using Pelion CM, make the following settings:

            "nsapi.default-cellular-apn"     : "\"stream.co.uk\"",
            "nsapi.default-cellular-username": "\"streamip\"",
            "nsapi.default-cellular-password": "\"streamip\"",

For your information, please see Pelion Connectivity Quick start guide.

320

You can find Skywire sensor shield information though NimbeLink site.

Tested with

  • DISCO_L475VG_IOT01A
  • K64F

1. Import the application into your desktop:

 mbed import https://os.mbed.com/users/Daniel_Lee/code/mbed-os-example-cellular-le910/

 cd mbed-os-example-cellular-le910

2. Compile and program:

mbed compile -t GCC_ARM -m DISCO_L475VG_IOT01A

(supported toolchains : GCC_ARM / ARM / IAR)

3. Download binary to a target board

4. Result

mbed-os-example-cellular


Built: Feb  7 2020, 07:02:27
Starting Skywire board with LE910-EUG Demo...
Waiting for Skywire to Boot...
Wait 15 seconds..
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 
Committer:
mbed_official
Date:
Tue Sep 24 07:01:53 2019 +0100
Revision:
48:67a909e7221b
Parent:
43:fef5b8b23c60
Merge pull request #162 from ARMmbed/sim-pin-update

Set SIM PIN with python
.
Commit copied from https://github.com/ARMmbed/mbed-os-example-cellular

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 0:4611f6cf2413 1 properties ([[$class: 'ParametersDefinitionProperty', parameterDefinitions: [
mbed_official 1:ccaceb0dbbaf 2 [$class: 'StringParameterDefinition', name: 'mbed_os_revision', defaultValue: '', description: 'Revision of mbed-os to build. To access mbed-os PR use format "pull/PR number/head"'],
mbed_official 0:4611f6cf2413 3 [$class: 'BooleanParameterDefinition', name: 'smoke_test', defaultValue: true, description: 'Runs HW smoke tests on Cellular devices']
mbed_official 0:4611f6cf2413 4 ]]])
mbed_official 0:4611f6cf2413 5
mbed_official 1:ccaceb0dbbaf 6 if (env.MBED_OS_REVISION == null) {
mbed_official 1:ccaceb0dbbaf 7 echo 'First run in this branch, using default parameter values'
mbed_official 1:ccaceb0dbbaf 8 env.MBED_OS_REVISION = ''
mbed_official 1:ccaceb0dbbaf 9 }
mbed_official 1:ccaceb0dbbaf 10 if (env.MBED_OS_REVISION == '') {
mbed_official 1:ccaceb0dbbaf 11 echo 'Using mbed OS revision from mbed-os.lib'
mbed_official 1:ccaceb0dbbaf 12 } else {
mbed_official 1:ccaceb0dbbaf 13 echo "Using given mbed OS revision: ${env.MBED_OS_REVISION}"
mbed_official 1:ccaceb0dbbaf 14 if (env.MBED_OS_REVISION.matches('pull/\\d+/head')) {
mbed_official 1:ccaceb0dbbaf 15 echo "Revision is a Pull Request"
mbed_official 1:ccaceb0dbbaf 16 }
mbed_official 0:4611f6cf2413 17 }
mbed_official 0:4611f6cf2413 18
mbed_official 0:4611f6cf2413 19 // Map RaaS instances to corresponding test suites
mbed_official 0:4611f6cf2413 20 def raas = [
mbed_official 41:1f13c9a6ee23 21 "cellular_smoke_mtb_adv_wise_1570.json": "auli"
mbed_official 1:ccaceb0dbbaf 22 ]
mbed_official 0:4611f6cf2413 23
mbed_official 0:4611f6cf2413 24 // Supported Modems
mbed_official 0:4611f6cf2413 25 def targets = [
mbed_official 7:ad3e80a40359 26 "MTB_MTS_DRAGONFLY",
mbed_official 41:1f13c9a6ee23 27 "UBLOX_C030_U201",
mbed_official 43:fef5b8b23c60 28 "MTB_ADV_WISE_1570",
mbed_official 43:fef5b8b23c60 29 "NRF52840_DK"
mbed_official 0:4611f6cf2413 30 ]
mbed_official 0:4611f6cf2413 31
mbed_official 0:4611f6cf2413 32 // Map toolchains to compilers
mbed_official 0:4611f6cf2413 33 def toolchains = [
mbed_official 0:4611f6cf2413 34 ARM: "armcc",
mbed_official 0:4611f6cf2413 35 GCC_ARM: "arm-none-eabi-gcc",
mbed_official 41:1f13c9a6ee23 36 IAR: "iar_arm"
mbed_official 0:4611f6cf2413 37 ]
mbed_official 0:4611f6cf2413 38
mbed_official 0:4611f6cf2413 39 def stepsForParallel = [:]
mbed_official 0:4611f6cf2413 40
mbed_official 0:4611f6cf2413 41 // Jenkins pipeline does not support map.each, we need to use oldschool for loop
mbed_official 7:ad3e80a40359 42 for (int i = 0; i < targets.size(); i++) {
mbed_official 0:4611f6cf2413 43 for(int j = 0; j < toolchains.size(); j++) {
mbed_official 8:abfee2b3d29b 44 def target = targets.get(i)
mbed_official 8:abfee2b3d29b 45 def toolchain = toolchains.keySet().asList().get(j)
mbed_official 8:abfee2b3d29b 46 def compilerLabel = toolchains.get(toolchain)
mbed_official 8:abfee2b3d29b 47 def stepName = "${target} ${toolchain}"
mbed_official 0:4611f6cf2413 48
mbed_official 8:abfee2b3d29b 49 stepsForParallel[stepName] = buildStep(target, compilerLabel, toolchain)
mbed_official 0:4611f6cf2413 50 }
mbed_official 0:4611f6cf2413 51 }
mbed_official 0:4611f6cf2413 52
mbed_official 0:4611f6cf2413 53 def parallelRunSmoke = [:]
mbed_official 0:4611f6cf2413 54
mbed_official 0:4611f6cf2413 55 // Need to compare boolean against string value
mbed_official 1:ccaceb0dbbaf 56 if (params.smoke_test == true) {
mbed_official 1:ccaceb0dbbaf 57 echo "Running smoke tests"
mbed_official 0:4611f6cf2413 58 // Generate smoke tests based on suite amount
mbed_official 0:4611f6cf2413 59 for(int i = 0; i < raas.size(); i++) {
mbed_official 8:abfee2b3d29b 60 def suite_to_run = raas.keySet().asList().get(i)
mbed_official 8:abfee2b3d29b 61 def raasName = raas.get(suite_to_run)
mbed_official 7:ad3e80a40359 62
mbed_official 8:abfee2b3d29b 63 // Parallel execution needs unique step names. Remove .json file ending.
mbed_official 8:abfee2b3d29b 64 def smokeStep = "${raasName} ${suite_to_run.substring(0, suite_to_run.indexOf('.'))}"
mbed_official 8:abfee2b3d29b 65 parallelRunSmoke[smokeStep] = run_smoke(raasName, suite_to_run, toolchains, targets)
mbed_official 0:4611f6cf2413 66 }
mbed_official 1:ccaceb0dbbaf 67 } else {
mbed_official 1:ccaceb0dbbaf 68 echo "Skipping smoke tests"
mbed_official 0:4611f6cf2413 69 }
mbed_official 0:4611f6cf2413 70
mbed_official 0:4611f6cf2413 71 timestamps {
mbed_official 0:4611f6cf2413 72 parallel stepsForParallel
mbed_official 0:4611f6cf2413 73 parallel parallelRunSmoke
mbed_official 0:4611f6cf2413 74 }
mbed_official 0:4611f6cf2413 75
mbed_official 8:abfee2b3d29b 76 def buildStep(target, compilerLabel, toolchain) {
mbed_official 0:4611f6cf2413 77 return {
mbed_official 7:ad3e80a40359 78 stage ("${target}_${compilerLabel}") {
mbed_official 0:4611f6cf2413 79 node ("${compilerLabel}") {
mbed_official 0:4611f6cf2413 80 deleteDir()
mbed_official 48:67a909e7221b 81
mbed_official 48:67a909e7221b 82 // Checkout scripts
mbed_official 48:67a909e7221b 83 dir("mbed-os-systemtest") {
mbed_official 48:67a909e7221b 84 git url: "git@github.com:ARMmbed/mbed-os-systemtest.git", branch:"master"
mbed_official 48:67a909e7221b 85 }
mbed_official 48:67a909e7221b 86
mbed_official 0:4611f6cf2413 87 dir("mbed-os-example-cellular") {
mbed_official 0:4611f6cf2413 88 checkout scm
mbed_official 0:4611f6cf2413 89 def config_file = "mbed_app.json"
mbed_official 0:4611f6cf2413 90
mbed_official 48:67a909e7221b 91 // Sets correct SIM PIN and increases trace level for internal tests
mbed_official 48:67a909e7221b 92 execute("python ../mbed-os-systemtest/cellular/configuration-scripts/update-mbed-app-json.py")
mbed_official 48:67a909e7221b 93
mbed_official 8:abfee2b3d29b 94 // Configurations for different targets
mbed_official 0:4611f6cf2413 95
mbed_official 8:abfee2b3d29b 96 if ("${target}" == "MTB_ADV_WISE_1570") {
mbed_official 8:abfee2b3d29b 97 execute("sed -i 's/\"lwip.ppp-enabled\": true,/\"lwip.ppp-enabled\": false,/' ${config_file}")
mbed_official 8:abfee2b3d29b 98 }
mbed_official 8:abfee2b3d29b 99
mbed_official 43:fef5b8b23c60 100 if ("${target}" == "NRF52840_DK") {
mbed_official 43:fef5b8b23c60 101 //Take correct configuration from configuration store
mbed_official 43:fef5b8b23c60 102 execute("rm mbed_app.json")
mbed_official 43:fef5b8b23c60 103
mbed_official 43:fef5b8b23c60 104 dir("mbed-configurations-private") {
mbed_official 43:fef5b8b23c60 105 git url: "git@github.com:ARMmbed/mbed-configurations-private.git", branch:"master"
mbed_official 43:fef5b8b23c60 106 }
mbed_official 43:fef5b8b23c60 107
mbed_official 43:fef5b8b23c60 108 execute("cp mbed-configurations-private/NRF52840_DK/mbed-os-example-cellular/mbed_app.json .")
mbed_official 43:fef5b8b23c60 109 }
mbed_official 43:fef5b8b23c60 110
mbed_official 43:fef5b8b23c60 111 // A workaround for mbed-cli caching issues
mbed_official 43:fef5b8b23c60 112 try {
mbed_official 43:fef5b8b23c60 113 execute("mbed deploy --protocol ssh")
mbed_official 43:fef5b8b23c60 114 } catch (err) {
mbed_official 43:fef5b8b23c60 115 echo "mbed deploy failed - retrying after 10s"
mbed_official 43:fef5b8b23c60 116 sleep(10)
mbed_official 43:fef5b8b23c60 117 execute("mbed deploy --protocol ssh")
mbed_official 43:fef5b8b23c60 118 }
mbed_official 43:fef5b8b23c60 119
mbed_official 1:ccaceb0dbbaf 120 if (env.MBED_OS_REVISION != '') {
mbed_official 1:ccaceb0dbbaf 121 dir("mbed-os") {
mbed_official 1:ccaceb0dbbaf 122 if (env.MBED_OS_REVISION.matches('pull/\\d+/head')) {
mbed_official 1:ccaceb0dbbaf 123 // Use mbed-os PR and switch to branch created
mbed_official 1:ccaceb0dbbaf 124 execute("git fetch origin ${env.MBED_OS_REVISION}:_PR_")
mbed_official 1:ccaceb0dbbaf 125 execute("git checkout _PR_")
mbed_official 1:ccaceb0dbbaf 126 } else {
mbed_official 1:ccaceb0dbbaf 127 execute ("git checkout ${env.MBED_OS_REVISION}")
mbed_official 1:ccaceb0dbbaf 128 }
mbed_official 1:ccaceb0dbbaf 129 }
mbed_official 1:ccaceb0dbbaf 130 }
mbed_official 0:4611f6cf2413 131
mbed_official 0:4611f6cf2413 132 execute ("mbed compile --build out/${target}_${toolchain}/ -m ${target} -t ${toolchain} -c --app-config ${config_file}")
mbed_official 0:4611f6cf2413 133 }
mbed_official 43:fef5b8b23c60 134 if ("${target}" == "MTB_ADV_WISE_1570" || "${target}" == "NRF52840_DK") {
mbed_official 8:abfee2b3d29b 135 stash name: "${target}_${toolchain}", includes: '**/mbed-os-example-cellular.hex'
mbed_official 8:abfee2b3d29b 136 archive '**/mbed-os-example-cellular.hex'
mbed_official 8:abfee2b3d29b 137 }
mbed_official 8:abfee2b3d29b 138 else {
mbed_official 8:abfee2b3d29b 139 stash name: "${target}_${toolchain}", includes: '**/mbed-os-example-cellular.bin'
mbed_official 8:abfee2b3d29b 140 archive '**/mbed-os-example-cellular.bin'
mbed_official 8:abfee2b3d29b 141 }
mbed_official 0:4611f6cf2413 142 step([$class: 'WsCleanup'])
mbed_official 0:4611f6cf2413 143 }
mbed_official 0:4611f6cf2413 144 }
mbed_official 0:4611f6cf2413 145 }
mbed_official 0:4611f6cf2413 146 }
mbed_official 0:4611f6cf2413 147
mbed_official 8:abfee2b3d29b 148 def run_smoke(raasName, suite_to_run, toolchains, targets) {
mbed_official 0:4611f6cf2413 149 return {
mbed_official 41:1f13c9a6ee23 150 env.RAAS_USERNAME = "ci"
mbed_official 41:1f13c9a6ee23 151 env.RAAS_PASSWORD = "ci"
mbed_official 0:4611f6cf2413 152 // Remove .json from suite name
mbed_official 0:4611f6cf2413 153 def suiteName = suite_to_run.substring(0, suite_to_run.indexOf('.'))
mbed_official 8:abfee2b3d29b 154 stage ("smoke_${raasName}_${suiteName}") {
mbed_official 0:4611f6cf2413 155 //node is actually the type of machine, i.e., mesh-test boild down to linux
mbed_official 1:ccaceb0dbbaf 156 node ("linux") {
mbed_official 0:4611f6cf2413 157 deleteDir()
mbed_official 0:4611f6cf2413 158 dir("mbed-clitest") {
mbed_official 0:4611f6cf2413 159 git "git@github.com:ARMmbed/mbed-clitest.git"
mbed_official 1:ccaceb0dbbaf 160 execute("git checkout ${env.LATEST_CLITEST_STABLE_REL}")
mbed_official 0:4611f6cf2413 161 dir("mbed-clitest-suites") {
mbed_official 0:4611f6cf2413 162 git "git@github.com:ARMmbed/mbed-clitest-suites.git"
mbed_official 0:4611f6cf2413 163 execute("git submodule update --init --recursive")
mbed_official 0:4611f6cf2413 164 execute("git all checkout master")
mbed_official 0:4611f6cf2413 165 dir("cellular") {
mbed_official 0:4611f6cf2413 166 execute("git checkout master")
mbed_official 0:4611f6cf2413 167 }
mbed_official 0:4611f6cf2413 168 }
mbed_official 0:4611f6cf2413 169
mbed_official 7:ad3e80a40359 170 for (int i = 0; i < targets.size(); i++) {
mbed_official 0:4611f6cf2413 171 for(int j = 0; j < toolchains.size(); j++) {
mbed_official 7:ad3e80a40359 172 def target = targets.get(i)
mbed_official 7:ad3e80a40359 173 def toolchain = toolchains.keySet().asList().get(j)
mbed_official 8:abfee2b3d29b 174 unstash "${target}_${toolchain}"
mbed_official 0:4611f6cf2413 175 }
mbed_official 0:4611f6cf2413 176 }
mbed_official 8:abfee2b3d29b 177 execute("python clitest.py --suitedir mbed-clitest-suites/suites/ --suite ${suite_to_run} --type hardware --reset \
mbed_official 39:e57f130d65bd 178 --raas https://${raasName}.mbedcloudtesting.com:443 --tcdir mbed-clitest-suites/cellular --raas_queue --raas_queue_timeout 3600 \
mbed_official 41:1f13c9a6ee23 179 --raas_share_allocs --failure_return_value -v -w --log log_${raasName}_${suiteName}")
mbed_official 8:abfee2b3d29b 180 archive "log_${raasName}_${suiteName}/**/*"
mbed_official 0:4611f6cf2413 181 }
mbed_official 0:4611f6cf2413 182 }
mbed_official 0:4611f6cf2413 183 }
mbed_official 0:4611f6cf2413 184 }
mbed_official 0:4611f6cf2413 185 }