【ESP32-IDF+VScode】开发笔记(一):从点灯开始——点亮LED


前言

点亮LED是各类MCU开发入门的第一步。本文将通过【ESP32点亮LED】灯这个小实验来入门使用ESP-IDE+VScode开发环境对ESP32的开发,并熟悉ESP32开发过程中使用到的相关CLI命令,了解GPIO配置、操作的相关函数。


目标

  • 熟悉ESP-IDF+VScode开发环境
  • 了解ESP-IDF工程文件结构
  • 学习使用常用的idf.py命令
  • 创建一个LED的工程,并编译实现LED的点亮

一、ESP-IDF+VScode开发环境介绍

针对ESP32的开发环境有很多中选择,包括但不限于:Arduino IDE、ESP-IDF IDE、VScode+ESP-IDF插件,本系列笔记所使用开发环境的均为VScode+ESP-IDF插件,因此本文详细介绍此开发环境。

总体界面介绍

整个开发环境主要分为四大部分:文件管理区、代码编辑区、ESP-IDF终端区、ESP-IDF插件工具区,对于熟悉VScode的开发者来说,这几个分区应该都很熟悉,但需要特别注意ESP-IDF终端区ESP-IDF插件工具区,尤其是ESP-IDF终端区,每次进行开发之前,应首先确保所打开的终端是ESP-IDF Terminal从终端进入当前工程文件夹,否则idf.py相关命令可能会无法运行,ESP-IDF Terminal可以从ESP-IDF插件工具区打开。
在这里插入图片描述

在这里插入图片描述

ESP-IDF插件工具区介绍

这些工具都是一些idf.py命令的可视化UI形式,通过单击即可运行相关的idf.py命令,对于不熟悉ESP-IDF CLI指令的开发者来说比较友好,下面将从左往右依次介绍。

图标idf.py命令作用
ESP-IDF Select port to useidf.py -p PORT设置ESP连接端口,只需设置一次即可全局设置,若换端口可再使用此命令更新端口。例:idf.py -p COM5
ESP-IDF Set espressif device targetidf.py set-target设置编译的目标芯片,后接芯片类型,例如:idf.py set-target esp32
ESP-IDF Current projectcd PROJECT_PATH选择工程文件目录,可使用Linux cd 命令
ESP-IDF SDK Configuration Editidf.py menuconfig打开项目配置窗口,进行一些项目配置
ESP-IDF Full cleanidf.py fullclean清除所有编译文件
ESP-IDF Build projectidf.py build编译烧录工程
ESP-IDF Select flash method——————选择烧录方法:JTAG/UART/DFU
ESP-IDF Flash deviceidf.py flash烧录程序
ESP-IDF Monitor deviceidf.py monitor打开IDF监视器,用于收发目标设备串口的串行数据,同时兼具IDF的其他特性。(Ctrl + ]可退出IDF监视器)
ESP-IDF Build, Flash and Monitoridf.py -p PORT flash monitor组合命令,编译、烧录并打开IDF监视器
ESP-IDF Open ESP-IDF Terminal——————打开ESP-IDF终端
ESP-IDF Execute custom taskCtrl + C退出当前任务

二、ESP-IDF工程文件结构

1.官方通用结构

一个通用工程目录结构树如下:

- myProject/
             - CMakeLists.txt
             - sdkconfig
             - components/ - component1/ - CMakeLists.txt
                                         - Kconfig
                                         - src1.c
                           - component2/ - CMakeLists.txt
                                         - Kconfig
                                         - src1.c
                                         - include/ - component2.h
             - main/       - CMakeLists.txt
                           - src1.c
                           - src2.c

             - build/

2.模块化组件结构

简单的LED工程目录结构如下:

- LED/
             - CMakeLists.txt	# 顶层项目 CMakeLists.txt 文件,这是 CMake 用于学习如何构建项目的主要文件,可以在这个文件中设置项目全局的 CMake 变量。
             - sdkconfig		# 项目配置文件,执行 idf.py menuconfig 时会创建或更新此文件,文件中保存了项目中所有组件(包括 ESP-IDF 本身)的配置信息。
             - README.md
             - components/ 		# 自定义组件总目录
             				- led/ 	# 自定义组件目录,其命名通常为某个驱动硬件名
             						- CMakeLists.txt	# 自定义组件的 CMakeLists.txt 文件,用来添加本组件所用的头文件路径等。
                                    - led.c				# 自定义组件源文件,用来编写相关硬件的初始化函数、驱动函数等。
                                    - include/ 			# 自定义组件头文件目录,用来存放自定义组件源文件的头文件。
                                    			- led.h		# 自定义组件头文件。
             - main/   			# 项目主函数目录   
             				- CMakeLists.txt	# 主函数目录 CMakeLists.txt 文件。
                            - main.c			# 项目主函数。

             - build/			# 编译文件存放目录,若没有创建此目录,执行 idf.py build 命令时会自动生成此文件夹。

小编有STM32开发经验,熟悉STM32的开发模式,习惯模块化编程,将所有的硬件外设都单独编写组件,然后将所有组件存放于自定义组件目录,这种方式方之后的便组件移植,无论在同平台还是不同平台,都给移植带来巨大的便利。此篇文章将会着重讲解自定义组件模块化的开发方式,并对比着官方的配置方式,给读者展现多种开发方式,供读者选择。

三、常用的idf.py命令

一般情况下,在使用终端开发时常用的命令主要有idf.py set-target <target> 、idf.py build 、idf.py -p PORT 、idf.py flash 、idf.py monitor 、idf.py fullclean

1. idf.py set-target <target>

@ 功能:编译前选择编译代码的目标芯片,可使用 idf.py --list-targets 命令列出所有可使用的芯片类型。
@ 示例:idf.py set-target esp32

2. idf.py build

@ 功能:构建当前目录下的工程。
@ 示例:idf.py build

3. idf.py -p PORT

@ 功能:设置ESP端口。
@ 示例:idf.py -p COM5

4. idf.py flash

@ 功能:烧录工程,在编译前使用此命令可自动编译后自动烧录,也可配合 -p 命令,选择端口,然后执行编译和烧录。
@ 示例:idf.py flash 或者 idf.py flash -p COM5

5. idf.py monitor

@ 功能:运行串口监视器
@ 示例:idf.py monitor

6. idf.py fullclean

@ 功能:删除所有build子目录内容,包括CMake配置输出,请谨慎使用。
@ 示例:idf.py fullclean

重要提示: 多个idf.py命令可以在同一行命令中组合使用。例如:idf.py -p COM5 clean flash monitor可以清除源代码树、编译工程、并将其烧录到目标芯片,随后运行串行监视器。
在同一调用中,多个 idf.py 命令的顺序并不重要,它们将自动以正确的程序执行,以使全部操作生效(例如先构建后烧录、先擦除后烧录)。


四、工程实战——点灯

1、新建空白工程

在VSCode中使用Ctrl + Shift + P命令调出命令面板,然后搜索ESP-IDF:新建项目如图:
在这里插入图片描述
然后设置项目名字、项目保存地址、开发板类型等,设置好后点击【choose template】选择模板,然后选择空模板,点击创建模板。
在这里插入图片描述
在这里插入图片描述

创建完成后如图:
在这里插入图片描述
再添加自定义组件,依然使用Ctrl + Shift + P命令调出命令面板,然后搜索ESP-IDF:创建新的ESP-IDF组件如图:
在这里插入图片描述
在这里插入图片描述

2、相关配置、代码

【配置CMakeLists】
首先配置自定义组件的CMake文件:components->led->CMakeLists.txt完整配置内容如下:

file(TO_CMAKE_PATH "$ENV{IDF_PATH}" IDF_PATH)  # 将Windows下ESP-IDF的路径转化CMAKE路径

idf_component_register(SRCS "led.c"
                    INCLUDE_DIRS "include"
                    # 添加官方gpio组件
                    "${IDF_PATH}/components/driver/gpio/include"
                    )

【配置自定义组件头文件】
components->led->include->led.h对于学过32单片机编程的,可按照自己的习惯编写,对于没有单片机开发经验的,再此提供一个简单的例子

#ifndef __LED_H
#define __LED_H
 
#include "driver/gpio.h"

void led_init(void);
void led_on(void);
void led_off(void);

#endif

【编写自定义组件驱动】
components->led->led.c和头文件类似,可根据习惯编写。

#include <stdio.h>
#include "led.h"


#define LED_PIN 2

void led_init(void)
{
    gpio_config_t led_pin_config;
    led_pin_config.pin_bit_mask = 1<<LED_PIN;
    led_pin_config.mode = GPIO_MODE_OUTPUT;
    led_pin_config.pull_up_en = GPIO_PULLUP_DISABLE;
    led_pin_config.pull_down_en = GPIO_PULLDOWN_DISABLE;
    gpio_config(&led_pin_config);
}

void led_on(void)
{    
    gpio_set_level(LED_PIN, 1);
}

void led_off(void)
{
    gpio_set_level(LED_PIN, 0);
}

【编写主函数】
main->main.c,这里注意头文件的包含。

#include <stdio.h>
#include "led.h"
#include "FreeRTOS/freertos.h"
#include "FreeRTOS/task.h"


void app_main(void)
{
    while(1)
    {
        led_init();
        led_on();
        vTaskDelay(50);
        led_off();
        vTaskDelay(50);
    }
    
}

3、烧录前准备和烧录

  • 运行idf.py menuconfig命令,配置sdkconfig,初学者可不用设置里边的具体内容,一切默认即可。
  • 设置端口,运行idf.py -p COM5命令,不一定是COM5,要根据自己的端口设置
  • 对工程进行编译,运行idf.py build命令
  • 烧录工程,运行idf.py flash命令
  • 编译完成后会终端会提示烧录等相关信息
    在这里插入图片描述
  • 烧录日志
    在这里插入图片描述

4、Wokwi 在线仿真

【仿真链接】

https://wokwi.com/projects/403754468577945601

【仿真说明】
在wokwi里仿真,自定义函数都要写在main.c,不能像在VScode中那样将外设驱动单独列出,否则仿真会出错。

【仿真视频】

【ESP32-Wokwi仿真】:LED

【Wokwi仿真代码示例】

//main.c
#include <stdio.h>
#include "driver/gpio.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"

#define LED_PIN 2	//定义LED引脚为2

//LED引脚初始化函数
void led_init(void)
{
    gpio_config_t led_pin_config;
    led_pin_config.pin_bit_mask = 1<<LED_PIN;
    led_pin_config.mode = GPIO_MODE_OUTPUT;
    led_pin_config.pull_up_en = GPIO_PULLUP_DISABLE;
    led_pin_config.pull_down_en = GPIO_PULLDOWN_DISABLE;
    gpio_config(&led_pin_config);
}

//LED点亮
void led_on(void)
{    
    gpio_set_level(LED_PIN, 1);
}

//LED熄灭
void led_off(void)
{
    gpio_set_level(LED_PIN, 0);
}

//主函数
void app_main() {
    while(1)
    {
        led_init();
        led_on();
        vTaskDelay(50);
        led_off();
        vTaskDelay(50);
    }
}

五、常见问题及解决方案

1、vscode识别头文件有问题并标出波浪线

【解决方案】:删除.vscode文件夹内的文件,然后运行Ctrl + Shift + P调出vscode命令框,搜索ESP-IDF:添加vscode配置文件夹即可解决此问题,当然,此方法还可以解决很多波浪线问题。

问题不止一个,若有其他问题会继续补充在这里。每个人都会遇到各种各样的问题,若无法解决,可在评论区讨论交流或者私信小编,小编尽可能帮忙解决。

总结

本文章是一个简单的入门教程,旨在帮住初学者上手ESP-IDF开发环境,后续还会按照学习流程,更新用ESP-IDF开发ESP32的每一步教程,如果有兴趣的话,就点赞收藏关注不迷路!!!

<think>嗯,用户想知道怎么把Python+Vue+MySQL的项目部署到服务器上。首先,我得理清楚整个过程的大致步骤,确保每个部分都覆盖到。可能用户是个开发者,但可能对服务器部署不太熟悉,所以需要详细但易懂的步骤。 首先,用户的项目结构应该是前端用Vue,后端用Python,比如Django或Flask,再加上MySQL数据库。部署的话,通常需要服务器、域名、配置环境这些。我得考虑常见的服务器选择,比如阿里云、腾讯云这些,还有Ubuntu系统,因为比较常用。 然后,步骤大概分几部分:准备服务器、部署后端、部署前端、配置数据库、域名和Nginx反向代理,以及最后的维护。每个部分都需要详细说明,比如服务器设置包括更新系统、安装必要工具,可能还要配置防火墙。这里需要注意用户可能不熟悉ufw或者apt命令,得写清楚命令和步骤。 部署后端部分,得考虑Python环境,比如用virtualenv或者直接安装依赖。还要处理项目文件的上传,可能用git或者scp。这里要提醒用户安装依赖,比如Gunicorn和Nginx的配置,特别是Nginx的反向代理设置,可能需要给出示例配置文件的内容。还有Gunicorn的服务配置,用systemd来管理,确保服务在后台运行。 前端部署的话,Vue项目需要先构建生成静态文件,然后用Nginx来托管。可能需要指导用户如何修改nginx配置,指定root目录。同时,跨域问题可能在后端已经处理了,但如果有的话,可能需要提醒。 数据库方面,MySQL的安装和配置,创建用户和数据库,还有导入数据。这里要注意安全,比如设置root密码,限制远程访问,或者使用ssh隧道,避免直接暴露端口。用户可能需要知道如何导出本地数据并导入到服务器,用mysqldump命令。 域名和HTTPS部分,需要解释如何解析域名到服务器IP,然后用Certbot申请SSL证书,这涉及到安装Certbot和自动配置Nginx。这部分可能需要根据不同的操作系统给出具体命令,比如Ubuntu用的apt命令。 维护方面,可能需要用Git来更新代码,然后重启服务。另外,备份数据库和代码的步骤也很重要,提醒用户定期备份,避免数据丢失。 用户可能遇到的问题包括权限设置、服务启动失败、端口冲突、静态文件路径错误等,需要给出些排查建议,比如查看日志,检查配置文件语法。此外,安全方面需要强调防火墙设置,避免不必要的端口开放,使用SSH密钥登录,禁用root远程登录等。 最后,整个流程要尽量详细,但不要过于复杂,让用户步步跟着做就能完成部署。可能还需要根据用户使用的具体框架调整步骤,比如如果用的是Flask,可能和Django的部署稍有不同,但整体流程相似。确保每个命令和配置文件的示例正确,避免用户复制粘贴时出错。</think>以下是将Python+Vue+MySQL项目部署到服务器的具体操作流程,分为六个关键步骤: --- ### 、服务器基础准备 1. **服务器选择** - 推荐使用阿里云/腾讯云/华为云,选择Ubuntu 22.04 LTS系统 - 安全组开放端口:22(SSH), 80(HTTP), 443(HTTPS), 3306(MySQL按需开放) 2. **系统初始化** ```bash ssh root@your_server_ip # 连接服务器 apt update && apt upgrade -y # 更新系统 apt install -y git nginx mysql-server python3-pip python3-venv nodejs npm # 安装基础工具 ufw allow 22,80,443/tcp # 配置防火墙 ``` --- ### 二、Python后端部署(以Flask为例) 1. **项目上传** ```bash cd /var/www git clone https://github.com/yourname/backend.git # 或使用scp上传 cd backend && python3 -m venv venv source venv/bin/activate pip install -r requirements.txt # 包含gunicorn依赖 ``` 2. **Gunicorn+Nginx配置** ```ini # /etc/systemd/system/flask.service [Unit] Description=Gunicorn instance for Flask After=network.target [Service] User=root WorkingDirectory=/var/www/backend ExecStart=/var/www/backend/venv/bin/gunicorn -w 4 -b 0.0.0.0:5000 app:app Restart=always [Install] WantedBy=multi-user.target ``` ```bash systemctl daemon-reload systemctl start flask && systemctl enable flask ``` 3. **Nginx反向代理** ```nginx # /etc/nginx/sites-available/backend server { listen 80; server_name api.yourdomain.com; location / { proxy_pass http://127.0.0.1:5000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ``` ```bash ln -s /etc/nginx/sites-available/backend /etc/nginx/sites-enabled/ nginx -t && systemctl reload nginx ``` --- ### 三、Vue前端部署 1. **构建生产环境代码** ```bash cd frontend npm install npm run build # 生成dist目录 ``` 2. **Nginx托管静态文件** ```nginx # /etc/nginx/sites-available/frontend server { listen 80; server_name yourdomain.com; root /var/www/frontend/dist; index index.html; location / { try_files $uri $uri/ /index.html; } } ``` --- ### 四、MySQL数据库配置 1. **安全初始化** ```bash mysql_secure_installation # 设置root密码/删除测试库等 mysql -u root -p ``` ```sql CREATE DATABASE projectdb; CREATE USER 'projectuser'@'localhost' IDENTIFIED BY 'your_password'; GRANT ALL PRIVILEGES ON projectdb.* TO 'projectuser'@'localhost'; FLUSH PRIVILEGES; ``` 2. **导入本地数据** ```bash # 本地导出 mysqldump -u root -p projectdb > backup.sql # 服务器导入 scp backup.sql root@your_server_ip:/tmp mysql -u projectuser -p projectdb < /tmp/backup.sql ``` --- ### 五、域名与HTTPS配置 1. **域名解析** - 在域名控制台添加A记录:@ 和 www 指向服务器IP 2. **SSL证书申请** ```bash snap install --classic certbot certbot --nginx # 按提示选择要加密的域名 ``` --- ### 六、运维管理 1. **服务更新流程** ```bash cd /var/www/backend git pull systemctl restart flask ``` 2. **数据库备份** ```bash # 每日自动备份 crontab -e 0 3 * * * mysqldump -u projectuser -p'password' projectdb > /backups/db_$(date +\%F).sql ``` --- ### 常见问题排查 1. **服务启动失败** - 查看日志:`journalctl -u flask -f` - 检查端口占用:`netstat -tulnp | grep :5000` 2. **跨域问题** - 确认后端已配置CORS中间件 - 检查Nginx的`proxy_set_header`配置 3. **静态文件404** - 确认`nginx -t`通过配置检查 - 检查文件权限:`chmod -R 755 /var/www/frontend/dist` --- ### 安全建议 1. 使用SSH密钥登录代替密码登录 2. MySQL不要开放外网访问(通过SSH隧道连接) 3. 定期更新系统补丁:`unattended-upgrades` 部署完成后,可通过`https://yourdomain.com`访问前端,`https://api.yourdomain.com`访问后端API。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乔乔同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值