<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://yawg.net/index.php?action=history&amp;feed=atom&amp;title=PiHUD</id>
	<title>PiHUD - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://yawg.net/index.php?action=history&amp;feed=atom&amp;title=PiHUD"/>
	<link rel="alternate" type="text/html" href="https://yawg.net/index.php?title=PiHUD&amp;action=history"/>
	<updated>2026-07-21T19:41:27Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://yawg.net/index.php?title=PiHUD&amp;diff=39&amp;oldid=prev</id>
		<title>Encryptid: Created page with &quot;=Setup= ===SD Card=== Add the wpa_supplicant.conf file to the boot drive with: &lt;pre&gt; country=US ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1  network={ ssid=&quot;WIFI_SSID&quot; scan_ssid=1 psk=&quot;WIFI_PASSWORD&quot; key_mgmt=WPA-PSK }&lt;/pre&gt; Additionally you need to uncomment the spi line in config.txt as well as add the ssh file.  ==Libraries== BCM2835  &lt;pre&gt; wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.70.tar.gz tar zxvf bcm2835-1.70.tar.gz  cd bcm2...&quot;</title>
		<link rel="alternate" type="text/html" href="https://yawg.net/index.php?title=PiHUD&amp;diff=39&amp;oldid=prev"/>
		<updated>2025-08-06T19:05:53Z</updated>

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