This application is the simplest one to utilize our mesh networking stack. It just joins your device to the unsecure 6LoWPAN-ND network. The canonical source for this example lives at https://github.com/ARMmbed/mbed-os-example-mesh-minimal

Example mesh application for Mbed OS

With this application, you can use our mesh networking stack. This application joins your device to the unsecure 6LoWPAN-ND network.

Setup

Building with Mbed CLI

If you'd like to use Mbed CLI to build this offline, then you should refer to the Mbed CLI documentation. The instructions here relate to using the Mbed Online Compiler

  1. Click `Import this application` button.
  2. Change the channel settings: See the file `mbed_app.json` for an example of defining an IEEE 802.15.4 channel to use.
  3. Compile the application

A binary is generated at the end of the build process.

Connect the RF shield to the board

By default, we are using the Atmel AT86RF233, which you can purchase. Place the shield on top of your board, and power it on.

Program the target

Drag and drop the binary to the target to program the application.

Update the firmware of the border router.

You can read the instructions on updating the firmware of your board working as 6LoWPAN border router here.

Please remember to connect the Ethernet cable between the border router and your router. Then, power up the board.

Testing

As soon as both the border router and the target are up and running, you can verify the correct behavior. Open a serial console, and see the IP address obtained by the device.

Note: This application uses a baud rate of 115200.

Quote:

connected. IP = 2001:db8:a0b:12f0::1

You can use this IP address to ping from your PC and verify that the connection is working correctly.

Changing the radio driver (optional)

To run a 6LoWPAN-ND network, you need a working RF driver for Nanostack. This example uses the Atmel AT86RF233 by default.

To change the RF driver:

  1. Uninstall the Atmel RF driver.
  2. Install the new driver. (For example, for the FRDM-CR20A radio shield based on the MCR20A device.)
  3. Recompile your application.
Committer:
mbed_official
Date:
Mon Aug 19 14:00:33 2019 +0100
Revision:
128:e7faff9c9fd9
Parent:
109:4799ef092b94
Merge branch 'mbed-os-5.13'

* mbed-os-5.13:
Updating mbed-os to mbed-os-5.13.3 (#275)
Update mesh_minimal_startup.py
Updating mbed-os to mbed-os-5.13.2 (#274)

.
Commit copied from https://github.com/ARMmbed/mbed-os-example-mesh-minimal

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 72:a7c594402382 1 /*
mbed_official 72:a7c594402382 2 * Copyright (c) 2018 ARM Limited. All rights reserved.
mbed_official 72:a7c594402382 3 * SPDX-License-Identifier: Apache-2.0
mbed_official 72:a7c594402382 4 * Licensed under the Apache License, Version 2.0 (the License); you may
mbed_official 72:a7c594402382 5 * not use this file except in compliance with the License.
mbed_official 72:a7c594402382 6 * You may obtain a copy of the License at
mbed_official 72:a7c594402382 7 *
mbed_official 72:a7c594402382 8 * http://www.apache.org/licenses/LICENSE-2.0
mbed_official 72:a7c594402382 9 *
mbed_official 72:a7c594402382 10 * Unless required by applicable law or agreed to in writing, software
mbed_official 72:a7c594402382 11 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
mbed_official 72:a7c594402382 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mbed_official 72:a7c594402382 13 * See the License for the specific language governing permissions and
mbed_official 72:a7c594402382 14 * limitations under the License.
mbed_official 72:a7c594402382 15 */
mbed_official 72:a7c594402382 16
mbed_official 72:a7c594402382 17 #include "mbed.h"
mbed_official 87:a6a7b64f4f48 18 #include "Nanostack.h"
mbed_official 72:a7c594402382 19
mbed_official 78:fc7a81fd524c 20 /* Application configuration values from json */
mbed_official 109:4799ef092b94 21 #define MESH_NVM_HEAP 1
mbed_official 109:4799ef092b94 22 #define MESH_NVM_SD_CARD 2
mbed_official 109:4799ef092b94 23 #define MESH_NVM_NONE 3
mbed_official 78:fc7a81fd524c 24
mbed_official 72:a7c594402382 25 /* At the moment, Thread builds using K64F support NVM */
mbed_official 109:4799ef092b94 26 #if defined MBED_CONF_APP_STORAGE_DEVICE && MBED_CONF_APP_STORAGE_DEVICE != MESH_NVM_NONE && defined(TARGET_K64F)
mbed_official 72:a7c594402382 27
mbed_official 72:a7c594402382 28 #include "LittleFileSystem.h"
mbed_official 72:a7c594402382 29 #include "SDBlockDevice.h"
mbed_official 72:a7c594402382 30 #include "HeapBlockDevice.h"
mbed_official 72:a7c594402382 31 #include "ns_file_system.h"
mbed_official 72:a7c594402382 32 #include "mbed_trace.h"
mbed_official 72:a7c594402382 33
mbed_official 72:a7c594402382 34 #define TRACE_GROUP "mnvm"
mbed_official 72:a7c594402382 35
mbed_official 72:a7c594402382 36 LittleFileSystem *fs;
mbed_official 72:a7c594402382 37 BlockDevice *bd;
mbed_official 72:a7c594402382 38
mbed_official 72:a7c594402382 39 void mesh_nvm_initialize()
mbed_official 72:a7c594402382 40 {
mbed_official 72:a7c594402382 41 fs = new LittleFileSystem("fs");
mbed_official 109:4799ef092b94 42 #if MBED_CONF_APP_STORAGE_DEVICE == MESH_NVM_HEAP
mbed_official 72:a7c594402382 43 const char *bd_info = "NVM: Heap";
mbed_official 72:a7c594402382 44 bd = new HeapBlockDevice(16 * 512, 512);
mbed_official 72:a7c594402382 45 #else
mbed_official 72:a7c594402382 46 const char *bd_info = "NVM: SD";
mbed_official 72:a7c594402382 47 bd = new SDBlockDevice(MBED_CONF_SD_SPI_MOSI, MBED_CONF_SD_SPI_MISO, MBED_CONF_SD_SPI_CLK, MBED_CONF_SD_SPI_CS);
mbed_official 72:a7c594402382 48 #endif
mbed_official 72:a7c594402382 49
mbed_official 109:4799ef092b94 50 tr_debug("%s", bd_info);
mbed_official 72:a7c594402382 51 int mount_status = fs->mount(bd);
mbed_official 72:a7c594402382 52 if (mount_status) {
mbed_official 72:a7c594402382 53 tr_warning("mount error: %d, trying format...", mount_status);
mbed_official 72:a7c594402382 54 mount_status = fs->reformat(bd);
mbed_official 72:a7c594402382 55 tr_info("reformat %s (%d)", mount_status ? "failed" : "OK", mount_status);
mbed_official 72:a7c594402382 56 }
mbed_official 72:a7c594402382 57
mbed_official 72:a7c594402382 58 if (!mount_status) {
mbed_official 87:a6a7b64f4f48 59 Nanostack::get_instance(); // ensure Nanostack is initialised
mbed_official 72:a7c594402382 60 ns_file_system_set_root_path("/fs/");
mbed_official 87:a6a7b64f4f48 61 // Should be like: Nanostack::get_instance().file_system_set_root_path("/fs/");
mbed_official 72:a7c594402382 62 }
mbed_official 72:a7c594402382 63 }
mbed_official 72:a7c594402382 64
mbed_official 109:4799ef092b94 65 #else /* #if defined MBED_CONF_APP_STORAGE_DEVICE && MBED_CONF_APP_STORAGE_DEVICE != MESH_NVM_NONE && defined(TARGET_K64F) */
mbed_official 109:4799ef092b94 66
mbed_official 72:a7c594402382 67 void mesh_nvm_initialize()
mbed_official 72:a7c594402382 68 {
mbed_official 72:a7c594402382 69 /* NVM not supported */
mbed_official 72:a7c594402382 70 }
mbed_official 72:a7c594402382 71
mbed_official 109:4799ef092b94 72 #endif /* #if defined MBED_CONF_APP_STORAGE_DEVICE && MBED_CONF_APP_STORAGE_DEVICE != MESH_NVM_NONE && defined(TARGET_K64F) */
mbed_official 109:4799ef092b94 73