MicroPython-ST7735 (STM32F4)

MicroPython-ST7735 (STM32F4) – Работает.
Библиотека вот отсюда. https://github.com/boochow/MicroPython-ST7735
Немного поправил SPI.

  • LED – 3.3V
  • VCC – 3.3V
  • SCK – PA5
  • SDA – PA7
  • A0 – PA3
  • RESET – PB10
  • CS – PA4

self.dc = pyb.Pin(pyb.Pin.cpu.A3, pyb.Pin.OUT, pyb.Pin.PULL_DOWN)
self.reset = pyb.Pin(pyb.Pin.cpu.B10, pyb.Pin.OUT, pyb.Pin.PULL_DOWN)
self.cs = pyb.Pin(pyb.Pin.cpu.A4, pyb.Pin.OUT, pyb.Pin.PULL_DOWN)

spi = SPI(1, SPI.MASTER, baudrate=20000000, polarity=0, phase=0)

 

TFT 2.8″ Example for pygame

import 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

import pygame
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

447_image

Схема: V2.1

raspberry_pi_pitftschem

Прежде чем все это поставить необходимо включь SPI

#sudo raspi-config
Выбираем: Advanced options
Затем выбираем: Enable SPI
И отвечаем на все вопрсы YES
После этого лучше перегрузиться.

Для установки к этому дисплею необходимо поставить следующие пакеты:

sudo apt-get update
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

Для проверки работоспособности:

cd examples
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

Небольшой пример того что можно сделать: Нужно доставит
apt-get install python-matplotlib

#!/usr/bin/python
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)