AE3 OLED Breakout¶
AE3 OLED Breakout จับคู่ OpenMV AE3 กับ OLED สี RGB ขนาด 128 × 128, จอยสติ๊กแบบ 5 ทิศทาง และหัวต่อ ARM SWD 10 พิน สำหรับการแสดงตัวอย่างแบบ stand‑alone การรับ input อย่างง่าย และการดีบัก JTAG/SWD
สำหรับ 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 และนำออกมายังหัวต่อพินด้านข้างสองชุด — P0–P5 ด้านหนึ่ง และ P6–P9 อีกด้านหนึ่ง — ทั้งคู่ อ้างอิง 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 ( |
4 |
SCL ( |
หัวต่อ 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 หมายถึง กด:
บิต |
ทิศทาง |
|---|---|
|
จอยสติ๊กขวา |
|
จอยสติ๊กขึ้น |
|
จอยสติ๊กซ้าย |
|
จอยสติ๊กลง |
|
จอยสติ๊กกดตรงกลาง |
|
สวิตช์เปิด OLED (set ใน |
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())