User:DBrant (WMF)/Raspberry Pi

A few notes for working with the Raspberry Pi.

Run headless

 * Write image onto the SD card.
 * Place an empty file called "ssh" into the /boot partition.
 * Place a file called "wpa_supplicant.conf" into the /boot partition:

country=us update_config=1 ctrl_interface=/var/run/wpa_supplicant network={ ssid="" psk="" }

Power it on, and ascertain its IP address from your router. SSH into it, using the default credentials (user: pi, password: raspberry).

Reduce power usage
Turn off HDMI (can be put in /etc/rc.local):

sudo tvservice --off

Disable WiFi and/or Bluetooth (if using Ethernet connection). Put these lines at the bottom of /boot/config.txt

dtoverlay=disable-wifi dtoverlay=disable-bt

… or for Raspberry Pi 3:

dtoverlay=pi3-disable-wifi dtoverlay=pi3-disable-bt

Cut power to USB chip (if not using any peripherals) (can be put in /etc/rc.local):

echo 0 | sudo tee /sys/devices/platform/soc/3f980000.usb/buspower >/dev/null

...or for Pi Zero:

echo 0 | sudo tee /sys/devices/platform/soc/3f980000.usb/buspower >/dev/null

Disable the PWR and ACT LEDs: Add these lines to /boot/config.txt:

dtparam=act_led_trigger=none dtparam=act_led_activelow=off dtparam=pwr_led_trigger=none dtparam=pwr_led_activelow=off

...or for Pi Zero:

dtparam=act_led_trigger=none dtparam=act_led_activelow=on

Run script(s) on startup

 * Add line(s) to /etc/rc.local
 * If it’s a long-running script, or continuously-running, then make sure to put an ampersand at the end of the line, so that the boot process can continue.

If you need to diagnose why a certain script failed during startup, you can redirect stdio for the commands that are executed in rc.local by adding the following at the top:

exec 1>/tmp/rc.local.log 2>&1 set -x

See/kill background processes

 * To see all processes: ps aux
 * To kill one of them: sudo kill [pid]

Share folder via NFS
Install packages: sudo apt-get install nfs-kernel-server portmap nfs-common

Add line(s) to /etc/exports: /folder/path *(rw,all_squash,insecure,async,no_subtree_check,anonuid=1000,anongid=1000)

Then do the following: sudo exportfs -ra

And for good measure: sudo /etc/init.d/nfs-kernel-server restart

Set the network interface to a static IP

 * Edit the file /etc/dhcpcd.conf
 * The file contains example lines for setting a static IP, gateway, DNS server, etc.

Automatically mount USB drive(s) on boot
When the Raspberry Pi is configured to boot into the desktop GUI, it will auto-mount USB drives, mounting them into the /media/pi directory, with the mount points named after the volume label of the drive. However, if the Pi is configured to boot into the console only (not desktop), then it will not auto-mount USB drives, and they will need to be added to /etc/fstab:

/dev/sda1 /media/path_to_mount vfat defaults,auto,users,rw,nofail,umask=000 0 0

(The umask=000 parameter enables write access to the entire disk.)

Basic GPIO in Python
import RPi.GPIO as GPIO GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(24, GPIO.OUT) try: if GPIO.input(23): GPIO.output(24, True) except KeyboardInterrupt: print('interrupted.') finally: GPIO.cleanup
 * 1) input (pulled up):
 * 1) output: