研究生
最后登录1970-1-1
在线时间 小时
注册时间2016-7-23
|
本帖最后由 koenlee93 于 2023-11-28 08:27 编辑
本文详细描述如何用鲁班猫4搭建边界路由开发环境。
本次是基于鲁班猫4(RK3588s)搭建Open Thread Border Router简称OTBR。在开发智能家居的工程师都知道目前国内智能家居比较多的是WiFi、蓝牙、ZigBee等无线的产品,随后又出现了一种新的无线协议叫Thread。而OTBR就是一个实现了 Thread 边界路由器功能的开源项目。在openthread的官网讲述的都是基于树莓派4B搭建的边界路由,由于树莓派的价格比较贵,而在今年的9月份野火出了鲁班猫4于是我想在它上面搭建一个OTBR的环境。
下面是芯科官方用树莓派搭建的OTBR图,图中左边是Matter WiFi的产品,右边是Matter Thread的产品,中间的树莓派上面安装的就是OTBR其功能就类似是一个网关,我们要做的就是用鲁班猫4替代树莓派4B。
- 本次需要的硬件:
鲁班猫4、一张大于64GB的内存卡、USB转蓝牙模块(我在绿联官网买的29.9元)、BRD4187C+BRD4002A(芯科官网开发Matter over Thread套件)我用了两套相同的芯科开发套件,一套接在鲁班猫的USB口作为RCP,一套作为Matter over Thread的设备等于这个就属于我们智能家居里面的设备例如灯泡。从上面的图中我们也可以看出芯科的EFR32MGxx板子一个作为RCP一个作为Device。 - 需要做的准备工作:
我们需要给做RCP的板子和Matter设备的板子分别烧录不同的程序,这两个烧录的程序在芯科官网可以找到。 - 搭建鲁班猫OTBR环境:
拿到鲁班猫4首先是需要给它装系统,我装的是ubuntu22.04的系统。
找到鲁班猫3588镜像的网盘地址-->Ubuntu系统镜像-->通用系统镜像(适用于所有板卡)-->Ubuntu22.04-->20231115-->2023.10.11-ubuntu-22.04.3-server-arm64-lubancat-4.img.xz 下载该镜像。
下载完镜像之后,下载一个rufus的软件,我通过官网下载到一个rufus-4.3.exe的软件,打开这个软件界面如下
在烧录系统前用SD Card Formatter这个软件格式化自己的卡。
格式完之后用rufus烧录系统镜像。
最后会提示镜像烧录完毕,镜像制作完毕。系统镜像的SD卡制作好以后找到鲁班猫4背面的卡槽,注意的是这是一个双卡槽最上面是插TF卡的下面是插4G卡请在插入的时候记得在最上面插入系统卡。然后找一个电源适配器给鲁班猫4供电,鲁班猫上面标了有PWR的那个Type_C口就是电源供电口,然后再找到鲁班猫的串口,在板子上有三个排针的的地方上面标记了TX、RX、GND的丝印用一个USB转TTL的模块接入到电脑终端,我选择的是MobaXterm然后串口波特率输入1500000登录鲁班猫的系统。用户名和密码都是ubuntu,首次登录会提示强制要修改密码,修改密码之后找到鲁班猫的网口接入网线,这样鲁班猫就可以使用了,接下来就是搭建我们的OTBR边界路由的环境了。 - 安装OTBR:
需要科学上网,请自己准备好科学上网的环境,这个环境的搭建要依赖科学上网没有办法越过。
查看git是否安装,未安装的执行 sudo apt install git
- ubuntu@ubuntu:~$ git --version
- git version 2.34.1
复制代码 为apt设置代理
- sudo nano /etc/apt/apt.conf.d/proxy.conf
复制代码 输入
- Acquire {
- HTTP::proxy "http://192.168.1.72:7890";
- HTTPS::proxy "http://192.168.1.72:7890";
- }
复制代码 按ctrl+x退出,输入y并回车保存。
为wget设置代理地址
输入
- http_proxy=http://192.168.1.72:7890
- https_proxy=http://192.168.1.72:7890
- ftp_proxy=http://192.168.1.72:7890
复制代码 按ctrl+x退出,输入y并回车保存。 为git设置代理
输入命令:
- git config --global http.proxy 'http://192.168.1.72:7890'
- git config --global https.proxy 'http://192.168.1.72:7890'
复制代码 设置环境变量中的代理地址(这一步很关键同样也是需要科学上网的)
sudo nano ~/.bashrc
在文件末尾追加我们的代理配置
- export http_proxy=http://192.168.1.72:7890
- export https_proxy=http://192.168.1.72:7890
- export ftp_proxy=http://192.168.1.72:7890
- export all_proxy=socks://192.168.1.72:7890
复制代码 保存文件后,输入
更新当前bash的环境变量 安装 OTBR
- git clone https://github.com/openthread/ot-br-posix
复制代码 安装依赖项
- cd ot-br-posix
- ./script/bootstrap
复制代码 编译和安装 OTBR
- 使用以太网:
- INFRA_IF_NAME=eth0 ./script/setup
复制代码 连接和配置 RCP 设备
前面提到的芯科的板子作为RCP,插入到鲁班猫的USB口。确定 RCP 设备的串行端口名称:
接下来,检查otbr-agent设置。 - cd /etc/default
- cat otbr-agent
复制代码 otbr-agent配置文件包含您的 Thread 接口名称、以太网或 Wi-Fi 接口名称以及 RCP 串行端口名称。
- OTBR_AGENT_OPTS="-I wpan0 -B OTBR_INFRA_IF_NAME spinel+hdlc+uart:///dev/ttyACM0 trel://OTBR_INFRA_IF_NAME"
复制代码 重启边界路由器。
验证服务
验证是否启用了所有必需的服务:
- ubuntu@ubuntu:~$ sudo systemctl status
- ● ubuntu
- State: running
- Jobs: 0 queued
- Failed: 0 units
- Since: Mon 2023-11-27 02:29:58 UTC; 34min ago
- CGroup: /
- ├─user.slice
- │ └─user-1000.slice
- │ ├─user@1000.service …
- │ │ └─init.scope
- │ │ ├─1043 /lib/systemd/systemd --user
- │ │ └─1044 (sd-pam)
- │ └─session-1.scope
- │ ├─ 941 /bin/login -p --
- │ ├─1050 -bash
- │ ├─1223 /bin/bash ./script/bootstrap [200~ubuntu@ubuntu:~$
- │ ├─1306 sudo apt-get update
- │ ├─1307 sudo apt-get update
- │ ├─1308 apt-get update
- │ ├─1319 /usr/lib/apt/methods/https
- │ ├─1320 /usr/lib/apt/methods/http
- │ ├─1330 /usr/lib/apt/methods/gpgv
- │ ├─1738 sudo systemctl status
- │ ├─1739 sudo systemctl status
- │ ├─1740 systemctl status
- │ └─1741 less
- ├─init.scope
- │ └─1 /sbin/init
- └─system.slice
- ├─systemd-networkd.service
- │ └─628 /lib/systemd/systemd-networkd
- ├─systemd-udevd.service
- │ └─493 /lib/systemd/systemd-udevd
- ├─cron.service
- │ └─900 /usr/sbin/cron -f -P
- ├─otbr-web.service
- │ └─914 /usr/sbin/otbr-web
- ├─polkit.service
- │ └─725 /usr/libexec/polkitd --no-debug
- ├─networkd-dispatcher.service
- │ └─720 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
- ├─multipathd.service
- │ └─481 /sbin/multipathd -d -s
- ├─wpa_supplicant.service
- │ └─745 /sbin/wpa_supplicant -u -s -O /run/wpa_supplicant
- ├─ModemManager.service
- │ └─828 /usr/sbin/ModemManager
- ├─systemd-journald.service
- │ └─443 /lib/systemd/systemd-journald
- ├─unattended-upgrades.service
- │ └─836 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal
- ├─ssh.service
- │ └─915 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
- ├─NetworkManager.service
- │ └─713 /usr/sbin/NetworkManager --no-daemon
- ├─rsyslog.service
- │ └─726 /usr/sbin/rsyslogd -n -iNONE
- ├─atopacct.service
复制代码 验证 RCP
验证 RCP 是否处于正确状态:
- ubuntu@ubuntu:~$ sudo ot-ctl state
- disabled
- Done
复制代码 第一次会显示disable这是正常的,以为没有添加leader,接下来我们输入命令添加节点。
检查 OTBR 是否已成功安装:
- ubuntu@ubuntu:~$ sudo service otbr-agent status
- ● otbr-agent.service - OpenThread Border Router Agent
- Loaded: loaded (/lib/systemd/system/otbr-agent.service; enabled; vendor preset: enabled)
- Active: active (running) since Mon 2023-11-27 02:30:05 UTC; 1min 22s ago
- Process: 721 ExecStartPre=/usr/sbin/service mdns start (code=exited, status=0/SUCCESS)
- Main PID: 913 (otbr-agent)
- Tasks: 1 (limit: 19125)
- Memory: 6.1M
- CGroup: /system.slice/otbr-agent.service
- └─913 /usr/sbin/otbr-agent -I wpan0 -B eth0 spinel+hdlc+uart:///dev/ttyUSB0 trel://eth0
- Nov 27 02:30:05 ubuntu otbr-agent[913]: [INFO]-BA------: Publish meshcop service OpenThread BorderRouter #EF7D._meshcop._udp.local.
- Nov 27 02:30:05 ubuntu otbr-agent[913]: 00:00:00.086 [I] RouterTable---: Route table
- Nov 27 02:30:05 ubuntu otbr-agent[913]: 00:00:00.090 [I] Platform------: [netif] Host netif is down
- Nov 27 02:30:05 ubuntu otbr-agent[913]: 00:00:00.091 [I] Platform------: [netif] Succeeded to process request#1
- Nov 27 02:30:05 ubuntu otbr-agent[913]: 00:00:00.091 [W] Platform------: [netif] Failed to process request#2: No such process
- Nov 27 02:30:06 ubuntu otbr-agent[913]: 00:00:00.189 [I] InfraIf-------: State changed: NOT RUNNING -> RUNNING
- Nov 27 02:30:07 ubuntu otbr-agent[913]: [INFO]-MDNS----: Successfully registered service OpenThread BorderRouter #EF7D._meshcop._udp
- Nov 27 02:30:07 ubuntu otbr-agent[913]: [INFO]-BA------: Result of publish meshcop service OpenThread BorderRouter #EF7D._meshcop._udp.local: OK
- Nov 27 02:30:07 ubuntu otbr-agent[913]: [INFO]-BA------: Result of publish meshcop service OpenThread BorderRouter #EF7D._meshcop._udp.local: OK
- Nov 27 02:30:35 ubuntu otbr-agent[913]: 00:00:30.056 [I] Platform------: Session socket is ready
复制代码 构建线程网络:
- ubuntu@ubuntu:~$ sudo ot-ctl dataset init new
- Done
- ubuntu@ubuntu:~$ sudo ot-ctl dataset commit active
- Done
- ubuntu@ubuntu:~$ sudo ot-ctl ifconfig up
- Done
- ubuntu@ubuntu:~$ sudo ot-ctl thread start
- Done
- ubuntu@ubuntu:~$ sudo ot-ctl state
- leader
- Done
- ubuntu@ubuntu:~$ sudo ot-ctl netdata show
- Prefixes:
- fdb0:28b5:b223:1::/64 paos low 0000
- Routes:
- fc00::/7 s med 0000
- fdb0:28b5:b223:2:0:0::/96 sn low 0000
- Services:
- 44970 01 1f000500000e10 s 0000
- Contexts:
- fdb0:28b5:b223:1::/64 1 c
- Commissioning:
- 53347 - - -
- Done
- ubuntu@ubuntu:~$ sudo ot-ctl ipaddr
- fdd7:93f4:6cdf:dbc4:0:ff:fe00:fc11
- fdb0:28b5:b223:1:acaf:e2a9:68e2:425f
- fdd7:93f4:6cdf:dbc4:0:ff:fe00:fc10
- fdd7:93f4:6cdf:dbc4:0:ff:fe00:fc38
- fdd7:93f4:6cdf:dbc4:0:ff:fe00:fc00
- fdd7:93f4:6cdf:dbc4:0:ff:fe00:0
- fdd7:93f4:6cdf:dbc4:6079:85fe:7ba7:4367
- fe80:0:0:0:c01e:e0ff:d22f:ef7d
- Done
复制代码 添加leader成功后
- ubuntu@ubuntu:~$ sudo service otbr-agent status
- ● otbr-agent.service - OpenThread Border Router Agent
- Loaded: loaded (/lib/systemd/system/otbr-agent.service; enabled; vendor preset: enabled)
- Active: active (running) since Mon 2023-11-27 02:30:05 UTC; 39min ago
- Process: 721 ExecStartPre=/usr/sbin/service mdns start (code=exited, status=0/SUCCESS)
- Main PID: 913 (otbr-agent)
- Tasks: 1 (limit: 19125)
- Memory: 6.3M
- CGroup: /system.slice/otbr-agent.service
- └─913 /usr/sbin/otbr-agent -I wpan0 -B eth0 spinel+hdlc+uart:///dev/ttyUSB0 trel://eth0
- Nov 27 03:09:26 ubuntu otbr-agent[913]: 00:39:21.395 [I] MeshForwarder-: Sent IPv6 UDP msg, len:90, chksum:d31f, ecn:no, to:0xffff, sec:no, prio:net
- Nov 27 03:09:26 ubuntu otbr-agent[913]: 00:39:21.395 [I] MeshForwarder-: src:[fe80:0:0:0:c01e:e0ff:d22f:ef7d]:19788
- Nov 27 03:09:26 ubuntu otbr-agent[913]: 00:39:21.395 [I] MeshForwarder-: dst:[ff02:0:0:0:0:0:0:1]:19788
- Nov 27 03:09:37 ubuntu otbr-agent[913]: 00:39:32.408 [I] RoutingManager: Received RA from fe80:0:0:0:dea6:32ff:fefc:bbb1 on infra netif 2
- Nov 27 03:09:37 ubuntu otbr-agent[913]: 00:39:32.408 [I] RoutingManager: - RA Header - flags - M:0 O:0
- Nov 27 03:09:37 ubuntu otbr-agent[913]: 00:39:32.409 [I] RoutingManager: - RA Header - default route - lifetime:0
- Nov 27 03:09:37 ubuntu otbr-agent[913]: 00:39:32.409 [I] RoutingManager: - PIO fdde:ad00:beef:cafe::/64 (valid:1800, preferred:1800)
- Nov 27 03:09:37 ubuntu otbr-agent[913]: 00:39:32.409 [I] RoutingManager: - RIO fd11:22:0:0::/64 (lifetime:1800, prf:medium)
- Nov 27 03:09:37 ubuntu otbr-agent[913]: 00:39:32.692 [I] RoutingManager: Sent Neighbor Solicitation to fe80:0:0:0:f684:8dff:fe41:2823 - attempt:1/5
- Nov 27 03:09:37 ubuntu otbr-agent[913]: 00:39:32.692 [I] RoutingManager: Received NA from router fe80:0:0:0:f684:8dff:fe41:2823
复制代码 编译Matter环境
编译matter生成chiptool工具才能够在鲁班猫上用命令控制我们的灯设备。首先git 下载代码
- git clone --recurse-submodules https://github.com/project-chip/connectedhomeip
复制代码 在Ubuntu22.04系统上安装下面的软件
- sudo apt-get install git gcc g++ pkg-config libssl-dev libdbus-1-dev \
- libglib2.0-dev libavahi-client-dev ninja-build python3-venv python3-dev \
- python3-pip unzip libgirepository1.0-dev libcairo2-dev libreadline-dev
复制代码 安装gn构建:
首先需要安装clang
- sudo apt update
- sudo apt install clang
复制代码 再下载gn的源码,需要使用代理能科学上网
- git clone https://gn.googlesource.com/gn
- cd gn
- python3 build/gen.py # --allow-warning if you want to build with warnings.
- ninja -C out
- # To run tests:
- out/gn_unittests
复制代码 安装上面的执行每一步的命令。在out文件夹中找到gn
- sudo cp gn /usr/local/bin
复制代码 输入命令:gn --version 打印如下
- ubuntu@ubuntu:~$ gn --version
- 2129 (92e63272dc04)
复制代码 安装ZAP
下载网址:https://www.zaproxy.org/download/
下载Linux Package
版本:ZAP 2.13.0
下载后的安装包:ZAP_2.13.0_Linux.tar.gz
运行命令:tar -xzvf ZAP_2.13.0_Linux.tar.gz
解压到当前文件夹。在解压的文件夹中运行
- ubuntu@lee:~/ZAP_2.13.0$ ./zap.sh
- ./zap.sh: line 50: [: -ge: unary operator expected
- Exiting: ZAP requires a minimum of Java 11 to run, found
复制代码 提示需要安装java11。执行命令:
- sudo apt install default-jre -y
复制代码 编译:
运行下面的命令
- ubuntu@ubuntu:~$ cd connectedhomeip/
- ubuntu@ubuntu:~/connectedhomeip$ source scripts/activate.sh
- WELCOME TO...
- ACTIVATOR! This sets your shell environment variables.
- Activating environment (setting environment variables):
- Setting environment variables for CIPD package manager...done
- Setting environment variables for Project actions........skipped
- Setting environment variables for Python environment.....done
- Setting environment variables for pw packages............skipped
- Setting environment variables for Host tools.............done
- Checking the environment:
- 20231127 04:30:22 INF Environment passes all checks!
- Environment looks good, you are ready to go!
复制代码 这样脚本执行成功。
- 编译chiptool工具
- ./scripts/examples/gn_build_example.sh examples/chip-tool/ out/standalone/chip-tool/
复制代码 这样经过一段时间后就编译出了chiptool,可以如下命令查看
- ubuntu@ubuntu:~/connectedhomeip$ ls
- build build_overrides config credentials docs gn_build.sh kotlin-detect-config.yaml LICENSE out REVIEWERS.md SPECIFICATION_VERSION third_party
- BUILD.gn CODE_OF_CONDUCT.md CONTRIBUTING.md data_model examples integrations lgtm.yml NOTICE README.md scripts src zzz_generated
- ubuntu@ubuntu:~/connectedhomeip$
- ubuntu@ubuntu:~/connectedhomeip$
- ubuntu@ubuntu:~/connectedhomeip$ cd out/standalone/
- ubuntu@ubuntu:~/connectedhomeip/out/standalone$ ls
- chip-tool
- ubuntu@ubuntu:~/connectedhomeip/out/standalone$ cd chip-tool/
- ubuntu@ubuntu:~/connectedhomeip/out/standalone/chip-tool$ ls
- args.gn build.ninja build.ninja.d build.ninja.stamp chip-tool chip-tool.map chip-tool-utils.a gen lib liblogging-stdio.a obj python relative_path_transformations.json toolchain.ninja zap_gen.lock
- ubuntu@ubuntu:~/connectedhomeip/out/standalone/chip-tool$
复制代码 编译好chiptool工具后便可以在边界路由上面添加我们的matter over thread设备,我们把之前准备好的芯科开发板上电。下面我用芯科的Matter Lighting Application Example来演示。
执行下面的命令会得到一串类似配网的密钥
- sudo ot-ctl dataset active -x
- 0e080000000000010000000300001335060004001fffe002084fe76e9a8b5edaf50708fde46f999f0698e20510d47f5027a414ffeebaefa92285cc84fa030f4f70656e5468726561642d653439630102e49c0410b92f8c7fbb4f9f3e08492ee3915fbd2f0c0402a0fff8
- Done
复制代码执行配对命令
- ./chip-tool pairing ble-thread 1001 hex:0e080000000000010000000300001335060004001fffe002084fe76e9a8b5edaf50708fde46f999f0698e20510d47f5027a414ffeebaefa92285cc84fa030f4f70656e5468726561642d653439630102e49c0410b92f8c7fbb4f9f3e08492ee3915fbd2f0c0402a0fff8 20202021 3840
复制代码显示下面这种才是配对成功
配对成功后可以使用下面的命令在边界路由上面控制我们的灯,这里提醒一下鲁班猫4是没有带蓝牙模块的,所以我前面提到了需要一个USB转蓝牙,插在鲁班猫的USB上面就可以配对matter设备了。下面是控制matterLighting例程的三条命令
- $ ./chip-tool onoff toggle 1001 1
- $ ./chip-tool onoff on 1001 1
- $ ./chip-tool onoff off 1001 1
复制代码其中第一条命令是控制灯状态翻转,第二条是开灯,第三条是关灯。
|
|