ใช้ Banana Pi M5 แทน Raspberry Pi 4 (ลง Armbian)

Somsak Lima
18 min readNov 16, 2022

--

ปัญหาการหาซื้อ Raspberry PI ยากและมีราคาแพง เราลองมาใช้ Banana Pi M5 แทน บทความนี้แนะนำวิธีนำ Banana Pi M5 มาใช้งาน IoT เช่นการ ติดตั่้ง Docker ติดตั้ง Portainer ติดตั้ง Chirpstack สำหรับ LoRaWAN ติดตั้ง Influxdb ติดตั้ง Grafana

สามารถใช้ กล่องอาครีลิกที่ใช้กับ Raspberry Pi3 B+ ได้โดยการคว้านรู USB Type C ให้ใหญ่ขึ้น แต่การกด switch Reset กับ SW3 จะต้องเปิดฝากด เนื่องจาก RPI ไม่มี

Hardware Spec

บทความนี้จะแนะนำการติดตั้ง Armbian แทนการใช้ Raspbian เพราะจะมีปัญหาการทำงานกับ Docker น้อยกว่า โดยเฉพาะอย่างยิ่ง การติดตั้ง Armbian บน eMMC การใช้งานจะสมบูรณ์กว่า

เปิดเวป armbian.com

คลิก Download เลือก Bananapi M5/M2P

เลือก Download รุ่น Bullseye XFCE Desktop จาก Site ใกล้ๆ เช่นจาก USA

Tip! XFCE Desktop เข้ากับ โปรแกรม Xrdp ได้ดีกว่า

จะได้ไฟล์ เช่น Armbian_22.08.7_Bananapim5_bullseye_edge_5.19.16_xfce_desktop.img.xz

ใช้ winrar แตกไฟล์ออกมาเป็น

Armbian_22.08.7_Bananapim5_bullseye_edge_5.19.16_xfce_desktop.img

1.เขียน Image ลงบน SDcard ทำได้สองสามวิธี เช่น

1.1 เปิดโปรแกรม Raspberry Pi Imager บน PC

CHOOSE OS ให้เลือก Use custom

เลือก ไฟล์ .img ที่แตกออกมา

Choose Storage

เลือก USB SDcard ให้ถูกต้องแล้ว กด write ขนาด SDcard ที่ใช้แนะนำให้ใช้ขนาด 16G ขึ้นไป

ถ้าเขียนเสร็จจะเห็นหน้าจอดังต่อไปนี้

สามารถนำ SDCard ไปเสียบเข้าช่อง SDcard ของ BananaPI M5 ได้เลย

1.2 ใช้ Wind32 Disk Imager

เลือก Image File เลือกชือ่ Drive ปลายทางแล้วคลิก Write

เมื่อเขียน SDCard เสร็จ นำ SDcard ไปใส่ใน Banana PI M5 แล้วเปิดไฟเข้า

2. เสียบ SDcard ให้เรียบร้อยใน BPI เปิดไฟแล้วจะเห็น LED ติดสามดวง เขียว/น้ำเงิน/แดง ไฟเขียวจะติดเข้มหากกำลังบูท สักครู่ไฟเขียวจะดับ เหลือไฟน้ำเงินกระพริบ และไฟแดงติดค้าง

บนจอจะให้ป้อน New Root Password ให้ป้อนสองครั้ง เช่น lorawan123

ถัดไปให้เลือก 1 คือ bash shell

ถัดไปให้สร้าง User name เช่น ชื่อ somsak เป็นต้น ใส่ password สองครั้ง เช่นอาจจะใช้ lorawan123 เช่นเดียวกับ root ถัดไปให้ป้อนชื่อจริงนามสกุลจริงเต็มๆ

ระบบจะ detect TimeZone Asia/bangkok ออกมาให้อัตโนมัติ เพื่อไม่ให้หน้าจอแสดงภาษาไทยให้ตอบ No ตรงคำถาม Language based on your Location? (Y/n)

เลือก Local เป็น 54 en-US.UTF-8

เลือก 4 TimeZone Asia

เลือก 45 Thailand

จะถามว่าข้อความข้างต้น OK รึเปล่าให้เลือก Yes โดยเลือก Option 1 ให้ป้อน 1

ระบบจะ Config ตัวเองแล้วบูทเข้าจอ Desktop ของ Armbian

หมายเหตุ หากบูทเข้า eMCC แต่บูทไม่สำเร็จ เนื่องจาก OS ไม่สมบูรณ์ LED จะติดจางๆ สามดวงต้องทำการลบ eMCC ด้วยโปรแกรมผ่าน Port USB Type C

Tip!ไม่ต้อง expand file system ให้ใหญ่เต็ม SDCard Armbian ทำให้อัตโนมัติ

3. เปิด Service SSH

คลิกปุ่มขวาของ mouse บน Desktop แล้วเลือก Open Terminal Here

เรียกคำสั่ง su เพื่อใช้สิทธิ admin ให้ป้อน password lorawan123 เมื่อจะใช้สิทธิ admin เสร็จแล้วให้ใช้คำสั่ง armbian-config

เลือก System

เลือกเมนู SSH

วิธีการ login เลือก password login

4.เปิด Service RDP

เลือกเมนู Software

เลือก RDP

เพิ่ม User ใหม่ให้ใช้ Remote Desktop จาก Microsoft Window ได้ เช่น

sudo adduser slvp
เพิ่มเข้าไป Group sudoer
sudo usermod -aG sudo slvp แล้ว Reboot ต้องทำไม่นั้นจะใช้ Remote Desktop ไม่ได้

5.กำหนด Fix IP

เลือก IP

เลือก Static

เลือก Static และแก้เป็น 192.168.1.100

ถึงจุดนี้เราสามารถใช้งาน BPI จาก SDcard ได้แบบปรกติทั่วๆ ไปคล้ายคลึงกับการใช้ RPI

ต่อไปจะอธิบายถึงการติดตั้ง Armbian บน eMMC

การลงบน eMMC จะต้องลงสองครั้ง คือครั้งแรกต้องลงบน SDcard ก่อน แล้ว Copy Image จาก SDcard ไปใส่ใน eMMC

6.sftp ด้วย Filezilla
ส่ง Image เข้าไปใน Armbian บน SDCard

เปิด Site Manager

เลือกไฟล์แล้วคลิก Upload

7. Copy Image to eMMC

ติดตั้ง bpi-tools ก่อน

sudo apt-get install pv
curl -sL https://github.com/BPI-SINOVOIP/bpi-tools/raw/master/bpi-tools 20 | sudo -E bash

แล้ว unzip img ด้วย winrar แล้วใช้ filezilla sftp ไปยัง SDcard ก่อนใช้คำสั่ง bpi-copy เวอร์ชั่น Image ที่ใช้ได้ เช่น 2022–05–25-raspios-bullseye-arm64-hdmi-edid-bpi-m5-m2pro-sd-emmc.img

pi@raspberrypi:~ $ sudo bpi-copy 2022-05-25-raspios-bullseye-arm64-hdmi-edid-bpi-m5-m2pro-sd-emmc.img /dev/mmcblk1
SRC=2022–09–06-ubuntu-20.04-mate-desktop-bpi-m5-m2pro-aarch64-sd-emmc.img
DST=/dev/mmcblk1
COPYMODE=imagetodisk
imagetodisk
bpi-copy(v1.3.4(github)), bananapi image & disk tools

Usage: bpi-copy [OPTIONS]…
bpi-copy [ — help | -v | — version ]
bpi-copy IMGFILE
bpi-copy IMGDIR
bpi-copy IMGFILE DEVICE
bpi-copy DEVICE IMGFILE
Warning: Try to write 2022–09–06-ubuntu-20.04-mate-desktop-bpi-m5-m2pro-aarch64-sd-emmc.img to BOOTDISK /dev/mmcblk1
==============================================================
Thu 10 Nov 2022 09:18:36 AM +07
*** start COPY (blue led on ) …..
INFO: /dev/mmcblk1 : SD/eMMC !!
umount device: /dev/mmcblk1
umount /dev/mmcblk1p1
==============================================================
IMGFILE=2022–09–06-ubuntu-20.04-mate-desktop-bpi-m5-m2pro-aarch64-sd-emmc.img
==============================================================
img
585+1 records in[19.8MiB/s] [ <=> ]
585+1 records out
5.72GiB 0:04:38 [21.0MiB/s] [ <=> ]
6140461056 bytes (6.1 GB, 5.7 GiB) copied, 278.537 s, 22.0 MB/s
0+93696 records in
0+93696 records out
*** end COPY (blue led off) .....
Tue 06 Dec 2022 11:12:44 AM +07
==============================================================
RUNTIME 4:41
OK!! You can remove the BOOTDISK /dev/mmcblk1 now!!

ใช้เวลาประมาณ 5 นาที



somsak@bananapim5:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
mmcblk0 179:0 0 14.6G 0 disk
mqmmcblk0p1 179:1 0 14.4G 0 part /
mmcblk1 179:32 0 14.6G 0 disk
mmcblk1boot0 179:64 0 4M 1 disk
mmcblk1boot1 179:96 0 4M 1 disk
zram0 252:0 0 1.8G 0 disk [SWAP]
zram1 252:1 0 50M 0 disk /var/log

root@bananapim5:/home/slvp/Desktop# df
Filesystem 1K-blocks Used Available Use% Mounted on
udev 1795524 0 1795524 0% /dev
tmpfs 387600 40128 347472 11% /run
/dev/mmcblk0p1 14784632 10567468 3990224 73% /
tmpfs 1937992 0 1937992 0% /dev/shm
tmpfs 5120 4 5116 1% /run/lock
tmpfs 1937992 12 1937980 1% /tmp
/dev/zram1 49560 28644 17332 63% /var/log
tmpfs 387596 52 387544 1% /run/user/112
tmpfs 387596 48 387548 1% /run/user/1000
tmpfs 387596 56 387540 1% /run/user/1001

ใช้คำสั่ง fdisk -l ดูชื่อ eMMC ก่อน แล้ว Copy Image ลง eMMC

somsak@bananapim5:~$ sudo fdisk -l
Disk /dev/mmcblk0: 14.56 GiB, 15633219584 bytes, 30533632 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x56075e49

Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 8192 30212096 30203905 14.4G 83 Linux

Disk /dev/mmcblk1: 14.56 GiB, 15634268160 bytes, 30535680 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/mmcblk1boot0: 4 MiB, 4194304 bytes, 8192 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/mmcblk1boot1: 4 MiB, 4194304 bytes, 8192 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/zram0: 1.85 GiB, 1984507904 bytes, 484499 sectors
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

Disk /dev/zram1: 50 MiB, 52428800 bytes, 12800 sectors
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
sudo bpi-copy Armbian_22.08.7_Bananapim5_bullseye_edge_5.19.16_xfce_desktop.img /dev/mmcblk1

หรืออาจใช้คำสั่ง dd แทน BPI-TOOL (ไม่แนะนำ)

sudo dd if=2022–04–09-raspios-bullseye-arm64-bpi-m5-m2pro-k5.17-sd-emmc.img of=/dev/mmcblk1 bs=10MB status=progress

หลังใช้คำสั่ง bpi-copy sudo บนหน้าจอจะแสดง

somsak@bananapim5:~$ sudo bpi-copy Armbian_22.08.7_Bananapim5_bullseye_edge_5.19.16_xfce_desktop.img /dev/mmcblk1
SRC=Armbian_22.08.7_Bananapim5_bullseye_edge_5.19.16_xfce_desktop.img
DST=/dev/mmcblk1
COPYMODE=imagetodisk
imagetodisk
bpi-copy(v1.3.4(github)), bananapi image & disk toolsUsage: bpi-copy [OPTIONS]…
bpi-copy [ — help | -v | — version ]
bpi-copy IMGFILE
bpi-copy IMGDIR
bpi-copy IMGFILE DEVICE
bpi-copy DEVICE IMGFILE
Warning: Try to write Armbian_22.08.7_Bananapim5_bullseye_edge_5.19.16_xfce_desktop.img to BOOTDISK /dev/mmcblk1
==============================================================
Fri 02 Dec 2022 10:37:52 AM +07
*** start COPY (blue led on ) …..
INFO: /dev/mmcblk1 : SD/eMMC !!
umount device: /dev/mmcblk1
==============================================================
IMGFILE=Armbian_22.08.7_Bananapim5_bullseye_edge_5.19.16_xfce_desktop.img
==============================================================
img
480MiB 0:00:23 [19.1MiB/s] [ <=>

ใช้คำสั่ง sudo poweroff

ดึง SDcard ออกแล้ว ปิดเปิด BPI ใหม่ ติดตั้งเหมือนกับการลงบน SDcard

8.เพิ่ม USER ทั่วไป กำหนดให้เป็น SUDOER หรือใช้คำสั่ง sudo ได้
sudo adduser slvp
เพิ่มเข้าไป Group sudoer
sudo usermod -aG sudo slvp แล้ว Reboot ต้องทำไม่นั้นจะใช้ Remote Desptop ไม่ได้ การเข้า RDP จาก PC ต้องเข้าด้วย User ธรรมดา

อาจใช้วิธียากกว่าโดยแก้ไขไฟล์ด้วยคำสั่ง
sudo visudo

วิธีลบ user
sudo userdel -r -f slvp
sudo deluser -r slvp

9. cat /etc/os-release

somsak@bananapim5:~$ cat /etc/os-release
PRETTY_NAME="Armbian 22.08.7 Bullseye"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
somsak@bananapim5:~$

10. ปรับปรุงโปรแกรมที่ติดตั้งให้ทันสมัย

ใช้ user somsak สั่ง upgrade รวดเดียวโดยใช้

sudo apt update -y && sudo apt upgrade -y

หรือทำที่ละขั้นตอน

sudo apt update
sudo apt upgrade
sudo apt full-upgrade -y
sudo apt upgrade -y
sudo apt upgrade — fix-missing
sudo apt autoremove

หาก install ไม่สำเร็จให้ใช้คำสั่ง

sudo apt — fix-broken install

install ไม่สำเร็จอาจจะพื้นที่เต็ม

11. $ uname -a

somsak@bananapim5:~$ uname -a
Linux bananapim5 5.19.16-meson64 #22.08.6 SMP PREEMPT Tue Oct 18 07:08:32 UTC 2022 aarch64 GNU/Linux
somsak@bananapim5:~$

12. install ไม่สำเร็จอาจจะพื้นที่เต็ม E: You don’t have enough free space in /var/cache/apt/archives/.

sudo apt autoremove
sudo apt autoclean

อาจจะเป็นเพราะ SD card เสียหรือเต็ม

13. ติดตั้งโปรแกรมที่มีประโยชน์

sudo apt install locate lrzsz mc wget git finger -y
sudo updatedb
locate filename

14.ติดตั้ง DOCKER ใช้ User root ห้ามติดตั้งด้วย User ธรรมดา

somsak@bananapim5:~$ su
Password: <lorawan123>
root@bananapim5:/home/somsak# cd
root@bananapim5:~#
curl -sSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker
docker ps
sudo reboot
คำสั่งต่อไปนี้ไม่จำเป็นแล้ว
$ sudo systemctl enable docker.service
$ sudo systemctl enable containerd.service

ถ้าจะทดสอบ

docker run hello-world

root@bananapim5:/home/somsak# sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
7050e35b49f5: Pull complete
Digest: sha256:faa03e786c97f07ef34423fccceeec2398ec8a5759259f94d99078f264e9d7af
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(arm64v8)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/get-started/

ถ้าจะ update
sudo apt upgrade docker docker-compose

15. sudo docker version

root@bananapim5:/home/somsak# sudo docker version
Client: Docker Engine - Community
Version: 20.10.21
API version: 1.41
Go version: go1.18.7
Git commit: baeda1f
Built: Tue Oct 25 18:01:19 2022
OS/Arch: linux/arm64
Context: default
Experimental: true

Server: Docker Engine - Community
Engine:
Version: 20.10.21
API version: 1.41 (minimum version 1.12)
Go version: go1.18.7
Git commit: 3056208
Built: Tue Oct 25 17:59:41 2022
OS/Arch: linux/arm64
Experimental: false
containerd:
Version: 1.6.9
GitCommit: 1c90a442489720eec95342e1789ee8a5e1b9536f
runc:
Version: 1.1.4
GitCommit: v1.1.4-0-g5fd4c4d
docker-init:
Version: 0.19.0
GitCommit: de40ad0

16. sudo docker info

root@bananapim5:/home/somsak# sudo docker info
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Docker Buildx (Docker Inc., v0.9.1-docker)
compose: Docker Compose (Docker Inc., v2.12.2)

Server:
Containers: 1
Running: 0
Paused: 0
Stopped: 1
Images: 1
Server Version: 20.10.21
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: systemd
Cgroup Version: 2
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 1c90a442489720eec95342e1789ee8a5e1b9536f
runc version: v1.1.4-0-g5fd4c4d
init version: de40ad0
Security Options:
apparmor
seccomp
Profile: default
cgroupns
Kernel Version: 5.19.16-meson64
Operating System: Armbian 22.08.7 Bullseye
OSType: linux
Architecture: aarch64
CPUs: 4
Total Memory: 3.696GiB
Name: bananapim5
ID: LUYV:WQZA:XIK2:MRFB:P4FR:7MMG:5UOS:KVN2:6FT2:IDNC:DS6N:6OB7
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false

17. lsb_release -a

somsak@bananapim5:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 11 (bullseye)
Release: 11
Codename: bullseye

18.ติดตั้ง Portainer:9000

sudo docker pull portainer/portainer-ce
sudo docker run -d --restart always -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce

เรียกใช้โดยใช้ Port 9000
http://[RASPBERRY_PI_IP_ADDRESS]:9000

ตั้ง User Name/Password admin/ยาว 8/12 ตัวอักษร
เช่น admin/m2mlorawan หรือ m2mlorawan123

คลิก ICON รูปเรือ

19.ติดตั้ง DOCKER COMPOSER

อาจจะต้องติดตั้ง pip3 ก่อนหากเป็น Armbiam

sudo apt-get install python3-pip

แล้ว

sudo pip3 install docker-compose

เช็ค Version DOCKER COMPOSER

somsak@bananapim5:~$ docker-compose version
docker-compose version 1.29.2, build unknown
docker-py version: <module 'docker.version' from '/usr/local/lib/python3.9/dist-packages/docker/version.py'>
CPython version: 3.9.2
OpenSSL version: OpenSSL 1.1.1n 15 Mar 2022

20.ติดตั้ง Chirpstack บน Docker ติดตั้ง Chirpstack V.4X

ใช้ user root

ติดตั้งเลยโดย

git clone https://github.com/brocaar/chirpstack-docker.git
cd chirpstack-docker

แก้ความถี่ https://www.chirpstack.io/gateway-bridge/install/config/

nano ~/chirpstack-docker/configuration/chirpstack-gateway-bridge/chirpstack-gateway-bridge.toml
# See https://www.chirpstack.io/gateway-bridge/install/config/ for a full
# configuration example and documentation.
[integration.mqtt.auth.generic]
servers=[“tcp://mosquitto:1883”]
username=””
password=””
[integration.mqtt]
event_topic_template=”as923/gateway/{{ .GatewayID }}/event/{{ .EventType }}”
state_topic_template=”as923/gateway/{{ .GatewayID }}/state/{{ .StateType }}”
command_topic_template=”as923/gateway/{{ .GatewayID }}/command/#”

และแก้เพิ่มความถี่ให้ครบ 8 ช่องความถี่

pico /root/chirpstack-docker/configuration/chirpstack/region_as923.toml
หรือ
pico ~/chirpstack-docker/configuration/chirpstack/region_as923.toml

เพิ่มตรงด้านล่างสุดของไฟล์

[[regions.network.extra_channels]]
frequency=923600000
min_dr=0
max_dr=5

[[regions.network.extra_channels]]
frequency=923800000
min_dr=0
max_dr=5

[[regions.network.extra_channels]]
frequency=924000000
min_dr=0
max_dr=5

[[regions.network.extra_channels]]
frequency=924200000
min_dr=0
max_dr=5

[[regions.network.extra_channels]]
frequency=924400000
min_dr=0
max_dr=5

[[regions.network.extra_channels]]
frequency=924600000
min_dr=0
max_dr=5

เสร็จแล้วสั่งเริ่มสร้าง Container

cd ~/chirpstack-docker/
sudo docker-compose up -d

เรียกใช้ Chirp ที่ Port:8080
admin/admin

21.การจัดการ eMMC
ฺBPI จะ Boot จาก SDcard ถ้าเราเสียบ SDcard ไว้ หากไม่เสียบ BPI จะบูทด้วย eMMC

การลบ eMMC ไม่ให้บูทจาก eMMC

ให้ โหลดโปรแกรม aml_usb_burning_tool_V2_setup_v2.2.3.3.zip โดย คลิก แตกไฟล์จะได้ไฟล์ชื่อ V2_setup.exe ทำการติดตั้งบน PC ให้เรียบร้อย

ระหว่างติดตั้งโปรแกรมจะถามว่าจะติดตั้ง Driver ด้วยหรือไม่

ให้ติดตั้งด้วยเลย

เรียก USB Burning Tool
กด SW4 button ข้าง 40pin header เสียบสาย type-c usb เข้า PC

somsak@bananapim5:~$ sudo fdisk -l
Disk /dev/mmcblk0: 14.56 GiB, 15633219584 bytes, 30533632 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x56075e49

Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 8192 30212096 30203905 14.4G 83 Linux

Disk /dev/mmcblk1: 14.56 GiB, 15634268160 bytes, 30535680 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/mmcblk1boot0: 4 MiB, 4194304 bytes, 8192 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/mmcblk1boot1: 4 MiB, 4194304 bytes, 8192 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/zram0: 1.85 GiB, 1984507904 bytes, 484499 sectors
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

Disk /dev/zram1: 50 MiB, 52428800 bytes, 12800 sectors
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

หรือใช้ lsblk

pi@raspberrypi:~ $ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
mmcblk0 179:0 0 28.9G 0 disk
mmcblk0p1 179:1 0 256M 0 part /boot
mmcblk0p2 179:2 0 28.6G 0 part /
mmcblk1 179:32 0 14.6G 0 disk
mmcblk1boot0 179:64 0 4M 1 disk
mmcblk1boot1 179:96 0 4M 1 disk

21.1 ลบ eMMC อีกวิธี
lsblk ดูว่า eMMC ใช้ชื่ออะไร

somsak@bananapim5:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
mmcblk1 179:0 0 14.6G 0 disk
mqmmcblk1p1 179:1 0 14.4G 0 part /
mmcblk1boot0 179:32 0 4M 1 disk
mmcblk1boot1 179:64 0 4M 1 disk
zram0 252:0 0 1.8G 0 disk [SWAP]
zram1 252:1 0 50M 0 disk /var/log

เช็คก่อนว่า eMMC ใช้ชื่ออะไร /dev/mmcblk0 หรือ /dev/mmcblk1 แล้วสั่งคำสั่งดังต่อไปนี้ให้ตรงชื่อ eMMC

sudo dd if=/dev/zero of=/dev/mmcblk1 bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.00330902 s, 317 MB/s
sync

ก็จะล้าง eMMC

21.2ใช้ USB_Burning_Tool ลบ

กด SW4 เสียบสาย เรียกโปรแกรม USB_Burning_Tool เปิด Image (Android image) คลิก Erase Flash, Erase Bootloader แล้วคลิก Start
****ต้องทำให้ครบไม่นั้นปุ่ม start จะกดไม่ได้

หน้าจอขึ้น 7% Formatting ให้ดึงสายออก

23. ติดตั้ง influxdb V.2.X

sudo docker pull influxdb:2.1.1
sudo docker run -d --restart always --name=influxdb -p 8086:8086 -v influxdb:/var/lib/influxdb influxdb:2.1.1

ทดสอบ influx โดย

sudo docker exec -it influxdb influx

ทดสอบ Influx ผ่าน API

somsak@bananapim5:~$  curl localhost:8086/health
{"name":"influxdb", "message":"ready for queries and writes", "status":"pass", "checks":[], "version": "2.1.1", "commit": "657e1839de"}
s

ถ้าต้องการให้แสดงออกหน้าจอรูปแบบ Json ให้ส่งต่อไปที่คำสั่ง json_pp

somsak@bananapim5:~$ curl localhost:8086/health|json_pp
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 136 100 136 0 0 17000 0 --:--:-- --:--:-- --:--:-- 19428
{
"checks" : [],
"commit" : "657e1839de",
"message" : "ready for queries and writes",
"name" : "influxdb",
"status" : "pass",
"version" : "2.1.1"
}

ถ้าจะให้แสดง JSON แบบสีให้ติดตั้ง jq

sudo apt install jq

แล้วเรียกคำสั่งเช่น
curl localhost:8086/health|jq

somsak@bananapim5:~$ curl localhost:8086/health|jq
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 136 100 136 0 0 19428 0 --:--:-- --:--:-- --:--:-- 22666
{
"name": "influxdb",
"message": "ready for queries and writes",
"status": "pass",
"checks": [],
"version": "2.1.1",
"commit": "657e1839de"
}

แสดงชื่อ Bucket ออกมาทั้งหมด

somsak@bananapim5:~$ curl http://localhost:8086/api/v2/buckets  --header "Authorization: Token your_api_token"

เพิ่ม INTEGRATIONS ใน Application App1

คลิก ADD ตรงใต้รูป Influxdb

InfluxDB version * เลือก InfuxDB 2.x
API endpoint (write) * http://192.168.1.100:8086/api/v2/write
Organization * Influxdata
Bucket * tablerejeee
Token * ให้ Copy จาก Influx ซึ่งจะพูดถึงในหัวข้อต่อไป เรื่อง “เตรียม Influxdb สำหรับเก็บข้อมูล Sensor” โดยนำค่า Token จาก Influxdb มาป้อนตรงนี้

24.เตรียม Influxdb สำหรับเก็บข้อมูล Sensor

เปิด Influxdb http://192.168.1.100:8086

ครั้งแรกให้กำหนด Password ใหม่ เช่น
user :influx
password :influx123
Organization :Influxdata
Initial Bucket Name : ใส่ว่า system (เก็บระบบ system)

คลิก Quickstart

คลิก Data/Bucket เลือก +Create Bucket

ใส่ชื่อ tablerejeee แล้วคลิก Create

ไปที่ Data/API Token เลือก + Generate API Token เลือก ALL Access API Token (เพื่อความง่ายจึงเลือก Option นี้)

ใส่ Description เช่น tablerejeee

จะเห็น API Token ชื่อ tablerejeee ถูกสร้างขึ้น ให้คลิกที่ชื่อ tablerejeee

จะเห็น Token แสดงขึ้นที่หน้าจอ ให้ Copy to Clipboard แล้วนำไป update ใน Chirpstack ตรง Integration ของ Influxdb

ดูชื่อ Organization จาก Influxdb

คลิกรูปคน/Switch Oraganization

ดูชื่อ Bucket จาก Influxdb
Click Data/Buckets

แก้สองรอบ รอบแรกสร้าง

Organization: Influxdata
Bucket:tablerejeee
Token: Copy จาก influxdb

กำหนด database:tablerejeee

25. ทดสอบส่งข้อมูลด้วย Rejeee Temp & Humid Sensor

ถ้าเป็นรุ่นใหม่ Serial Port จะใช้ Driver CH341
Key ที่ใช้ เช่น
DevEUI CACBB8010000322Z
AppKey 11223344556677889900AABBCCDDEEFF

ดูจาก Sticker ที่แปะไว้ข้าง Sensor หรือใช้ โปรแกรม Rejeee Sensortool อ่าน

สร้าง Device ใต้ Application ใน Chirpstack ใช้สอง Key คือ DevEUI และ AppKey

ใช้ Decode แบบ Javascript ดังต่อไปนี้หากเป็น ChirpStack V.4

function decodeUplink(input) {
var obj = {};
var warnings = [];
obj.battery = (input.bytes[1]&0x1F);
obj.vol = (input.bytes[2]);
obj.temperature = (((input.bytes[4] & 0x80 ? input.bytes[4] - 0x100 : input.bytes[4]) << 8)
+
input.bytes[5]) / 10;
obj.humidity = input.bytes[7];
if (obj.temperature < -10) {
warnings.push("it's cold");
}
return {
data: obj,
warnings: warnings
};
}

หาก Chirpstack รับข้อมูลได้จะเห็น LoRaWAN Frame เช่น

Event Log จะเห็นค่า Temp, Humid, Vol และ Voltage ของ Battery

26.เริ่มดูข้อมูลใน Influxdb

เปิด Data/Buckets

ให้ click ที่ tablerejeee จะเห็นหน้าจอถัดไป ให้คลิก From ชื่อ tablerejeee หากการส่งข้อมูลจาก Chirpstack สามารถเขียนลง Influxdb ได้ถูกต้องจะเห็น รายการ Mesurement ขึ้นมา 5 บรรทัดตามภาพ หากไม่มีขึ้นมาแสดงว่าข้อมูลยังมาไม่ถึง Influxdb ให้ตรวจเช็คความถูกต้องอีกครั้ง

ให้ลองเลือกบรรทัด device_frmpaload_data_temp แล้วคลิก Submit

จะเห็นข้อมูลอุณหภูมิแสดงเป็น Graph เส้นตรงตามภาพตัวอย่าง

อาจจะสร้าง Dashboard ตามภาพด้วย Influxdbได้

ผู้ใช้งานสามารถศึกษาการทำ Dashboard ด้วยการใช้โปรแกรม Grafana ได้อีกเช่นกัน เนื่องจาก Grafana จะมีลูกเล่นให้มากกว่า Dashboard ของ Influxdb

27. ติดตั้ง Grafana บน docker

sudo docker volume create grafana-storage
sudo docker run -d --restart always -p 3000:3000 --name=grafana -v grafana-storage:/var/lib/grafana grafana/grafana

เรียกด้วย http://IP:3000

login ด้วย admin/admin
Save Password เป็นตัวใหม่ grafana ครั้งหน้าให้ login ใช้ admin/grafana

ติดตั้ง Plugin ก่อนอื่นเข้า shell ของ Container Grafana ก่อน ดูชื่อ Container จากเวป portainer คอลัมภ์แรก

docker exec -it <container_name> /bin/bash
docker exec -it blissful_lumiere /bin/bash

https://grafana.com/grafana/plugins/?type=panel

เช่น

https://grafana.com/grafana/plugins/pr0ps-trackmap-panel/?tab=installation

grafana-cli plugins install pr0ps-trackmap-panel
bash-5.1$ grafana-cli plugins install pr0ps-trackmap-panel
? Downloaded pr0ps-trackmap-panel v2.1.2 zip successfully
Please restart Grafana after installing plugins. Refer to Grafana documentation for instructions if necessary.

เพิ่ม Datasource อ่าน Influxdb 2.X

Basic Authen Detail
User: influx
Password: influx123

Influxdb Detial
Oraganization: Influxdata
Token: Copy มาจาก Influxdb API token
Default bucket: อะไรสัก bucket หนึ่ง ตอนเรียกใช้กำหนดได้ใหม่

คลิก Save & Test ถ้า OK จะขึ้นสีเขียว 1 bucket found

29. การสร้าง Dashboard Grafana

Copy Query ใน Influxdb ไปใส่ใน Grafana

กด Query Inspector

29. เปลี่ยน Legend ให้สั้นลง

1- Select Add overwrite on the right side at the bottom
2- Selection option “Fields with name”
3- Select the field e.g. in your case select Value 1
4- Then click on “Add overwrite property”
5- Select Standard options → Display name
6- Give your custom name here e-g- CPU 1
7- Click Save and Apply on the top right corner

30. ติดตั้ง NodeRed บน Docker

ref:https://nodered.org/docs/getting-started/docker

docker run -d --restart always -it -p 1880:1880 -v node_red_data:/data --name mynodered nodered/node-red

เรียกใช้ http://IP:1880 admin/admin

ลงแล้วจะเหลือเนื้อที่ eMMC ใช้งานประมาณ 6.5G

somsak@bananapim5:~$ df
Filesystem 1K-blocks Used Available Use% Mounted on
udev 1795524 0 1795524 0% /dev
tmpfs 387600 6908 380692 2% /run
/dev/mmcblk1p1 14784632 7054060 7503632 49% /
tmpfs 1937992 0 1937992 0% /dev/shm
tmpfs 5120 4 5116 1% /run/lock
tmpfs 1937992 4 1937988 1% /tmp
/dev/zram1 49560 3036 42940 7% /var/log
tmpfs 387596 52 387544 1% /run/user/112
tmpfs 387596 48 387548 1% /run/user/1000

40. Clone

sudo dd if=/dev/mmcblk0 of=/dev/mmcblk1 bs=10MB status=progress

41. eMMC Setup
- Erase eMMC /dev/mmcblkX
- Write OS image to micro SD card
- Boot Banana Pi M5 from micro SD card
- Write OS image to eMMC (BPI Tools)
- So Linux installation is a two-stage process

42. เช็ค speed HD

sudo hdparm -t — direct /dev/mmcblk0

43. Armbian

เอา brltty ออก

somsak@bananapim5:~$  sudo apt-get remove --auto-remove brltty 
[sudo] password for somsak:
Reading package lists… Done
Building dependency tree… Done
Reading state information… Done
The following packages will be REMOVED:
brltty brltty-x11
0 upgraded, 0 newly installed, 2 to remove and 0 not upgraded.
After this operation, 6,589 kB disk space will be freed.
Do you want to continue? [Y/n]
(Reading database … 147424 files and directories currently installed.)
Removing brltty-x11 (6.3+dfsg-1+deb11u1) …
Removing brltty (6.3+dfsg-1+deb11u1) …
Processing triggers for man-db (2.9.4–2) …

44. Mount USB Drive

mount /dev/sda1 /mnt

copy image ไป EMMC

bpi-copy /mnt/full.img /dev/mmcblk1
bpi-copy(v1.3.4(github)), bananapi image & disk tools

Usage: bpi-copy [OPTIONS]...
bpi-copy [ --help | -v | --version ]
bpi-copy IMGFILE
bpi-copy IMGDIR
bpi-copy IMGFILE DEVICE
bpi-copy DEVICE IMGFILE

Warning: Try to write full.img to BOOTDISK /dev/mmcblk1
==============================================================
Fri 02 Dec 2022 12:15:46 PM +07
*** start COPY (blue led on ) .....
INFO: /dev/mmcblk1 : SD/eMMC !!
umount device: /dev/mmcblk1
==============================================================
IMGFILE=full.img
==============================================================
img
1491+0 records in15.9MiB/s] [ <=> ]
1491+0 records out
14.6GiB 0:22:43 [10.9MiB/s] [ <=> ]
15634268160 bytes (16 GB, 15 GiB) copied, 1363.84 s, 11.5 MB/s
0+238560 records in
0+238560 records out
*** end COPY (blue led off) .....
Fri 02 Dec 2022 12:38:34 PM +07
==============================================================
RUNTIME 22:48
OK!! You can remove the BOOTDISK /dev/mmcblk1 now!!

99. สรุป username และ password ที่ตั้งไว้ตามบทความนี้

portainer  9000 admin   m2mlorawan123
Chirpstack 8080 admin admin
influxdb 8086 influx influx123
grafana 3000 admin grafana
nodered 1880 admin admin
sshed 22 somsak lorawan123
dragino 8000 admin dragino

ปัญญาหาที่พบ

  1. Boot ตรงจาก SSD ที่ต่อผ่าน USB ไม่ได้
  2. การใช้ Wifi หรือ BT ต้องซื้อ Expansion board มาติดเพิ่ม

Ref.

1.https://wiki.banana-pi.org/Getting_Started_with_M5/M2Pro#Introduction

2.https://www.youtube.com/watch?v=D-UidaSiyeQ

3.https://github.com/bpi-sinovoip/bpi-tools

4.https://forum.banana-pi.org/t/how-to-install-ubuntu-server-20-04-to-m5-emmc/13389/4

5. Armbian https://www.youtube.com/watch?v=i9KyATAmfwQ&t=521s

6.https://fictionbecomesfact.com/

--

--

Somsak Lima
Somsak Lima

Written by Somsak Lima

สนับสนุนและส่งเสริมให้ผู้สนใจสามารถใช้งานเทคโนโลยี LoRa และ LoRaWAN ได้ โดยนำความรู้ที่ได้ไปต่อยอดเพื่อใช้งาน

No responses yet