NanoPi NEO3にWifi追加する際、苦労した件、問題の症状と解決策
目的の設定が完成するまでに様々な苦労がありました。Raspiをはじめ、その他SBCの設定に苦労される方にとっても役立つかと思い記載します。
主に次のような問題が発生し、様々な方法をネットの情報を元に試しました。
-
起動後にWifi接続できない
WPA_Supplicant.confの確認と、WPA_Supplicantサービスの無効化で解決、恐らく起動時には、wifi デバイスが認識されていないためと思われます。 -
起動後 iwconfig を見ると、SSIDが設定されていない
Raspiでは、簡単に同じ環境を構築できるが、Nano Piで出来ないのは、恐らく、Wifiが内蔵ではなく。外付けUSB WiFiのためのと思われます。wpa_supplicantサービスの開始時には、wlan0が認識されていないことが原因と思われます。 -
自動起動時LANが接続されていないとWiFi接続できない、LANケーブルを接続するとWifiが接続できるが、LANケーブルを切断するとWiFiも切れる
router gwがwlan0に設定されないため、wlan0は起動しているが、接続できない状態になっていると思われます。起動後、手動でwpa_supplicantを実行するとwifi接続できます。例えば:
sudo killall wpa_supplicant
sudo wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant/wpa_supplicant.conf
-
LANはstatic ipになるが、Wifiにstatic ipアドレスを指定できない
/etc/network/interfaces.d/wlan0 にstaticを記載しても反映されない。 - dhcpcdをやめてNetworkManagerで設定しようとしたができなかった
ゴール
NanoPi NEO3には、Gigabit LANが搭載されていますが、Wifiを追加して、LAN/WiFiどちらからも接続するようにして、デバイスをバッテリパックでも稼働できるネットワークカメラ化します。
WiFiは、USB2.0 Pinを使って接続します。Wifi アダプタは、KIMWOOD 2022を使いました。
USB2.0 PINとWifi アダプタを接続
WiFiには、Realtek Semiconductor Corp. USB3.0 802.11ac 1200M Adapterを搭載した、Wifi アダプタを使います。
![NanoPi_NEO3-layout.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568972/1328f1e6-31
USB2.0ピンとWifi ドングルを接続するためのUSBケーブルを作成する必要があります。
USB2.0
Pin# | Name |
---|---|
1 | GND |
3 | DP1 |
5 | DM1 |
7 | 5V |
NanoPi NEO3インストール
OSイメージのダウンロード
rk3328-sd-freiendlycore-lite-focal-6.1-arm64-20231129.omz.gzを下記のサイトからダウンロードし、起動用のMicro SDカードを作成します。
USBカーブル、下が試作で上は量産用に作ったものです。
PCからの接続
作成したMicro SDカードを挿入し、DHCPサーバのある環境にLANケーブルを接続後、NanoPi NEO3を起動します。
接続したipアドレスを探し、PuttyからSSHで接続します。デフォルトのID/パスワードは、pi/piです。
- Angry IP Scanner, Putty をインストールしておくと便利です。
初期設定
アップデートの適用と、よく使うモジュールをインストールします。
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install libudev-dev libv4l-dev libjpeg8 libjpeg8-dev
sudo apt-get install libusb-1.0-0-dev freeglut3-dev
sudo apt-get install usbutils
タイムゾーン設定、ntp、ホスト名の設定
sudo timedatectl set-timezone Asia/Tokyo
sudo systemctl status systemd-timesyncd.service
sudo vi /etc/systemd/timesyncd.conf
// NTP=行を編集
[Time]
NTP=ntp.nict.jp
//サービスの再開
sudo systemctl daemon-reload
sudo systemctl restart systemd-timesyncd.service
// ホスト名の設定
sudo vi /etc/hostname
sudo vi /etc/hosts
OS バージョンの確認
cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.6 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.6 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
DHCPCDの導入と設定
dhcpcd をインストールして、Static ipをLANおよびWifiに設定します。
例: LAN側 192.168.1.251, WiFi側 192.168.3.144
sudo apt install dhcpcd5
sudo vi /etc/dhcpcd.conf
# static 以下を追記
interface eth0
static ip_address=192.168.1.251
static routers=192.168.1.1
static domain_name_servers=192.168.1.1
interface wlan0
static ip_address=192.168.3.144
static routers=192.168.3.1
static domain_name_servers=192.168.3.1
重要
dhcpcd.confにwlan0を記載してもwlan0は設定されません。/etc/network/interfaces.d/wlan0 を作成してください。
sudo vi /etc/network/interfaces.d/wlan0
//以下を記載
auto wlan0
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.3.144
netmask 255.255.255.0
gateway 192.168.3.1
wpa-conf /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
wpa_suppliacntの設定
/etc/wpa_supplicant/wpa_supplicant-wlan0.confを作成編集して、Wifi接続のための設定を行います。例:
sudo vi /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
//以下を記載
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP
network={
ssid="mySSID"
# psk="12345678"
psk=password-encrypted
proto=WPA RSN
key_mgmt=WPA-PSK WPA-EAP
}
pskの暗号化は、以下のコマンドで得ることができます。例:
sudo wpa_passphrase mySSID 12345678
wpa_supplicantサービスを無効にします。wlan0用のwpa_supplicantを起動後少し待ってから開始するように後で設定します。
sudo systemctl stop wpa_supplicant
sudo systemctl disable wpa_supplicant
一旦、再起動してLANがstatic ipで接続されることを確認してください。
sudo reboot
Wifi接続の設定
再起動後、sshで接続できたら、USB2.0 pinにWifiアダプタを接続します。
lsusbコマンドで正しく認識されていることを確認してください。
警告
認識されない、sshが切断されるなどの場合は、USBケーブル配線の間違いの可能性があります。
sudo lsusb
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 002: ID 0bda:b812 Realtek Semiconductor Corp. USB3.0 802.11ac 1200M Adapter
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
wpa_supplicantの起動
sudo wpa_supplicant -u -W -Dwext -iwlan0 -c/etc/wpa_supplicant/wpa_supplicant-wlan0.conf
重要
ドライバエラーの場合、以下のようなエラーが表示されます。
wpa_supplicant.conf failed to add supported operating classes IE
-Dwextの代わりに、-Dnl80211 として試してください。
怒らく、この時点で、PC側からping 192.168.3.144 (WiFi 側ipアドレス )への接続が確認できると思います。
wlan0用 wpa_supplicantサービスの編集
sudo vi /lib/systemd/system/wpa_supplicant@.service
// 以下の行を編集
ExecStart=/sbin/wpa_supplicant -u -c/etc/wpa_supplicant/wpa_supplicant-%I.conf -W -Dwext -i%I
// nl80211の場合
ExecStart=/sbin/wpa_supplicant -u -c/etc/wpa_supplicant/wpa_supplicant-%I.conf -W -Dnl80211 -i%I
実行と確認、正常に実行されることを確認します。
sudo systemctl start wpa_supplicant@wlan0
sudo systemctl status wpa_supplicant@wlan0
wlan0用 wpa_supplicantの自動起動の設定
wifi-start.serviceの作成と登録
sudo vi /lib/systemd/system/wifi-start.service
//以下を記載
[Unit]
Description=Wireless Network Start
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/bash /opt/wifi-start/wifi-start.sh
[Install]
WantedBy=multi-user.target
自動機能の設定
sudo systemctl enable wifi-start.service
wifi-start.shの作成
sudo mkdir /opt
sudo mkdir /opt/wifi-start
sudo vi /opt/wifi-start/wifi-start.sh
//以下を記載
#!/bin/bash
sleep 20
systemctl start wpa_supplicant@wlan0
これらの設定スクリプトを下記Githubにアップしました。
https://github.com/Taisuke-S/wifi-start-master
以上で設定が完了です。再起動してすべての接続を確認してください。
LANのみで起動、WIFiのみで起動、WiFi/LANで起動、LANを切断...など各種組み合わせを確認してください。
sudo reboot
あとがき
出来てしまえば、設定は単純ですが、ここに行きつくまで1カ月ほど試行錯誤しました。同じ問題に遭遇した方のお役に立てれば幸いです。