Xiaohei's Blog
headpicBlur image

前言#

还记得小时候仰望蓝天,看着飞机划过留下的白线,以及看着空军飞行员从天上俯瞰大地时那种广阔与豁达的视野,心里总会萌生出一种对飞翔的渴望。可惜的是我终究没有一个飞行员的身体,也算是些许的遗憾吧。庆幸的是科技发展的今天,借助开源硬件的蓬勃发展,我不必成为航天工程师,也能亲手打造属于自己的飞行器,也能简单的窥见梦想中的场景。

这篇博客将带你走进 ESP32 小型四旋翼无人机的制作过程,这不是一个犹如大疆无人机那样完美的作品。但这里的每一行代码、每一个焊点,都是通向天空的阶梯。哪怕你之前只是点亮过一颗 LED,只要跟着这篇教程走,你也一定能亲手让这些电路板和电机在空中飞翔。

我不想把这写成一篇枯燥的技术文档,更想它可以成为一份陪你一起探索未知的飞行日记。准备好了吗?Let’s go for it!

软件安装#

在实现真正的飞行之前,我们需要先搭建好我们的软件编译环境。这里我们选择乐鑫官方的 ESP-IDF,它虽然上手曲线稍陡,但能让我们更深入地掌控硬件,也更好的能在后续找到相关的问题。

  1. 下载安装包

首先,我们需要获取 ESP-IDF Tools Installer。前往乐鑫官网下载页面,滚动到页面下方,在往期版本上找到如下图所示的版本(最好下载安装这个版本哦,其他的可能有些乱七八糟的问题)。然后选择 Download,下载完成后,双击打开,准备开始安装。

ESP-IDF 下载界面

  1. 环境配置向导

安装过程其实并不复杂,按照向导一步步来即可:

  • 选择语言:安装程序启动后的第一件事就是选择语言,选一个你看着顺眼的就行。

语言

  • 环境检测:程序会自动检测你当前的系统环境。如果缺了什么组件(比如 Python、Git),它会提示你补全。

环境

  • 路径设置:如果你是第一次安装,在后续页面中选择一个合适的路径即可。但切记不要包含中文或空格,尽量使用全英文路径,否则后续编译时可能会报错报到让你怀疑人生。

路径

  • 选择组件:在这一步,我们选择完全安装版本。这是目前比较稳定且功能完善的版本,直接下一步即可,这里非必要情况尽量不要去改动。

组件

  1. 等待安装与驱动修复

点击“安装”后,安装程序会自动下载并配置所需的工具链。当看到“安装完成”的界面时,开发环境已经配置完成!此时你的桌面上应该会出现两个黑色的图标,ESP-IDF 5.3 PowerShellESP-IDF 5.3 CMD。它们是命令行的开发工具,另外还有一个图形化工具 Espressif IDF,这个可能更适合新手玩家,也更方便一些。

安装

创建项目#

环境装好了,不跑个程序怎么行。在嵌入式世界里,点灯是仪式感,输出 “Hello World” 是信仰。让我们先让 ESP32 对这个世界打个招呼。

  1. 启动与初始化

双击打开桌面上的 Espressif IDF。双击启动软件,创建工作空间。之后再在软件中创建 IDF 项目工程。填写一个项目,并创建一个文件夹来存放项目,然后点击 “下一步”。

工作空间 工程 工程1

  1. 编译与烧录
  • 接下来进行工程的编译烧录,并运行监测,记得接入开发板设备,选择所要使用的设备型号,以及设备端口号。

烧录

  • 编译、烧录运行监视项目,下面红框圈出来的三个工具就对应着编译、烧录、监视器。

编译

  • 点击上方菜单栏左上角的小锤子,编译项目。

编译1

  • 当看到下方的 “Console” 栏出现如下字样,就表示编译完成,可以进行烧录。

Console

  • 点击左上角的三角图标进行烧录

烧录 烧录1

  • 接下来,我们打开监视器看看运行结果。点击上方菜单栏中的“小电视”,会弹出下面的选项框,正常来说默认选项就好,直接点击 ”OK“ 即可

结果

硬件解析#

软件环境搭建完成了,现在我们再来看看硬件部分该怎么操作。关于焊接贴片部分我就不那么详细介绍了,根据我开源项目仓库中的 BOM 表和 PCB 文件进行相关物料的准备即可。下面就了解一下在准备齐全之后仍要面对的一些细碎的知识内容。

硬件设计方案#

  • 电源方案:先通过 ps7516 芯片,从电池电压 3.7v - 4.2v 升压成 5v 再通过 AMS1117-3.3 减压成 3.3v 主要起到一个缓冲的作用。

  • 电机方案:使用8520空心杯电机,电机的轴径分为 1.0 mm 和 1.2mm,要和螺旋桨的内径相同不然会装不上,就算硬怼上了螺旋桨也会偏心。

  • 电池方案:用 1s 动力电池(长度小于 65,宽小于 17.5,厚小于 7.5),一般有 3.7V 和 3.8V 两种,选择 3.7v 的即可,两种都可以使用,但 3.8v 的容易鼓包。接头类型选择 PH2.0 容易插拔。

  • LED 指示灯

    • 蓝灯飞机状态指示灯,用来显示当前飞控内部循环是在哪部分,例如:初始化或初始完成未解锁。
    • 电量指示灯**(黄)显示电池电压是否足够**。
    • 连接指示灯**(绿)用来显示飞控与地面站和遥控的连接状态**。
    • 电源灯**(红)就是上电就亮表示电源正常**。

进入下载模式#

我们的小飞机采用了 ESP32-S3-WROOM-1(D2N8) 模组。这不仅仅是一个 Wi-Fi 芯片,它双核 240MHz 的算力足够同时处理姿态解算和 PID 控制。对于该芯片程序烧写模式的触发,我们在电路上是这么设置的。下载电路是手动下载,通过飞控上 bootrst 按钮进入下载模式(先按住不放 boot,再按一下 rst 就可以进入下载模式了),然后可以直接通过串口下载(购买一个串口下载器按照四个引脚 rxtx3.3Vgnd连接上即可)。

连线图解

硬件拼装接线方案#

电机接口:四个电机接口 M1, M2, M3, M4 分别对应飞机的四个螺旋桨。

桨叶安装与电机接线:一定要注意正反桨的安装顺序!通常是对角线电机转向相同(比如 M1/M3 顺时针,M2/M4 逆时针),桨叶也要对应安装(A桨配顺时针电机,B桨配逆时针电机)。装反了,飞机就会原地打转或者直接栽地里。另外,我们使用的全部都是红蓝线电机,因为现在所卖的黑线电机的转向与程序定义不符,如果想要使用黑白线电机则需要手动将两根线的线序进行交换

小飞机

软件架构#

  1. 姿态解算(AHRS)

飞机要飞得稳,首先得知道自己“歪”了没。我们使用 MPU6050 六轴传感器(三轴加速度计 + 三轴陀螺仪)。

  • 获取数据:通过 I2C 总线,我们不断读取 MPU6050 的原始数据。
  • 互补滤波/卡尔曼滤波:原始数据是有噪声的。加速度计在剧烈运动时不可信,陀螺仪会有温漂。我们需要把两者结合起来,算出一个干净、准确的欧拉角(Pitch, Roll, Yaw)。
  1. PID 控制

这是整篇博客最核心的算法设计。PID(比例-积分-微分)控制器的设计是让飞机对抗重力和扰动的一个最重要的环节。

  • 外环(角度环)

    • 目标是遥控器给的期望角度(比如我想让飞机向前倾 10 度)。
    • 输入是当前的角度,输出是期望的角速度。
    • 简单说:我想让飞机歪一点,PID 算出需要多快的转动速度。
  • 内环(角速度环)

    • 目标是外环给的期望角速度。
    • 输入是陀螺仪实测的角速度,输出是直接给电机的 PWM 油门值。
    • 简单说:为了达到那个转动速度,我要给电机加多大的劲儿。

框架

  1. 电机混控

算出了 Pitch、Roll、Yaw 三个轴需要的控制量后,如何分配给四个电机?这就需要混控算法

motor1 = throttle + pitch_out + roll_out - yaw_out;
motor2 = throttle + pitch_out - roll_out + yaw_out;
motor3 = throttle - pitch_out - roll_out - yaw_out;
motor4 = throttle - pitch_out + roll_out + yaw_out;
c

(注:具体正负号取决于你的电机布局和转向定义,这里仅为示意)

上位机调试#

在实现飞行的时候,我们很难肉眼看出 PID 参数的好坏。这时候就需要上位机(Ground Control Station)来帮忙。推荐使用匿名上位机 (AnoTC)

上位机

  1. 连接:通过 USB 或 Wi-Fi 数传连接 ESP32。
  2. 波形观察:在上位机里,你可以看到实时的姿态曲线。
  3. 参数在线调整:不用每次改参数都重新烧录代码。通过上位机协议,我们可以实时修改 PID 参数,实时看效果。

上位机1

结语#

从一行编译烧录命令到飞机第一次颤颤巍巍地离地,这中间可能会经历无数次的炸机、断桨和代码报错。但当你亲手写的算法让飞行器稳稳地悬停在空中的那一刻,那种成就感是无与伦比的。

这篇博客主要带大家理清了 ESP32 无人机开发的脉络。后续我会在对应的位置补充更多实战图片和详细的接线图。

ESP32 小型四旋翼开发指南
https://xiaohei94.github.io/blog/esp32-uav
Author 红鼻子小黑
Published at December 10, 2025
Comment seems to stuck. Try to refresh?✨