AE3 OLED Breakout

AE3 OLED Breakout จับคู่ OpenMV AE3 กับ OLED สี RGB ขนาด 128 × 128, จอยสติ๊กแบบ 5 ทิศทาง และหัวต่อ ARM SWD 10 พิน สำหรับการแสดงตัวอย่างแบบ stand‑alone การรับ input อย่างง่าย และการดีบัก JTAG/SWD

AE3 OLED Breakout

สำหรับ datasheet ฉบับสมบูรณ์ รูปภาพ และการสั่งซื้อ ดูได้ที่ หน้าผลิตภัณฑ์ AE3 OLED Breakout

จุดเด่น

  • OLED สี RGB 128 × 128 ขับด้วยคอนโทรลเลอร์ SSD1351 ผ่าน SPI

  • จอยสติ๊ก AS90R แบบ 5 ทิศทาง พร้อมปุ่มกดตรงกลาง เชื่อมต่อผ่านบัส I²C P4/P5

  • ปุ่ม Reset และ สวิตช์ recovery สำหรับเข้าถึง secure‑enclave UART

  • สวิตช์ตัดการเชื่อมต่อ OLED เพื่อถอดแผงออกจากบัส SPI ทางไฟฟ้า

  • ขั้วต่อ Qwiic สองตัวบนบัส I²C เดียวกันกับ P4/P5

  • หัวต่อ ARM 10‑pin Cortex Debug สำหรับดีบัก SWD/JTAG

  • จุดทดสอบสายกราวด์สี่จุด

Note

รูยึด M1.6 ที่มุมทั้งสี่ช่วยให้สามารถขันสกรูบอร์ดนี้เข้ากับเคสหรืออุปกรณ์ยึดได้

อ้างอิงพิน

สัญญาณ AE3 ทั้งหมดบน breakout นำมาจาก B2B header ด้านล่างของ AE3 และนำออกมายังหัวต่อพินด้านข้างสองชุด — P0P5 ด้านหนึ่ง และ P6P9 อีกด้านหนึ่ง — ทั้งคู่ อ้างอิง 3.3 V รายการ alt function ครบถ้วนสำหรับแต่ละพินอยู่ในหน้า OpenMV AE3; breakout ใช้พินดังนี้:

พิน

อ้างอิง

ฟีเจอร์ AE3

การใช้งานบน 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

ว่าง

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

กดปุ่ม RESET บนบอร์ดหรือดึงลง GND เพื่อรีเซ็ต AE3

P6

3.3 V

I2C1 SDA / UART3 CTS / TIM9 T0

ว่าง

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 (เลือกรีจิสเตอร์)

P9

3.3 V

I3C SCL / UART3 TX / TIM5 T1 / ADC ch S11

Joystick IRQ (active low เมื่อสถานะเปลี่ยน)

ราง 3.3V

จ่ายไฟให้ OLED, ตัวขยายสัญญาณจอยสติ๊ก และอุปกรณ์ Qwiic

ราง GND

กราวด์ร่วม

Note

สวิตช์ recovery สลับ USB mux ภายใน AE3: พิน USB ของ AE3 ถูกตัดการเชื่อมต่อจากพอร์ต USB‑C และตัวแปลง USB เป็น serial บน secure‑enclave UART จะเชื่อมต่อกับพอร์ตแทน เมื่อเปิดสวิตช์นี้ เครื่องมือ Alif ฝั่งโฮสต์จะสื่อสารกับ secure enclave เพื่อโปรแกรม bootloader ของ AE3 ใหม่ได้ ปล่อย ปิด สวิตช์ไว้สำหรับการใช้งานปกติเพื่อให้พอร์ต USB‑C ทำหน้าที่เป็น USB ของ AE3

Note

สวิตช์เปิด OLED ต้องเปิดจึงจะใช้ OLED ได้ — มันควบคุมพลังงานไปยังแผงและเชื่อมต่อพินควบคุม OLED (P0, P2, P3, P7, P8) เข้ากับ GPIO ของ AE3 เมื่อปิดสวิตช์จะมีเฉพาะ P4, P5 และ P9 ที่ยังคงเชื่อมต่ออยู่ สถานะปัจจุบันของสวิตช์ปรากฏบน joystick expander ที่บิต 0x40 — พินขยายสัญญาณดิบจะอ่าน ต่ำเมื่อสวิตช์เปิดอยู่

หัวต่อ Qwiic

ขั้วต่อ Qwiic JST‑SH 1.0 mm 4 พินสองตัวอยู่บน breakout และใช้บัส I²C เดียวกับ P4/P5 ร่วมกับ joystick expander บนบอร์ด ดังนั้นอุปกรณ์ Qwiic เพิ่มเติมต้องหลีกเลี่ยงแอดเดรสของ joystick expander (0x63)

พิน

สัญญาณ

1

GND

2

+3.3 V

3

SDA (P5)

4

SCL (P4)

หัวต่อ JTAG

หัวต่อ ARM Cortex Debug 10 พิน ขนาด 1.27 mm บน breakout เชื่อมต่อตรงไปยังสาย SWD/JTAG ของ AE3 สัญญาณทั้งหมด อ้างอิง 1.8 V — ใช้โพรบแบบแปลงระดับสัญญาณหรือโพรบที่แรงดันเป้าหมายติดตาม VCC_REF (พิน 1)

พิน

สัญญาณ

1

VCC_REF (+1.8 V)

2

TMS (SWDIO)

3

+1.8 V

4

TCK (SWCLK)

5

GND

6

TDO (SWO)

7

key (ไม่มีพิน)

8

TDI

9

GND

10

DEBUG_RST_N (รีเซ็ต JTAG/debug — แยกจาก system NRST)

การใช้งาน

ขับ OLED ผ่าน display.SPIDisplay พร้อม instance คอนโทรลเลอร์ SSD1351 สตรีมเฟรมกล้องไปยังแผง 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())

อ่านจอยสติ๊กแบบ 5 ทิศทางผ่านไดรเวอร์ pca9674a.PCA9674A ที่ฝังอยู่ใน frozen module ตัวขยายสัญญาณจะ assert P9 เมื่อสถานะเปลี่ยน ดังนั้นให้ต่อคอลแบ็ก IRQ ที่บันทึกสถานะปุ่มใหม่ ปุ่มจะ active‑low บน expander; โค้ดด้านล่าง XOR ค่าที่อ่านกับ 0xFF เพื่อให้บิตที่ set ใน state หมายถึง กด:

บิต

ทิศทาง

0x01

จอยสติ๊กขวา

0x02

จอยสติ๊กขึ้น

0x04

จอยสติ๊กซ้าย

0x08

จอยสติ๊กลง

0x10

จอยสติ๊กกดตรงกลาง

0x40

สวิตช์เปิด OLED (set ใน state เมื่อ OLED เปิดอยู่)

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())