From Hentschel
(→reset switch) |
(→enable systemd service) |
||
Line 66: | Line 66: | ||
sudo systemctl enable lcd.service | sudo systemctl enable lcd.service | ||
sudo systemctl start lcd.service | sudo systemctl start lcd.service | ||
+ | |||
+ | === lcd script === | ||
+ | ==== standard BBB ==== | ||
+ | <pre> | ||
+ | #!/usr/bin/python | ||
+ | |||
+ | import time | ||
+ | import Adafruit_BBIO.SPI as SPI | ||
+ | import Adafruit_BBIO.GPIO as GPIO | ||
+ | import Adafruit_SSD1306 | ||
+ | from PIL import Image | ||
+ | from PIL import ImageDraw | ||
+ | from PIL import ImageFont | ||
+ | import subprocess | ||
+ | import socket | ||
+ | import psutil | ||
+ | import os | ||
+ | |||
+ | from gpiozero import CPUTemperature | ||
+ | from datetime import datetime | ||
+ | |||
+ | |||
+ | button_off = "P8_8" | ||
+ | |||
+ | while True: | ||
+ | try: | ||
+ | GPIO.setup(button_off, GPIO.IN, GPIO.PUD_UP) | ||
+ | button_oldstate = GPIO.input(button_off) | ||
+ | # BBB | ||
+ | RST = 'P9_12' | ||
+ | disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST, i2c_bus=2) | ||
+ | # Raspi | ||
+ | # RST = 0 | ||
+ | # disp = Adafruit_SSD1306.SSD1306_128_32(rst=None) | ||
+ | disp.begin() | ||
+ | disp.clear() | ||
+ | disp.display() | ||
+ | # | ||
+ | width = disp.width | ||
+ | height = disp.height | ||
+ | # | ||
+ | image1 = Image.new('1', (width, height)) | ||
+ | draw = ImageDraw.Draw(image1) | ||
+ | draw.rectangle((0,0,width,height), outline=0, fill=0) | ||
+ | # | ||
+ | padding = -2 | ||
+ | top = padding | ||
+ | bottom = height-padding | ||
+ | x = 0 | ||
+ | font = ImageFont.load_default() | ||
+ | # | ||
+ | s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) | ||
+ | s.connect(("192.168.1.1", 80)) | ||
+ | hostname = socket.gethostname() | ||
+ | ip = s.getsockname()[0] | ||
+ | firstline = ip + " " + hostname | ||
+ | # | ||
+ | while True: | ||
+ | time.sleep(1) | ||
+ | # | ||
+ | image1 = Image.new('1', (width, height)) | ||
+ | draw = ImageDraw.Draw(image1) | ||
+ | draw.rectangle((0,0,width,height), outline=0, fill=0) | ||
+ | # cputemp = CPUTemperature() | ||
+ | memstr = '{0: >5}'.format(str(int(psutil.virtual_memory().percent))) + "%|" | ||
+ | statvfs = os.statvfs('/') | ||
+ | disktotal = statvfs.f_frsize * statvfs.f_blocks # Size of filesystem in bytes | ||
+ | diskfree = statvfs.f_frsize * statvfs.f_bavail # Number of free bytes that ordinary users | ||
+ | diskpercent = round((disktotal - diskfree) * 100.0 / float(disktotal),0) | ||
+ | diskstr = 'SD:' + '{0: >3}'.format(str(int(diskpercent))) + "%" | ||
+ | now = datetime.now() | ||
+ | # tempstr ='{0: >5}'.format(str(round(cputemp.temperature,))) + u"\u00b0" + "C|" | ||
+ | tempstr = " |" | ||
+ | cpustr = '{0: >6}'.format(str(round(psutil.cpu_percent(),1))) + "%" | ||
+ | secondline = "CPU:" + tempstr + cpustr | ||
+ | thirdline = "MEM: " + memstr + diskstr | ||
+ | fourthline = now.strftime("%d/%m/%Y %H:%M:%S") | ||
+ | disp.clear() | ||
+ | draw.text((x, top), firstline, font=font, fill=255) | ||
+ | draw.text((x, top+8), secondline, font=font, fill=255) | ||
+ | draw.text((x, top+16), thirdline, font=font, fill=255) | ||
+ | draw.text((x, top+25), fourthline, font=font, fill=255) | ||
+ | disp.image(image1) | ||
+ | disp.display() | ||
+ | # | ||
+ | # | ||
+ | button_state = GPIO.input("P8_8") | ||
+ | if( button_state != button_oldstate ): | ||
+ | if( button_state ): | ||
+ | print("Button OFF") | ||
+ | else: | ||
+ | print("Button ON -> reboot") | ||
+ | disp.clear() | ||
+ | image1 = Image.new('1', (width, height)) | ||
+ | draw = ImageDraw.Draw(image1) | ||
+ | draw.rectangle((0,0,width,height), outline=0, fill=0) | ||
+ | draw.text((x, top + 8), "Rebooting...", font=font, fill=255) | ||
+ | disp.image(image1) | ||
+ | disp.display() | ||
+ | os.system("reboot now") | ||
+ | # exit() | ||
+ | button_oldstate = button_state | ||
+ | # | ||
+ | # | ||
+ | except Exception as e: | ||
+ | print("LCD Error: %s" % str(e) ) | ||
+ | |||
+ | </pre> |
Revision as of 00:55, 7 December 2019
Contents
Lam modified
- use 14400 as baud rate for FTDI; on Mac:
screen /dev/cu.usbserial-FTFO858O 115200
- default login is debian:
debian:temppwd
- P9 header is off by one, counting from 1. There is a extra GND row in position 3-4 ?
Time
- change time zone: sudo timedatectl set-timezone America/Los_Angeles
- install ntp: sudo apt-get install ntp
Networking
- the ethernet interfaces don't appear to work. Using Edimax wifi
- set manually
sudo ifconfig eth0 192.168.1.16 netmask 255.255.255.0
- permanent in in /etc/network/interfaces
allow-hotplug wlan0 iface wlan0 inet static address 192.168.1.16 netmask 255.255.255.252 network 192.168.1.0 gateway 192.168.1.1 dns-nameserver 192.168.1.2 dns-search home.hentschel.net wpa-ssid hentschel wpa-psk bb78bbaa6a8425255774e5d49b51b4038d55c0c3e493334abbecec31c27096b6
reset switch
- BBB:
P8, GPIO 67 <-> GND
- RasPi
GPIO 4 <-> GND
install software
Raspberry Pi
sudo apt-get install build-essential python-dev python-setuptools python-pip python-smbus -y sudo pip install Adafruit_GPIO sudo pip install Adafruit_SSD1306 sudo apt-get install python-pil sudo pip install gpiozero sudo pip install psutil
also enable i2c in /boot/config.txt
dtparam=i2c_arm=on
enable systemd service
Raspberry Pi
- create file /lib/systemd/system/lcd.service with following content
[Unit] Description=LCD Display Service After=multi-user.target Conflicts=getty@tty1.service [Service] Type=simple ExecStart=/usr/bin/python /home/pi/script/lcd/lcd.py StandardInput=tty-force [Install] WantedBy=multi-user.target
- then:
sudo systemctl daemon-reload sudo systemctl enable lcd.service sudo systemctl start lcd.service
lcd script
standard BBB
#!/usr/bin/python import time import Adafruit_BBIO.SPI as SPI import Adafruit_BBIO.GPIO as GPIO import Adafruit_SSD1306 from PIL import Image from PIL import ImageDraw from PIL import ImageFont import subprocess import socket import psutil import os from gpiozero import CPUTemperature from datetime import datetime button_off = "P8_8" while True: try: GPIO.setup(button_off, GPIO.IN, GPIO.PUD_UP) button_oldstate = GPIO.input(button_off) # BBB RST = 'P9_12' disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST, i2c_bus=2) # Raspi # RST = 0 # disp = Adafruit_SSD1306.SSD1306_128_32(rst=None) disp.begin() disp.clear() disp.display() # width = disp.width height = disp.height # image1 = Image.new('1', (width, height)) draw = ImageDraw.Draw(image1) draw.rectangle((0,0,width,height), outline=0, fill=0) # padding = -2 top = padding bottom = height-padding x = 0 font = ImageFont.load_default() # s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect(("192.168.1.1", 80)) hostname = socket.gethostname() ip = s.getsockname()[0] firstline = ip + " " + hostname # while True: time.sleep(1) # image1 = Image.new('1', (width, height)) draw = ImageDraw.Draw(image1) draw.rectangle((0,0,width,height), outline=0, fill=0) # cputemp = CPUTemperature() memstr = '{0: >5}'.format(str(int(psutil.virtual_memory().percent))) + "%|" statvfs = os.statvfs('/') disktotal = statvfs.f_frsize * statvfs.f_blocks # Size of filesystem in bytes diskfree = statvfs.f_frsize * statvfs.f_bavail # Number of free bytes that ordinary users diskpercent = round((disktotal - diskfree) * 100.0 / float(disktotal),0) diskstr = 'SD:' + '{0: >3}'.format(str(int(diskpercent))) + "%" now = datetime.now() # tempstr ='{0: >5}'.format(str(round(cputemp.temperature,))) + u"\u00b0" + "C|" tempstr = " |" cpustr = '{0: >6}'.format(str(round(psutil.cpu_percent(),1))) + "%" secondline = "CPU:" + tempstr + cpustr thirdline = "MEM: " + memstr + diskstr fourthline = now.strftime("%d/%m/%Y %H:%M:%S") disp.clear() draw.text((x, top), firstline, font=font, fill=255) draw.text((x, top+8), secondline, font=font, fill=255) draw.text((x, top+16), thirdline, font=font, fill=255) draw.text((x, top+25), fourthline, font=font, fill=255) disp.image(image1) disp.display() # # button_state = GPIO.input("P8_8") if( button_state != button_oldstate ): if( button_state ): print("Button OFF") else: print("Button ON -> reboot") disp.clear() image1 = Image.new('1', (width, height)) draw = ImageDraw.Draw(image1) draw.rectangle((0,0,width,height), outline=0, fill=0) draw.text((x, top + 8), "Rebooting...", font=font, fill=255) disp.image(image1) disp.display() os.system("reboot now") # exit() button_oldstate = button_state # # except Exception as e: print("LCD Error: %s" % str(e) )