Этот пример демонстрирует лавинную рассылку слоя сети в сети mesh Bluetooth® с помощью Коммуникационного Тулбокса Library™ для Протокола Bluetooth®. Используя этот пример, вы можете:
Создайте и сконфигурируйте сеть mesh Bluetooth путем расположения узлов в сетку.
Задайте свою собственную сеть путем конфигурирования положений узла и типа выделения положения узла.
Классифицируйте и сконфигурируйте узлы mesh как источник, место назначения, реле и конечные узлы и наблюдайте, как лавинная рассылка слоя сети помогает в связи между источником и местом назначения даже после отключения немногих промежуточных релейных узлов.
Визуализируйте поток пакетов от источника до места назначения.
Пример также показывает, как выполнить симуляции Монте-Карло в сети mesh Bluetooth, чтобы получить числовые результаты (как количество релейных узлов требуемые, критические релейные узлы между источником и местом назначения) усредненный по нескольким итерациям.
Спецификация [1] Ядра Bluetooth включает Низкую энергетическую версию для беспроводных персональных сетей области с низкой ставкой, называемых Bluetooth низкой энергией (BLE) или Умным Bluetooth. Стек BLE состоит из типового профиля атрибута (GATT), протокол атрибута (ATT), протокол менеджера безопасности (SMP), управление логической ссылкой и протокол (L2CAP) адаптации, слой ссылки (LL) и физический уровень. BLE был добавлен к стандарту для низких энергетических устройств, генерирующих небольшие количества данных, такие как предупреждения уведомления, используемые в таких приложениях как домашняя автоматизация, здравоохранение, фитнес и Интернет вещей (IoT). Для получения дополнительной информации о стеке протокола BLE, смотрите Стек Протокола Bluetooth.
Профиль mesh Bluetooth [2] задает основные требования, чтобы реализовать сетевое решение mesh для BLE. Стек mesh расположен сверху базовой спецификации BLE и состоит из слоя модели, слоя модели основы, слоя доступа, верхнего транспортного уровня, более низкого транспортного уровня, слоя сети и слоя несущей. Организация сети mesh Bluetooth включает крупномасштабные сети устройства в приложениях, таких как умная подсветка, промышленная автоматизация, организация сети датчика, отслеживание актива и много других решений IoT. Для получения дополнительной информации о стеке mesh Bluetooth, смотрите, что Mesh Bluetooth Объединяется в сеть.
Слой сети mesh Bluetooth выполняет эти первичные операции.
Передайте сообщения верхнего уровня по сети с помощью слоя несущей
Релейные сообщения mesh
Реализуйте управляемую лавинную рассылку, чтобы оптимизировать сетевую лавинную рассылку
Присвойте сетевые адреса
Сконфигурируйте безопасность слоя сети
Для получения дополнительной информации об этих операциях слоя сети mesh, смотрите, что Mesh Bluetooth Объединяется в сеть.
Этот пример использует рекламную несущую, чтобы продемонстрировать лавинную рассылку mesh Bluetooth в беспроводной сети датчика.
Основные цели этого примера:
Создайте и сконфигурируйте сеть mesh Bluetooth
Визуализируйте лавинную рассылку сообщения
Выведите путь между выбранным источником и местом назначения
Отобразитесь статистика (отошлите Статистику Слоя сети в Каждом Узле) в каждом узле
% Check if the 'Communications Toolbox Library for the Bluetooth Protocol' % support package is installed or not. commSupportPackageCheck('BLUETOOTH');
Этот пример позволяет вам создать и сконфигурировать два сценария сети mesh Bluetooth. Каждый сценарий является сетью с 50 узлами. Узлы в сети классифицируются как реле, источник, место назначения и конечные узлы. Задайте соответствующие значения времени, чтобы жить (TTL) источника и целевых узлов. В первом сценарии пример идентифицирует пути между источником и целевыми узлами. Можно визуализировать поток сообщений в сети со статистикой слоя сети. Во втором сценарии пример отключает некоторые релейные узлы и конечные узлы. В этом случае симуляции показывают, что сеть имеет вероятность установления пути между заданным источником и целевой парой.
Чтобы создать и визуализировать сеть mesh, используйте функции helperBLEMeshVisualizeNetwork и helperBLEMeshNetworkNode. Задайте количество узлов (totalNodes
) и тип положения узла (NodePositionType
) в функции helperBLEMeshVisualizeNetwork. Типом по умолчанию положения узла является 'Сетка'. Чтобы задать вашу собственную сеть, установите значение NodePositionType
к 'UserInput' и положениям узла к Positions
.
% Set random number generator seed to 'default' sprev = rng('default'); % Specify the number of nodes in the mesh network totalNodes = 50; % Initialize 'bleMeshNodes' vector with objects of type % helperBLEMeshNetworkNode bleMeshNodes(1, totalNodes) = helperBLEMeshNetworkNode; % Configure each mesh node with unique identifier for idx = 1:totalNodes meshNode = helperBLEMeshNetworkNode; meshNode.Identifier = idx; meshNode.NetworkLayer.ElementAddresses = dec2hex(idx, 4); bleMeshNodes(idx) = meshNode; end % Load node positions from the MAT file load('bleMeshNetworkNodePositions.mat'); % Number of scenarios simulated in this examples numberOfScenarios = 2; % Initialize 'meshNetworkPlots' vector with objects of type % helperBLEMeshVisualizeNetwork meshNetworkPlots(1, numberOfScenarios) = helperBLEMeshVisualizeNetwork; for idx = 1:numberOfScenarios meshNetworkPlots(idx) = helperBLEMeshVisualizeNetwork; meshNetworkPlots(idx).NumberOfNodes = totalNodes; % Set the type of the node position allocation as 'Grid' or % 'UserInput' meshNetworkPlots(idx).NodePositionType = 'UserInput'; % Set node positions based on number of nodes (applicable for % 'UserInput'), in meters meshNetworkPlots(idx).Positions = bleMeshNetworkNodePositions; % Set vicinity range based on node positions, in meters meshNetworkPlots(idx).VicinityRange = 25; % Set title to the network visualization meshNetworkPlots(idx).Title = ... ['Scenario ' num2str(idx) ': Bluetooth Mesh Flooding']; end
Задайте количество источника и целевых пар в сети mesh использование srcDstPairs
параметр. Задайте значения TTL для пакета, порожденного в каждом исходном узле.
% Specify the simulation time in milliseconds simulationTime = 600; % Enable or disable visualization enableVisualization = true; % Specify the source and destination pairs srcDstPairs = [1 7; 13 29]; % Specify TTL values for packet originated at each source node ttl = [25; 25];
Чтобы запустить симуляцию и получить результаты, используйте helperBLEMeshFloodingSimulation и функции helperBLEMeshFloodingSimulationResults, соответственно.
Сценарий 1: В этом сценарии все эти пятьдесят узлов в сети активны. Некоторые из этих узлов выбраны как реле и в этом сценарии нет никаких не пройдено узлов.
% Specify the relay nodes relayNodeIDs = [3 4 5 8 10 11 15 19 20 21 23 25 28 30 32 34 36 37 38 39 41 ... 42 43 44 45 46 47 48 49]; % Specify the failed nodes (nodes that are out of network) failedNodeIDs = [];
Этот график показывает соответствующие пути между каждым источником и целевой парой. scenarioOneResults
переменная рабочей области хранит результаты, содержащие полученные пути в сценарии 1.
% Run the simulation with scenario 1 configuration pathScenarioOne = helperBLEMeshFloodingSimulation(totalNodes, bleMeshNodes, meshNetworkPlots(1), ... simulationTime, srcDstPairs, ttl, relayNodeIDs, failedNodeIDs, ... enableVisualization); % Display the results of the scenario 1 scenarioOneResults = helperBLEMeshFloodingSimulationResults(srcDstPairs, pathScenarioOne)
scenarioOneResults = 2x4 table Source Destination Path NumberOfHops ______ ___________ ___________________________ ____________ 1 7 {[1 46 19 4 39 41 48 23 7]} 8 13 29 {[ 13 5 3 28 36 44 29]} 6
Сценарий 2: В этом сценарии отключите релейную опцию Узла 41. Удалите Узел 3 и Узел 43 от сети.
% Specify the relay nodes relayNodeIDs = [4 5 8 10 11 15 19 20 21 23 25 28 30 32 34 36 37 38 39 42 ... 44 45 46 47 48 49]; % Specify the failed nodes (nodes that are out of network) failedNodeIDs = [3, 43];
Этот график показывает соответствующие пути между каждым источником и целевой парой. scenarioTwoResults
переменная рабочей области хранит результаты, содержащие полученные пути в сценарии 2.
% Run the simulation with scenario 2 configuration pathScenarioTwo = helperBLEMeshFloodingSimulation(totalNodes, bleMeshNodes, meshNetworkPlots(2), ... simulationTime, srcDstPairs, ttl, relayNodeIDs, failedNodeIDs, ... enableVisualization); % Display the results of the scenario 2 scenarioTwoResults = helperBLEMeshFloodingSimulationResults(srcDstPairs, pathScenarioTwo)
scenarioTwoResults = 2x4 table Source Destination Path NumberOfHops ______ ___________ ________________________________ ____________ 1 7 {[1 46 19 4 8 20 37 45 34 23 7]} 10 13 29 {[ 13 30 45 34 28 36 44 29]} 7
В каждом узле пример получает эти статистические данные слоя сети.
Количество сообщений передается узлом
Количество сообщений получено узлом
Количество сообщений приложения получено
Количество сообщений передается узлом
Количество сообщений пропущено в узле
statisticsAtEachNode
переменная рабочей области содержит совокупную сетевую статистику всех узлов в сценарии 1 и сценарии 2. Для определенной запущенной симуляции вы видите сетевую статистику для только сначала пяти узлов. Это сетевая статистика для первых пяти узлов в сети.
statisticsAtEachNode = helperBLEMeshFloodingSimulationResults(bleMeshNodes); statisticsForFirstFiveNodes = statisticsAtEachNode(1:min(5, totalNodes), :)
statisticsForFirstFiveNodes = 5x6 table NodeID TotalTxMsgs TotalRxMsgs TotalAppRxMsgs TotalRelayedMsgs TotalDroppedMsgs ______ ___________ ___________ ______________ ________________ ________________ 1 2 4 0 0 4 2 0 8 0 0 8 3 0 5 0 2 3 4 0 10 0 4 6 5 0 9 0 4 5
Чтобы получить числовые результаты, усредненные по нескольким симуляциям, пример реализует Метод Монте-Карло [3]. Чтобы анализировать вероятность доставки сообщений от исходного узла до целевого узла после включения или отключения релейных узлов в сети mesh, используйте helperBLEMeshMonteCarloSimulations скрипт. Каждая запущенная симуляция выполняет эти шаги.
Использует новый seed, чтобы сгенерировать случайное число.
Случайным образом отключает релейные узлы, пока только один путь не существует между источником и целевыми узлами.
Хранит путь.
Симуляции Монте-Карло выводят эти статистические данные.
Вероятность доставки сообщений от источника до места назначения, когда релейные узлы случайным образом отключены в сети
Среднее число переходов между источником и целевыми узлами
Критические реле, требуемые гарантировать пакетную доставку от источника до места назначения
Пример выполняет симуляции Монте-Карло при помощи этих параметров конфигурации.
% Source and destination nodes srcDstPair = [16 12]; % TTL value for the message originated at the above source node ttl = 25; % Relay nodes relayNodeIDs = [21 15 25 11 38 19 46 8 39 20 37 32 30 5 45 49 43 3 28 36 47 ... 34 23 48 41 44 42 10 4]; % Failed nodes (nodes that are out of network) failedNodeIDs = [];
Пример выполняет 10 000 симуляций при помощи вышеупомянутой настройки. Чтобы просмотреть результаты симуляции, смотрите bleMeshMonteCarloResults.mat
Matfile.
load('bleMeshMonteCarloResults.mat'); disp(['Probability of having a path between nodes Node ' num2str(srcDstPair(1)) ... ' and Node ' num2str(srcDstPair(2)) ' is ' ... num2str(probabilityOfSuccess) '%.']); disp(['Average hop count between nodes Node ' num2str(srcDstPair(1)) ' and Node ' ... num2str(srcDstPair(2)) ' is ' ... num2str(averageHopCount) '.']); disp(['Critical relay nodes required to derive a path between Node ' num2str(srcDstPair(1)) ... ' and Node ' num2str(srcDstPair(2)) ' are [' num2str(criticalRelaysInfo{1:5, 1}') ... '].']); % Restore the previous setting of random number generation rng(sprev);
Probability of having a path between nodes Node 16 and Node 12 is 88.6428%. Average hop count between nodes Node 16 and Node 12 is 8. Critical relay nodes required to derive a path between Node 16 and Node 12 are [39 37 8 38 4].
Чтобы выполнить симуляции Монте-Карло для параметров пользовательской конфигурации, измените и запустите helperBLEMeshMonteCarloSimulations скрипт.
Этот пример позволяет вам создать и сконфигурировать мультиузел сеть mesh Bluetooth и анализировать лавинную рассылку слоя сети. Чтобы изучить поведение лавинной рассылки, пример рассматривает два сценария симуляции. В первом сценарии путь между источником и целевыми узлами идентифицируется и визуализируется путем выбора некоторых промежуточных узлов как релейных узлов. Во втором сценарии пропущены некоторые узлы (Реле и Конец), и релейная опция некоторых релейных узлов отключена. Полученные результаты показывают, что там существует путь между источником и целевыми узлами, даже если узлы (Реле и Конец) перестали работать случайным образом в сети.
Этот пример позволяет вам создать свою собственную сеть mesh Bluetooth и визуализировать лавинную рассылку mesh и сетевую статистику. Получить числовые результаты составило в среднем по нескольким итерациям, можно выполнить симуляции Монте-Карло в сети mesh Bluetooth.
Пример использует этих помощников:
helperBLEMeshNetworkNode: Создайте объект для узла mesh Bluetooth
helperBLEMeshNetworkLayer: Создайте объект для функциональности слоя сети mesh Bluetooth
helperBLEMeshNetworkPDU: Сгенерируйте сеть PDU mesh Bluetooth
helperBLEMeshNetworkPDUDecode: Декодируйте сеть PDU mesh Bluetooth
helperBluetoothQueue: Создайте объект для функциональности очереди Bluetooth
helperBLEMeshRetransmissions: Создайте объект для повторных передач в узле mesh Bluetooth
helperBLEMeshChannelMessage: Получите сообщение от канала сети mesh Bluetooth
helperBLEMeshPath: Выведите путь между источником и местом назначения в сети mesh Bluetooth
helperBLEMeshVicinityNodes: Получите узлы близости данного узла
helperBLEMeshGraphCursorCallback: Отобразитесь статистические данные узла по мыши наводят действие
helperBLEMeshVisualizeNetwork: Создайте объект для mesh Bluetooth сетевая визуализация
helperBLEMeshFloodingSimulation: Симулируйте сеть mesh Bluetooth
helperBLEMeshFloodingSimulationResults: результаты симуляции сети mesh Bluetooth
helperBLEMeshMonteCarloSimulations: симуляции Монте-Карло сети mesh Bluetooth
Специальная группа (SIG) Bluetooth. "Спецификация Ядра Bluetooth". Версия 5.0. https://www.bluetooth.com/.
Специальная группа (SIG) Bluetooth. "Профиль Mesh Bluetooth". Версия 1.0. https://www.bluetooth.com/.
Столица, Николас и С. Улэм. "Метод Монте-Карло". Журнал американской Статистической Ассоциации 44, № 247 (сентябрь 1949): 335–41. https://doi.org/10.1080/01621459.1949.10483310.