網拍上,有人便宜拍賣汰換的 Orange Pi One 單板電腦,相對便宜很多,就買了幾個回來備用。
買的開發板,有附盒子,風扇,USB 轉圓柱頭的電源線,這些自己買,又要一百多吧。電源接頭規格 DC 4.0x1.7mm,打算買 DC-DC 的板子來將 24V 轉成 5V,給香橙派用。
WiFi使用
Orange Pi One,終究是 2016 的產品,使用上的體驗,速度遠比不上 2023 年出的 Orange Pi Zero 3。以電腦的進步來看,7年的時間,速度大約至少差 2倍。但是網拍的二手貨,很便宜,買一些來改 3D 印表機。3D 印表機改 Klipper,至少要一個上位機。只改一台,錢差一點沒差,但收集了一堆來改,改完想賣出,差幾百,就不一定有人要收,成本能省就省吧。 在成本上比較,前者,主板+WiFi+SD卡,約 400元,後者,主板+SD卡,約 600元。
安裝 armbian 的 image,版本比較新,https://www.armbian.com/orange-pi-one/ 。
即使安裝 network-manager,"apt install network-manager",執行 nmtui,顯示不正常。只好用 armbian-config 設定 WiFi。
參考 ARMBIAN OS - Networking,Armbian 使用 Netplan.io 來描述網路設定。使用 armbian-config 設定後,會將設定存在 /etc/netplan/armbian.yaml,直接修改設定,再執行 "netplan apply",即可讓設定生效。
# cat armbian.yaml
network:
version: 2
renderer: NetworkManager
wifis:
wlx40a5ef154b5f:
# dhcp4: true
# dhcp6: true
addresses:
- 10.161.86.137/20
routes:
- to: default
via: 10.161.80.1
nameservers:
addresses:
- 8.8.8.8
- 8.8.8.4
access-points:
"Samsung-A50-cc":
auth:
key-management: "psk"
password: "wifi-password"
依照 https://github.com/dw-0/kiauh 安裝 klipper。整個安裝過程,明顯比用 Orange Pi Zero 3 慢很多,可能要 2倍以上的時間。
安裝谐振测量所需的軟體
在執行到下列安裝指令時,很可能會掛掉,ssh 沒反應。
~/klippy-env/bin/pip install -v "numpy<1.26"
把僅有的 SD 空間,313MB 設成 swap,再儘可能把 service 停掉,擠出記憶體。
## 列出所有 active 的 service
systemctl list-units --type=service --state=active
OR
systemctl --type=service --state=active
## 把目前確定沒用的 service 都停掉
sudo systemctl stop klipper
sudo systemctl stop KlipperScreen.service
sudo systemctl stop NetworkManager.service
sudo systemctl stop moonraker.service
sudo systemctl stop nginx.service
終於安裝成功。
啟用 SPI
使用 armbian-config 啟用 sun8i-h3-spi-spidev,會在 /boot/armbianEnv.txt 中,加入一行
overlays=sun8i-h3-spi-spidev
從 console 看到載入失敗的訊息
Failed to load '/boot/dtb/overlay/sun8i-h3-sun8i-h3-spi-spidev.dtbo'
因為已加上 overlay_prefix=sun8i-h3。修改後,並加上 param 參數,成功看到 /dev/spidev0.0 的裝置。完整的 /boot/armbianEnv.txt 如下。
verbosity=1
bootlogo=false
console=both
disp_mode=1920x1080p60
overlay_prefix=sun8i-h3
rootdev=UUID=5fda7286-2a9d-4d7c-aa26-de3614b88ae6
rootfstype=ext4
overlays=spi-spidev
param_spidev_spi_bus=0
usbstoragequirks=0x2537:0x1066:u,0x2537:0x1068:u
可以參考 /boot/dtb/overlay/README.sun8i-h3-overlays 的說明。
接線
IO 的接腳如下。
觸控屏
OPi One wiring:
Pin 23 - PC2 <--> SPI0 SCK & T_CLK
Pin 21 - PC1 <--> SPI0 SDO<MISO> & T_DO
Pin 19 - PC0 <--> SPI0 SDI<MOSI> & T_DIN
Pin 31 - PA8 <--> DC
Pin 33 - PA9 <--> RESET
Pin 29 - PA7 <--> LED
Pin 35 - PA10 <--> LCD CS
Pin 26 - PA20 <--> T_CS
Pin 28 - PA19 <--> T_IRQ
Pin 1 - 3.3V (or Pin 4 - 5V)
Pin 6 - GND
--------------
建立 /boot/overlay-user/ili9341_lcd.dts,內容如下。
/dts-v1/;
/plugin/;
/ {
compatible = "xunlong,orangepi-one", "allwinner,sun8i-h3";
fragment@0 {
target = <&spi0>;
__overlay__ {
status = "okay";
// cs-gpios = <&pio 0 10 0>; /* PA10*/
cs-gpios = <&pio 0 10 0>, <&pio 0 20 0>; /* PA10 PA20 */
ili9341: ili9341@0 {
compatible = "ilitek,ili9341";
reg = <0>; /* Chip Select 0 */
#spi-cs-high;
spi-max-frequency = <40000000>;
rotate = <90>;
bgr = <0>;
fps = <30>;
width = <240>;
height = <320>;
buswidth = <8>;
reset-gpios = <&pio 0 9 1>; /*RESET=PA9*/
dc-gpios = <&pio 0 8 0>; /*DC_RS=PA8*/
led-gpios = <&pio 0 7 0>; /*LED=PA7*/
debug = <4>;
};
ads7846: ads7846@0 {
compatible = "ti,ads7846";
reg = <1>; /* Chip Select 1 */
#spi-cs-high;
spi-max-frequency = <1000000>;
interrupt-parent = <&pio>;
/* IRQ PA19 */
interrupts = <0 19 2>; /* IRQ_TYPE_EDGE_FALLING */
pendown-gpio = <&pio 0 19 1>; /* ACTIVE_HIGH */
/* ti,swap-xy = <0x1>; */
ti,x-min = /bits/ 16 <0>;
ti,y-min = /bits/ 16 <0>;
ti,x-max = /bits/ 16 <0x0FFF>;
ti,y-max = /bits/ 16 <0x0FFF>;
ti,pressure-min = /bits/ 16 <0>;
ti,pressure-max = /bits/ 16 <0xFFFF>;
ti,x-plate-ohms = /bits/ 16 <400>;
};
};
};
};
再執行下面的指令,