Rasberry Pi: Difference between revisions
NickPGSmith (talk | contribs) |
NickPGSmith (talk | contribs) |
||
| (11 intermediate revisions by the same user not shown) | |||
| Line 22: | Line 22: | ||
Upgrade: | Upgrade: | ||
apt update | 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/ | 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 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=/ | dd if=/dev/zero of=/var/swap bs=1M count=1024 | ||
chmod 600 / | chmod 600 /var/swap | ||
mkswap / | mkswap /var/swap | ||
swapon / | swapon /var/swap | ||
Add to /etc/fstab: | Add to /etc/fstab: | ||
/ | /var/swap none swap sw 0 0 | ||
=== Temperature === | === Temperature === | ||
Latest revision as of 20:32, 30 May 2026
Device
- Rasberry Pi 3B ("Rev 1.2")
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
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.