merge
This commit is contained in:
@@ -225,3 +225,4 @@ cython_debug/
|
||||
# PyPI configuration file
|
||||
.pypirc
|
||||
|
||||
*.html
|
||||
|
||||
@@ -13,6 +13,7 @@ Scripts and documentation for setting up a Raspberry Pi (Zero W 1 or 2) for use
|
||||
- [Starting on Raspberry Pi Zero](https://reykjavik.instructure.com/courses/6589/pages/starting-on-raspberry-pi-zero-w)
|
||||
|
||||
## References and Links
|
||||
- [Sparkfun GPIO pinout](https://cdn.sparkfun.com/assets/learn_tutorials/6/7/6/PiZero_1.pdf)
|
||||
- [Guide to creating ssh keys](https://pimylifeup.com/raspberry-pi-ssh-keys/) Of note, this guide is a little dated as it suggests using RSA keys and many people are moving toward EDCSA keys.
|
||||
- [Raspberry Pi Connect](https://connect.raspberrypi.com)
|
||||
- [Setting up Raspberry Pi Connect](https://www.raspberrypi.com/documentation/services/connect.html)
|
||||
@@ -21,6 +22,7 @@ Scripts and documentation for setting up a Raspberry Pi (Zero W 1 or 2) for use
|
||||
- [Turning your Raspberry Pi Zero into a USB Gadget](https://learn.adafruit.com/turning-your-raspberry-pi-zero-into-a-usb-gadget/serial-gadget) Official Adafruit guide to gadget mode to allow the USB port to be used as a serial console to connect to it. We had trouble getting it to work in 2026 due to some changes in Raspberry Pi OS.
|
||||
- [Python gpiozero library](https://gpiozero.readthedocs.io/en/stable/) a simple interface for working with GPIO devices
|
||||
- [CircuitPython Libraries on Linux and Raspberry Pi](https://learn.adafruit.com/circuitpython-on-raspberrypi-linux/installing-circuitpython-on-raspberry-pi) This is one option for GPIO, I2C, SPI, and PWM access in python.
|
||||
- [Comparing Rasbperry Pi python interfaces](https://raspberry.tips/en/raspberrypi-tutorials/raspberry-pi-gpio-python)
|
||||
|
||||
## For the Future
|
||||
- [Setting up Zeroconf to use local names (.local) to access your Pi](https://learn.adafruit.com/bonjour-zeroconf-networking-for-windows-and-linux): this does not work on iot-research because multicast and MDNS are broken.
|
||||
|
||||
+29
-1
@@ -2,10 +2,32 @@
|
||||
# Adapted from
|
||||
# "Using OTG mode on Raspberry Pi SBCs"
|
||||
# https://pip-assets.raspberrypi.com/categories/685-app-notes-guides-whitepapers/documents/RP-009276-WP/Using-OTG-mode-on-Raspberry-Pi-SBCs
|
||||
|
||||
# This script only works if you are running it as root
|
||||
if [ $(id -u) -ne 0 ]; then
|
||||
echo "Please run as root or use sudo"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
# Is the dwc2 overlay installed? Nothing will work if it isn't.
|
||||
if lsmod | grep -q "dwc2"; then
|
||||
systemd-cat -t gadget.sh -p info echo "DWC2 module loaded, setting up OTG gadget serial and ethernet"
|
||||
else
|
||||
systemd-cat -t gadget.sh -p warning echo "DWC2 module missing. Aborting OTG setup."
|
||||
systemctl disable serial-getty@ttyGS0.service
|
||||
exit 1
|
||||
fi
|
||||
|
||||
sudo modprobe libcomposite
|
||||
cd /sys/kernel/config/usb_gadget
|
||||
if [ -d "MyGadget" ]; then
|
||||
systemd-cat -t gadget.sh -p warning echo "MyGadget already exists. Aborting OTG setup."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Create our new gadget
|
||||
sudo mkdir MyGadget
|
||||
mkdir MyGadget
|
||||
cd MyGadget
|
||||
# Add some boilerplate data that the gadget needs
|
||||
echo 0x1d6b > idVendor # Linux Foundation’s USB VID. Replace with your own VID if required
|
||||
@@ -30,6 +52,7 @@ echo "Config 1" > configs/c.1/strings/0x409/configuration
|
||||
### Remember to create the storage block device first
|
||||
## cd /root
|
||||
### Example: Make a 256 MB file to act as "USB stick"
|
||||
## Only create it once or it will delete the previous content
|
||||
## sudo dd if=/dev/zero of=drive.bin bs=1M count=256
|
||||
### Create a VFAT file system on the backing store
|
||||
## sudo mkfs.vfat drive.bin
|
||||
@@ -45,9 +68,14 @@ mkdir functions/acm.usb0
|
||||
ln -s functions/acm.usb0 configs/c.1/
|
||||
|
||||
## Ethernet (RNDIS and ECM)
|
||||
## Of note, this may cause the IP to show up as 127.0.0.1
|
||||
## and wireless to suddenly fail to connect
|
||||
mkdir functions/ecm.usb0
|
||||
ln -s functions/ecm.usb0 configs/c.1/
|
||||
|
||||
## USB Device Controller update
|
||||
UDC=`ls /sys/class/udc`
|
||||
echo $UDC > UDC
|
||||
|
||||
# Enable the gettys
|
||||
systemctl enable serial-getty@ttyGS0.service
|
||||
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
# Initial connection to the Raspberry Pi
|
||||
Now that you have an image with ssh and Raspberry Pi connect on your SD, you can connect to the pi
|
||||
|
||||
|
||||
## Connecting using Raspberry Pi Connect
|
||||
1. Login to https://connect.raspberrypi.com if you haven't already
|
||||
1. Look at the list of devices, find the one you want, and click on "Connect"
|
||||

|
||||
1. A remote shell window will pop up
|
||||

|
||||
@@ -1,49 +1,56 @@
|
||||
# Gadget Mode to setup a serial connection over USB
|
||||
Prepare Raspberry Pi OS connection over a microUSB serial cable
|
||||
|
||||
Important: You will want to disable the serial console on RX/TX if you are trying to use that serial port for communicating with other devices.
|
||||
|
||||
Based upon Adafruit guide: https://learn.adafruit.com/turning-your-raspberry-pi-zero-into-a-usb-gadget/serial-gadget:
|
||||
The author discovered the guide was out of date, consulted the [2025 Raspberry Pi whitepaper on OTG](https://pip-assets.raspberrypi.com/categories/685-app-notes-guides-whitepapers/documents/RP-009276-WP/Using-OTG-mode-on-Raspberry-Pi-SBCs), found additional errors, and was finally able to correct them thanks to this blog https://www.isticktoit.net/?p=1383
|
||||
|
||||
## Important :
|
||||
- **Using the Gadget Mode will make the usb port unable to connect to a mouse or keyboard!!!** You will need to disable it make them work again.
|
||||
- You will want to disable the serial console on RX/TX in `raspi-config` if you are trying to use that serial port for communicating with other devices.
|
||||
|
||||
|
||||
## Procedure
|
||||
|
||||
Make sure you have your USB cable plugged into the left port **USB** and not the right port marked **PWR**.
|
||||
1. Open a connection to the device via ssh or Raspberry Pi Connect
|
||||
1. Become root (the superuser)
|
||||
```
|
||||
sudo su
|
||||
```
|
||||
```
|
||||
sudo su
|
||||
```
|
||||
1. Enable the DWC version 2 USB peripheral device tree overlay by appending it to the end after the `[all]` category (which is at the end)
|
||||
```
|
||||
echo "dtoverlay=dwc2" >> /boot/firmware/config.txt
|
||||
```
|
||||
```
|
||||
echo "dtoverlay=dwc2" >> /boot/firmware/config.txt
|
||||
```
|
||||
1. We add the required module `dwc2` for loading at startup
|
||||
```
|
||||
echo "dwc2" >> /etc/modules
|
||||
```
|
||||
```
|
||||
echo "dwc2" >> /etc/modules
|
||||
```
|
||||
1. Check that we can load the libcomposite module
|
||||
```
|
||||
modprobe libcomposite
|
||||
```
|
||||
```
|
||||
modprobe libcomposite
|
||||
```
|
||||
1. Put a copy of this repository in root's home directory using git
|
||||
```
|
||||
apt install -y git
|
||||
git clone https://gitea.cs.ru.is/RU-V207/rover-pi.git
|
||||
```
|
||||
```
|
||||
apt install -y git
|
||||
git clone https://gitea.cs.ru.is/RU-V207/rover-pi.git
|
||||
```
|
||||
1. Go to Scripts and test if the `gadget.sh` runs without errors and hopefully a Serial port appers in Device Manager or equivalent
|
||||
```
|
||||
cd rover-pi/Scripts/
|
||||
./gadget.sh
|
||||
```
|
||||
1. Install the systemd script
|
||||
`cp serial-ether-gadget.service /lib/systemd/system/.`
|
||||
cd rover-pi/Scripts/
|
||||
./gadget.sh
|
||||
```
|
||||
1. Install the systemd
|
||||
```
|
||||
cp serial-ether-gadget.service /lib/systemd/system/.
|
||||
```
|
||||
1. Enable the service
|
||||
```
|
||||
systemctl enable serial-ether-gadget.service
|
||||
```
|
||||
```
|
||||
systemctl enable serial-ether-gadget.service
|
||||
```
|
||||
1. Enable the getty (which connects a login terminal to the serial port)
|
||||
```
|
||||
systemctl enable serial-getty@ttyGS0.service
|
||||
```
|
||||
```
|
||||
systemctl enable serial-getty@ttyGS0.service
|
||||
```
|
||||
1. Reboot and see if the serial port appears
|
||||
|
||||
# Connecting to the serial terminal
|
||||
|
||||
@@ -23,7 +23,7 @@ We don't have many monitors and keyboards in V207 for students to use, so we wil
|
||||

|
||||
1. Once you have uploaded your `id_edcsa.pub` file it should look like this.
|
||||

|
||||
1. Since we don't have enough monitors, we will need another way to setup the initial connection. The officially supported option is Raspberry Pi Connect. You will need to:
|
||||
1. Since we don't have a monitor, keyboard, and mouse available, we will need another way to setup the initial connection. The officially supported option is Raspberry Pi Connect. You will need to enable it then:
|
||||
1. Register for an account first at https://connect.raspberrypi.com
|
||||
2. Confirm your account with email
|
||||
2. Login with that account
|
||||
@@ -42,7 +42,7 @@ We don't have many monitors and keyboards in V207 for students to use, so we wil
|
||||
1. Now you get to watch the writing then verifying.
|
||||

|
||||

|
||||
1. The process is complete!
|
||||
1. The process is complete! Now you can [connect to your pi](connect.md)
|
||||

|
||||
1. Take the SD card and put it into your pi.
|
||||
1. When you first boot it, it can take 10 minutes to finish configuring itself. Usually when the LED stops blinking for at least 30 seconds, it is done.
|
||||
|
||||
Executable
+19
@@ -0,0 +1,19 @@
|
||||
#!/usr/bin/python
|
||||
# From https://raspberry.tips/en/raspberrypi-tutorials/raspberry-pi-gpio-python
|
||||
import lgpio
|
||||
import time
|
||||
|
||||
# Open GPIO chip (0 = /dev/gpiochip0, on Pi 5 gpiochip4 also possible)
|
||||
h = lgpio.gpiochip_open(0)
|
||||
|
||||
try:
|
||||
lgpio.gpio_claim_output(h, 18) # GPIO18 (pin 12) as output (MOTA1)
|
||||
|
||||
for _ in range(5):
|
||||
lgpio.gpio_write(h, 18, 1) # HIGH
|
||||
time.sleep(0.5)
|
||||
lgpio.gpio_write(h, 18, 0) # LOW
|
||||
time.sleep(0.5)
|
||||
|
||||
finally:
|
||||
lgpio.gpiochip_close(h) # Always close!
|
||||
Executable
+25
@@ -0,0 +1,25 @@
|
||||
#!/usr/bin/python
|
||||
# From https://raspberry.tips/en/raspberrypi-tutorials/raspberry-pi-gpio-python
|
||||
import lgpio
|
||||
import time
|
||||
|
||||
# Open GPIO chip (0 = /dev/gpiochip0, on Pi 5 gpiochip4 also possible)
|
||||
h = lgpio.gpiochip_open(0)
|
||||
|
||||
try:
|
||||
lgpio.gpio_claim_output(h, 16) # GPIO16 as output (MOTA2)
|
||||
lgpio.gpio_write(h, 16, 0) # LOW
|
||||
|
||||
# Hardware PWM on GPIO18 (pin 12) must be PWM-capable
|
||||
# Frequency: 1000 Hz, duty cycle: 50%
|
||||
lgpio.tx_pwm(h, 18, 1000, 50)
|
||||
time.sleep(2)
|
||||
|
||||
# Reduce duty cycle to 20%
|
||||
lgpio.tx_pwm(h, 18, 1000, 20)
|
||||
time.sleep(2)
|
||||
|
||||
lgpio.tx_pwm(h, 18, 0, 0) # Stop PWM
|
||||
|
||||
finally:
|
||||
lgpio.gpiochip_close(h) # Always close!
|
||||
Reference in New Issue
Block a user