NanoPiシリーズは、Friendy Elecが販売している超小型シングルボードコンピューターです。
Piと付いていますが、PythonのPiらしいです。(だったらPyなのにw)
[仕様]
・CPU:Allwinner H3(Quad-core Cortex-A7 1.2GHz)
・RAM:DDR3 512MHz
・Ethernet:10/100MHz
・USB:Type-A
・GPIO:36Pin
・基板サイズ:40x40mm
・電源:5V 2A
・OS:u-boot、Ubuntu Core
[Raspberry Pi Zero との比較]
※NanoPiのMICinはモノラルでした
※NanoPi NEOの通常の電流値は、140mA程度です。
■2017年7月22日 追記
Raspberry Pi zeroと比較しました。
zeroより小さいですがEthernetが直結できるのが便利です。
ピンヘッダーも付属しているので、GPIOが必要な場合は半田付けが必要です。
上からのアップです。(CPUとメモリチップは裏面です)
ヒートシンクも購入しました。(かなり熱くなるようです)
ヒートシンク装着!
まずは立ち上げてみました。
Ubunts CoreのDISKイメージをSDカードに書き込んで5V電源を付け、色々やってUbuntuがbootできました。(最初からSSHが立ち上がっているようです)
・一般ユーザ → ID:pi、パスワード:pi
・rootユーザー→ ID:root、パスワード:fa
[初期設定]
・サポートページはここ→NanoPi NEO
・準備するもの
-NanoPi NEO
-MicroSDカード(8Gで足ります)
-5V/2Aの電源(micro-Bケーブル)
・サポートページの official-ROMs からイメージをダウンロード
※「nanopi-net-ubuntu-core-xenial_4.11.2_YYYYMMDD.img.zip」をダウンロードしました。
・イメージをMicroSDカードに書き込む
・MicroSDカード、LANケーブル、電源を接続して起動
-PWR(緑のLED)が点灯
-STAT(青のLED)が点滅
-EthernetコネクターのLEDが点滅
・数分で Ubuntuが起動します。
・後はtelnetで接続します。
・apt-getコマンドでOSを最新化しておきましょう
$ apt-get update
$ apt-get upgrade
※NanoPiについてはこのページが参考になりました。
■2017年7月23日 追記
GPIOを操作するWiringNPが入っていました。※WiringPiのNanoPi版のようです。
・WiringNPのディレクトリーに変更する。
$ ls
mjpg-streamer Music test.pcm WiringNP
$ cd WiringNP
・build 用スクリプトを実行する。
$ ./build
wiringPi Build script
=====================
WiringPi Library
[UnInstall]
make: Nothing to be done for 'all'.
[Install Headers]
[Install Dynamic Lib]
WiringPi Devices Library
[UnInstall]
make: Nothing to be done for 'all'.
[Install Headers]
[Install Dynamic Lib]
GPIO Utility
make: Nothing to be done for 'all'.
[Install]
All Done.
NOTE: To compile programs with wiringNP, you need to add:
-lwiringPi
to your compile line(s).
$ gpio -v
gpio version: 2.20
Copyright (c) 2012-2014 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty
Banana Pro Details:
Type: Model A, Revision: 1.2, Memory: 1024MB, Maker: LeMaker
$ gpio readall
※NanoPi NEOのGPIOは36ピンあるのですが、24ピン分しかないですね。
Raspberry Piの raspi-config にそっくりな、設定ツール npi-configもありました。
$ npi-config
npi-configでできること
1.デフォルトユーザ:pi のパスワードの変更
2.hostname 変更
3.起動オプション設定:autologin、boot時にnetworkを待たない
4.ローカル設定:locale、timezone、keyboard layout、Wi-fi country
5.インターフェース設定:SSHの許可
6.アドバンスオプション:
default display、Audio device、Welcome message、
Serial-port/I2C/SPI/PWM/I2Sの設定
7.ツールアップデート
CPU能力の測定の為に、sysbench をインストールしてみました。
(libtoolとautoreconfもインストールしました)
$ apt-get install autoconf
$ apt-get install libtool
$ git clone https://github.com/akopytov/sysbench.git
$ cd sysbench
$ autoreconf -i --force --install
$ ./configure --without-mysql
$ make
$ make install
Raspberry Pi zeroとCPUのベンチマークを比較してみました。
Nano Pi NEO:24.14(single thread)
Raspberry Pi zero:31.52
∴Nano Pi NEO(single thread)はRaspberry Pi zeroより、1.3倍速いことになります。
[NanoPi NEO]
$ sysbench --test=cpu run
WARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options.
sysbench 1.1.0-dcde0d9 (using bundled LuaJIT 2.1.0-beta3)
Running the test with following options:
Number of threads: 1
Initializing random number generator from current time
Prime numbers limit: 10000
Initializing worker threads...
Threads started!
CPU speed:
events per second: 24.14
General statistics:
total time: 10.0249s
total number of events: 242
Latency (ms):
min: 24.84
avg: 41.41
max: 217.74
95th percentile: 150.29
sum: 10021.38
Threads fairness:
events (avg/stddev): 242.0000/0.00
execution time (avg/stddev): 10.0214/0.00
Raspberry Pi zeroでも同じことをやってみました。
[Raspberry Pi zero]
$ sysbench --test=cpu run
WARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options.
sysbench 1.1.0-dcde0d9 (using bundled LuaJIT 2.1.0-beta3)
Running the test with following options:
Number of threads: 1
Initializing random number generator from current time
Prime numbers limit: 10000
Initializing worker threads...
Threads started!
CPU speed:
events per second: 31.52
General statistics:
total time: 10.0238s
total number of events: 316
Latency (ms):
min: 31.53
avg: 31.70
max: 46.43
95th percentile: 31.94
sum: 10015.85
Threads fairness:
events (avg/stddev): 316.0000/0.00
execution time (avg/stddev): 10.0158/0.00
Nano Pi NEOはQuad-coreなので、複数threadでも計測しました。
・1 thread:24.14
・2 thread:48.52
・3 thread:76.65
・4 thread:105.35
∴NanoPi NEOはRaspberry Pi zeroより3.3倍速いことになります。
■2017年8月6日 追記
ベンダー提供のLinuxイメージは色々問題があるらしいので、巷に氾濫しているARMプロセッサボードに対応した armbian というものを導入してみたいと思います。
HOME→Download→NanoPi NEOと進んでいくと、Downloadページがあります。
ここで2種類のUbuntuが選択できました。
1.Ubuntu server - legacy → Ubuntu 3.4.13
2.Ubuntu server - mainline kernel → Ubuntu 4.11.8
でも、Ubuntu 4.11.8の方は、途中でbootが止まってしまい、動きませんでした
Ubuntu 3.4.13のシステムは以下になります。
$ uname -a
Linux nanopineo 3.4.113-sun8i #18 SMP PREEMPT Thu Jun 15 02:16:06 CEST 2017 armv7l armv7l armv7l GNU/Linux
ベンダーのLinuxイメージでは、青色LEDが点滅していたのですが、armbianではそれが無かったので、以下のコマンドで点滅するようにしました。
$ echo heartbeat > /sys/class/leds/blue_led/trigger
※リブートすると、設定が解除されてしまいます。
armbian-config という設定ツールがありました。
$ armbian-config
最初にスペースキーを押します。そしてリターン
設定できる項目は以下のとおりです。
Timezone:タイムゾーン設定
Install:SATAドライブ等へのインストール(だと思います)
Hold:更新の際に、kernelをホールドする(だと思います)
Softy:サブモジュールのインストール(だと思います)
Consumption:H3ボードの制御
Monitor:CPUモニター
Diagnostics:何か情報をアップロードします(危ない?)
Fexedit:u-boot環境の編集
Bootenv:u-boot環境の編集
Network:ネットワークインターフェース情報の編集
Services:サービスのOn/Off
Welcome:motd表示情報の編集
Nightly:ナイトモード(?)
Switch:カーネルの切り替え(?)
■2017年8月9日 追記
Ubuntu 4.11.8をもう一度ダウンロードし直して導入したら、動くようになりました。
※armbianのホームページによると動かないのは、ほとんど電源とSDカードが原因と書いてありますが、原因は不明です。
■pipをインストール
$ wget https://bootstrap.pypa.io/get-pip.py
$ python3 get-pip.py
$ python3 -m pip -V
pip 9.0.1 from /usr/local/lib/python3.5/dist-packages (python 3.5)
■SDL1.2のインストール
$ sudo apt-get install libsdl1.2-dev
$ sudo apt-get install libsdl-image1.2-dev
$ sudo apt-get install libsdl-ttf2.0-dev
$ sudo apt-get install libsdl-gfx1.2-dev
■freetypeのインストール
$ sudo apt-get install libfreetype6-dev
■pygameのインストール
pygameのホームページから、pygame-1.9.3をダウンロード
$ tar xzvf pygame-1.9.3
$ cd pygame-1.9.3
$ python3 setup.py
■WiringNPのインストール
$ git clone https://github.com/friendlyarm/WiringNP
$ cd WiringNP/
$ chmod 755 build
$ ./build
■ハードウェアのセットアップ
Nano PiにLCDを接続ました。
■ピン接続 ※LCDのNCは省略
[LCD - Nano Pi]
1.3V3 - 1.3V3
2.5V - 2.5V
4.5V
6.GND
9.GND
11.TP_IRQ
14.GND
17.3V3
18.LCD_RS - 22.GPIOA1
19.LCD_SI/TP_SI - 19.SPI0_MOSI
20.GND
21.TP_SO
22.RST - 18.GPIOG9
23.LCD_SCK/TP_SCK - 23.SPI0_CLK
24.LCD_CS - 24.SPI0_CS
25.GND - 6.GND
26.TP_CS
■ソフトウェアのセットアップ
以下のファイルを追加・変更しました。
■SPIドライバのセットアップ
[/boot/armbianEnv.txt] ※以下の行を追加
overlay_prefix=sun8i-h3
overlays=spi-sipdev
param_spidev_spi_bus=0
param_spidev_max_freq=100000000
■fbtft のセットアップ
[/etc/modules-load.d/fbtft.conf] ※新規作成
fbtft_device
[/etc/modprobe.d/fbtft.conf] ※新規作成
options fbtft_device name=piscreen speed=16000000 rotate=270 \
gpios=reset:203,dc:1
■2017年8月11日 追記
NanoPi NEOでもPeppyMeterを動かしてみました。
Raspberry Pi zeroよりCPUが速いのですが、メーターの動きはあまり変わりません。
■2017年8月11日 追記(その2)
NanoPi NEOでPeppyMeterが動くことを確認しましたが、実はこのLCDはタッチパネルが付いています。(それを使うにはSPIが2つ必要です)
NanoPi NEOのCPUのAllwinner H3のデータシートを見ると、SPIは2つあるようです。
でも、armbianはそれに対応していません。
少し困って、NanoPi NEOの開発・販売元のFriendlyARMのwikiを見ていると、最初に導入した本家のOfficial OSなら、SPIを2つ動かせるようです。
そこでまた本家OSを試してみようと思います。
本家のofficial-ROMsから、
nanopi-neo_ubuntu-core-xenial_4.11.2_20170705.img.zip
をダウンロードしました。
npi-configで、2つのSPIをenableにできました。(でも設定だけかも)
[/etc/modprob.d/matrix-blacklist.conf] ※修正
fbtft_deviceがbalacklist化されていたので、コメントアウトしました。
■2017年8月13日 追記
どうも fbtft_deviceがカーネル組み込みになっていて、外部からパラメータを変えられないようです。(オプションで販売されている Matrix-2'8 LCD固定)
そこで、npi-config ツール(shell スクリプトでした)を見てみると device-treeのpitftというエントリーを見ていることが分かりました。
NanoPi NEOの標準のデバイスツリーは、
/boot/sun8i-h3-nanopi-neo.dtbのようなので、これを逆コンパイルしてpitftというエントリーを見つけました。
pitft@0 {
compatible = "sitronix,st7789v";
reg = <0x0>;
status = "disabled";
spi-max-frequency = <0x2faf080>;
rotate = <0x5a>;
fps = <0x21>;
buswidth = <0x8>;
dc-gpios = <0xb 0x0 0x1 0x0>;
reset-gpios = <0xb 0x6 0xb 0x0>;
debug = <0x0>;
};
デバイス名以外は通常のfbtft_deviceのパラメーターのようです。
spi-max-frequency=0x2faf080=50,000,000
→piscreenは18MHzが上限なので、0x112a880になります。
rotate=0x5a=90
fps=0x21=33
buswidth=0x8=8
dc-gpios=0xb 0x0 0x1 0x0
→Matrix-2'8のDCピンは NanoPiの22ピンです。
BCMのピン番号は 1になります。
reset-gpios=0xb 0x6 0xb 0x0
→Matrix-2'8のRESETピンは、同じく7ピンになります。
同じくBCMのピン番号は203です。
device-treeのコンパイルは
dtc -I dts -O dtb -o xxx.dtb xxx.dts
同じく逆コンパイルは
dtc -I dtb -O dts -o xxx.dts xxx.dtb
になります。
デバイス名以外はこのdevice-treeで変更できることが分かりました。
(dmesgから該当部分を抜粋)
fbtft_of_value: buswidth = 8
fbtft_of_value: debug = 3
fbtft_of_value: rotate = 90
fbtft_of_value: fps = 33
fb_st7789v spi0.0: fbtft_gamma_parse_str() str=
fb_st7789v spi0.0: 70 2C 2E 15 10 09 48 33 53 0B 19 18 20 25
70 2C 2E 15 10 09 48 33 53 0B 19 18 20 25
fb_st7789v spi0.0: fbtft_request_one_gpio: 'reset-gpios' = GPIO203
fb_st7789v spi0.0: fbtft_request_one_gpio: 'dc-gpios' = GPIO1
fb_st7789v spi0.0: fbtft_verify_gpios()
fb_st7789v spi0.0: Display update: 1020 kB/s, fps=0
graphics fb1: fb_st7789v frame buffer, 320x240, 150 KiB video memory, 4 KiB buffer memory, fps=33, spi0.0 at 18 MHz
次にドライバー名として現れる "fb_st7789v"をファイル検索してみました。
$ find / -name "fb_*" -print
/sys/bus/platform/drivers/fb_st7789v
/sys/bus/drivers/fb_st7789v
これをどこから起動しているかを見つけるのが次のクエストになります。
と思ったら、/sys は仮想ディレクトリで、検出されたデバイスがリストされるのですね。
他をあたる必要があります。
/boot/config-4.11.2.h3 にこんな記述がされていました。
CONFIG_STAGING=y
CONFIG_FB_TFT=y
CONFIG_FB_TFT_ST7789V=y
fbtft_deviceとst7789vがbuiltinモジュールになっているようです。
これはカーネルをリコンパイルするしかないのかもしれません。
■2017年8月15日 追記
そんな訳で、カーネルをリコンパイルしてみました。
NanoPi NEOのリコンパイルは以下のページを参照しました。
・ソースをダウンロードします。(linux_4.11.2_20170707.tar.gz)
・上記ソースを解凍します。(tar zxvf)
・現行Linuxのconfigをコピーします。
$ cd linux
$ cp /boot/config-4.11.2-h3 .config
・コンフィグファイルを修正します。
$ make menuconfig
・fbtft_deviceが別モジュールとして生成されるように修正します。
Device Drivers → Staging drivers → Support for small TFT LCD display modules
と進めます。
・fbtft_deviceと必要なLCDのドライバーをマークします。
Y:*が表示されbuiltinモジュールになる
N:導入されません
M:別モジュールとして生成される。
・おもむろに make(数時間かかります)
$ make -j4
・カーネルコンパイルが終わったら、出来上がったモジュールをコピーします。
$ cp arch/arm/boot/zImage /boot
$ cp arch/arm/boot/dts/sun8i-h3-nanopi*.dtb /boot
$ make modules_install
・再起動します
これで出来上がりですが、fbtft_deviceは自動起動しません。
まだ、st7789vが起動されてしまいます。
次は自動起動の仕組みを調べるクエストになります。
■2017年8月26日 追記
Official OSイメージでは、コンソールが上手く表示できません。
フレームバッファーとのデータ連携がずれているのかもしれません。
■2017年8月27日 追記
コンソールの不調については、fbconのパラメーターの0/1/2/3と、fbtftのrotateの0/90/180/270の組み合わせを全て試したのですが、正常になりませんでした。
あとで必要なタッチスクリーンのエントリーも取得しました。
pitft-ts@1 {
compatible = "ti,ads7846";
reg = <0x1>;
status = "disabled";
spi-max-frequency = <0x1e8480>;
interrupt-parent = <0xb>;
interrupts = <0x6 0x9 0x2>;
pendown-gpio = <0xb 0x6 0x9 0x1>;
ti,swap-xy;
ti,vref-delay-usecs = <0x3e8>;
ti,x-min = [00 64];
ti,x-max = [0f ff];
ti,y-min = [00 64];
ti,y-max = [0f ff];
ti,vref-mv = <0xce4>;
ti,x-plate-ohms = [01 00];
ti,penirq-recheck-delay-usecs = <0xa>;
ti,settle-delay-usec = [00 64];
ti,keep-vref-on = <0x1>;
ti,pressure-max = [0f ff];
ti,debounce-max = <0xa>;
ti,debounce-tol = <0x1e>;
ti,debounce-rep = <0x1>;
};
-
購入金額
1,680円
-
購入日
2017年07月21日
-
購入場所
秋葉原 秋月電子通商
通りすがりのおじさんさん
2017/07/22
ちょっとググったら、PCM5102AのI2Sボードも出ている様で、ちょっと・・・いや、結構気になってます!w
yosyos888さん
2017/07/22
jakeさん
2017/08/09
結構、遊べるボードに見えました。
何より安いですしね。
yosyos888さん
2017/08/09
今、raspi zeroで実験しているLCDを繋げようとしています。
最近のubuntuはfbtftを標準で持っているので、出来そうです。
通りすがりのおじさんさん
2017/08/11
PeppyMeterはプログラムが重いんですかね?
LCDのインターフェースが遅いんですかね?
yosyos888さん
2017/08/12
PeppyMeterもPythonだし、針の角度を計算するのに atan()とか使っているので、遅いのかもしれません。
通りすがりのおじさんさん
2017/08/13
速いLCDでも試したいところですね。
うちのラズパイ液晶はHDMIだしな~
yosyos888さん
2017/08/14
frame buffer以降がHDMIでも出来ると思いますよ。