PICO-Cam-A

来自Waveshare Wiki
跳转至: 导航搜索

说明

PICO-Cam-A
{{{name2}}}
{{{name3}}}
功能简介
特性 无特性,不解释
主控 RP2040
' 无特性,不解释
' 无特性,不解释
' 无特性,不解释
接口 USB Type-C

产品概述

PICO-Cam-A 是一款Waveshare设计的高性能的微控制器开发板,其在较小的板型情况下,板载了1.14inch LCD、Cam摄像头、
按键等外设,并且引出了部分GPIO与Debug接口,方便用户开发,并嵌入应用到产品中。

产品特性

  • 采用 Raspberry Pi 设计的 RP2040 微控制器芯片
  • 搭载双核 ARM Cortex M0 + 处理器,运行频率高达 133MHz 灵活时钟
  • 内置了 264KB 的 SRAM 和 2MB 的片上 Flash
  • 采用 Type-C 接口,紧跟时代潮流,无需纠结正反插
  • 板载 HM01B0 灰度摄像头
  • 板载 1.14 英寸 240×135 像素的 65K 彩色 IPS LCD 显示屏
  • USB1.1 主机和设备支持
  • 支持低功耗睡眠和休眠模式
  • 可通过 USB 识别为大容量存储器进行拖放式下载程序
  • 13 个 GPIO 经过 1.27 间距排母引出
  • 2 个 SPI,2 个 I2C,2 个 UART,4 个 12 位 ADC,13 个可控 PWM 通道
  • 准确的片上时钟和定时器
  • 温度传感器
  • 片上加速浮点库
  • 8 个可编程 I/O (PIO) 状态机,用于自定义外设支持

产品参数

LCD参数
控制芯片 ST7789V 分辨率 135(H)RGB x 240(V)
通信接口 I2C 显示尺寸 14.864(H)x 24.912(V)mm
显示面板 IPS 像素大小 0.1101(H)x 0.1035(V)mm

引脚分布


PICO-Cam-A-details-inter.jpg

尺寸图


PICO-Cam-A-details-size.jpg

Pico快速上手

基础介绍

Raspberry Pi Pico的基础介绍

C/C++系列

对于 C/C++,建议使用 Pico VS Code 进行开发,这是一款 Microsoft Visual Studio Code 扩展,旨在让您在为 Raspberry Pi Pico 系列开发板创建、开发和调试项目时更加轻松。无论您是初学者还是经验丰富的专业人士,此工具都可以帮助您自信而轻松地进行 Pico 开发。下面我们介绍如何安装该扩展并使用。

安装VSCode

  1. 首先,点击下载 pico-vscode 程序包,解压并打开程序包,双击安装 VSCode
    Pico-vscode-1.JPG
    注意:如果已安装 vscode 注意检查版本是否为 v1.87.0 或更高版本
    Pico-vscode-2.JPG
    Pico-vscode-3.JPG

安装扩展

  1. 点击扩展,选择从 VSIX 安装
    Pico-vscode-4.JPG
  2. 选择 vsix 后缀的软件包,点击安装
    Pico-vscode-5.JPG
  3. 随后 vscode 会自动安装 raspberry-pi-pico 及其依赖扩展,可以点击刷新查看安装进度
    Pico-vscode-6.JPG
  4. 右下角显示完成安装,关闭 vscode
    Pico-vscode-7.JPG

配置扩展

  1. 打开目录 C:\Users\用户名,将整个 .pico-sdk 拷贝至该目录
    Pico-vscode-8.JPG
  2. 拷贝完成
    Pico-vscode-9.JPG
  3. 打开 vscode,对 Raspberry Pi Pico 扩展中各个路径进行配置
    Pico-vscode-10.JPG
    配置如下:
    Cmake Path:
    ${HOME}/.pico-sdk/cmake/v3.28.6/bin/cmake.exe
    
    Git Path:
    ${HOME}/.pico-sdk/git/cmd/git.exe    
    
    Ninja Path:
    ${HOME}/.pico-sdk/ninja/v1.12.1/ninja.exe
    
    Python3 Path:
    ${HOME}/.pico-sdk/python/3.12.1/python.exe             
    

新建工程

  1. 配置完成,测试新建工程,输入工程名、选择路径后点击 Creat 创建工程
    测试官方示例,可以点击工程名旁的 Example 进行选择
    Pico-vscode-11.JPG
  2. 创建工程成功
    Pico-vscode-12.JPG
  3. 选择SDK版本
    Pico-vscode-13.JPG
  4. 选择 Yes 进行高级配置
    Pico-vscode-14.JPG
  5. 选择交叉编译链,13.2.Rel1 适用 ARM 核,RISCV.13.3 适用 RISCV 核,这里根据您的需求任意选择其中一个即可
    Pico-vscode-15.JPG
  6. CMake 版本选择 Default(前面配置的路径)
    Pico-vscode-16.JPG
  7. Ninja 版本选择 Default
    Pico-vscode-17.JPG
  8. 选择开发板
    Pico-vscode-18.JPG
  9. 点击 Complie 进行编译
    Pico-vscode-19.JPG
  10. 成功编译出 uf2 格式文件即可
    Pico-vscode-20.JPG

导入工程

  1. 导入工程的 Cmake 文件不能有中文(包括注释),否则可能导致导入失败
  2. 导入自己的工程需要在 Cmake 文件中加一行代码,才能正常切换 pico 和 pico2,否则即使选择 pico2,编译得到的固件仍是适用于 pico 的
    Pico-vscode-21.JPG
    set(PICO_BOARD pico CACHE STRING "Board type")
    

更新扩展

  1. 离线包中的扩展版本为0.15.2,安装完成后,您也可以选择更新至最新版本
    Pico-vscode-22.JPG

开源例程

树莓派官方C/C++示例程序 (github)
Arduino官方C/C++示例程序 (github)

示例程序

C例程

烧录固件

方式1:按住BOOT键后连接电脑后,松开BOOT键,电脑会出现一个可移动磁盘,将后缀为.uf2的固件库复制进去即可
方式2:连接电脑后,同时按下BOOT键跟RESET键,先松开RESET键再松开BOOT键,电脑会出现一个可移动磁盘,将后缀为.uf2的固件库复制进去即可

代码解析

示例说明
该示例主要是通过摄像头捕获图像,并显示在 1.14inch LCD 上。程序使用了多核心处理,其中 Core 1 负责获取图像数据以及图像处理,Core 0 负责图像显示
Core 1 代码解析

  • 推送数据
    multicore_fifo_push_blocking() 是 Pico SDK 提供的一个函数,用于将数据推送到多核心系统的 FIFO(First In, First Out)队列中。在这里 Core 1 会将 FLAG_VALUE 推送到 FIFO 中,Core 0 在执行流程中则会阻塞等待来自 Core 1 的数据 FLAG_VALUE
    multicore_fifo_push_blocking(FLAG_VALUE);
    
  • 等待数据
    Core 1 阻塞等待来自 Core 0 的数据
    uint32_t ack = multicore_fifo_pop_blocking();
    
  • LCD初始化
    调用 DEV_Module_Init() 初始化 LCD 相关的引脚以及按键,调用 LCD_1IN14_V2_Init() 初始化 LCD
    DEV_Module_Init();
    LCD_1IN14_V2_Init(HORIZONTAL);
    LCD_1IN14_V2_Clear(BLACK);
    UDOUBLE Imagesize = LCD_1IN14_V2_HEIGHT * LCD_1IN14_V2_WIDTH * 2;
    UWORD *BlackImage;
    if ((BlackImage = (UWORD *)malloc(Imagesize)) == NULL)
    {
        printf("Failed to apply for black memory...\r\n");
        exit(0);
    }
    
  • 显示图像
    调用 Paint_DrawImage() 绘制图像,再调用 LCD_1IN14_V2_Display() 在 LCD 上显示图像
    Paint_NewImage((UBYTE *)BlackImage, LCD_1IN14_V2.WIDTH, LCD_1IN14_V2.HEIGHT, 0, WHITE);
    Paint_SetScale(65);
    Paint_SetRotate(ROTATE_0);
    Paint_DrawImage(gImage_waveshare, 0, 0, 240, 135);
    LCD_1IN14_V2_Display(BlackImage);
    DEV_Delay_ms(500);
    
  • 初始化摄像头
    这段代码调用 cam_config_struct() 初始化摄像头配置结构体 config,然后通过调用 cam_init() 对摄像头进行初始化
    struct cam_config config;
    cam_config_struct(&config);
    cam_init(&config);
    
  • 图像处理
    这段代码是一个循环,其中摄像头在每次迭代中捕获一帧图像,然后对图像进行处理,最终将处理后的图像数据存储在 displayBuf 中,并将 imageReady 标志设置为 1,表示图像已准备好显示
    while (true) {
        cam_capture_frame(&config);
    
        uint16_t index = 0;
        for (int y = 134; y > 0; y--) {
            for (int x = 0; x < 240; x++) {
                uint16_t c = image_buf[(y)*324+(x)];
                uint16_t imageRGB = (((c & 0xF8) << 8) | ((c & 0xFC) << 3) | ((c & 0xF8) >> 3));
                displayBuf[index++] = (uint16_t)(imageRGB >> 8) & 0xFF;
                displayBuf[index++] = (uint16_t)(imageRGB) & 0xFF;
            }
        }
    
        imageReady = 1;
    }
    

Core 0 代码解析

  • 启动Core1
    multicore_launch_core1 是 Pico SDK 提供的函数,用于在 Raspberry Pi Pico 上启动 Core 1 的执行。这行代码通过调用 multicore_launch_core1() 启动 Core 1 执行指定的函数 core1_entry()
    multicore_launch_core1(core1_entry);
    
  • 等待数据
    Core 0 阻塞等待来自Core 1的数据,若成功接收数据 FLAG_VALUE 则向 Core 1 发送数据
    uint32_t ack = multicore_fifo_pop_blocking();
    if (ack != FLAG_VALUE)
        printf("Error: Core 0 failed to receive acknowledgment from core 1!\n");
    else {
        multicore_fifo_push_blocking(FLAG_VALUE);
        printf("Success: Core 0 Received acknowledgment from core 1!\n");
    }
    
  • 主循环
    主循环中不断地检查 imageReady 标志。一旦检测到 imageReady 标志为 1,表示图像已经准备好显示,就调用 LCD_1IN14_V2_Display() 显示图像,并在显示后将 imageReady 标志重置为 0
    while (1) {
        if (imageReady == 1) {
            LCD_1IN14_V2_Display((uint16_t*)displayBuf);
            // Reset the imageReady flag after displaying the image
            imageReady = 0;
        }
        DEV_Delay_ms(1);
    }
    

运行程序

  • 烧录固件,上电启动后 PICO-Cam-A 显示开机界面,然后实时显示摄像头捕获到的画面
    PICO-Cam-A-show.jpg


FAQ

技术支持


联系人:庄工
EMAIL: 2880803589@qq.com
电话: 0755-83040712
QQ: 2880803589
微信:扫下方二维码添加
Zzy.jpg

说明:进行售后服务前,请准备好客户信息(定货单位、定货人等),以供验证