AE3 OLED Breakout¶
A AE3 OLED Breakout combina a OpenMV AE3 com um OLED RGB de 128 × 128, um joystick de 5 direções e um conector ARM SWD de 10 pinos para visualização autônoma, entrada simples e depuração JTAG/SWD.
Para o datasheet completo, fotos e informações de compra, consulte a página do produto AE3 OLED Breakout.
Destaques¶
OLED RGB de 128 × 128 controlado por um controlador SSD1351 via SPI.
Joystick de 5 direções AS90R com um botão central de pressionar, exposto no barramento I²C
P4/P5.Botão de reset e chave de recuperação para acesso UART ao secure-enclave.
Chave de desconexão do OLED para remover eletricamente o painel do barramento SPI.
Dois conectores Qwiic no mesmo barramento I²C
P4/P5.Conector ARM Cortex Debug de 10 pinos para depuração SWD/JTAG.
Quatro pontos de teste de gancho para terra.
Nota
Quatro furos de montagem M1.6 nos cantos permitem parafusar a breakout em um gabinete ou suporte.
Referência de pinos¶
Todos os sinais da AE3 na breakout são extraídos do conector B2B na parte inferior da AE3 e levados para dois conectores laterais — P0–P5 de um lado, P6–P9 do outro — ambos referenciados a 3,3 V. A lista completa de funções alternativas de cada pino está na página OpenMV AE3; a breakout usa os pinos da seguinte forma:
Pino |
Referência |
Recursos da AE3 |
Uso na breakout |
|---|---|---|---|
P0 |
3,3 V |
SPI0 MOSI / I2C2 SCL / UART4 TX / TIM0 T1 / PDM D3 |
OLED SPI MOSI |
P1 |
3,3 V |
SPI0 MISO / I2C2 SDA / UART4 RX / TIM0 T0 |
livre |
P2 |
3,3 V |
SPI0 SCLK / LPI2C SDA / UART5 TX / TIM1 T1 |
OLED SPI SCLK |
P3 |
3,3 V |
SPI0 SS / LPI2C SCL / UART5 RX / TIM1 T0 / PDM C3 |
OLED SPI CS |
P4 |
3,3 V |
I2C1 SCL / UART1 TX / TIM2 T1 / PDM C0 / CAN TX |
Joystick / Qwiic I²C SCL |
P5 |
3,3 V |
I2C1 SDA / UART1 RX / TIM2 T0 / PDM D0 / CAN RX |
Joystick / Qwiic I²C SDA |
RESET |
3,3 V |
NRST |
Pressione o botão RESET na placa ou puxe para GND para resetar a AE3 |
P6 |
3,3 V |
I2C1 SDA / UART3 CTS / TIM9 T0 |
livre |
P7 |
3,3 V |
I2C1 SCL / UART3 RTS / TIM9 T1 |
OLED RESET |
P8 |
3,3 V |
I3C SDA / UART3 RX / TIM5 T0 / ADC ch S10 |
OLED DC (seleção de registrador) |
P9 |
3,3 V |
I3C SCL / UART3 TX / TIM5 T1 / ADC ch S11 |
IRQ do joystick (ativo em nível baixo na mudança de estado) |
trilho de 3,3 V |
— |
— |
Alimenta o OLED, o expansor do joystick e os dispositivos Qwiic |
trilho GND |
— |
— |
Terra comum |
Nota
A chave de recuperação alterna um mux USB interno na AE3: os próprios pinos USB da AE3 são desconectados da porta USB-C, e um conversor USB-serial na UART do secure-enclave é conectado à porta em seu lugar. Com a chave acionada, ferramentas Alif no lado do host podem se comunicar com o secure enclave para reprogramar o bootloader da AE3. Deixe a chave desabilitada para operação normal, de modo que a porta USB-C atue como a USB da AE3.
Nota
A chave de habilitação do OLED precisa estar ligada para o OLED funcionar — ela controla a alimentação do painel e conecta os pinos de controle do OLED (P0, P2, P3, P7, P8) até a GPIO da AE3. Com a chave desligada, apenas P4, P5 e P9 permanecem conectados. O estado atual da chave aparece no expansor do joystick como o bit 0x40 — o pino bruto do expansor lê nível baixo quando a chave está habilitada.
Conectores Qwiic¶
Dois conectores Qwiic JST-SH de 4 pinos e 1,0 mm ficam na breakout e compartilham o mesmo barramento I²C P4/P5 que o expansor do joystick na placa, portanto dispositivos Qwiic adicionais devem evitar o endereço do expansor do joystick (0x63).
Pino |
Sinal |
|---|---|
1 |
GND |
2 |
+3,3 V |
3 |
SDA ( |
4 |
SCL ( |
Conector JTAG¶
O conector ARM Cortex Debug de 10 pinos e 1,27 mm na breakout é conectado diretamente às linhas SWD/JTAG da AE3. Todos os sinais são referenciados a 1,8 V — use uma sonda com deslocamento de nível ou uma cuja tensão de destino acompanhe VCC_REF (pino 1).
Pino |
Sinal |
|---|---|
1 |
VCC_REF (+1,8 V) |
2 |
TMS (SWDIO) |
3 |
+1,8 V |
4 |
TCK (SWCLK) |
5 |
GND |
6 |
TDO (SWO) |
7 |
chaveta (sem pino) |
8 |
TDI |
9 |
GND |
10 |
DEBUG_RST_N (reset de JTAG/depuração — separado do NRST do sistema) |
Uso¶
Controle o OLED através de display.SPIDisplay com uma instância de controlador SSD1351. Transmita quadros da câmera para o painel de 128 × 128:
import csi
import time
import display
import image
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.VGA)
csi0.window((400, 400))
lcd = display.SPIDisplay(width=128, height=128,
controller=display.SSD1351())
clock = time.clock()
while True:
clock.tick()
lcd.write(csi0.snapshot(),
hint=image.CENTER | image.SCALE_ASPECT_KEEP)
print(clock.fps())
Leia o joystick de 5 direções através do driver congelado pca9674a.PCA9674A. O expansor aciona P9 em mudanças de estado, então conecte um callback de IRQ que armazene o novo estado dos botões. Os botões são ativos em nível baixo no expansor; o código abaixo aplica XOR na leitura com 0xFF, de modo que um bit setado em state significa pressionado:
Bit |
Direção |
|---|---|
|
Joystick para a direita |
|
Joystick para cima |
|
Joystick para a esquerda |
|
Joystick para baixo |
|
Pressionar central do joystick |
|
Chave de habilitação do OLED (setado em |
import csi
import time
import display
from pca9674a import PCA9674A
from machine import I2C
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.VGA)
csi0.window((400, 400))
lcd = display.SPIDisplay(width=128, height=128,
controller=display.SSD1351())
clock = time.clock()
state = 0
cursor_x = 0
cursor_y = 0
def read_expander(pin):
global exp, state
# Buttons are active‑low on the expander; XOR for active‑high bits.
state = exp.read() ^ 0xFF
exp = PCA9674A(I2C(1), irq_pin="P9", callback=read_expander)
def update_cursor():
global cursor_x, cursor_y
if state & 0x01: cursor_x += 2 # Right
if state & 0x02: cursor_y -= 2 # Up
if state & 0x04: cursor_x -= 2 # Left
if state & 0x08: cursor_y += 2 # Down
if state & 0x10: # Centre
cursor_x = 0
cursor_y = 0
while True:
clock.tick()
update_cursor()
lcd.write(csi0.snapshot(), x=cursor_x, y=cursor_y,
x_scale=128 / 400, y_scale=128 / 400)
print(clock.fps())