野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 896|回复: 0

[经验\资料] 野火【鲁班猫】卡片电脑创意氛围赛(第二期)+鲁班猫边界...

[复制链接]
发表于 2023-7-25 14:23:07 | 显示全部楼层 |阅读模式
本帖最后由 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。
野火论坛202311271704046562..png
  • 本次需要的硬件:
    鲁班猫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 下载该镜像。
    野火论坛202311271704366355..png
    下载完镜像之后,下载一个rufus的软件,我通过官网下载到一个rufus-4.3.exe的软件,打开这个软件界面如下
    野火论坛202311271704553969..png
    在烧录系统前用SD Card Formatter这个软件格式化自己的卡。
    野火论坛202311271705107748..png
    格式完之后用rufus烧录系统镜像。
    野火论坛202311271705255585..png
    最后会提示镜像烧录完毕,镜像制作完毕。系统镜像的SD卡制作好以后找到鲁班猫4背面的卡槽,注意的是这是一个双卡槽最上面是插TF卡的下面是插4G卡请在插入的时候记得在最上面插入系统卡。然后找一个电源适配器给鲁班猫4供电,鲁班猫上面标了有PWR的那个Type_C口就是电源供电口,然后再找到鲁班猫的串口,在板子上有三个排针的的地方上面标记了TX、RX、GND的丝印用一个USB转TTL的模块接入到电脑终端,我选择的是MobaXterm然后串口波特率输入1500000登录鲁班猫的系统。用户名和密码都是ubuntu,首次登录会提示强制要修改密码,修改密码之后找到鲁班猫的网口接入网线,这样鲁班猫就可以使用了,接下来就是搭建我们的OTBR边界路由的环境了。
  • 安装OTBR:
    需要科学上网,请自己准备好科学上网的环境,这个环境的搭建要依赖科学上网没有办法越过。
    查看git是否安装,未安装的执行 sudo apt install git
    1. ubuntu@ubuntu:~$ git --version
    2. git version 2.34.1
    复制代码
    为apt设置代理
    1. sudo nano /etc/apt/apt.conf.d/proxy.conf
    复制代码
    输入
    1. Acquire {
    2.     HTTP::proxy "http://192.168.1.72:7890";
    3.     HTTPS::proxy "http://192.168.1.72:7890";
    4. }
    复制代码
    按ctrl+x退出,输入y并回车保存。
    为wget设置代理地址
    1. sudo nano ~/.wgetrc
    复制代码
    输入
    1. http_proxy=http://192.168.1.72:7890
    2. https_proxy=http://192.168.1.72:7890
    3. ftp_proxy=http://192.168.1.72:7890
    复制代码
    按ctrl+x退出,输入y并回车保存。
  • 为git设置代理
    输入命令:
    1. git config --global http.proxy 'http://192.168.1.72:7890'
    2. git config --global https.proxy 'http://192.168.1.72:7890'
    复制代码
    设置环境变量中的代理地址(这一步很关键同样也是需要科学上网的)
    sudo nano ~/.bashrc

    在文件末尾追加我们的代理配置
    1. export http_proxy=http://192.168.1.72:7890
    2. export https_proxy=http://192.168.1.72:7890
    3. export ftp_proxy=http://192.168.1.72:7890
    4. export all_proxy=socks://192.168.1.72:7890
    复制代码
    保存文件后,输入
    1. source ~/.bashrc
    复制代码
    更新当前bash的环境变量
  • 安装 OTBR
    1. git clone https://github.com/openthread/ot-br-posix
    复制代码
    安装依赖项
    1. cd ot-br-posix
    2. ./script/bootstrap
    复制代码
    编译和安装 OTBR
    1. 使用以太网:
    2. INFRA_IF_NAME=eth0 ./script/setup
    复制代码
    连接和配置 RCP 设备
    前面提到的芯科的板子作为RCP,插入到鲁班猫的USB口。确定 RCP 设备的串行端口名称:
    1. ls /dev/tty*
    复制代码
    接下来,检查otbr-agent设置。
    1. cd /etc/default
    2. cat otbr-agent
    复制代码
    otbr-agent配置文件包含您的 Thread 接口名称、以太网或 Wi-Fi 接口名称以及 RCP 串行端口名称。
    1. OTBR_AGENT_OPTS="-I wpan0 -B OTBR_INFRA_IF_NAME spinel+hdlc+uart:///dev/ttyACM0 trel://OTBR_INFRA_IF_NAME"
    复制代码
    重启边界路由器。
    1. sudo reboot
    复制代码
    验证服务
    验证是否启用了所有必需的服务:
    1. ubuntu@ubuntu:~$ sudo systemctl status
    2. ● ubuntu
    3.     State: running
    4.      Jobs: 0 queued
    5.    Failed: 0 units
    6.     Since: Mon 2023-11-27 02:29:58 UTC; 34min ago
    7.    CGroup: /
    8.            ├─user.slice
    9.            │ └─user-1000.slice
    10.            │   ├─user@1000.service …
    11.            │   │ └─init.scope
    12.            │   │   ├─1043 /lib/systemd/systemd --user
    13.            │   │   └─1044 (sd-pam)
    14.            │   └─session-1.scope
    15.            │     ├─ 941 /bin/login -p --
    16.            │     ├─1050 -bash
    17.            │     ├─1223 /bin/bash ./script/bootstrap [200~ubuntu@ubuntu:~$
    18.            │     ├─1306 sudo apt-get update
    19.            │     ├─1307 sudo apt-get update
    20.            │     ├─1308 apt-get update
    21.            │     ├─1319 /usr/lib/apt/methods/https
    22.            │     ├─1320 /usr/lib/apt/methods/http
    23.            │     ├─1330 /usr/lib/apt/methods/gpgv
    24.            │     ├─1738 sudo systemctl status
    25.            │     ├─1739 sudo systemctl status
    26.            │     ├─1740 systemctl status
    27.            │     └─1741 less
    28.            ├─init.scope
    29.            │ └─1 /sbin/init
    30.            └─system.slice
    31.              ├─systemd-networkd.service
    32.              │ └─628 /lib/systemd/systemd-networkd
    33.              ├─systemd-udevd.service
    34.              │ └─493 /lib/systemd/systemd-udevd
    35.              ├─cron.service
    36.              │ └─900 /usr/sbin/cron -f -P
    37.              ├─otbr-web.service
    38.              │ └─914 /usr/sbin/otbr-web
    39.              ├─polkit.service
    40.              │ └─725 /usr/libexec/polkitd --no-debug
    41.              ├─networkd-dispatcher.service
    42.              │ └─720 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
    43.              ├─multipathd.service
    44.              │ └─481 /sbin/multipathd -d -s
    45.              ├─wpa_supplicant.service
    46.              │ └─745 /sbin/wpa_supplicant -u -s -O /run/wpa_supplicant
    47.              ├─ModemManager.service
    48.              │ └─828 /usr/sbin/ModemManager
    49.              ├─systemd-journald.service
    50.              │ └─443 /lib/systemd/systemd-journald
    51.              ├─unattended-upgrades.service
    52.              │ └─836 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal
    53.              ├─ssh.service
    54.              │ └─915 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
    55.              ├─NetworkManager.service
    56.              │ └─713 /usr/sbin/NetworkManager --no-daemon
    57.              ├─rsyslog.service
    58.              │ └─726 /usr/sbin/rsyslogd -n -iNONE
    59.              ├─atopacct.service
    复制代码
    验证 RCP
    验证 RCP 是否处于正确状态:
    1. ubuntu@ubuntu:~$ sudo ot-ctl state
    2. disabled
    3. Done
    复制代码
    第一次会显示disable这是正常的,以为没有添加leader,接下来我们输入命令添加节点。
    检查 OTBR 是否已成功安装:
    1. ubuntu@ubuntu:~$ sudo service otbr-agent status
    2. ● otbr-agent.service - OpenThread Border Router Agent
    3.      Loaded: loaded (/lib/systemd/system/otbr-agent.service; enabled; vendor preset: enabled)
    4.      Active: active (running) since Mon 2023-11-27 02:30:05 UTC; 1min 22s ago
    5.     Process: 721 ExecStartPre=/usr/sbin/service mdns start (code=exited, status=0/SUCCESS)
    6.    Main PID: 913 (otbr-agent)
    7.       Tasks: 1 (limit: 19125)
    8.      Memory: 6.1M
    9.      CGroup: /system.slice/otbr-agent.service
    10.              └─913 /usr/sbin/otbr-agent -I wpan0 -B eth0 spinel+hdlc+uart:///dev/ttyUSB0 trel://eth0

    11. Nov 27 02:30:05 ubuntu otbr-agent[913]: [INFO]-BA------: Publish meshcop service OpenThread BorderRouter #EF7D._meshcop._udp.local.
    12. Nov 27 02:30:05 ubuntu otbr-agent[913]: 00:00:00.086 [I] RouterTable---: Route table
    13. Nov 27 02:30:05 ubuntu otbr-agent[913]: 00:00:00.090 [I] Platform------: [netif] Host netif is down
    14. Nov 27 02:30:05 ubuntu otbr-agent[913]: 00:00:00.091 [I] Platform------: [netif] Succeeded to process request#1
    15. Nov 27 02:30:05 ubuntu otbr-agent[913]: 00:00:00.091 [W] Platform------: [netif] Failed to process request#2: No such process
    16. Nov 27 02:30:06 ubuntu otbr-agent[913]: 00:00:00.189 [I] InfraIf-------: State changed: NOT RUNNING -> RUNNING
    17. Nov 27 02:30:07 ubuntu otbr-agent[913]: [INFO]-MDNS----: Successfully registered service OpenThread BorderRouter #EF7D._meshcop._udp
    18. Nov 27 02:30:07 ubuntu otbr-agent[913]: [INFO]-BA------: Result of publish meshcop service OpenThread BorderRouter #EF7D._meshcop._udp.local: OK
    19. Nov 27 02:30:07 ubuntu otbr-agent[913]: [INFO]-BA------: Result of publish meshcop service OpenThread BorderRouter #EF7D._meshcop._udp.local: OK
    20. Nov 27 02:30:35 ubuntu otbr-agent[913]: 00:00:30.056 [I] Platform------: Session socket is ready
    复制代码
    构建线程网络:
    1. ubuntu@ubuntu:~$ sudo ot-ctl dataset init new
    2. Done
    3. ubuntu@ubuntu:~$ sudo ot-ctl dataset commit active
    4. Done
    5. ubuntu@ubuntu:~$ sudo ot-ctl ifconfig up
    6. Done
    7. ubuntu@ubuntu:~$ sudo ot-ctl thread start
    8. Done
    9. ubuntu@ubuntu:~$ sudo ot-ctl state
    10. leader
    11. Done
    12. ubuntu@ubuntu:~$ sudo ot-ctl netdata show
    13. Prefixes:
    14. fdb0:28b5:b223:1::/64 paos low 0000
    15. Routes:
    16. fc00::/7 s med 0000
    17. fdb0:28b5:b223:2:0:0::/96 sn low 0000
    18. Services:
    19. 44970 01 1f000500000e10 s 0000
    20. Contexts:
    21. fdb0:28b5:b223:1::/64 1 c
    22. Commissioning:
    23. 53347 - - -
    24. Done
    25. ubuntu@ubuntu:~$ sudo ot-ctl ipaddr
    26. fdd7:93f4:6cdf:dbc4:0:ff:fe00:fc11
    27. fdb0:28b5:b223:1:acaf:e2a9:68e2:425f
    28. fdd7:93f4:6cdf:dbc4:0:ff:fe00:fc10
    29. fdd7:93f4:6cdf:dbc4:0:ff:fe00:fc38
    30. fdd7:93f4:6cdf:dbc4:0:ff:fe00:fc00
    31. fdd7:93f4:6cdf:dbc4:0:ff:fe00:0
    32. fdd7:93f4:6cdf:dbc4:6079:85fe:7ba7:4367
    33. fe80:0:0:0:c01e:e0ff:d22f:ef7d
    34. Done
    复制代码
    添加leader成功后
    1. ubuntu@ubuntu:~$ sudo service otbr-agent status
    2. ● otbr-agent.service - OpenThread Border Router Agent
    3.      Loaded: loaded (/lib/systemd/system/otbr-agent.service; enabled; vendor preset: enabled)
    4.      Active: active (running) since Mon 2023-11-27 02:30:05 UTC; 39min ago
    5.     Process: 721 ExecStartPre=/usr/sbin/service mdns start (code=exited, status=0/SUCCESS)
    6.    Main PID: 913 (otbr-agent)
    7.       Tasks: 1 (limit: 19125)
    8.      Memory: 6.3M
    9.      CGroup: /system.slice/otbr-agent.service
    10.              └─913 /usr/sbin/otbr-agent -I wpan0 -B eth0 spinel+hdlc+uart:///dev/ttyUSB0 trel://eth0

    11. 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
    12. 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
    13. 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
    14. 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
    15. Nov 27 03:09:37 ubuntu otbr-agent[913]: 00:39:32.408 [I] RoutingManager: - RA Header - flags - M:0 O:0
    16. Nov 27 03:09:37 ubuntu otbr-agent[913]: 00:39:32.409 [I] RoutingManager: - RA Header - default route - lifetime:0
    17. 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)
    18. 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)
    19. 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
    20. 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 下载代码
    1. git clone --recurse-submodules https://github.com/project-chip/connectedhomeip
    复制代码
    在Ubuntu22.04系统上安装下面的软件
    1. sudo apt-get install git gcc g++ pkg-config libssl-dev libdbus-1-dev \
    2.      libglib2.0-dev libavahi-client-dev ninja-build python3-venv python3-dev \
    3.      python3-pip unzip libgirepository1.0-dev libcairo2-dev libreadline-dev
    复制代码
    安装gn构建:
    首先需要安装clang
    1. sudo apt update
    2. sudo apt install clang
    复制代码
    再下载gn的源码,需要使用代理能科学上网
    1. git clone https://gn.googlesource.com/gn
    2. cd gn
    3. python3 build/gen.py # --allow-warning if you want to build with warnings.
    4. ninja -C out
    5. # To run tests:
    6. out/gn_unittests
    复制代码
    安装上面的执行每一步的命令。在out文件夹中找到gn
    1. sudo cp gn /usr/local/bin
    复制代码
    输入命令:gn --version 打印如下
    1. ubuntu@ubuntu:~$ gn --version
    2. 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
    解压到当前文件夹。在解压的文件夹中运行
    1. ubuntu@lee:~/ZAP_2.13.0$ ./zap.sh
    2. ./zap.sh: line 50: [: -ge: unary operator expected
    3. Exiting: ZAP requires a minimum of Java 11 to run, found
    复制代码
    提示需要安装java11。执行命令:
    1. sudo apt install default-jre -y
    复制代码
    编译:
    运行下面的命令
    1. ubuntu@ubuntu:~$ cd connectedhomeip/
    2. ubuntu@ubuntu:~/connectedhomeip$ source scripts/activate.sh

    3.   WELCOME TO...

    4.   ACTIVATOR! This sets your shell environment variables.

    5. Activating environment (setting environment variables):

    6.   Setting environment variables for CIPD package manager...done
    7.   Setting environment variables for Project actions........skipped
    8.   Setting environment variables for Python environment.....done
    9.   Setting environment variables for pw packages............skipped
    10.   Setting environment variables for Host tools.............done

    11. Checking the environment:

    12. 20231127 04:30:22 INF Environment passes all checks!

    13. Environment looks good, you are ready to go!
    复制代码
    这样脚本执行成功。
  • 编译chiptool工具
    1. ./scripts/examples/gn_build_example.sh examples/chip-tool/ out/standalone/chip-tool/
    复制代码
    这样经过一段时间后就编译出了chiptool,可以如下命令查看
    1. ubuntu@ubuntu:~/connectedhomeip$ ls
    2. build     build_overrides     config           credentials  docs      gn_build.sh   kotlin-detect-config.yaml  LICENSE  out        REVIEWERS.md  SPECIFICATION_VERSION  third_party
    3. BUILD.gn  CODE_OF_CONDUCT.md  CONTRIBUTING.md  data_model   examples  integrations  lgtm.yml                   NOTICE   README.md  scripts       src                    zzz_generated
    4. ubuntu@ubuntu:~/connectedhomeip$
    5. ubuntu@ubuntu:~/connectedhomeip$
    6. ubuntu@ubuntu:~/connectedhomeip$ cd out/standalone/
    7. ubuntu@ubuntu:~/connectedhomeip/out/standalone$ ls
    8. chip-tool
    9. ubuntu@ubuntu:~/connectedhomeip/out/standalone$ cd chip-tool/
    10. ubuntu@ubuntu:~/connectedhomeip/out/standalone/chip-tool$ ls
    11. 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
    12. ubuntu@ubuntu:~/connectedhomeip/out/standalone/chip-tool$
    复制代码
    编译好chiptool工具后便可以在边界路由上面添加我们的matter over thread设备,我们把之前准备好的芯科开发板上电。下面我用芯科的Matter Lighting Application Example来演示。
    执行下面的命令会得到一串类似配网的密钥
    1. sudo ot-ctl dataset active -x
    2. 0e080000000000010000000300001335060004001fffe002084fe76e9a8b5edaf50708fde46f999f0698e20510d47f5027a414ffeebaefa92285cc84fa030f4f70656e5468726561642d653439630102e49c0410b92f8c7fbb4f9f3e08492ee3915fbd2f0c0402a0fff8
    3. Done
    复制代码

    执行配对命令

    1. ./chip-tool pairing ble-thread 1001 hex:0e080000000000010000000300001335060004001fffe002084fe76e9a8b5edaf50708fde46f999f0698e20510d47f5027a414ffeebaefa92285cc84fa030f4f70656e5468726561642d653439630102e49c0410b92f8c7fbb4f9f3e08492ee3915fbd2f0c0402a0fff8 20202021 3840
    复制代码

    显示下面这种才是配对成功
    image-20230718085902727.png
    配对成功后可以使用下面的命令在边界路由上面控制我们的灯,这里提醒一下鲁班猫4是没有带蓝牙模块的,所以我前面提到了需要一个USB转蓝牙,插在鲁班猫的USB上面就可以配对matter设备了。下面是控制matterLighting例程的三条命令

    1. $ ./chip-tool onoff toggle 1001 1
    2. $ ./chip-tool onoff on 1001 1
    3. $ ./chip-tool onoff off 1001 1
    复制代码

    其中第一条命令是控制灯状态翻转,第二条是开灯,第三条是关灯。



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-11 05:11 , Processed in 0.045903 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表