PiHUD
Appearance
Setup
[edit]SD Card
[edit]Add the wpa_supplicant.conf file to the boot drive with:
country=US
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="WIFI_SSID"
scan_ssid=1
psk="WIFI_PASSWORD"
key_mgmt=WPA-PSK
}
Additionally you need to uncomment the spi line in config.txt as well as add the ssh file.
Libraries
[edit]BCM2835
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.70.tar.gz tar zxvf bcm2835-1.70.tar.gz cd bcm2835-1.70/ sudo ./configure sudo make sudo make check sudo make install
WiringPi is needed on Pi4
wget https://project-downloads.drogon.net/wiringpi-latest.deb sudo dpkg -i wiringpi-latest.deb gpio -v
Grab examples
sudo apt-get install p7zip-full python3-pip python3-pil python3-numpy sudo pip3 install RPi.GPIO sudo pip3 install spidev sudo pip3 install picamera sudo wget https://www.waveshare.net/w/upload/a/a8/LCD_Module_RPI_code.7z 7z x LCD_Module_RPI_code.7z -O./LCD_Module_code
Python
[edit]Just some sample code snips for ref
Camera
[edit]## PiCamera
from time import sleep
from picamera import PiCamera
camera = PiCamera()
camera.resolution = (240, 240)
camera.capture("camera.bmp")
camera.close()
2.5 Snippet
[edit]import os
import sys
import time
import logging
import spidev as SPI
from picamera import PiCamera
sys.path.append("..")
from lib import LCD_2inch4
from PIL import Image,ImageDraw,ImageFont
# Raspberry Pi pin configuration:
RST = 27
DC = 25
BL = 18
bus = 0
device = 0
camera = PiCamera()
camera.resolution = (240, 320)
camera.capture("camera.bmp")
camera.close()
disp = LCD_2inch4.LCD_2inch4()
disp.Init()
disp.clear()
image1 = Image.new("RGB", (disp.width, disp.height), "WHITE")
draw = ImageDraw.Draw(image1)
image = Image.open('camera.bmp')
disp.ShowImage(image)
time.sleep(3)
disp.module_exit()
exit()
1.54 Demo
[edit]## 1inch54
import os
import sys
import time
import logging
import spidev as SPI
sys.path.append("..")
from lib import LCD_1inch54
from PIL import Image,ImageDraw,ImageFont
# Raspberry Pi pin configuration:
RST = 27
DC = 25
BL = 18
bus = 0
device = 0
logging.basicConfig(level=logging.DEBUG)
try:
# display with hardware SPI:
''' Warning!!!Don't creation of multiple displayer objects!!! '''
#disp = LCD_1inch54.LCD_1inch54(spi=SPI.SpiDev(bus, device),spi_freq=10000000,rst=RST,dc=DC,bl=BL)
disp = LCD_1inch54.LCD_1inch54()
# Initialize library.
disp.Init()
# Clear display.
disp.clear()
# Create blank image for drawing.
image1 = Image.new("RGB", (disp.width, disp.height), "WHITE")
draw = ImageDraw.Draw(image1)
logging.info("draw point")
draw.rectangle((5,10,6,11), fill = "BLACK")
draw.rectangle((5,25,7,27), fill = "BLACK")
draw.rectangle((5,40,8,43), fill = "BLACK")
draw.rectangle((5,55,9,59), fill = "BLACK")
logging.info("draw line")
draw.line([(20, 10),(70, 60)], fill = "RED",width = 1)
draw.line([(70, 10),(20, 60)], fill = "RED",width = 1)
draw.line([(170,15),(170,55)], fill = "RED",width = 1)
draw.line([(150,35),(190,35)], fill = "RED",width = 1)
logging.info("draw rectangle")
draw.rectangle([(20,10),(70,60)],fill = "WHITE",outline="BLUE")
draw.rectangle([(85,10),(130,60)],fill = "BLUE")
logging.info("draw circle")
draw.arc((150,15,190,55),0, 360, fill =(0,255,0))
draw.ellipse((150,65,190,105), fill = (0,255,0))
logging.info("draw text")
Font1 = ImageFont.truetype("../Font/Font01.ttf",25)
Font2 = ImageFont.truetype("../Font/Font01.ttf",35)
Font3 = ImageFont.truetype("../Font/Font02.ttf",32)
draw.rectangle([(0,65),(140,100)],fill = "WHITE")
draw.text((5, 68), 'Hello world', fill = "BLACK",font=Font1)
draw.rectangle([(0,115),(190,160)],fill = "RED")
draw.text((5, 118), 'WaveShare', fill = "WHITE",font=Font2)
draw.text((5, 160), '1234567890', fill = "GREEN",font=Font3)
text= u"微雪电子"
draw.text((5, 200),text, fill = "BLUE",font=Font3)
im_r=image1.rotate(270)
disp.ShowImage(im_r)
time.sleep(3)
logging.info("show image")
image = Image.open('../pic/LCD_1inch54.jpg')
im_r=image.rotate(270)
disp.ShowImage(im_r)
time.sleep(3)
disp.module_exit()
logging.info("quit:")
except IOError as e:
logging.info(e)
except KeyboardInterrupt:
disp.module_exit()
logging.info("quit:")
exit()
2.4 Attempt
[edit]## 2.4inch
import os
import sys
import time
import io
import picamera
import logging
import socketserver
from threading import Condition
import spidev as SPI
sys.path.append("..")
from lib import LCD_2inch4
from PIL import Image,ImageDraw,ImageFont
# Raspberry Pi pin configuration:
RST = 27
DC = 25
BL = 18
bus = 0
device = 0
disp = LCD_2inch4.LCD_2inch4()
class StreamingOutput(object):
def __init__(self):
self.frame = None
self.buffer = io.BytesIO()
self.condition = Condition()
def write(self, buf):
if buf.startswith(b'\xff\xd8'):
# New frame, copy the existing buffer's content and notify all
# clients it's available
self.buffer.truncate()
with self.condition:
self.frame = self.buffer.getvalue()
self.condition.notify_all()
self.buffer.seek(0)
return self.buffer.write(buf)
with picamera.PiCamera(resolution='240x320', framerate=30) as camera:
output = StreamingOutput()
camera.start_recording(output, format='mjpeg')
try:
disp.Init()
disp.clear()
time.sleep(30)
finally:
camera.stop_recording()
disp.module_exit()
exit()