'''
ESP32 和 ESP32-S3 微控制器都提供了靈活的 SPI(串行外設介面)配置,允許您將 SPI 功能指派給各種 GPIO 引腳。以下是它們的 SPI 能力概述:
ESP32 SPI 配置:
ESP32 擁有四個 SPI 外設:
SPI0:主要用於內部的閃存記憶體通信。
SPI1:也用於內部的閃存記憶體。
SPI2(HSPI):通常用於外部 SPI 設備。
SPI3(VSPI):另一個 SPI 總線,用於外部設備。
對於外部 SPI 通信,建議使用 HSPI 或 VSPI。 這些總線具有獨立的總線信號,每個總線最多可驅動三個 SPI 從層。
大英百科全書
ESP32 允許您將 SPI 功能指派給各種 GPIO 引腳。
例如,HSPI 的預設 SPI 引腳為:
MISO:GPIO12
MOSI:GPIO13
SCK:GPIO14
CS:GPIO15
然而,您可以根據需要將這些功能重新映射到其他 GPIO。
例如,要使用 GPIO23 作為 MOSI,GPIO19 作為 MISO,GPIO18 作為 SCK,GPIO5 作為 CS,您可以在代碼中相應地配置 SPI 總線。
大英百科全書
ESP32-S3 SPI 配置:
ESP32-S3 同樣支持靈活的 SPI 配置。
它擁有多個 SPI 外設,您可以使用 GPIO 矩陣將 SPI 功能指派給各種 GPIO 引腳。
這種靈活性使您能夠選擇最適合您應用的引腳。
例如,要使用 GPIO21 作為 MOSI,GPIO22 作為 MISO,GPIO23 作為 SCK,GPIO19 作為 CS,您可以在代碼中配置 SPI 總線。
ESP32-S3 的 GPIO 矩陣使您能夠將 SPI 信號路由到幾乎任何可用
藍速花園
注意事項:
GPIO 矩陣:ESP32 和 ESP32-S3 都利用 GPIO 矩陣,允許將外設信號路由到各種 GPIO 引腳。
這一特性提供了引腳指派的靈活性,但需要仔細配置,以確保信號的正確路由。
CHINESEPOD
速度限制:當通過 GPIO 矩陣路由 SPI 信號時,存在速度限制。
例如,使用 GPIO 矩陣時,支持的全雙工傳輸速度最高可達 26 MHz。
使用專用的 SPI 引腳可以支持更高的速度,最高可達 80 MHz。
因此,在選擇引腳配置時,請考慮您的應用需求和性能要求。
'''
#test OK2025/1/6----------------------------------------------------
"""ILI9341 demo (color wheel)."""
from time import sleep
from ili9341 import Display, color565
from machine import Pin, SPI
from math import cos, pi, sin
HALF_WIDTH = const(120)
HALF_HEIGHT = const(160)
CENTER_X = const(119)
CENTER_Y = const(159)
ANGLE_STEP_SIZE = 0.05 # Decrease step size for higher resolution
PI2 = pi * 2
def hsv_to_rgb(h, s, v):
"""
Convert HSV to RGB (based on colorsys.py).
Args:
h (float): Hue 0 to 1.
s (float): Saturation 0 to 1.
v (float): Value 0 to 1 (Brightness).
"""
if s == 0.0:
return v, v, v
i = int(h * 6.0)
f = (h * 6.0) - i
p = v * (1.0 - s)
q = v * (1.0 - s * f)
t = v * (1.0 - s * (1.0 - f))
i = i % 6
v = int(v * 255)
t = int(t * 255)
p = int(p * 255)
q = int(q * 255)
if i == 0:
return v, t, p
if i == 1:
return q, v, p
if i == 2:
return p, v, t
if i == 3:
return p, q, v
if i == 4:
return t, p, v
if i == 5:
return v, p, q
def test():
"""Test code."""
# Baud rate of 40000000 seems about the max
# TFT 顯示器設置
ROTATION = 180
#!!!!!!LED 3.3V 背光(Backlight)
spi = SPI(1, baudrate=40000000, sck=Pin(15), mosi=Pin(7))
display = Display(spi, cs=Pin(4), dc=Pin(6), rst=Pin(5), rotation=ROTATION)
display.clear(color565(0, 255, 0))
print('w=', display.width, 'h=', display.height)
x, y = 0, 0
angle = 0.0
# Loop all angles from 0 to 2 * PI radians
while angle < PI2:
# Calculate x, y from a vector with known length and angle
x = int(CENTER_X * sin(angle) + HALF_WIDTH)
y = int(CENTER_Y * cos(angle) + HALF_HEIGHT)
color = color565(*hsv_to_rgb(angle / PI2, 1, 1))
display.draw_line(x, y, CENTER_X, CENTER_Y, color)
angle += ANGLE_STEP_SIZE
sleep(5)
for r in range(CENTER_X, 0, -1):
color = color565(*hsv_to_rgb(r / HALF_WIDTH, 1, 1))
display.fill_circle(CENTER_X, CENTER_Y, r, color)
sleep(9)
display.cleanup()
test()
Loading
ili9341-cap-touch
ili9341-cap-touch