Месяц: Апрель 2016
TFT 2.8″ Example for pygame
import os
from time import sleep
import RPi.GPIO as GPIO
#Note #21 changed to #27 for rev2 Pi
button_map = {23:(255,0,0), 22:(0,255,0), 21:(0,0,255), 18:(0,0,0)}
#Setup the GPIOs as inputs with Pull Ups since the buttons are connected to GND
GPIO.setmode(GPIO.BCM)
for k in button_map.keys():
GPIO.setup(k, GPIO.IN, pull_up_down=GPIO.PUD_UP)
#Colours
WHITE = (255,255,255)
os.putenv('SDL_FBDEV', '/dev/fb1')
pygame.init()
pygame.mouse.set_visible(False)
lcd = pygame.display.set_mode((320, 240))
lcd.fill((0,0,0))
pygame.display.update()
font_big = pygame.font.Font(None, 100)
while True:
# Scan the buttons
for (k,v) in button_map.items():
if GPIO.input(k) == False:
lcd.fill(v)
text_surface = font_big.render('%d'%k, True, WHITE)
rect = text_surface.get_rect(center=(160,120))
lcd.blit(text_surface, rect)
pygame.display.update()
sleep(0.1)
TouchScreen
from pygame.locals import *
import os
from time import sleep
import RPi.GPIO as GPIO
#Setup the GPIOs as outputs - only 4 and 17 are available
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.OUT)
GPIO.setup(17, GPIO.OUT)
#Colours
WHITE = (255,255,255)
os.putenv('SDL_FBDEV', '/dev/fb1')
os.putenv('SDL_MOUSEDRV', 'TSLIB')
os.putenv('SDL_MOUSEDEV', '/dev/input/touchscreen')
pygame.init()
pygame.mouse.set_visible(False)
lcd = pygame.display.set_mode((320, 240))
lcd.fill((0,0,0))
pygame.display.update()
font_big = pygame.font.Font(None, 50)
touch_buttons = {'17 on':(80,60), '4 on':(240,60), '17 off':(80,180), '4 off':(240,180)}
for k,v in touch_buttons.items():
text_surface = font_big.render('%s'%k, True, WHITE)
rect = text_surface.get_rect(center=v)
lcd.blit(text_surface, rect)
pygame.display.update()
while True:
# Scan touchscreen events
for event in pygame.event.get():
if(event.type is MOUSEBUTTONDOWN):
pos = pygame.mouse.get_pos()
print pos
elif(event.type is MOUSEBUTTONUP):
pos = pygame.mouse.get_pos()
print pos
#Find which quarter of the screen we're in
x,y = pos
if y < 120:
if x < 160:
GPIO.output(17, False)
else:
GPIO.output(4, False)
else:
if x < 160:
GPIO.output(17, True)
else:
GPIO.output(4, True)
sleep(0.1)
Подключение PiTFT 2.8″ (ILI9341) к Raspberry Pi
Схема: V2.1
Прежде чем все это поставить необходимо включь SPI
#sudo raspi-config
Выбираем: Advanced options
Затем выбираем: Enable SPI
И отвечаем на все вопрсы YES
После этого лучше перегрузиться.
Для установки к этому дисплею необходимо поставить следующие пакеты:
sudo apt-get install build-essential python-dev python-smbus python-pip python-imaging python-numpy
sudo pip install RPi.GPIO
git clone https://github.com/adafruit/Adafruit_Python_ILI9341.git
cd Adafruit_Python_ILI9341
sudo python setup.py install
Для проверки работоспособности:
sudo python image.py
Скорее всего ничего не заработает.
А дело в том что сигнал D/C расположен не там где должен быть.
D/C – Data or Command pin. В этой версии TFT он находиться на GPIO 25
Это легко определить по схеме.
Короче, открываете пример: image.py
И вносите следующие исправление.
Было:
# Raspberry Pi configuration.
DC = 18
RST = 23
SPI_PORT = 0
SPI_DEVICE = 0
Нужно:
# Raspberry Pi configuration.
DC = 25
RST = 23
SPI_PORT = 0
SPI_DEVICE = 0
- Python библиотека для програмирования: http://effbot.org/imagingbook/
- Использование GPIO из Python на Raspberry Pi
- http://matplotlib.org/
Небольшой пример того что можно сделать: Нужно доставит
apt-get install python-matplotlib
import RPIO
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
import random as random
import Adafruit_ILI9341 as TFT
import Adafruit_GPIO as GPIO
import Adafruit_GPIO.SPI as SPI
import matplotlib
matplotlib.use(‘Agg’) # Must be before importing matplotlib.pyplot or pylab!
import matplotlib.pyplot as plt
RPIO.setup(18, RPIO.IN)
RPIO.setup(18, RPIO.IN, pull_up_down=RPIO.PUD_UP)
input_value = RPIO.input(18)
# Raspberry Pi configuration.
DC = 25
RST = 23
SPI_PORT = 0
SPI_DEVICE = 0
# Create TFT LCD display class.
disp = TFT.ILI9341(DC, rst=RST, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE, max_speed_hz=64000000))
# Initialize display.
disp.begin()
# Clear the display to a red background.
# Can pass any tuple of red, green, blue values (from 0 to 255 each).
disp.clear((255, 255, 255))
# Get a PIL Draw object to start drawing on the display buffer.
draw = disp.draw()
my_dpi=96
fig = plt.figure(figsize=(320/my_dpi, 240/my_dpi), dpi=my_dpi)
# fig = plt.figure()
items = [1, 2, 3, 4, 5, 6, 7]
while (input_value == 1):
disp.clear((255, 255, 255))
input_value = RPIO.input(18)
random.shuffle(items)
plt.plot(items)
fig.savefig(‘/var/ramdisk/temp.png’,dpi=my_dpi)
image = Image.open(‘/var/ramdisk/temp.png’)
image = image.rotate(90).resize((240, 320))
disp.display(image)