**Комплект**
1. nrf52840-mdk-usb-dongle
2. Raspberry Pi 3
3. nrf52840-mdk * 2x
4. nrf52840-dk
## Установка и настройка Border Router
** 1. Создать загрузочную флешку из ISO образа с помощью Win32 Disk Imager. **
** 1.1 Скачать с сайта образ **
RaspPi_OT_Border_Router_Demo_v4.1.0-1.alpha.img
wget https://www.nordicsemi.com/-/media/Software-and-other-downloads/SDKs/nRF5-SDK-for-Thread/RaspPiOTBorderRouterDemov4101.zip
** 2. Установить образ на Raspberry Pi 3 **
** 3. Прошить nrf52840-mdk-usb-dongle **
Для этого скачать git репозиторий
```
git clone https://github.com/makerdiary/nrf52840-mdk-usb-dongle.git
```
Нам нужен пример
nrf52840-mdk-usb-dongle/tree/master/examples/openthread/ncp/ftd/hex
Программируем nRF52840 MDK USB Dongle с помощью nRF Connect. Скачиваем его с сайта nordicsemi. Переходим в раздел Programmer. Зажимаем кнопку на USB Dongle и устанавливаем в USB разъем, загорится красный светодиод. Выбираем наш пример nrf52840-mdk-usb-dongle/blob/master/examples/openthread/ncp/ftd/hex/thread_ncp_ftd_nrf52840_mdk_usb_dongle_v1.3.0.hex
Нажимем Write. Устройство готово.
** 4. Проверяем статус сервиса**
```
pi@border:~ $ sudo wpanctl status
wpan0 => [
"NCP:State" => "associated"
"Daemon:Enabled" => true
"NCP:Version" => "OPENTHREAD/0.01.00; NRF52840; May 21 2019 21:43:12"
"Daemon:Version" => "0.08.00d (; Apr 21 2020 19:11:43)"
"Config:NCP:DriverName" => "spinel"
"NCP:HardwareAddress" => [9016F8D270DB56B7]
"NCP:Channel" => 15
"Network:NodeType" => "router"
"Network:Name" => "OpenThreadDemo"
"Network:XPANID" => 0x1111111122222222
"Network:PANID" => 0x1234
"IPv6:LinkLocalAddress" => "fe80::c8de:9730:5d02:cb82"
"IPv6:MeshLocalAddress" => "fd11:1111:1122:0:77c6:61f5:cb70:666"
"IPv6:MeshLocalPrefix" => "fd11:1111:1122::/64"
"com.nestlabs.internal:Network:AllowingJoin" => false
]
```
Должно быть "NCP:State" => "associated"
У нас становится доступен веб интерфейс управления сетью.
```
pi@border:~ $ ifconfig wlan0
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.42.0.1 netmask 255.255.255.0 broadcast 10.42.0.255
```
```
pi@border:~ $ sudo netstat -tpln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 610/otbr-web
tcp 0 0 10.42.0.1:53 0.0.0.0:* LISTEN 466/named
```
Запускаем Commissioner на Raspberry Pi
```
sudo wpanctl commissioner start
```
## Создание Node2 из nrf52840-dk
** 1. Скачиваем репозиторий **
```
https://www.nordicsemi.com/-/media/Software-and-other-downloads/SDKs/nRF5-SDK-for-Thread/nRF5-SDK-for-Thread-and-Zigbee/nRF5SDKforThreadv41.zip
```
**2. Находим файл**
nRF5_SDK_for_Thread_and_Zigbee_v4.1.0_32ce5f8\examples\thread\cli\ftd\uart\hex\nrf52840_xxaa_pca10056.hex
Нам потребуется скачать и усатновить NRF Connect, а также установить приложение Programmer.
**3. Выбиаем наш hex файл и загружем его с помощью Programmer.**
## Настройка Node 2
С помощью Putty подключаемся к Node2.
**1. Создаём новый dataset с параметрами сети.**
```
> dataset init new
Done
> dataset
Active Timestamp: 1
Channel: 24
Channel Mask: 07fff800
Ext PAN ID: 6556f08e92364e28
Mesh Local Prefix: fd13:f242:8ed5:8ccf/64
Master Key: f85678febe30cd7ef7d67efc7a6cf6f6
Network Name: OpenThread-41c3
PAN ID: 0x41c3
PSKc: 500b7dcf478302a2bdf8a4152395f409
Security Policy: 0, onrcb
Done
```
Устанавливаем параметры в соостветсвии с Border Router
```
> dataset channel 15
Done
> dataset panid 0x1234
Done
> dataset extpanid 1111111122222222
Done
> dataset networkname OpenThreadDemo
Done
> dataset networkkey 00112233445566778899aabbccddeeff
Done
> dataset meshlocalprefix fd11:1111:1122::
Done
> dataset commit active
Done
> ifconfig up
Done
> state
disabled
Done
> thread start
Done
> state
detached
Done
> state
leader
Done
```
**2.Подключаемся в вебке раздел Join, нажимаем Join. Должно быть сообщение что соедение установлено.**
## Проверяем сеть Thread
С помощью Putty подключаемся к Node2, смотри Com в диспетчере устройств в Windows или dmesg в Linux.
```
> state
router
Done
> ipaddr
fd11:1111:1122:0:0:ff:fe00:b000
fd11:22:0:0:c6c8:1fe6:fb53:e2e3
fd11:1111:1122:0:4f00:28dc:1c4f:952d
fe80:0:0:0:c45a:5012:f0e6:7155
Done
```
Подключаем по SSH к Border Router и проверяем есть
```
pi@border:~/ $ ip a show wpan0
4: wpan0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1280 qdisc pfifo_fast state UNKNOWN group default qlen 500
link/none
inet6 fd11:22::159b:2427:d455:d0c5/64 scope global
valid_lft forever preferred_lft forever
inet6 fd11:1111:1122:0:5988:d64d:46d4:9b60/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::e0f0:dc29:f129:defd/64 scope link
valid_lft forever preferred_lft forever
inet6 fe80::ed41:264d:b2e4:91b8/64 scope link flags 800
valid_lft forever preferred_lft forever
```
Пингуем IPv6 Node2
```
pi@border:~/$ ping6 fd11:1111:1122:0:4f00:28dc:1c4f:952d
PING fd11:1111:1122:0:4f00:28dc:1c4f:952d(fd11:1111:1122:0:4f00:28dc:1c4f:952d) 56 data bytes
64 bytes from fd11:1111:1122:0:4f00:28dc:1c4f:952d: icmp_seq=1 ttl=64 time=27.6 ms
64 bytes from fd11:1111:1122:0:4f00:28dc:1c4f:952d: icmp_seq=2 ttl=64 time=15.9 ms
64 bytes from fd11:1111:1122:0:4f00:28dc:1c4f:952d: icmp_seq=3 ttl=64 time=23.7 ms
64 bytes from fd11:1111:1122:0:4f00:28dc:1c4f:952d: icmp_seq=4 ttl=64 time=18.2 ms
64 bytes from fd11:1111:1122:0:4f00:28dc:1c4f:952d: icmp_seq=5 ttl=64 time=18.2 ms
^C
--- fd11:1111:1122:0:4f00:28dc:1c4f:952d ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 15.913/20.765/27.631/4.297 ms
```
## Советы
**1. Как посмотреть соседей на Node2**
```
> neighbor list
0xe400
Done
```
**2. Как скопироавать dataset?**
На node1 выполняем команду
```
dataset active -x
0e080000000000010000000300000f35060004001fffe0020811111111222222220708fd11111111220000051000112233445566778899aabbccddeeff030e4f70656e54687265616444656d6f0102123404102214c081051c65466ed41111d306c3c00c0402a0fff8
Done
```
Копируем значение и устанавливаем его на Node2
```
dataset set active 0e080000000000010000000300000f35060004001fffe0020811111111222222220708fd11111111220000051000112233445566778899aabbccddeeff030e4f70656e54687265616444656d6f0102123404102214c081051c65466ed41111d306c3c00c0402a0fff8
```
Получаем
```
> dataset active
Active Timestamp: 1
Channel: 15
Channel Mask: 0x07fff800
Ext PAN ID: 1111111122222222
Mesh Local Prefix: fd11:1111:1122:0::/64
Network Key: 00112233445566778899aabbccddeeff
Network Name: OpenThreadDemo
PAN ID: 0x1234
PSKc: 2214c081051c65466ed41111d306c3c0
Security Policy: 672 onrcb
Done
```
Коммитим dataset и создаем новое устройство в сети Thread
```
>dataset init active
Done
> dataset commit active
Done
> ifconfig up
Done
> thread start
Done
>
> state
child
Done
```