Improving the oled instructions and configuration file
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2024 Marcel
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -0,0 +1,38 @@
|
||||
# cpsy-display-ip
|
||||
Demonstrates the SSD1306 OLED by showing the IP address on the system boot.
|
||||
Originally at https://github.com/mkyas/cpsy-display-ip and customized for Mechatronics 1 students.
|
||||
|
||||
This project contains the file `display-ip.py` that displays an IP
|
||||
address on the SSD1306 OLED screen and the file `display-ip.service`
|
||||
that executes the script on boot after the Raspberry Pi is connected
|
||||
to a network.
|
||||
|
||||
To use the script, you first must connect the screen to the Pi's
|
||||
I2C bus.
|
||||
|
||||
## Setup
|
||||
|
||||
Do the following steps on your Raspberry Pi.
|
||||
|
||||
1. Enable I2C in `raspi-config`
|
||||
1. Go to your home directory: `cd ~`
|
||||
1. Clone this repository to your raspberry pi `git clone https://gitea.cs.ru.is/RU-V207/rover-pi`
|
||||
1. Install [pillow](https://python-pillow.org/), numpy, and venv:
|
||||
> sudo apt install python3-venv python3-pil python3-numpy
|
||||
1. Create a virtual environment, here called cpsy:
|
||||
> python3 -m venv cpsy
|
||||
1. Edit the generated `pyvenv.cfg` to set `include-system-site-packages = true`
|
||||
1. Activate the environment `source cpsy/bin/activate`
|
||||
1. Install the display driver: `pip install adafruit-circuitpython-ssd1306`
|
||||
1. Edit `display-ip.service`:
|
||||
- Replace `foley` with your user name on the Pi.
|
||||
- the `WorkingDirectory` points to the directory containing `display-ip.py`
|
||||
- the path to python points to your virtual environment
|
||||
1. Copy the edited `display-ip.service` to `/etc/systemd/system`
|
||||
```sudo cp display-ip.service /etc/systemd/system/.```
|
||||
1. Enable the service `sudo systemctl enable display-ip.service`
|
||||
1. Test by starting the service `sudo systemctl start display-ip.service` which should turn on the screen.
|
||||
1. If nothing happens, check on the status with `sudo systemctl status display-ip` and look for error messages.
|
||||
1. If you make additional changes to the service file, you may have to reload the `systemd`:
|
||||
```sudo systemctl daemon-reload ```
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
"""
|
||||
This demo will fill the screen with white, draw a black box on top
|
||||
and then print the device's IP address in the center of the display
|
||||
|
||||
This example is for use on (Linux) computers that are using CPython with
|
||||
Adafruit Blinka to support CircuitPython libraries. CircuitPython does
|
||||
not support PIL/pillow (python imaging library)!
|
||||
"""
|
||||
|
||||
import board
|
||||
import digitalio
|
||||
from PIL import Image, ImageDraw, ImageFont
|
||||
import adafruit_ssd1306
|
||||
import socket
|
||||
|
||||
# Define the Reset Pin
|
||||
oled_reset = None
|
||||
try:
|
||||
oled_reset = digitalio.DigitalInOut(board.D4)
|
||||
except:
|
||||
pass
|
||||
# No reset pin
|
||||
|
||||
# Change these
|
||||
# to the right size for your display!
|
||||
WIDTH = 128
|
||||
HEIGHT = 64
|
||||
BORDER = 5
|
||||
|
||||
# Use for I2C.
|
||||
i2c = board.I2C() # uses board.SCL and board.SDA
|
||||
oled = adafruit_ssd1306.SSD1306_I2C(WIDTH, HEIGHT, i2c, addr=0x3C, reset=oled_reset)
|
||||
|
||||
# Clear display.
|
||||
oled.fill(0)
|
||||
oled.show()
|
||||
|
||||
# Create blank image for drawing.
|
||||
# Make sure to create image with mode '1' for 1-bit color.
|
||||
image = Image.new("1", (oled.width, oled.height))
|
||||
|
||||
# Get drawing object to draw on image.
|
||||
draw = ImageDraw.Draw(image)
|
||||
|
||||
# Draw a white background
|
||||
draw.rectangle((0, 0, oled.width, oled.height), outline=255, fill=255)
|
||||
|
||||
# Draw a smaller inner rectangle
|
||||
draw.rectangle(
|
||||
(BORDER, BORDER, oled.width - BORDER - 1, oled.height - BORDER - 1),
|
||||
outline=0,
|
||||
fill=0,
|
||||
)
|
||||
|
||||
# Load default font.
|
||||
font = ImageFont.load_default()
|
||||
|
||||
# Get the local IP address as a string.
|
||||
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
|
||||
s.connect(("8.8.8.8", 80))
|
||||
text = s.getsockname()[0]
|
||||
|
||||
# Draw it into a box.
|
||||
bbox = font.getbbox(text)
|
||||
(font_width, font_height) = bbox[2] - bbox[0], bbox[3] - bbox[1]
|
||||
draw.text(
|
||||
(oled.width // 2 - font_width // 2, oled.height // 2 - font_height // 2),
|
||||
text,
|
||||
font=font,
|
||||
fill=255,
|
||||
)
|
||||
|
||||
# Display image
|
||||
oled.image(image)
|
||||
oled.show()
|
||||
@@ -0,0 +1,13 @@
|
||||
[Unit]
|
||||
Description=display-ip
|
||||
After=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=foley
|
||||
WorkingDirectory=/home/foley/rover-pi/oled-display
|
||||
ExecStart=/home/foley/cpsy/bin/python3 display-ip.py
|
||||
Restart=never
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
Reference in New Issue
Block a user