升级Pixy CMUcam5 固件

目录

[一、Pixy / CMUcam5 固件升级的作用是什么?](#一、Pixy / CMUcam5 固件升级的作用是什么?)

二、准备工作

[1. 必备物品](#1. 必备物品)

[2. 安装 PixyMon 软件](#2. 安装 PixyMon 软件)

[三、开始升级固件(最推荐的 自动升级法)](#三、开始升级固件(最推荐的 自动升级法))

[步骤 1:连接 Pixy 到电脑](#步骤 1:连接 Pixy 到电脑)

[步骤 2:打开 PixyMon](#步骤 2:打开 PixyMon)

[步骤 3:进入固件升级界面](#步骤 3:进入固件升级界面)

[步骤 4:选择固件文件(官方自动下载)](#步骤 4:选择固件文件(官方自动下载))

[步骤 5:等待写入(切记不要断电)](#步骤 5:等待写入(切记不要断电))

[步骤 6:确认版本](#步骤 6:确认版本)

四、手动升级固件(适合高级用户)

[方法 A:通过"强制 DFU 模式"升级](#方法 A:通过“强制 DFU 模式”升级)

步骤:

[方法 B:使用命令行 pixyflash(Linux 高级玩家)](#方法 B:使用命令行 pixyflash(Linux 高级玩家))

五、固件升级失败的情况及解决方法

六、实际例子(可直接照做)

[例子 1:从 2.0.15 升级到 2.0.27](#例子 1:从 2.0.15 升级到 2.0.27)

[例子 2:升级后 Pixy 不能跟踪颜色?恢复出厂设置](#例子 2:升级后 Pixy 不能跟踪颜色?恢复出厂设置)

[例子 3:升级固件 + 配置 Arduino](#例子 3:升级固件 + 配置 Arduino)

[Arduino 读取 Pixy 颜色块:](#Arduino 读取 Pixy 颜色块:)

[例子 4:升级固件后开启行跟踪(line tracking)](#例子 4:升级固件后开启行跟踪(line tracking))

[例子 5:刷固件后切换为 SPI 通信](#例子 5:刷固件后切换为 SPI 通信)

[示例 1:最基础示例(读取颜色块坐标)](#示例 1:最基础示例(读取颜色块坐标))

[示例 2:控制舵机朝向识别物体(常见:自瞄、跟踪机器人)](#示例 2:控制舵机朝向识别物体(常见:自瞄、跟踪机器人))

[示例 3:如果你使用的是 Arduino UNO + SPI(ICSP)](#示例 3:如果你使用的是 Arduino UNO + SPI(ICSP))

[示例 4:按最大块来控制小车(常用于巡线 / 追物体机器人)](#示例 4:按最大块来控制小车(常用于巡线 / 追物体机器人))

[示例 5:Pixy 查询所有识别到的块(多目标识别)](#示例 5:Pixy 查询所有识别到的块(多目标识别))

[示例 6:Pixy + 按颜色签名识别不同物体](#示例 6:Pixy + 按颜色签名识别不同物体)


这是一份最完整、最详细、从零开始的 Pixy CMUcam5 固件升级指南,包含:准备工作、两种升级方式(官方 / 手动)、常见问题、错误恢复方法,以及实际例子。


一、Pixy / CMUcam5 固件升级的作用是什么?

升级 Pixy 固件可以带来:

  • 修复识别不稳定、丢帧、掉线的问题

  • 增加新特性(例如改进颜色代码、I2C/SPI 稳定性)

  • 增强算法能力(新版本改进了跟踪准确度)

  • 提高和 Arduino / Raspberry Pi / Robot 控制器的兼容性


二、准备工作

1. 必备物品

  • Pixy CMUcam5 本体

  • Micro-USB 数据线

  • 一台电脑(Windows 或 macOS 或 Linux)

2. 安装 PixyMon 软件

PixyMon 是官方管理工具,用来:

  • 升级固件

  • 调试颜色跟踪

  • 查看实时图像

下载地址(CMU 官方):

https://docs.pixycam.com/wiki/doku.php?id=wiki:v1:pixymon_installing_pixymon


三、开始升级固件(最推荐的 自动升级法

PixyMon 自带固件升级程序,只需连接 USB ------ 最简单、最不容易失败


步骤 1:连接 Pixy 到电脑

  • 使用 micro-USB 连接 Pixy → 电脑

  • Pixy 会亮灯且 PixyMon 能识别设备


步骤 2:打开 PixyMon

  • 打开 PixyMon

  • 等待屏幕右上角显示 Connected

若无法连接,请换 USB 口或线。


步骤 3:进入固件升级界面

依次点击:

File → Flash firmware...

然后会打开固件选择窗口。


步骤 4:选择固件文件(官方自动下载)

PixyMon 会自动列出所有官方固件,例如:

  • firmware-pixy-3.0.27.hex

  • firmware-pixy-2.0.13.hex

  • firmware-pixy-1.0.xx.hex(老版本)

你只需选择最新版即可。


步骤 5:等待写入(切记不要断电)

写入时 Pixy 会闪灯并重启,只需等待 10--20 秒。

完成后 PixyMon 会显示:

Firmware upload successful


步骤 6:确认版本

点击:

Help → About

即可查看当前固件版本。


四、手动升级固件(适合高级用户)

如果 PixyMon 无法升级(常见于砖机 / bootloader 丢失),你可以用手动方法。


方法 A:通过"强制 DFU 模式"升级

Pixy 内部有 bootloader,以下操作能让它进入 DFU(Device Firmware Update)模式。

步骤:

  1. 拔掉 Pixy 电源

  2. 使用回形针短接按钮(某些版本是按住白色按钮)

  3. 插上 USB

  4. 松开按钮

  5. PixyMon 会提示检测到 DFU 模式

  6. 再按前面步骤刷固件

如果你的 Pixy 没有按钮,常见做法是:

  • 按住按钮模块

  • 插电

  • 进入软件刷写界面


方法 B:使用命令行 pixyflash(Linux 高级玩家)

Pixy 官方提供 CLI:

bash 复制代码
pixyflash firmware-pixy-3.0.27.hex /dev/ttyACM0

或 macOS:

bash 复制代码
./pixyflash firmware.hex

适合做自动部署或批量刷机。


五、固件升级失败的情况及解决方法

问题 可能原因 解决办法
PixyMon 无法识别设备 USB 供电不足 / 驱动问题 换 USB 口、换线、重装 PixyMon
固件升级途中失败 USB 接触不良 使用短线、不要动 Pixy
固件刷完后黑屏 进入 DFU 模式了 使用 "Flash firmware..." 再刷一次
完全无法开机 bootloader 受损极少见 换电脑尝试、使用 CLI 工具、发给 CMU 官方保修

六、实际例子(可直接照做)


例子 1:从 2.0.15 升级到 2.0.27

  1. 用 USB 连接 Pixy → 电脑

  2. 打开 PixyMon

  3. File → Flash Firmware

  4. 选择最新版(如 pixy_firmware_2.0.27.hex

  5. 点击 Flash

  6. Pixy 重启

  7. Help → About → 确认版本


例子 2:升级后 Pixy 不能跟踪颜色?恢复出厂设置

固件升级后参数也可能改变,可按:

Action → Restore default parameters

恢复默认设置。


例子 3:升级固件 + 配置 Arduino

升级后你可以进行常见开发,例如:

Arduino 读取 Pixy 颜色块:

cpp 复制代码
#include <Pixy.h>

Pixy pixy;

void setup(){
  Serial.begin(115200);
  pixy.init();
}

void loop(){
  uint16_t blocks = pixy.getBlocks();
  if(blocks){
    Serial.print("block x:");
    Serial.println(pixy.blocks[0].x);
  }
}

新版固件识别更稳定。


例子 4:升级固件后开启行跟踪(line tracking)

新固件增强了线检测算法:

File → Configure → Line Tracking Mode

启用后 Pixy 能检测线路并发控制信号给机器人。


例子 5:刷固件后切换为 SPI 通信

新版固件改善 SPI 时序。

在 Arduino 中:

cpp 复制代码
#include <PixySPI_SS.h>
PixySPI_SS pixy;

void setup(){
  Serial.begin(115200);
  pixy.init();
}

下面给你 最完整、可直接使用、涵盖常用功能的 Pixy(CMUcam5) + Arduino 示例代码合集 。这些例子都是针对 Pixy1(不是 Pixy2) ,并使用 Arduino Pixy 库(pixy.h)

你只需要将代码复制到 Arduino IDE 中、下载 Pixy Arduino Library(官方库),即可马上运行。

示例 1:最基础示例(读取颜色块坐标)

这是你最常用的核心模板。

cpp 复制代码
#include <Pixy.h>

Pixy pixy;

void setup()
{
  Serial.begin(115200);
  Serial.println("Starting Pixy...");
  pixy.init();
}

void loop()
{
  uint16_t blocks = pixy.getBlocks();

  if (blocks)
  {
    Serial.print("Blocks detected: ");
    Serial.println(blocks);

    // 打印第一个识别到的方块
    Serial.print("X: ");
    Serial.println(pixy.blocks[0].x);

    Serial.print("Y: ");
    Serial.println(pixy.blocks[0].y);

    Serial.print("Width: ");
    Serial.println(pixy.blocks[0].width);

    Serial.print("Height: ");
    Serial.println(pixy.blocks[0].height);
  }
}

➡ 输出示例(串口监视器):

cpp 复制代码
Blocks detected: 1
X: 147
Y: 82
Width: 22
Height: 35

示例 2:控制舵机朝向识别物体(常见:自瞄、跟踪机器人)

Pixy 能自动输出伺服控制值,你不需要写 PID!

cpp 复制代码
#include <Pixy.h>
#include <SPI.h>

Pixy pixy;

void setup()
{
  Serial.begin(115200);
  pixy.init();

  // 打开 Pixy 的伺服输出(舵机端口 0/1)
  pixy.setServos(500, 500);  
}

void loop()
{
  uint16_t blocks = pixy.getBlocks();

  if (blocks)
  {
    int32_t pan = pixy.blocks[0].x - 160;  // 图像中心 = 160
    int32_t tilt = pixy.blocks[0].y - 100; // 图像中心 = 100

    // 将偏差换算成伺服角度
    pixy.setServos(1500 + pan * 3, 1500 + tilt * 3);
  }
}

让 Pixy 自动追踪目标时,仅需:

  • 将舵机插入 Pixy 的 servo port 0 / port 1

  • 运行上面代码

Pixy 会实时自动旋转「瞄准」颜色块。


示例 3:如果你使用的是 Arduino UNO + SPI(ICSP)

Pixy 自动支持 SPI,不需要改代码;但如果你想手动使用 SPI:

cpp 复制代码
#include <PixySPI_SS.h>

PixySPI_SS pixy;

void setup()
{
  Serial.begin(9600);
  pixy.init();
}

void loop()
{
  uint16_t blocks = pixy.getBlocks();

  if (blocks)
  {
    Serial.print("Detected ");
    Serial.println(blocks);

    for (int i=0; i<blocks; i++)
    {
      Serial.print("Block ");
      Serial.println(i);
      Serial.print("  x: ");
      Serial.println(pixy.blocks[i].x);
      Serial.print("  y: ");
      Serial.println(pixy.blocks[i].y);
    }
  }
}

示例 4:按最大块来控制小车(常用于巡线 / 追物体机器人)

假设你用两个电机:

cpp 复制代码
#include <Pixy.h>

Pixy pixy;

// 电机接口定义
int leftMotor = 5;
int rightMotor = 6;

void setup()
{
  Serial.begin(115200);
  pixy.init();
  pinMode(leftMotor, OUTPUT);
  pinMode(rightMotor, OUTPUT);
}

void loop()
{
  uint16_t blocks = pixy.getBlocks();

  if (blocks)
  {
    int x = pixy.blocks[0].x;

    if (x < 140)
    {
      // 向左转
      analogWrite(leftMotor, 100);
      analogWrite(rightMotor, 200);
    }
    else if (x > 180)
    {
      // 向右转
      analogWrite(leftMotor, 200);
      analogWrite(rightMotor, 100);
    }
    else
    {
      // 前进
      analogWrite(leftMotor, 200);
      analogWrite(rightMotor, 200);
    }
  }
  else
  {
    // 没找到目标时停止
    analogWrite(leftMotor, 0);
    analogWrite(rightMotor, 0);
  }
}

示例 5:Pixy 查询所有识别到的块(多目标识别)

cpp 复制代码
#include <Pixy.h>
Pixy pixy;

void setup()
{
  Serial.begin(115200);
  pixy.init();
}

void loop()
{
  uint16_t blocks = pixy.getBlocks();

  if (blocks)
  {
    Serial.println("All blocks:");
    
    for (int i = 0; i < blocks; i++)
    {
      Serial.print("Block ");
      Serial.println(i);
      Serial.print("  SIG: ");
      Serial.println(pixy.blocks[i].signature);
      Serial.print("  X: ");
      Serial.println(pixy.blocks[i].x);
      Serial.print("  Y: ");
      Serial.println(pixy.blocks[i].y);
      Serial.print("  W: ");
      Serial.println(pixy.blocks[i].width);
      Serial.print("  H: ");
      Serial.println(pixy.blocks[i].height);
    }
  }
}

示例 6:Pixy + 按颜色签名识别不同物体

例如 signature=1 = 红色,signature=2 = 蓝色。

cpp 复制代码
#include <Pixy.h>
Pixy pixy;

void setup()
{
  Serial.begin(115200);
  pixy.init();
}

void loop()
{
  uint16_t blocks = pixy.getBlocks();

  if (blocks)
  {
    for (int i = 0; i < blocks; i++)
    {
      if (pixy.blocks[i].signature == 1)
        Serial.println("Detected RED object");

      if (pixy.blocks[i].signature == 2)
        Serial.println("Detected BLUE object");
    }
  }
}
相关推荐
管理大亨1 小时前
Canal:企业数据实时同步的利器
数据库·mysql
蒲公英源码1 小时前
AI智慧教育平台架构设计与实现方案,基于Jdk17+SpringBoot3AI智慧教育平台
java·人工智能·mysql·jdk
i***17182 小时前
mysql如何发现慢查询sql
数据库·sql·mysql
v***55342 小时前
MySQL 中如何进行 SQL 调优
android·sql·mysql
阿宁又菜又爱玩2 小时前
MySQL基础学习
数据库·学习·mysql
u***B7923 小时前
Navicat for MySQL下载安装教程
数据库·mysql
白日做梦Q3 小时前
Navicat for MySQL 详细使用指南:命令行操作与界面操作双视角全解析
大数据·mysql·adb·数据库开发
l***74943 小时前
Mysql中使用sql语句生成雪花算法Id
sql·mysql·算法
u***32433 小时前
Mysql官网下载Windows、Linux各个版本
linux·数据库·mysql