Mbed OS 文档翻译 之 参考(API(网络接口(6LoWPAN Mesh)))

6LoWPAN Mesh

                                                               

                                                                               MeshInterface 类层次结构

Arm Mbed Mesh API 允许应用程序通过 Nanostack 网络栈使用 IPv6 网状网络拓扑。

Mbed OS 提供两种类型的基于 IPv6 的网状网络:

  • 6LoWPAN_ND,松散地遵循 Zigbee-IP 规范。
  • Thread,遵循 Thread 组的规范。

Nanostack 是提供这两种协议的网络栈。有关栈内部的更多信息,请参阅 6LoWPAN 网状技术部分。应用程序开发人员通过 Mbed Mesh API 使用 Nanostack。

应用程序可以使用 LoWPANNDInterface 或 ThreadInterface 对象连接到网状网络。成功连接后,应用程序可以使用 Mbed C++ 套接字 API 创建套接字以启动与远程对等方的通信。

您可以通过在 mbed_app.json 中提供值来配置网格接口,作为网状配置部分文档。

用法

  1. 创建网络接口和驱动程序对象。
  2. 使用给定的 PHY 驱动程序初始化接口。
  3. 连接到网络。

支持的网状网络模式

目前,支持 6LoWPAN-ND(邻居发现)和 Thread 自举模式。

网络连接状态

初始化后,网络状态为 MESH_DISCONNECTED。连接成功后,状态将更改为 MESH_CONNECTED,当与网络断开连接时,状态将更改回 MESH_DISCONNECTED。

如果出现连接错误,状态将更改为某些连接错误状态。在错误状态下,不需要发出断开连接请求,并且允许应用程序再次尝试连接。

入门

有关用法,请参阅示例应用程序 mbed-os-example-mesh-minimal

Mesh 类参考

MeshInterface 类参考

公共成员函数
virtual MeshInterface meshInterface ()
 公共成员函数继承自 NetworkInterface
virtual const char *  get_mac_address ()
virtual const char *  get_ip_address ()
virtual const char *  get_netmask ()
virtual const char *  get_gateway ()
virtual nsapi_error_t  set_network (const char *ip_address, const char *netmask, const char *gateway)
virtual nsapi_error_t  set_dhcp (bool dhcp)
virtual nsapi_error_t  connect ()=0
virtual nsapi_error_t  disconnect ()=0
virtual nsapi_error_t  gethostbyname (const char *host, SocketAddress *address, nsapi_version_t version=NSAPI_UNSPEC)
virtual nsapi_value_or_error_t  gethostbyname_async (const char *host, hostbyname_cb_t callback, nsapi_version_t version=NSAPI_UNSPEC)
virtual nsapi_error_t  gethostbyname_async_cancel (int id)
virtual nsapi_error_t  add_dns_server (const SocketAddress &address)
virtual void  attach (mbed::Callback< void(nsapi_event_t, intptr_t)> status_cb)
virtual nsapi_connection_status_t  get_connection_status () const
virtual nsapi_error_t  set_blocking (bool blocking)
virtual EthInterface ethInterface ()
virtual WiFiInterface wifiInterface ()
virtual CellularBase cellularBase ()
virtual EMACInterface emacInterface ()
静态公共成员函数
static MeshInterface get_default_instance ()
 静态公共成员函数继承自 NetworkInterface
static NetworkInterface get_default_instance ()
静态保护的成员函数
static MeshInterface get_target_default_instance ()
 静态保护的成员函数继承自 NetworkInterface
static NetworkInterface get_target_default_instance ()
其他继承成员
 继承自的公共类型 NetworkInterface
typedef mbed::Callback< void(nsapi_error_t result, SocketAddress *address)>  hostbyname_cb_t
 继承自的公共类型 DNS
typedef mbed::Callback< void(nsapi_error_t result, SocketAddress *address)>  hostbyname_cb_t
 受保护的成员函数继承自 NetworkInterface
virtual NetworkStack get_stack ()=0

Mesh 示例

下面的应用程序演示了一个简单的灯光控制应用程序,其中设备可以控制网络中所有设备的 LED 状态。您可以为不安全的 6LoWPAN-ND 或 Thread 网络构建应用程序。

main.cpp                                                                                                                                                导入到 Mbed IDE

/*
 * Copyright (c) 2016 ARM Limited. All rights reserved.
 * SPDX-License-Identifier: Apache-2.0
 * Licensed under the Apache License, Version 2.0 (the License); you may
 * not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
#include "mbed.h"
#include "rtos.h"
#include "NanostackInterface.h"
#include "mbed-trace/mbed_trace.h"
#include "mesh_nvm.h"

#if MBED_CONF_APP_ENABLE_LED_CONTROL_EXAMPLE
#include "mesh_led_control_example.h"
#endif

void trace_printer(const char* str) {
    printf("%s\n", str);
}

#define ATMEL   1
#define MCR20   2
#define NCS36510 3
#define KW24D   4

#define MESH_LOWPAN     3
#define MESH_THREAD     4

#if MBED_CONF_APP_RADIO_TYPE == ATMEL
#include "NanostackRfPhyAtmel.h"
NanostackRfPhyAtmel rf_phy(ATMEL_SPI_MOSI, ATMEL_SPI_MISO, ATMEL_SPI_SCLK, ATMEL_SPI_CS,
                           ATMEL_SPI_RST, ATMEL_SPI_SLP, ATMEL_SPI_IRQ, ATMEL_I2C_SDA, ATMEL_I2C_SCL);
#elif MBED_CONF_APP_RADIO_TYPE == MCR20 || MBED_CONF_APP_RADIO_TYPE == KW24D
#include "NanostackRfPhyMcr20a.h"
NanostackRfPhyMcr20a rf_phy(MCR20A_SPI_MOSI, MCR20A_SPI_MISO, MCR20A_SPI_SCLK, MCR20A_SPI_CS, MCR20A_SPI_RST, MCR20A_SPI_IRQ);

#elif MBED_CONF_APP_RADIO_TYPE == NCS36510
#include "NanostackRfPhyNcs36510.h"
NanostackRfPhyNcs36510 rf_phy;
#endif //MBED_CONF_APP_RADIO_TYPE

#if MBED_CONF_APP_MESH_TYPE == MESH_LOWPAN
LoWPANNDInterface mesh;
#elif MBED_CONF_APP_MESH_TYPE == MESH_THREAD
ThreadInterface mesh;
#endif //MBED_CONF_APP_MESH_TYPE

static Mutex SerialOutMutex;

void serial_out_mutex_wait()
{
    SerialOutMutex.lock();
}

void serial_out_mutex_release()
{
    SerialOutMutex.unlock();
}

int main()
{
    mbed_trace_init();
    mbed_trace_print_function_set(trace_printer);
    mbed_trace_mutex_wait_function_set( serial_out_mutex_wait );
    mbed_trace_mutex_release_function_set( serial_out_mutex_release );
    
    printf("Start mesh-minimal application\n");
    printf("Build: %s %s\nMesh type: %d\n", __DATE__, __TIME__, MBED_CONF_APP_MESH_TYPE);

#if MBED_CONF_APP_ENABLE_LED_CONTROL_EXAMPLE
    if (MBED_CONF_APP_BUTTON != NC && MBED_CONF_APP_LED != NC) {
        start_blinking();
    } else {
        printf("pins not configured. Skipping the LED control.\n");
    }
#endif
    printf("\n\nConnecting...\n");
    mesh.initialize(&rf_phy);
    mesh_nvm_initialize();
    int error = mesh.connect();
    if (error) {
        printf("Connection failed! %d\n", error);
        return error;
    }

    while (NULL == mesh.get_ip_address())
        Thread::wait(500);

    printf("connected. IP = %s\n", mesh.get_ip_address());

#if MBED_CONF_APP_ENABLE_LED_CONTROL_EXAMPLE
    // Network found, start socket example
    if (MBED_CONF_APP_BUTTON != NC && MBED_CONF_APP_LED != NC) {
        cancel_blinking();
        start_mesh_led_control_example((NetworkInterface *)&mesh);
    }
#endif
}

猜你喜欢

转载自blog.csdn.net/u012325601/article/details/82022804
今日推荐