Jump to content

Rasberry Pi: Difference between revisions

From Smithnet Wiki
 
(12 intermediate revisions by the same user not shown)
Line 22: Line 22:


Upgrade:
Upgrade:
  apt update && sudo apt upgrade -y
  apt update
apt list --upgradeable
apt upgrade -y


=== Apache Web Server ===
=== Apache Web Server ===
Line 51: Line 53:
Because of limited RAM, best to cross compile on a more powerful system:
Because of limited RAM, best to cross compile on a more powerful system:
  CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=7 go build myprog.go
  CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=7 go build myprog.go
Or install ARMv6 release:
wget https://go.dev/dl/go1.26.3.linux-armv6l.tar.gz
tar -C /usr/local -xzf go1.26.3.linux-armv6l.tar.gz
Set environment variables:
PATH=$PATH:/usr/local/go/bin
GOPATH=$HOME/go


=== GPIO Development ===
=== GPIO Development ===


Raspberry Pi OS use the newer gpiod subsystem (which interacts with /dev/gpiochip).
Raspberry Pi OS use the newer gpiod subsystem (which interacts with /dev/gpiochip0).
 
In C++:
apt install libgpiod-dev gpiod -y
g++ -O3 prog.cpp -o prog -lgpiodcxx
 
See [https://libgpiod.readthedocs.io/en/master/ documentation].


In Python, use:
In Python, use:
apt install python3-dev -y
for python gpiod bindings. See [https://pypi.org/project/gpiod/ documentation].
Or the abstraction:
  apt install python3-gpiozero -y
  apt install python3-gpiozero -y


Line 84: Line 105:
  apt install autofs nfs-common -y
  apt install autofs nfs-common -y


Edit /etc/auto.master and enable the host map:
To allow remove mounts to be accessed under /net/<server>/<export>, edit /etc/auto.master and enable the host map:
  /net    -hosts --timeout=60
  /net    -hosts --timeout=60


Line 108: Line 129:
  timedatectl status
  timedatectl status
  timedatectl timesync-status
  timedatectl timesync-status
=== Service ===
Create a service file nano /etc/systemd/system/temp-logger.service:
[Unit]
Description=CPU Temperature Logger to HTML
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/temp_logger.sh
# Run as root or www-data depending on who owns your /var/www/html directory
User=root
Create a systemd timer /etc/systemd/system/temp-logger.timer:
[Unit]
Description=Run Pi Temperature Logger every 5 minutes
[Timer]
# Run 5 minutes after boot-up
OnBootSec=5min
# Run every 5 minutes relative to when the timer was started
OnUnitActiveSec=5min
# Ensures precision alignment to the clock wall if desired (optional)
AccuracySec=1s
[Install]
WantedBy=timers.target
Reload systemd,
systemctl daemon-reload
systemctl enable --now temp-logger.timer
=== SSH ===
Copy key (and generate ~/.ssh) from client tp pi:
ssh-copy-id [email protected]


=== Swap ===
=== Swap ===
  free -m
  free -m
  swapon --show
  swapon --show
To see current zram configuration:
zramctl
zramctl --output-all /dev/zram0
Configure in /etc/rpi/swap.conf
[Zram]
FixedSizeMiB=512


Add filesystem swap:
Add filesystem swap:
  swapoff -a
  swapoff -a
  dd if=/dev/zero of=/swapfile bs=1M count=1024
  dd if=/dev/zero of=/var/swap bs=1M count=1024
  chmod 600 /swapfile
  chmod 600 /var/swap
  mkswap /swapfile
  mkswap /var/swap
  swapon /swapfile
  swapon /var/swap


Add to /etc/fstab:
Add to /etc/fstab:
  /swapfile none swap sw 0 0
  /var/swap none swap sw 0 0
 
To see current zram configuration:
zramctl
zramctl --output-all /dev/zram0
To resize:
swapoff /dev/zram0
zramctl --reset /dev/zram0
zramctl --find --size 512M
mkswap /dev/zram0
swapon /dev/zram0


=== Temperature ===
=== Temperature ===

Latest revision as of 20:32, 30 May 2026

Device

cat /proc/device-tree/model

Hardware info:

  • AV Connector:
    • 1 (tip): L Audio
    • 2: R Audio
    • 3: Ground
    • Sleeve: Composite Video.
  • Boards
  • GPIO Header

Rasbery Pi OS

See /boot/firmware/config.txt.

Command line configuration program:

raspi-config

Upgrade:

apt update
apt list --upgradeable
apt upgrade -y

Apache Web Server

apt install apache2 -y
  • Configuration: /etc/apache2
  • Serve from: /var/www/html

Composite Video

In /boot/firmware/config.txt:

enable_tvout=1
dtoverlay=vc4-kms-v3d,composite

Ensure hdmi_force_hotplug=1 is commented out or set to 0.

In /boot/firmware/cmdline.txt, either:

vc4.tv_norm=PAL
vc4.tv_norm=NTSC

To control overscan, see settings:

margin_left
margin_right

Go Development

Because of limited RAM, best to cross compile on a more powerful system:

CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=7 go build myprog.go

Or install ARMv6 release:

wget https://go.dev/dl/go1.26.3.linux-armv6l.tar.gz
tar -C /usr/local -xzf go1.26.3.linux-armv6l.tar.gz

Set environment variables:

PATH=$PATH:/usr/local/go/bin
GOPATH=$HOME/go

GPIO Development

Raspberry Pi OS use the newer gpiod subsystem (which interacts with /dev/gpiochip0).

In C++:

apt install libgpiod-dev gpiod -y
g++ -O3 prog.cpp -o prog -lgpiodcxx

See documentation.

In Python, use:

apt install python3-dev -y

for python gpiod bindings. See documentation.

Or the abstraction:

apt install python3-gpiozero -y

In Go, use: periph.io

Mail

MUA:

apt install bsd-mailx
apt install mutt

Mount mail directory from server:

mailhost:/var/spool/mail    /var/mail    nfs    rw,nofail,noatime,_netdev,soft,intr    0    0

Or use automounter (see other section). Note: UID/GID must match.

Exim is the default MTA:

dpkg-reconfigure exim4-config
update-exim4.conf
systemctl restart exim4

Monitor logs:

tail -f /var/log/exim4/mainlog

NFS Automounter

apt install autofs nfs-common -y

To allow remove mounts to be accessed under /net/<server>/<export>, edit /etc/auto.master and enable the host map:

/net    -hosts --timeout=60
systemctl enable autofs
systemctl restart autofs

To mount remote mail directory:

Create the new /etc/auto.master.d/mail.autofs file:

/-    /etc/auto.direct    --timeout=60

Create the /etc/auto.direct file:

/var/mail    -fstype=nfs,rw,soft,intr,tcp,rsize=8192,wsize=8192    mailhost:/var/spool/mail
systemctl restart autofs

NTP Client

apt install systemd-timesyncd -y

Edit /etc/systemd/timesyncd.conf and set NTP parameter

systemctl restart systemd-timesyncd
timedatectl status
timedatectl timesync-status

Service

Create a service file nano /etc/systemd/system/temp-logger.service:

[Unit]
Description=CPU Temperature Logger to HTML
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/temp_logger.sh
# Run as root or www-data depending on who owns your /var/www/html directory
User=root

Create a systemd timer /etc/systemd/system/temp-logger.timer:

[Unit]
Description=Run Pi Temperature Logger every 5 minutes

[Timer]
# Run 5 minutes after boot-up
OnBootSec=5min
# Run every 5 minutes relative to when the timer was started
OnUnitActiveSec=5min
# Ensures precision alignment to the clock wall if desired (optional)
AccuracySec=1s

[Install]
WantedBy=timers.target

Reload systemd,

systemctl daemon-reload
systemctl enable --now temp-logger.timer

SSH

Copy key (and generate ~/.ssh) from client tp pi:

ssh-copy-id [email protected]

Swap

free -m
swapon --show

To see current zram configuration:

zramctl 
zramctl --output-all /dev/zram0

Configure in /etc/rpi/swap.conf

[Zram]
FixedSizeMiB=512

Add filesystem swap:

swapoff -a
dd if=/dev/zero of=/var/swap bs=1M count=1024
chmod 600 /var/swap
mkswap /var/swap
swapon /var/swap

Add to /etc/fstab:

/var/swap none swap sw 0 0

Temperature

echo "scale=2; $(cat /sys/class/thermal/thermal_zone0/temp) / 1000" | bc

CPU Core throttling above 80 C.