Skip to content

Raspberry Pi Zero W

Thomas Amberg edited this page Oct 20, 2024 · 148 revisions

Buy

Setup

Create a bootable SD card

Write the Raspberry Pi OS IMG to the SD Card

Use the Raspberry Pi Imager tool to create a bootable SD card

  • Install https://raspberrypi.org/downloads/ (MacOS, Windows, Linux)
  • Select the Raspberry Pi Zero as your device (which is a Pi Zero W)
  • Select the Raspberry Pi OS (other) > (Legacy, 32-bit) Lite image
  • Chose the SD card as your storage and click Next > Edit Settings
  • On the General tab, set a hostname (e.g. raspberrypi.local)
  • Then, create a username (e.g. pi) and set a password
  • Also configure the wireless LAN SSID and password
  • Keep the default GB as your wireless LAN country
  • On the Services tab, enable SSH and Save
  • Say Yes, to apply OS customization
  • Wait for the SD card to be ready
  • Eject the SD card from your computer
  • Insert it into the Pi, power it up and wait
  • After ~5 minutes, try to access your Pi.
Legacy instructions to configure and access a Pi via USB.

Create a bootable SD card (legacy)

Write the Raspberry Pi OS IMG to the SD Card (legacy)

Use the Raspberry Pi Imager tool to create a bootable SD card

Enable SSH (legacy)

Create an ssh marker file on the SD card

  • The following file will enable sshd, the SSH daemon, on the Raspberry Pi
  • Navigate to the disk drive named boot and create an empty file named ssh with
    $ cd /Volumes/boot
    $ touch ssh
    or on Windows, assuming the boot drive is E:
    C:> E:
    E:> type nul > ssh
  • Note: once sshd is enabled, the Raspberry Pi will remove the ssh file

Enable RNDIS (optional)

Edit configuration files on the SD card

  • The following edits convert the Raspberry into a RNDIS USB device
  • Open config.txt and append dtoverlay=dwc2
    $ cd /Volumes/boot
    $ open config.txt
    $ cat config.txt
    …
    dtoverlay=dwc2
  • Open cmdline.txt and add modules-load=dwc2,g_ether after rootwait
    $ open cmdline.txt
    $ cat cmdline.txt
    … rootwait modules-load=dwc2,g_ether …

Configure Wi-Fi (legacy)

  • On the disk drive named boot, create a file named wpa_supplicant.conf
    $ cd /Volumes/boot
    $ nano wpa_supplicant.conf
  • For file content and options, see Configure Wi-Fi

Connect via USB (legacy)

  • Insert the SD card into the Raspberry Pi (it is the Pi's "hard disk")
  • Connect the USB cable, use the left USB connector on the Raspberry Pi

Get USB access from Windows (optional)

Install RNDIS driver on Windows

Install Bonjour 3.x on Windows

  • Download iTunes installer https://www.apple.com/itunes/download/win64
  • Unpack the installer EXE/ZIP, find the Bonjour64.msi installer inside
  • Run Bonjour64.msi, select Bonjour uninstall old version
  • Run Bonjour64.msi, select Bonjour install 3.0

Share Internet to RNDIS

  • Wi-Fi > Properties > Sharing > [✓] Allow

Get USB access from Mac (optional)

Share Internet to RNDIS

  • System Preferences > Sharing > [✓] Internet
  • Sharing > Share your connection from: Wi-Fi to computers using RNDIS Ethernet Gadget

Get USB access from Linux (optional)

Share Internet to RNDIS

Find your Pi

To find your Pi Zero via USB (if Internet Sharing is enabled), type

$ dns-sd -G v4 raspberrypi.local

Or, use ifconfig (or ipconfig on Windows) you find the local IP prefix, e.g. 192.168.0.

$ ifconfig
en0: flags…
    ether…
    inet6…
    inet 192.168.0.23
    …

Then use nmap to scan the subnet, e.g.

Note: make sure port scanning is fine with the local network admin, e.g. at FHNW it's not allowed.

$ nmap 192.168.0.0-255 -p22
Nmap scan report for 192.168.0.42
…
22/tcp open  ssh

Access your Pi

With ssh (or PuTTY on Windows) and the user (e.g. pi), hostname (e.g. raspberrypi) and password you set above:

Or, if you know the local IP address of the device, e.g. 192.168.0.42:

Or via FTDI Serial (up to Pi 2, or with this fix for Pi 3).

3V3 (!), Pin 6 = GND, 8 = TX, 10 = RX

Remotely access your Pi

Use a relay service like Ngrok, Pagekite or Yaler.net.

Configure Wi-Fi

https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md

Open the Wi-Fi config file wpa_supplicant.conf (or create it on the SD card)

$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

The file should contain the following content (using your credentials)

country=UK
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="MY_SSID"
    psk="MY_PASSWORD"
    key_mgmt=WPA-PSK
}

Consider using the hashed version of psk, see output of

$ sudo wpa_passphrase 'MY_SSID' 'MY_PASSWORD'

To activate the new config, type

$ sudo ifconfig wlan0 up

Configure interface priorities

To display the priority metric, use

$ route -n

To change the priority metric (here wlan0 before usb0), type

$ sudo nano /etc/dhcpcd.conf

interface wlan0
    metric 200

interface usb0
    metric 300

Get the MAC Address

$ cat /sys/class/net/wlan0/address

Install git

Install the git client

$ sudo apt-get update
$ sudo apt-get install git
$ git

Configure git user

$ git config --global user.email "USER_EMAIL"
$ git config --global user.name "USER_NAME"

Create an SSH key

$ ssh-keygen -t rsa -b 4096 -C "USER_EMAIL"
$ eval "$(ssh-agent -s)"
$ cat ~/.ssh/id_rsa.pub

Register the key

Store the key

$ sudo apt-get install keychain
$ keychain ~/.ssh/id_rsa
$ . ~/.keychain/$HOSTNAME-sh

(Until next reboot)

Tools

SCP

Copy a file from the computer to the Pi

$ scp -P 22 LOCAL_FILE pi@RASPI_IP:RASPI_PATH

Copy a file from the Pi to the computer

$ scp -P 22 pi@RASPI_IP:RASPI_FILE LOCAL_PATH

Code

Java

Install

Libraries & Examples

Javascript with Node.js

Install Node.js

Install Noble (BLE Central)

  • Update apt-get with
    $ sudo apt-get update
  • Install prerequisites with
    $ sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
  • Install the abandonware fork of noble with
    $ npm install @abandonware/noble

Libraries & Examples

Python

C

Pinout

Resources