Merge branch 'master' of https://gitea.cs.ru.is/RU-V207/rover-pi
This commit is contained in:
@@ -225,3 +225,4 @@ cython_debug/
|
|||||||
# PyPI configuration file
|
# PyPI configuration file
|
||||||
.pypirc
|
.pypirc
|
||||||
|
|
||||||
|
*.html
|
||||||
|
|||||||
@@ -21,6 +21,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.
|
- [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
|
- [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.
|
- [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
|
## 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.
|
- [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.
|
||||||
|
|||||||
@@ -2,6 +2,17 @@
|
|||||||
# Adapted from
|
# Adapted from
|
||||||
# "Using OTG mode on Raspberry Pi SBCs"
|
# "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
|
# https://pip-assets.raspberrypi.com/categories/685-app-notes-guides-whitepapers/documents/RP-009276-WP/Using-OTG-mode-on-Raspberry-Pi-SBCs
|
||||||
|
|
||||||
|
# Is the dwc2 overlay installed? Nothing will work if it isn't.
|
||||||
|
LOGGER="systemd-cat -t gadget.sh"
|
||||||
|
if lsmod | grep -q "dwc2"; then
|
||||||
|
$LOGGER -p info "DWC2 module loaded, setting up OTG gadget serial and ethernet"
|
||||||
|
else
|
||||||
|
$LOGGER -p warning "DWC2 module missing. Aborting OTG setup"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
sudo modprobe libcomposite
|
sudo modprobe libcomposite
|
||||||
cd /sys/kernel/config/usb_gadget
|
cd /sys/kernel/config/usb_gadget
|
||||||
# Create our new gadget
|
# Create our new gadget
|
||||||
|
|||||||
+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,36 +1,119 @@
|
|||||||
# Gadget Mode to setup a serial connection over USB
|
# Gadget Mode to setup a serial connection over USB
|
||||||
Prepare Raspberry Pi OS connection over a microUSB serial cable
|
Prepare Raspberry Pi OS connection over a microUSB serial cable
|
||||||
|
|
||||||
Important: choose either PiUART or OTG. If you do both, it is possible that neither will work. Also, you will want to disable the serial console if you are trying to use that serial port for communicating with other devices. Important reading: Raspberry PI UART configuration
|
|
||||||
|
|
||||||
|
|
||||||
USB-OTG method (Works on Zero, Zero W, and Compute Module)
|
|
||||||
|
|
||||||
Based upon Adafruit guide: https://learn.adafruit.com/turning-your-raspberry-pi-zero-into-a-usb-gadget/serial-gadget:
|
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
|
||||||
|
|
||||||
Look for the SD card reader on the VM under "Devices > USB" and click on it Iff you get errors, you may have to shut down the VM and set the USB version to 2.0 or 3.0
|
## Important :
|
||||||
The Boot and Root partition should mount in Linux under /media/$USER/boot and /media/$USER/rootfs
|
- **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.
|
||||||
Navigate to /media/$USER/boot and edit:
|
- 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.
|
||||||
config.txt: add "dtoverlay=dwc2" at the end
|
|
||||||
cmdline.txt: remove "init=/usr/lib/raspi-config/init_resize.sh" and add "modules-load=dwc2,g_serial" to the end. Make sure everything is on one line!
|
|
||||||
Eject the card
|
|
||||||
Boot the pi with a keyboard and monitor attached
|
|
||||||
Login
|
|
||||||
sudo systemctl enable serial-getty@ttyGS0.service
|
|
||||||
sudo systemctl start serial-getty@ttyGS0.service
|
|
||||||
|
|
||||||
|
|
||||||
|
## Procedure
|
||||||
|
|
||||||
# connecting to the serial terminal
|
Make sure you have your USB cable plugged into the left port **USB** and not the right port marked **PWR**.
|
||||||
If using a Linux VM, you will need to pass the Pi USB connection there. This is similar to the procedure for accessing an Arduino.
|
1. Open a connection to the device via ssh or Raspberry Pi Connect
|
||||||
Start the Linux VM if you haven't already
|
1. Become root (the superuser)
|
||||||
Menu: Devices > USB
|
```
|
||||||
Look for "Silicon Labs CP210x USB to UART Bridge" and click on it.
|
sudo su
|
||||||
Run "ls -l /dev/ttyU*" to check if port /dev/ttyUSB0 is found. The Pi will most often be accessible over this port.
|
```
|
||||||
The user must be in the dialout group to access it. Use the Linux command: id -to check if you are in the group. If not in the dialout group, use:
|
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
|
||||||
|
```
|
||||||
|
1. We add the required module `dwc2` for loading at startup
|
||||||
|
```
|
||||||
|
echo "dwc2" >> /etc/modules
|
||||||
|
```
|
||||||
|
1. Check that we can load the libcomposite module
|
||||||
|
```
|
||||||
|
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
|
||||||
|
```
|
||||||
|
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
|
||||||
|
```
|
||||||
|
cp serial-ether-gadget.service /lib/systemd/system/.
|
||||||
|
```
|
||||||
|
1. Enable the 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
|
||||||
|
```
|
||||||
|
1. Reboot and see if the serial port appears
|
||||||
|
|
||||||
|
# Connecting to the serial terminal
|
||||||
|
You will need a serial terminal program (which used to be very very common) in order to communicate over your serial port
|
||||||
|
|
||||||
|
## Windows
|
||||||
|
- Putty: https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
|
||||||
|
- MobaXterm: https://mobaxterm.mobatek.net/
|
||||||
|
|
||||||
|
## Linux
|
||||||
|
If using a Linux VM, you will need to pass the Pi USB connection there.
|
||||||
|
This is similar to the procedure for accessing an Arduino.
|
||||||
|
1. Start the Linux VM if you haven't already
|
||||||
|
1. Menu: Devices > USB
|
||||||
|
1. Look for "Silicon Labs CP210x USB to UART Bridge" and click on it.
|
||||||
|
1. check if port /dev/ttyUSB0 is found. The Pi will most often be accessible over this port.
|
||||||
|
```
|
||||||
|
ls -l /dev/ttyU*
|
||||||
|
```
|
||||||
|
1. The user must be in the dialout group to access it. Use the Linux command: `uid` -to check if you are in the group. If not in the dialout group, use:
|
||||||
|
```
|
||||||
sudo usermod -a -G dialout <username>
|
sudo usermod -a -G dialout <username>
|
||||||
You will use the screen app in Linux to access the Pi. You can install it with:
|
```
|
||||||
|
1. You will use the GNU `screen` application in Linux to access the Pi. You can install it with:
|
||||||
|
```
|
||||||
sudo apt install screen
|
sudo apt install screen
|
||||||
You should now gain access to the Pi with:
|
```
|
||||||
sudo screen /dev/ttyUSB0 115200
|
1. You should now gain access to the Pi with:
|
||||||
Press enter and you will be prompted to log in to the Pi with default credentials. User: pi - PW: raspberry
|
```
|
||||||
|
` sudo screen /dev/ttyUSB0 115200
|
||||||
|
```
|
||||||
|
1. Press enter and you will be prompted to log in to the Pi with default credentials. User: pi - PW: raspberry
|
||||||
|
|
||||||
|
# Disabling the OTG mode to use a keyboard and mouse again
|
||||||
|
|
||||||
|
**WARNING: Untested**
|
||||||
|
1. Comment out the dwg2 line in `/boot/firmware/config.txt` using a `#` in front of the line
|
||||||
|
```
|
||||||
|
[all]
|
||||||
|
#dtoverlay=dwg2
|
||||||
|
```
|
||||||
|
1. Comment out the dwg2 line in `/etc/modules` using a `#` in front of the line
|
||||||
|
```
|
||||||
|
#dwg2
|
||||||
|
```
|
||||||
|
1. Disable the gadget service
|
||||||
|
```
|
||||||
|
systemctl disable serial-ether-gadget.service
|
||||||
|
```
|
||||||
|
1. Disable the getty
|
||||||
|
```
|
||||||
|
systemctl disable serial-getty@ttyGS0.service
|
||||||
|
```
|
||||||
|
|
||||||
|
# Connecting over the USB ethernet to ssh into your Pi
|
||||||
|
|
||||||
|
I have not tested this procedure because the serial console and normal network connection is sufficient for me --foley
|
||||||
|
|
||||||
|
https://www.raspberrypi.com/news/usb-gadget-mode-in-raspberry-pi-os-ssh-over-usb/
|
||||||
|
|
||||||
|
|
||||||
|
# Untested
|
||||||
|
Here are items that bear investigating but haven't been tested yet
|
||||||
|
|
||||||
|
- [Modify Imager manifest to install otg](https://github.com/raspberrypi/rpi-imager/tree/main/doc/local_json)
|
||||||
|
|
||||||
|
|||||||
@@ -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. 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
|
1. Register for an account first at https://connect.raspberrypi.com
|
||||||
2. Confirm your account with email
|
2. Confirm your account with email
|
||||||
2. Login with that account
|
2. Login with that account
|
||||||
@@ -42,12 +42,5 @@ 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. 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)
|
||||||

|

|
||||||
|
|
||||||
## 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
|
|
||||||

|
|
||||||
|
|||||||
Reference in New Issue
Block a user