Files
seedsigner/docs/touchscreen_setup.md
T
2022-03-07 21:38:16 -07:00

5.5 KiB

Initial Pi Setup

touch /media/skorn/boot/ssh

nano /media/skorn/boot/wpa_supplicant.conf

country=us
update_config=1
ctrl_interface=/var/run/wpa_supplicant

network={
 scan_ssid=1
 ssid="MyNetworkSSID"
 psk="Pa55w0rd1234"
}

https://wirelessthings.io/index.php/2021/05/01/720x720-lcd-screen-using-dpi-on-raspberry-pi-4/

Download and extract overlay files: https://www.waveshare.com/wiki/File:28DPIB_DTBO.zip

copy files to /media/user/boot/overlays cp ~/Downloads/28DPI_DTBO/waveshare-28dpi-* /media/skorn/boot/overlays

nano /media/skorn/boot/config.txt
# Update existing
#dtoverlay=vc4-kms-v3d
dtparam=i2c_arm=on
dtparam=i2s=on
dtparam=spi=on

# Add new
gpio=0-9=a2
gpio=12-17=a2
gpio=20-25=a2
dtoverlay=dpi24
enable_dpi_lcd=1
display_default_lcd=1
extra_transpose_buffer=2
dpi_group=2
dpi_mode=87
dpi_output_format=0x7F216
hdmi_timings=480 0 26 16 10 640 0 25 10 15 0 0 0 60 0 32000000 1
dtoverlay=waveshare-28dpi-3b-4b
dtoverlay=waveshare-28dpi-3b
dtoverlay=waveshare-28dpi-4b
display_rotate=1

sudo raspi-config

set to boot to desktop set screen resolution: DMT 4 480 x 640 expand filesystem

rotate display

sudo apt install xserver-xorg-input-libinput sudo mkdir /etc/X11/xorg.conf.d sudo cp /usr/share/X11/xorg.conf.d/40-libinput.conf /etc/X11/xorg.conf.d/ sudo nano /etc/X11/xorg.conf.d/40-libinput.conf

# add to touchscreen section
Option "CalibrationMatrix" "0 1 0 -1 0 1 0 0 1"

current seedsigner application installs

sudo apt-get update && sudo apt-get install -y
python3-pip
python-pil
libopenjp2-7
git
libatlas-base-dev
qrencode
python3-opencv
python3-numpy
python3-picamera

sudo apt-get update && sudo apt-get install -y wiringpi python3-pip
python3-numpy python-pil libopenjp2-7 git python3-opencv
python3-picamera libatlas-base-dev qrencode

apt-get install python-tk

sudo apt install imagemagick

pip install pillow tk pyautogui

sudo apt-get install -y python3-pip
python3-numpy libopenjp2-7 git python3-opencv
python3-picamera libatlas-base-dev qrencode

Tkinter

sudo apt install python3-tk

OPENBOX

sudo apt install openbox xinit lightdm

To run Openbox from the commandline, setup the .xinitrc file in your home directory and insert the following line:

exec openbox-session

application startup config /etc/xdg/openbox/autostart

. /home/pi/env/bin/activate
cd /home/pi/seedsigner/src
nohup python3 main.py > /home/pi/seedsigner.log &

Lightdm

sudo apt install lightdm

https://gist.github.com/kuanyui/2972b15639e78940cd1349844ca0e4fc

sudo nano /etc/lightdm/lightdm.conf

start-default-seat=true
autologin-user=pi
autologin-user-timeout=0
autologin-session=openbox

ENV Vars

export DISPLAY=:0.0 export NOTAPI=true

TKINTER Examples

https://tkdocs.com/tutorial/eventloop.html https://python-textbok.readthedocs.io/en/1.0/Introduction_to_GUI_Programming.html https://www.journaldev.com/48165/tkinter-working-with-classes

from PIL import Image
i = Image.open("cube.png")
i.show()
import tkinter as tk
from PIL import Image, ImageTk

def callback(event):
    print("clicked at", event.x, event.y)

window = tk.Tk()
window.attributes('-fullscreen',True)


x = window.winfo_pointerx()
y = window.winfo_pointery()



window.bind("<Button-1>", callback)


imagefile2 = "../../cube.png"
imgpil2 = Image.open(imagefile)
img2 = ImageTk.PhotoImage(imgpil)

imagefile = "seedsigner/resources/logo_black_240.png"
imgpil = Image.open(imagefile)
img = ImageTk.PhotoImage(imgpil)

#lbl = tk.Label(window, image = img).pack()
frame = tk.Label(window)
frame.configure(image=img)
frame.place(x=333,y=233)

lbl.configure(image=img2)

def button_press_move():
    frame.place(x=random.randint(0,640), y=random.randint(0,480))

btn_KEY_UP = tk.Button(window, text="KEY1")
btn_KEY_UP.place(x=50, y=50)
btn_KEY_UP.configure(width=10,height=4)
btn_KEY_UP.configure(command=button_press_move)


myglobal = None
myglobal1 = None


def press(event):
    print(event.state)
    print(dir(event))
    global myglobal
    myglobal1 = event

def release(event):
    print(event.state)
    print(dir(event))
    global myglobal1
    myglobal1 = event

btn_KEY_UP.bind("<ButtonPress>", press)
btn_KEY_UP.bind("<ButtonRelease>", release)

window.mainloop()
w = tk.Canvas(window, width=240, height=240, bg="green").pack()
from queue import Queue
from seedsigner.helpers import touchscreen
import tkinter as tk
from PIL import Image, ImageTk
import threading

a = Queue()
sq = touchscreen.touchscreen(a)
sq.Init()

import random
from time import sleep

def showimages():
    while True:
        print("looping images")
        imagefile2 = "../../cube.png"
        imgpil2 = Image.open(imagefile2)
        a.put((imgpil2, random.randint(0,400), random.randint(0,400)))
        sleep(0.1)

x = threading.Thread(target=showimages)
x.start()



img2 = ImageTk.PhotoImage(imgpil)
import tkinter as tk
import threading
import signal
import sys


class MyTkApp(object):
    def poll(self):
        sys.stderr.write("poll\n")
        self.root.after(500, self.poll)
    def quit(self, event):
        print("you pressed control c")
        self.root.quit()
    def run(self):
        self.root = tk.Tk()
        self.root.after(500, self.poll)
        self.root.bind('<Control-c>', self.quit)
        self.root.mainloop()


app = MyTkApp()
app.start()

import time

while app.is_alive():
    try:
        time.sleep(0.5)
    except KeyboardInterrupt:
        app.root.destroy()
        break
from queue import Queue
from seedsigner.helpers import touchscreen