parent
dd475a16c5
commit
3790c1348e
@ -0,0 +1,3 @@
|
||||
[build-system]
|
||||
requires = ["setuptools>=42", "wheel"]
|
||||
build-backend = "setuptools.build_meta"
|
||||
@ -0,0 +1,38 @@
|
||||
import setuptools
|
||||
|
||||
with open("README.md", "r", encoding="utf-8") as fh:
|
||||
long_description = fh.read()
|
||||
|
||||
setuptools.setup(
|
||||
name="OledPiMonitor",
|
||||
version="0.0.1",
|
||||
author="jerome aka jblb",
|
||||
author_email="jerome@jblb.net",
|
||||
description="Display IP address on a SSD1306",
|
||||
long_description=long_description,
|
||||
long_description_content_type="text/markdown",
|
||||
url="https://mygit.jblb.net/jerome/OledPiMonitor",
|
||||
project_urls={
|
||||
"jblb": "https:jblb.net",
|
||||
"Haum": "https:haum.org",
|
||||
},
|
||||
classifiers=[
|
||||
"Programming Language :: Python :: 3",
|
||||
"License :: OSI Approved :: GPL",
|
||||
"Operating System :: OS Independent",
|
||||
],
|
||||
package_dir={"": "src"},
|
||||
packages=setuptools.find_packages(where="src"),
|
||||
python_requires=">=3.6",
|
||||
install_requires= [
|
||||
"RPi.GPIO==0.7.1a4",
|
||||
"adafruit-circuitpython-ssd1306==2.12.3",
|
||||
"Pillow==8.4.0",
|
||||
],
|
||||
entry_points={ # Optional
|
||||
'console_scripts': [
|
||||
'oled_status=OledPiMonitor.I2C_SSD1306:main',
|
||||
],
|
||||
}
|
||||
|
||||
)
|
||||
@ -0,0 +1,86 @@
|
||||
""" Display my IP address on an I2C OLED screen connected over GPIO """
|
||||
|
||||
import socket
|
||||
import time
|
||||
import subprocess
|
||||
|
||||
|
||||
from PIL import Image
|
||||
from PIL import ImageDraw
|
||||
from PIL import ImageFont
|
||||
|
||||
from board import SCL, SDA
|
||||
import busio
|
||||
import adafruit_ssd1306
|
||||
|
||||
# Create the I2C interface.
|
||||
i2c = busio.I2C(SCL, SDA)
|
||||
|
||||
|
||||
# Create the SSD1306 OLED class.
|
||||
# The first two parameters are the pixel width and pixel height. Change these
|
||||
# to the right size for your display!
|
||||
disp = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c)
|
||||
|
||||
# Clear display.
|
||||
disp.fill(0)
|
||||
disp.show()
|
||||
|
||||
|
||||
def get_ip():
|
||||
try:
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
s.connect(("9.9.9.9", 80))
|
||||
ip_addr = s.getsockname()[0]
|
||||
s.close()
|
||||
except:
|
||||
cmd = "hostname -I | cut -d\' \' -f1"
|
||||
ip_addr = str(subprocess.check_output(cmd, shell = True), 'utf-8')
|
||||
|
||||
return ip_addr
|
||||
|
||||
|
||||
def main():
|
||||
|
||||
# Create blank image for drawing.
|
||||
# Make sure to create image with mode '1' for 1-bit color.
|
||||
width = disp.width
|
||||
height = disp.height
|
||||
image = Image.new('1', (width, height))
|
||||
|
||||
# Get drawing object to draw on image.
|
||||
draw = ImageDraw.Draw(image)
|
||||
font = ImageFont.load_default()
|
||||
|
||||
# Draw a black filled box to clear the image.
|
||||
draw.rectangle((0, 0, width, height), outline=0, fill=0)
|
||||
|
||||
def draw_text(text, line=0):
|
||||
draw.text((5, 5 + line * 10), text, font=font, fill=1)
|
||||
|
||||
# Check & redraw IP address and temp
|
||||
try:
|
||||
while 1:
|
||||
cmd = "vcgencmd measure_temp |cut -f 2 -d '='"
|
||||
temp = subprocess.check_output(cmd, shell = True)
|
||||
ip_addr = get_ip()
|
||||
if ip_addr:
|
||||
draw_text("IP: " + ip_addr)
|
||||
else:
|
||||
draw_text("Searching for Wi-Fi...")
|
||||
|
||||
draw_text("Temp " + str(temp, 'utf-8'), 1)
|
||||
|
||||
disp.image(image)
|
||||
disp.show()
|
||||
time.sleep(.01)
|
||||
# Draw a black filled box to clear the image.
|
||||
draw.rectangle((0, 0, width, height), outline = 0, fill = 0)
|
||||
|
||||
except KeyboardInterrupt:
|
||||
disp.fill(0)
|
||||
disp.show()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Loading…
Reference in new issue