
NanoPi NEO って?
ちょっと今更感はある。(2025年11月)
性能的にはAIの推論もほぼほぼできないし、WiFi も Bluetooth もない。
だが、そこがいい。
小さいのにGPIO豊富だし、UARTも複数持ってるので。
そして、Arduinoのようなマイコンではなく、Linuxが動く。
Ubuntu にしようかと思ったけど、Armbian を試してみる
下記サイトから Armbian をダウンロードする。

で、ダウンロードしたイメージを SD カードに書き込むのにラズパイ用の書き込みツールを使ってる人が多いみたいだけど、これは単なるイメージファイルなので Rufus でも問題なく SD カードに書き込める。
Friendly Elec 公式の OS イメージもいくつかあるけど、最新に近いバージョンだと、RPi.GPIO_NP がコンパイルできないのでそこは要注意。
ソースを修正すればいいんだろうけど…面倒なので OPi.GPIO を使って PINマッピングを変える、という手段が楽でいい。
起動:MACアドレスがローカル管理=02で始まるよ
SDカード差し込んで、microUSBつなげば起動する。
普通にSSHでつながる。(なんでみんなシリアルで繋げてんだろう…という疑問は少しあるw)
デフォルトのユーザー名とパスワードは… ID:root PW:1234
NanoPi NEO は HDMI 等がないので、デバッグ用のシリアルコンソールに接続するか、SSHするかなんだけど…
MACアドレスがローカル管理MACになってる…
別にいいんだけど、OUIがベンダIDになってないのでなんか変。
軽く調べると Allwinner H3 SoC が持ってる Ethernet Controller だからFriendly Elec になってないらしい。
が、それでも、Allwinner が持つIDになっててもよさそうなもんだけど…なんでローカル管理MACのままなんだろう…(まぁ、それほど重要なポイントでもないけど…)
ということで、Netenum等のツールで02から始まるMACアドレスを探せば、IPアドレスもわかる。
※あ、もちろんDHCPサーバが存在するネットワークにつなげてた場合ね。
microUSB側がOTGでシリアルコンソールにもなるようなので、ネットワークにつなげなくてもOKらしいが、ちょっと試してない。
初期設定
まずは root のパスワード変更
デフォルトで ID:root 、PW:1234 になってる。
SSH で繋げても デバッグ用のシリアルで繋げても、最初に root のパスワードを決めよと指示される。
Create root password:
Repeat root password:
変更を促される仕様はいいね。
ユーザーの作成 & sudo権限付与 など
この辺も対話型で自動的に設定できる。
Please provide a username (eg. your first name): [USER_NAME]
Create user ([USER_NAME]) password: ************
Repeat user ([USER_NAME]) password: ************
Please provide your real name: [USER_NAME]
Dear [USER_NAME], your account [USER_NAME] has been created and is sudo enabled.
Please use this account for your daily work from now on.
Detected timezone: Asia/Tokyo
Set user language based on your location? [Y/n]
ここでなぜか sshd の再起動に失敗したっぽくてどうしようもなくなった。
UART に接続してコンソール叩けばいいんだけど、面倒なので、電源ぶっちぎりの再起動。
まぁ、問題なく再起動してくれたw
そして、あとは armbian-config で必要な部分の設定を詰めていけばOK
viのインストール
最近はみんな nano?
確かに使いやすそうではあるんだけど…viに慣れちゃってるから…
$ sudo apt install vim
として、viも入れておく。
IP アドレスの固定
さてさて、armbian-config で設定ができるとはいえ、やはり慣れているのはこっちか。
一応メモっとく。
$ cd /etc/netplan/
$ sudo vi 01-localConf.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
addresses: [192.168.x.x/24]
routes:
- to: default
via: 192.168.x.x
nameservers:
addresses: [192.168.x.x, 8.8.8.8]
$ sudo chmod 600 /etc/netplan/01-localConf.yaml
chmod 600 にしないと WARNING が出る…
こんなに厳しかったっけ?644じゃダメだっけ?と思いつつも、600でいいなら600にしといた方が安全よね。
時刻合わせ
おそらく Asia/Tokyo になってるはずだけど、念のため確認。
$ sudo timedatectl status
Local time: Sun 2025-11-09 13:01:05 UTC
Universal time: Sun 2025-11-09 13:01:05 UTC
RTC time: Sun 2025-11-09 13:01:03
Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
NTP service: n/a
RTC in local TZ: no
もし、こんな感じでUTCになっていたら、
$ sudo timedatectl set-timezone Asia/Tokyo
として合わせる。
ここまで終わったら下記のようにしてリポジトリ情報の更新とパッケージの更新を実行
$ sudo apt update
$ sudo apt upgrade
とまぁ、やってることは RaspberryPi 系と同じですな。
Linuxだからね。
Python環境の構築
基本的なものは入ってる。3.13.5 になっていた。
が、仮想環境を作るためには足りないので以下を実行。
ついでに pip や git も入ってないので入れておく。
$ python3 --version
Python 3.13.5
$ sudo apt install python3.13-venv ← Pythonのバージョンに合わせる
$ sudo apt install python3-pip
$ sudo apt install git
あとは仮想環境作って Python ガリガリ書いていけばよし。
$ python3 -m venv venvDirName
$ cd venvDirName
$ source bin/activate
Python の仮想環境下での操作
GPIO を使うには ラズパイなら RPi.GPIO なところ、NanoPi NEO は OPi.GPIO を使うと楽。
(venv) venv$ pip install OPi.GPIO
ただ、当然ながら GPIO の PINマッピングはラズパイと NanoPi NEO では全く異なるので…
(venv) venv$ vi lib/python3.13/site-packages/OPi/pin_mappings.py
として PINマッピングを修正する。
修正する箇所は CUSTOM の部分で、以下のようにする。(そもそも CUSTOM 部には何も書かれてない)
# User defined, initialized as empty
CUSTOM: {
7: 203, # GPIOG11
8: 198, # UART1_TX/GPIOG6
10: 199, # UART1_RX/GPIOG7
11: 0, # UART2_TX/GPIOA0
12: 6, # GPIOA6
13: 2, # UART2_RX/GPIOA2
15: 3, # UART2_CTS/GPIOA3
16: 200, # UART1_RTS/GPIOG8
18: 201, # UART1_CTS/GPIOG9
19: 64, # SPI0_MOSI/GPIOC1
21: 65, # SPI0_MISO/GPIOC1
22: 1, # UART2_RX/GPIOA1
23: 66, # SPI0_CLK/GPIOC2
24: 67 # SPI0_CS/GPIOC3
}
尚、GPIO へのアクセスには root 権限が必要なので、実行時には sudo する必要があるので注意。
(venv) venv$ sudo ./bin/python3 test.py
みたいな感じに。
./bin/python3 としているのは、仮想環境の python3 を使うようにするため。
普通は python3 test.py だけで仮想環境の python3 が使われるはずなんだけど、なぜかシステム側の python3 が使われてしまうので、明示するようにした。

この記事にコメントしてみる