Example: 50-OpenMV-Boards/50-IMXRT-Boards/50-Board-Control/spi_control.py

# 本作品采用MIT许可证授权。
# 版权所有 (c) 2013-2024 OpenMV LLC。保留所有权利。
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# SPI 控制
#
# 这个示例展示了如何使用SPI总线直接控制LCD屏幕,而无需
# 使用内置的LCD驱动程序。您需要LCD扩展板来运行此示例。

import sensor
import time
from machine import Pin, SPI
import struct

cs = Pin("P3", Pin.OUT)
rst = Pin("P7", Pin.OUT)
rs = Pin("P8", Pin.OUT)
# 您的OpenMV Cam的硬件SPI总线始终是SPI总线1。

# 注意:SPI 时钟频率不总是请求的频率。硬件仅支持
# 总线频率除以预分频器(可以是 2、4、8、16、32、64、128 或 256)的频率。
spi = SPI(1, baudrate=int(1000000000 / 66), polarity=0, phase=0)


def write_command_byte(c):
    cs.low()
    rs.low()
    spi.write(bytes([c]))
    cs.high()


def write_data_byte(c):
    cs.low()
    rs.high()
    spi.write(bytes([c]))
    cs.high()


def write_command(c, *data):
    write_command_byte(c)
    if data:
        for d in data:
            write_data_byte(d)


def write_image(img):
    cs.low()
    rs.high()
    reversed_img = struct.unpack('H' * (img.size() // 2), img)
    reversed_array = struct.pack('>' + 'H' * len(reversed_img), *reversed_img)
    spi.write(reversed_array)
    cs.high()


# 重置LCD。
rst.low()
time.sleep_ms(100)
rst.high()
time.sleep_ms(100)

write_command(0x11)  # 睡眠退出
time.sleep_ms(120)

# 内存数据访问控制
# 写入0xC8以启用BGR模式。
write_command(0x36, 0xC0)

# 接口像素格式
write_command(0x3A, 0x05)

sensor.reset()  # 初始化相机传感器。
sensor.set_pixformat(sensor.RGB565)  # 必须是这个
sensor.set_framesize(sensor.QQVGA2)  # 必须是这个
sensor.skip_frames(time=2000)  # 让新设置生效。
clock = time.clock()  # 跟踪FPS。

while True:
    clock.tick()  # Track elapsed milliseconds between snapshots().
    img = sensor.snapshot()  # 拍照并返回图像。

    write_command(0x2C)  # 写入图像命令...
    write_image(img)

    # 显示开启
    write_command(0x29)

    print(clock.fps())  # 注意:您的 OpenMV Cam 在连接到
    # 计算机时运行速度会减半。断开连接后,FPS 应该会增加。

results matching ""

    No results matching ""