Jump to content

Rasberry Pi: Difference between revisions

From Smithnet Wiki
 
(29 intermediate revisions by the same user not shown)
Line 5: Line 5:
  cat /proc/device-tree/model
  cat /proc/device-tree/model


* [https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#gpio-and-the-40-pin-header GPIO]
Hardware info:
* AV Connector:
** 1 (tip): L Audio
** 2: R Audio
** 3: Ground
** Sleeve: Composite Video.
* [https://www.raspberrypi.com/documentation/computers/raspberry-pi.html Boards]
* [https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#gpio GPIO Header]


== Rasbery Pi OS ==
== Rasbery Pi OS ==
Line 15: Line 22:


Upgrade:
Upgrade:
  apt update && sudo apt upgrade -y
  apt update
 
apt list --upgradeable
=== Go ===
  apt upgrade -y
 
Cross compile on amd64:
CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=7 go build myprog.go
 
== GPIO ==
 
Raspberry Pi OS versions use the newer gpiod subsystem (which interacts with /dev/gpiochip)
 
python:
  apt install python3-gpiozero -y
 
go: periph.io


=== Apache Web Server ===
=== Apache Web Server ===


  apt install apache2
  apt install apache2 -y


* Configuration: /etc/apache2
* Configuration: /etc/apache2
Line 40: Line 34:


=== Composite Video ===
=== Composite Video ===
Note: CVBS is on sleve; Gnd is ring 3. It is enabled when no HDMI monitor is connected.


In /boot/firmware/config.txt:
In /boot/firmware/config.txt:
Line 56: Line 48:
  margin_left
  margin_left
  margin_right
  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 [https://libgpiod.readthedocs.io/en/master/ documentation].
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
In Go, use: periph.io


=== Mail ===
=== Mail ===
Line 63: Line 88:
  apt install mutt
  apt install mutt


Mail spool directory (eg NFS mount from server):
Mount mail directory from server:
  /var/mail
  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:
Exim is the default MTA:
Line 72: Line 99:


Monitor logs:
Monitor logs:
  /var/log/exim4/mainlog
  tail -f /var/log/exim4/mainlog


=== Swap ===
=== NFS Automounter ===
free -m
swapon --show


Add filesystem swap:
  apt install autofs nfs-common -y
  swapoff -a
dd if=/dev/zero of=/swapfile bs=1M count=1024
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile


Add to /etc/fstab:
To allow remove mounts to be accessed under /net/<server>/<export>, edit /etc/auto.master and enable the host map:
  /swapfile none swap sw 0 0
  /net    -hosts --timeout=60


To see current zram configuration:
  systemctl enable autofs
zramctl
  systemctl restart autofs
zramctl --output-all /dev/zram0
To resize:
swapoff /dev/zram0
zramctl --reset /dev/zram0
zramctl --find --size 512M
  mkswap /dev/zram0
  swapon /dev/zram0


=== NFS Automounter ===
To mount remote mail directory:


  apt install autofs nfs-common -y
Create the new /etc/auto.master.d/mail.autofs file:
  /-    /etc/auto.direct    --timeout=60


Edit /etc/auto.master and enable the host map:
Create the /etc/auto.direct file:
  /net   -hosts --timeout=60
  /var/mail   -fstype=nfs,rw,soft,intr,tcp,rsize=8192,wsize=8192    mailhost:/var/spool/mail


systemctl enable autofs
  systemctl restart autofs
  systemctl restart autofs


Line 117: 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 ===
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 ===
=== 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.