**Комплект** 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 ```