桌面小屏幕开发环境记录
在复刻小智学长的“桌面小屏幕”项目中,写下了这份开发记录,本篇记录开发乐鑫 ESP32 的准备工作
希望能够帮助后来想要学习的小伙伴们~
注意使用的IDF版本为小智学长项目配套的4.4.2! 以下是参考资料:
- IDF4.4.2 编程手册: ESP-IDF 编程指南 - ESP32 - ‒ ESP-IDF 编程指南 release-v4.4 文档
- 小智学长项目文档:桌面小屏幕实战课程资料文档_持续更新ing
- WSL2官方参考文档:适用于 Linux 的 Windows 子系统文档
目录
1. Linux开发环境方案一 - VMware虚拟机
1.1 VMware Workstation Pro下载(使用版本:17)
这里给出VMware官网地址
- 首先在从 VMware 官网进入 Broadcom Support,并注册账号登录
- 如下图所示,进入到下载界面,并直接搜索 VMware Workstation Pro!
- 如下图所示,选择下载 Windows 个人版
注意:检查网络适配器
安装 VMware 后需要确认自己的电脑是否成功安装VMware Network Adapter VMnet1
和VMware Network Adapter VMnet8
两个网络适配器,否则会影响虚拟机的联网功能。
这里提供一种验证的方法:
Windows + R
输入cmd
调出窗口,输入ipconfig
查看网络配置,出现下图所示则安装成功。
1.2 Ubuntu 下载与安装(使用版本:22.04)
这部分内容网上资源很多,且安装方式不难,我就不做过多的介绍~这里推荐下配置:
- 内存 ≥ \geq ≥ 4096 MB
- 硬盘 ≥ \geq ≥ 40GB
- 处理器 ≥ \geq ≥ 2
- 线程 ≥ \geq ≥ 2
1.3 VMware Tools 与共享文件夹
经过测试,在安装 Ubuntu 后,VMware Tools 会自动安装,此时可以观察到窗口自适应的效果,共享文件夹的设置方法请根据网上教程自行开启。
- VMware设置共享文件夹后,虚拟机中仍然看不到,执行以下指令
# 建立共享文件夹
$ sudo mkdir /mnt/hgfs
$ sudo vmhgfs-fuse .host:/ /mnt/hgfs/ -o allow_other
1.3.1 VMware Tools 和 open-vm-tools(我用着也没效果)
经过测试,在安装 Ubuntu 后,VMware Tools 会自动安装,此时可以观察到窗口自适应的效果,共享文件夹的设置方法请根据网上教程自行开启。
- VMware设置共享文件夹后,虚拟机中仍然看不到,执行以下指令
#
$ sudo mkdir /mnt/hgfs
$ sudo vmhgfs-fuse .host:/ /mnt/hgfs/ -o allow_other
1.3.2 Samba服务器配置
这部分我并未实际操作过,参考的小智学长的做法
sudo apt-get update
sudo apt-get install samba
sudo gedit /etc/samba/smb.conf
# 末尾添加以下
[share]
comment = samba home directory
path = /home/xxxx/esp 你本机路径
public = yes
browseable = yes
public = yes
read only = no
writable = yes
create mask = 0777
directory mask = 0777
available = yes
security = share
# 重启
sudo service smbd restart
sudo ufw allow samba
1.4 其他设置
1.5.1 切换无命令行模式
意思就是是以桌面化的形式启动还是命令行的形式启动
# 开机默认进入命令行模式
$ sudo systemctl set-default multi-user.target
# 开机默认进入图形用户界面
$ sudo systemctl set-default graphical.target
1.5 在 Ubuntu 中配置 SSH
注意,如果安装 Ubuntu 服务器版本的的话,SSH会默认安装,可以跳过这一步。
如果安装的 Ubuntu 桌面版,参考以下指令:
- SSH 操作指令
# 查看ssh版本
$ ssh -V
# 查看ssh是否启动
$ sudo ps -e | grep ssh
# ps -e 显示系统中所有正在运行的进程。
# 通过管道符号 |,结果会传递给 grep ssh,这会筛选出包含 "ssh" 字符串的进程。
# ssh卸载与安装
$ sudo apt-get remove openssh-server
$ sudo apt-get install openssh-server
# 启动ssh
$ sudo /etc/init.d/ssh start
# 重启ssh服务
$ sudo service ssh --full-restart
1.6 在 Window VS Code 中通过 SSH 命令行方式访问 Ubuntu
如何查看虚拟机 IP 地址:
# 查看 IP
$ ifconfig
# 如果无法查看 --> 安装 net-tools
$ sudo apt-get install net-tools
VSCode中安装SSH拓展并启动,填写如下信息,最后根据指引输入密码连接即可
Host
、HostName
:虚拟机IP地址User
:虚拟机用户名
2. Linux开发环境方案二 - WSL2
使用微软自家的WSL2即可免去了下载VMware和安装的功夫,最重要的是windows和linux的协同,使得文件夹的共享变得方便
我个人是采用的这个方法,感觉比较方便,详细教程上网寻找,如果大家搞不定我再补充
参考微软官方文档安装即可,打开即用!
2.1 镜像网络配置(使用主机代理)
修改文件.wslconfig
2.2 USB串口的接收(唯一的问题)(未完成)
WSL2 串口配置官方参考文档:适用
总结版:
- 下载安装 usbipd-win 项目
- 连接 USB 串口设备
- 管理员模式打开 PowerShell 并输入
usbipd list
3. 乐鑫ESP32 SDK环境搭建(基于Ubuntu 22.04)
3.1 更新
# 更新软件包列表
$ sudo apt-get update
# 更新已安装的软件,时间可能比较长,可以跳过
$ sudo apt-get upgrade
3.2 安装环境依赖工具
# 4.4版本项目
$ sudo apt-get install git wget flex bison gperf python3 python3-pip python3-setuptools cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0
# 新版本项目
$ sudo apt-get install git wget flex bison gperf python3 python3-pip python3-venv cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0
3.3 下载 ESP-IDF 源码(下载版本:4.4.2)
因为 GitHub 的网络连接问题出现错误,使用乐鑫官方的 esp-gitee-tools 下载工具,将 GitHub 的地址自动替换成 jihulab 上的镜像地址
$ mkdir -p esp
$ cd ~/esp
# 使用乐鑫工具,有代理的可以忽略
$ git clone https://gitee.com/EspressifSystems/esp-gitee-tools.git
$ cd esp-gitee-tools
$ ./jihu-mirror.sh set # 执行脚本
$ cd ..
# 注意这里下载的是4.4版本的esp-idf
$ git clone -b release/v4.4 --recursive https://github.com/espressif/esp-idf.git
# 如果下载过程中出现子模块没更新成功,可以进入esp_idf目录内,单独更新子模块,让子模块也切换成对应版本
$ git submodule update --init --recursive
# --init:初始化子模块(如果它们还没有被初始化)
# --recursive:递归地更新子模块,确保子模块中的子模块也被正确初始化和更新
3.4 安装编译链
除了 ESP-IDF 本身,您还需要安装 ESP-IDF 使用的各种工具,比如编译器、调试器、Python 包等。
由于访问 Github 较为缓慢,通过设置一个环境变量,实现优先选择 Espressif 的下载服务器进行 Github 资源下载:
$ cd ~/esp/esp-idf
# 选择 Espressif 的下载服务器,如果你能用代理就不需要这一条
$ export IDF_GITHUB_ASSETS="dl.espressif.com/github_assets"
$ ./install.sh
等待完成后提示如下所示,我们的esp-idf 就部署完成了!
Installing collected packages: reedsolo, pyserial, pyparsing, pygdbmi, pyelftools, construct, brotli, bitstring, zstandard, Werkzeug, urllib3, tqdm, six, pyyaml, Pygments, pycparser, packaging, msgpack, MarkupSafe, kconfiglib, itsdangerous, idna, greenlet, future, filelock, contextlib2, colorama, click, charset-normalizer, certifi, schema, requests, python-engineio, jinja2, gevent, ecdsa, cffi, requests-toolbelt, requests-file, python-socketio, Flask, cryptography, cachecontrol, Flask-SocketIO, Flask-Compress, idf-component-manager, gdbgui
Successfully installed Flask-0.12.5 Flask-Compress-1.15 Flask-SocketIO-2.9.6 MarkupSafe-2.1.5 Pygments-2.18.0 Werkzeug-0.16.1 bitstring-3.1.9 brotli-1.1.0 cachecontrol-0.14.0 certifi-2024.8.30 cffi-1.17.1 charset-normalizer-3.3.2 click-8.1.7 colorama-0.4.6 construct-2.10.54 contextlib2-21.6.0 cryptography-43.0.1 ecdsa-0.19.0 filelock-3.16.0 future-1.0.0 gdbgui-0.13.2.0 gevent-1.5.0 greenlet-3.0.3 idf-component-manager-1.5.3 idna-3.8 itsdangerous-2.0.1 jinja2-3.0.3 kconfiglib-13.7.1 msgpack-1.1.0 packaging-24.1 pycparser-2.22 pyelftools-0.31 pygdbmi-0.9.0.2 pyparsing-2.3.1 pyserial-3.5 python-engineio-3.14.2 python-socketio-4.6.1 pyyaml-6.0.2 reedsolo-1.5.4 requests-2.32.3 requests-file-1.5.1 requests-toolbelt-1.0.0 schema-0.7.5 six-1.16.0 tqdm-4.66.5 urllib3-1.26.20 zstandard-0.23.0
All done! You can now run:
. ./export.sh
3.5 设置 ESP-IDF 的环境变量
此时,您刚刚安装的工具尚未添加至 PATH 环境变量,无法通过“命令窗口”使用这些工具。因此,必须设置一些环境变量,这可以通过 ESP-IDF 提供的另一个脚本完成:
# 执行脚本文件
$ . $HOME/esp/esp-idf/export.sh
运行成功后提示如下所示:
Done! You can now compile ESP-IDF projects.
Go to the project directory and run:
idf.py build
注意,该设置只是针对当前登录的用户,我们退出了重新登录,这些环境变量就没有了,我们又要重新执行一下以上命令。 如果您需要经常运行 ESP-IDF,您可以为执行 export.sh
创建一个别名,具体步骤如下(也推荐在 Ubuntu 中直接打开 bashrc 添加命令,省去了使用 vim 的过程):
- 在终端中使用 vim 打开 bashrc:
sudo apt-get install vim
vim ~/.bashrc
- 按键盘
i
按键进行编辑,把以下路径添加到本地环境变量中:
alias get_idf='. $HOME/esp/esp-idf/export.sh'
- 按esc按键退出编辑,写入
:wq
(别漏冒号)保存退出 - 执行以下命令同步环境变量、刷新配置文件
source ~/.bashrc
- 直接执行
get_idf
即可
现在您可以在任何终端窗口中运行 get_idf
来设置或刷新 esp-idf 环境。
3.6 判断是否搭建成功
这里参考的小智学长的指令查看
kemp@ubuntu:~/work/esp/esp-idf$ idf.py --version
ESP-IDF v4.4.2-296-g4b8915d7af-dirty
kemp@ubuntu:~/work/esp/esp-idf$ git log
commit 4b8915d7af37b0cdb9ae2bc3a95c9f1bc797f6e0 (HEAD -> release/v4.4, origin/release/v4.4)
Merge: 7cedbfabdf e4df3e2ad7
Author: Island <island@espressif.com>
Date: Wed Sep 21 11:31:55 2022 +0800
Merge branch 'bugfix/lpn_not_recv_message_to_all_node_4.4' into 'release/v4.4'
ble_mesh: stack: Add option for lpn auto sub all-nodes(v4.4)
See merge request espressif/esp-idf!20264
3.7 版本查看与同步
如果你已经下载了其它版本的IDF,可以自行切换
# 回到idf原始目录
$ cd $IDF_PATH
# 用于从远程仓库拉取最新的更改,但不自动合并这些更改到本地分支
$ git fetch
# 切换到特定的版本 vX.Y.Z
$ git checkout vX.Y.Z
# 确保所有子模块都正确地下载和更新到当前指定的版本
$ git submodule update --init --recursive
重新执行设置后,执行get_idf
。
3.8 ipy.py
的常用命令
● idf.py --help
:可显示命令列表和使用说明。
● idf.py set-target esp32c3
:设置编译目标,如替换为esp32c3。
● idf.py menuconfig
:运行 menuconfig 终端图像化配置工具,可以选择或修改配置选项,配置结果将保存在sdkconfig文件中。
● idf.py build
:开始编译代码,编译产生的中间文件和最终的可执行程序将默认保存在项目的build目录。编译过程是增量式的,如果仅对一个源文件进行修改,在下次编译时将只编译已修改的文件。
● idf.pyclean
:清理项目编译产生的中间文件,下次编译时会强制编译整个项目。需要注意,清理时不会删除CMake配置和使用menuconfig修改的配置。
● idf.py fullclean
:删除整个build目录下的内容,包括所有CMake的配置输出文件。在下次构建项目时,CMake会从头开始配置项目。请注意,该命令会递归删除构建目录下的所有文件,请谨慎使用,项目配置文件不会被删除。
● idf.py flash
:将 build 生成的可执行程序二进制文件烧录到目标 ESP32-C3 中。选项-p <port_name>
和-b <baud_rate>
分别用于设置串口的设备名和烧录时的波特率,如果不指定这两个选项,将自动搜索串口并使用默认的波特率。
● idf.py monitor
:用于显示目标ESP32-C3的串口输出。选项-p
可用于设置主机端串口的设备名,在串口打印期间,可按下组合键Ctrl+] 退出监视器。
4. 第一个工程Hello_World-未完待续
4.1 创建工程
# 提取 helloworld 工程模板
$ cd ~/esp
$ cp -r esp-idf/examples/get-started/hello_world .
$ cd ~/esp/hello_world
# 设置目标板卡相关
$ idf.py set-target esp32
4.2 工程编译指令
# 配置环境
$ get_idf
$ idf.py build
4.3 烧录运行
把设备 USB 口接到电脑后,检查新增设备号,如果使用的 WSL2 请先添加 USB 设备,在其对应章节中有提到
# 查看设备号
$ ls /dev/tty
# 查看所有的USB端口连接
ls /dev/tty*
# 查看新增的设备号
ls /dev/ttyU*
# 烧录
$ idf.py -p /dev/ttyUSB0 flash
# 监视器
$ idf.py -p /dev/ttyUSB0 monitor
# 结合版 --> 构建、下载、监视一体
$ idf.py -p /dev/ttyUSB0 flash monitor
使用快捷键 Ctrl
+]
,退出 IDF 监视器
到这里,第一个工程就完成啦!剩下的就靠朋友们自己啦!
番外1 Git的简单使用(未完成)
使用Git管理本地仓库的好处是,可以知道自己每次修改了哪些内容,随时进行版本切换。
git config user.name “freedom”
git config user.email
一、仓库初始化
git init
添加.gitignore build
二、打标签
git tag -a v1.2 -m “esp log”
三、查看标签
git tag -l
四、查看标签,每个标签查看5行
git tag -n5
五、切换指定标签且新建分支
git checkout -b dev v1.2
六、回退到某个标签版本
git reset --hard v1.1
七、删除分支
git branch -d dev
如果切换过程中,提示本地源码有修改未提交:
error: Your local changes to the following files would be overwritten by checkout:
main/src/driver/ds_screen.c
Please commit your changes or stash them before you switch branches.
Aborting
解决方法:
1、保存修改,然后切换
git add *
git commit -m “修改了xxx”
git checkout dev1
2、放弃修改,然后切换
git checkout .
git checkout dev1
番外 idf.py
常用命令(未完成)
idf.py的常用命令如下:
● idf.py --help:可显示命令列表和使用说明。
● idf.py set-target xxx :设置编译目标,如将 替换为esp32c3。
● idf.py menuconfig:运行menuconfig终端图像化配置工具,可以选择或修改配置选项,配置结果将保存在sdkconfig文件中。
● idf.py build:开始编译代码,编译产生的中间文件和最终的可执行程序将默认保存在项目的build目录。编译过程是增量式的,如果仅对一个源文件进行修改,在下次编译时将只编译已修改的文件。
● idf.pyclean:清理项目编译产生的中间文件,下次编译时会强制编译整个项目。需要注意,清理时不会删除CMake配置和使用menuconfig修改的配置。
● idf.py fullclean:删除整个build目录下的内容,包括所有CMake的配置输出文件。在下次构建项目时,CMake会从头开始配置项目。请注意,该命令会递归删除构建目录下的所有文件,请谨慎使用,项目配置文件不会被删除。
● idf.py flash:将build生成的可执行程序二进制文件烧录到目标ESP32-C3中。选项-p <port_name> 和-b <baud_rate> 分别用于设置串口的设备名和烧录时的波特率,如果不指定这两个选项,将自动搜索串口并使用默认的波特率。
● idf.py monitor用于显示目标ESP32-C3的串口输出。选项-p可用于设置主机端串口的设备名,在串口打印期间,可按下组合键Ctrl+] 退出监视器。
以上命令也可以组合输入,如命令idf.py build flash monitor将依次进行代码编译、下载、打开串口监视器等操作。