ใช้ Banana Pi M5 แทน Raspberry Pi 4 (ลง Armbian)
ปัญหาการหาซื้อ 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
ปัญญาหาที่พบ
- Boot ตรงจาก SSD ที่ต่อผ่าน USB ไม่ได้
- การใช้ 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