OPENIPC VRX sử dụng Raspberry Pi Zero 2 W

I. Cài đặt Raspberry Pi OS lên Pi Zero 2 W

Kết quả sau khi cài OS, login bằng VN

Trên Pi4 image hiện tại đã có tích hợp sẵn VNC server, vì vậy chỉ cần kích hoạt trong khi cài đặt thì chúng ta có thể remote Pi4 thông qua mạng mà không cần sử dụng bàn phím riêng.

image.png
Pi 4 có thể remote từ xa thông qua VNC server

Sau khi cài đặt xong, hãy kết nối module wifi RTL8812AU với Pi4 qua USB Port, kiểm tra việc nhận diện và driver của RTL8812AU.

image.png
PI4 chưa cài driver RTL8812AU nên chỉ thấy NIC wifi onboard

Tiếp theo, cần kiểm tra khả năng nhận diện cổng vật lý của RTL8812 qua USB của Pi4, sử dụng: lsusb

image.png
Có thể thấy hiện tại Pi4 đã nhận diện được module RTL8812AU

II. Cài đặt các package cần thiết cho OPENIPC

1) Cài đặt driver cho RTL8812AU

a) Cài đặt các pakage cần thiết

sudo apt install dkms git python3-all-dev net-tools virtualenv fakeroot debhelper python3-twisted libpcap-dev python3-pyroute2 python3-future python3-all libsodium-dev

b) Tải driver và cài đặt:

  • Tải mã nguồn từ Github:

git clone -b v5.6.4.2 [https://github.com/aircrack-ng/rtl8812au.git](https://github.com/aircrack-ng/rtl8812au.git)

  • Các lỗi có thể phát sinh và cách khắc phục lỗi:

– Error: “Cloning into ‘rtl8812au’… fatal: unable to access ‘https://github.com/aircrack-ng/rtl8812au.git/‘: Could not resolve host: github.com”,

– Khắc phục lỗi: 

+ Liệt kê các kết nối mạng hiện tại:

nmcli device status

+ Cập  nhật DNS  bằng tên connection, ví dụ “Wired connection 1” hoặc “Wi-Fi tên”

sudo nmcli connection modify "<YOUR-CONN-NAME>" ipv4.dns "8.8.8.8 1.1.1.1" ipv4.ignore-auto-dns yes sudo nmcli connection up "<YOUR-CONN-NAME>"

– Error: Bộ nhớ Pi Zero 2 W bị giới hạn.

+ Tạo swap 1GB tạm thời

sudo fallocate -l 1G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile

+ Kiểm tra lại

free -h

+ Sau compile / install, tắt và xóa

sudo swapoff /swapfile sudo rm /swapfilec) Tiếp tục thực hiện cài đặt:
  • Tiếp tục cài đặt:

cd rtl*

sudo apt-get update sudo apt-get install build-essential libelf-dev linux-headers-uname -r sudo apt-get install raspberrypi-kernel-headers
sed -i 's/CONFIG_PLATFORM_I386_PC = y/CONFIG_PLATFORM_I386_PC = n/g' Makefile sed -i 's/CONFIG_PLATFORM_ARM64_RPI = n/CONFIG_PLATFORM_ARM64_RPI = y/g' Makefile

sudo make
sudo make install

  • Chờ Pi Zero 2 biên dịch driver
image.png

 

image.png

 

sudo cp 88XXau.ko /lib/modules/$(uname -r)/kernel/drivers/net/wireless/
sudo depmod -a sudo modprobe 88XX

  • Cắm nguồn cho RTL8812AU, kiểm tra lại xem đã nhận chưa
image.png

 

Sau đó thiết lập các mode như monitor, channel….

Gặp lỗi này

image.png

 

  • Khac phuc loi:
    rfkill list all sudo rfkill unblock all rfkill list #kiem tra dam bao ko bi DOWN card wifi
image.png

Sau đó thực hiện lại các lệnh trên, và đây là kết quả:

sudo ip link set wlan1 down sudo iwconfig wlan1 channel 161 sudo iw dev wlan1 set type monitor sudo ip link set wlan1 up sudo iw wlan1 set txpower fixed 2000
image.png

 

Chúng ta đã thấy RTL8812AU ở chế độ Monitor mode, channel 161 (5.08GHz)

b) Cài tiếp các thứ còn lại: libsodium, WFB-NG

  • libsodium
git clone [https://github.com/jedisct1/libsodium](https://github.com/jedisct1/libsodium) --branch stable 
cd libsodium 
./configure make && make check

Kết quả

image.png

 

sudo make install
image.png

 

c) Cài WFB-NG

git clone -b stable [https://github.com/svpcom/wfb-ng.git]
cd wfb-ng 
sudo ./scripts/install_gs.sh wlan1

 (Chú ý mỗi lần thực hiện lệnh này sẽ có một gs.key mới, vì vậy cần copy lại gs.key đã lưu trước đó từ Camera OPENIPC)

  • –start,stop restart service
    sudo systemctl status wifibroadcast@gs sudo systemctl stop wifibroadcast@gs sudo systemctl start wifibroadcast@gs
    –start WFB
    wfb-cli gs
    Trên máy ground station (chạy OpenIPC ground setup) copy file gs.key vào thư mục:
    sudo cp gs.key /etc/gs.key

Kết quả

image.png

 

d) Cài Gstreamer

sudo apt update sudo apt install -y gstreamer1.0-tools gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-x gstreamer1.0-gl gstreamer1.0-v4l2
  • Kết quả: Test không ổn vì vượt quá dung lượng RAM của Pi Zero 2W.

  1. Tiến hành test với relay UDP trên Pi Zero

  2. Stream UDP đến một địa chỉ xác định (PC hoặc Điện thoại)

    • Để có thể stream UDP đến một địa chỉ xác định (PC hoặc Điện thoại) hãy thực hiện lệnh sau để sửa, thay xx.xx.xx.xx bằng địa chỉ bạn muốn stream tới:

sudo sed -i "/[gs_video]/,/^$/ s|peer = 'connect://[0-9.]*:5600'|peer = 'connect://xx.xx.xx.xx:5600'|" /wfb-ng/script/install_gs.sh

  • Sau đó khởi động QGC lên hoặc một phần mềm bất kỳ có thể decode UDP H.264:
image.png

 

b. Thiết lập nâng cao, tự động thực hiện wfb và stream UDP

  • Đặt file .ko đúng vị trí:
sudo mkdir -p /lib/modules/$(uname -r)/kernel/drivers/net/wireless 
sudo cp ~/rtl8812au/88XXau.ko /lib/modules/$(uname -r)/kernel/drivers/net/wireless/ 
sudo depmod -a
  • Kiểm tra modprobe thủ công (đảm bảo kernel đã “nhận diện”)
sudo modprobe 88XXau lsmod | grep 88
  • Tạo file và cập nhật:
sudo nano /etc/systemd/system/rtl88xxau.service
  • Thêm vào file nội dung sau:

[Unit]
Description=Load 88XXau WiFi driver, configure wlan1 (monitor ch161 tx2000), and start Wifibroadcast
After=multi-user.target
Wants=network.target

[Service]
Type=oneshot
ExecStart=/bin/bash -c "/sbin/modprobe 88XXau; \
echo '[rtl88xxau] Loading module 88XXau...'; \
echo '[rtl88xxau] Waiting for wlan1 to appear...'; \
for i in {1..25}; do \
if ip link show wlan1 >/dev/null 2>&1; then break; fi; \
sleep 1; \
done; \
if ! ip link show wlan1 >/dev/null 2>&1; then \
echo '[rtl88xxau] wlan1 not found after waiting, aborting.' >&2; exit 1; \
fi; \
echo '[rtl88xxau] wlan1 found, configuring...'; \
sleep 5; \
/sbin/ifconfig wlan1 down; \
/sbin/iw reg set US; \
/usr/sbin/rfkill unblock all; \
/sbin/iw dev wlan1 set type monitor; \
/sbin/iw dev wlan1 set channel 161; \
/sbin/ifconfig wlan1 up; \
sleep 2; \
/sbin/iw dev wlan1 set txpower fixed 2000; \
echo '[rtl88xxau] wlan1 set to monitor, ch161, tx2000mW.'; \
sleep 3; \
/bin/systemctl start wifibroadcast@gs; \
echo '[rtl88xxau] Wifibroadcast@gs started successfully.'"
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

  • Áp dụng cấu hình:
sudo systemctl daemon-reload 
sudo systemctl enable rtl88xxau.service 
sudo systemctl restart rtl88xxau.service
  • Khởi động lại và chờ kết quả:
sudo reboot

 

Leave a Comment

Your email address will not be published. Required fields are marked *