esp32学习与开发-墨水屏桌面小屏幕
发表于:2024-09-04 |
字数统计: 1.7k | 阅读时长: 7分钟 | 阅读量:

1、学习

参考【有手就行系列】嵌入式单片机教程-桌面小屏幕实战教学 从设计、硬件、焊接到代码编写、调试 ESP32 持续更新2022

对应在线文档

Welcome to ESP32 Arduino Core’s documentation - - — Arduino ESP32 latest documentation (espressif.com)

1、需求分析

​ 需求–>需求细化–>流程化–>外设方案化–>软硬件接口梳理;

2、 方案选型

​ 外设选型(封装、通用/稳定性、电池容量/充电电流/保护、主控主频/RAM/ROM/IO);

ESP32选型一文就够,ESP32-WROOM-32、ESP32-WROVER、ESP32-S衍生模组、ESP32-PICO差异 - 哔哩哔哩 (bilibili.com)

3、绘制PCB

参考ESP32自动下载电路究竟是如何巧妙实现的-CSDN博客)

​ 原理图–>PCB(layout规范、绘制板框尺寸、布局、走线规范、过孔/测试点/泪滴/丝印、DRC检查。(PS:CH340添加防倒灌电路、预留测试/下载点、电源线要粗点.立创EDA绘制自己的元件(无符号/封装):新建元件库–>新建符号–新建封装–>关联符号与封装);

4、设计梳理,绘制流程图

5、 开发环境搭建

1、Linux:

方案:虚拟机(ubuntu2 + ssh+samba + vscode(windows) +esp32开发依赖环境(ESP-IDF v5.3);

参考Linux 和 macOS 平台工具链的标准设置 - ESP32 - — ESP-IDF 编程指南 v5.3 文档 (espressif.com)

Embeded 2 环境搭建 - 飞书云文档 (feishu.cn)

  1. 安装编译所需软件包:

    1
    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
  2. 获取ESP-IDF:

    1
    2
    3
    mkdir -p ~/esp
    cd ~/esp
    git clone -b v5.3 --recursive https://github.com/espressif/esp-idf.git
  3. 设置工具(编译器、调试器、Python包等):

    1
    2
    3
    4
    5
    6
    #ESP-IDF 工具安装器会下载 Github 发布版本中附带的一些工具,如果访问 Github 较为缓慢,可以设置一个环境变量,从而优先选择 Espressif 的下载服务器进行 Github 资源下载。
    #推荐国内用户使用国内的下载服务器,以加快下载速度
    cd ~/esp/esp-idf
    export IDF_GITHUB_ASSETS="dl.espressif.cn/github_assets"
    #仅为 ESP32 安装所需工具
    ./install.sh esp32
  4. 设置环境变量:

    1
    2
    3
    4
    . $HOME/esp/esp-idf/export.sh
    #可为执行 . $HOME/esp/esp-idf/export.sh创建一个别名
    #在.bashrc文件中添加
    alias get_idf='. $HOME/esp/esp-idf/export.sh'
  5. 开始使用:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    get_idf
    #将 get-started/hello_world 工程复制至本地的 ~/esp 目录下:
    cd ~/esp
    cp -r $IDF_PATH/examples/get-started/hello_world .

    #进入 hello_world 目录,设置 ESP32 为目标芯片,然后运行工程配置工具 menuconfig
    cd ~/esp/hello_world
    idf.py set-target esp32
    idf.py menuconfig

    #清楚先前编译产生的文件(涉及分区操作时最好执行一次)
    idf.py fullclean
    #编译
    idf.py build
    #烧录&监视输出
    idf.py -p /dev/ttyUSB0 -b 115200 flash moitor
    #退出ESP-IDF监视器
    ctr+]

    #擦除整个 flash
    idf.py -p PORT erase-flash
    #若存在需要擦除的 OTA 数据
    idf.py -p PORT erase-otadata
  6. (可选)更新ESP-IDF:

2、windows:

3、iats_pro @esp-idf3.0 @windows

  1. 设置工具链:下载集成在一起的工具链和 MSYS2 压缩文件,将 zip 压缩文件解压到 C:\ (或其它路径,这里假设是 C:\),它会使用预先准备的环境创建一个 msys32 目录,运行 C:\msys32\mingw32.exe 打开一个 MSYS2 的终端窗口,在此窗口下开发;
  2. 获取ESP-IDF;
  3. 设置ESP-IDF环境变量(这里使用单次:export IDF_PATH="D:/South/iAts_pro/lib/esp-idf"):在用户配置文件中添加 IDF_PATH — ESP-IDF 编程指南 v3.3.1 文档 (espressif.com);
  4. 安装依赖的Python 软件包:python2.7 -m pip install --user -r D\:/South/iAts_pro/lib/esp-idf/requirements;
  5. 示例工程:cp -r D\:/South/iAts_pro/lib/esp-idf/examples/get-started/hello_world/ .;
  6. 配置:make menuconfig
  7. 编译、烧写、监视。

6、程序编写

参考快速入门 - ESP32 - — ESP-IDF 编程指南 v5.3 文档 (espressif.com)

1、日志打印

1
2
3
4
5
6
7
#include "esp_log.h"

static const char *TAG = "MAIN APP";

ESP_LOGI(TAG,"test");
//ESP_LOGW();
//ESP_LOGE();

2 、多任务

3、Timer+消息队列

4、文件系统

​ 后续供http service使用,存储html等文件。spiffs文件系统移植,复制分区表esp-idf/examples/storage/spiffs/partitions.csv,到项目文件夹下,idf.py menuconfig设置参数:

1
2
3
CONFIG_PARTITION_TABLE_CUSTOM=y
CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv"
CONFIG_PARTITION_TABLE_FILENAME="partition.csv"

5、NVS-非易失性存储

​ KeyMap,供Wifi账号密码存储使用

6、GPIO

7、I2C

8、SPI

​ 高速、全双工、同步

9、AP mode + http service

  1. SSID 与 passwd在menuconfig中配置

  2. http service 参考:esp-idf/examples/protocols/http_service

    编写setting.html文件,添加到main/CMakeLists.txt–>EMBED_FILES “setting.html”,分区表添加spiffs,用于存储setting.html文件

HTTP与HTTPS请求服务器数据:

HTTP:参考esp-idf/examples/protocols/http_request

心知天气、苏宁时间、B站粉丝数

HTTPS: 获取网站ca证书:openssl s_client-showcerts-connect api seniverse.com:443 </dev/null 复制—-BEGIN CERTIFICATE—后内容到pem文件

Makefile添加证书EMBED_TXTFILES “server_root_cert.pem”

main/component.mk添加COMPONENT_EMBED_TXTFILES :=server_root_cert.pem

10、STA mode + wifi connect

STA参考:esp-idf/examples/wifi/getting_start/station

STA scan

11、显示字库图标

图标–>取模—>数组

字库:字体文件.TTF—->LVGL工具:LvglFontTool–>加入常用汉字—>XBF字体,外部bin文件

字库下载到Flash:

  • 添加分区(partitions.csv):storages1, 0x40, 0x01, 0x15D000, 0x2000000
  • idf.py menuconfig 修改flash大小为实际大小
  • 下载字体库到flash:python esptool.py –chip esp32 –port /dev/ttyUSB0 –baud

write_flash -z 0x15D000 DesktopScreenFont.bin

画笔相关实现,将图标文字放在同一个页面

7、关于ESP-IDF

1、相关术语:

  1. SMP(对称多处理);
  2. ESP-IDF FreeRTOS:是基于原生 (Vanilla)FreeRTOS v10.5.1 的 FreeRTOS 实现,其中包含支持 SMP 的大量更新。最多支持两个核(即双核 SMP),但在设计上对这种场景进行了优化;
  3. Amazon SMP FreeRTOS:是由 Amazon 官方支持的 FreeRTOS SMP 实现,能够支持 N 核,即双核以上;
  4. 核亲和性:尽管 SMP 系统支持线程切换核,但在某些情况下,线程必须或应该仅在特定核上运行。因此,在 SMP 系统中,线程也具备核亲和性,指定线程在哪个特定核上运行;
  5. PRO_CPUAPP_CPU:核 0 和核 1别名,反映了典型 ESP-IDF 应用程序使用这两个 CPU 的方式。负责处理 Wi-Fi 或蓝牙等协议相关处理程序的任务通常会分配给核 0,而处理应用程序其余部分的任务会分配给核 1;
  6. 任务创建:内存动态/静态分配,核亲和性;
  7. Vanilla FreeRTOS 调度器具有时间分片和固定优先级的抢占式调度器
  8. 临界区 (Critical Section):在 SMP 系统中,仅禁用中断并不能构成临界区,因为存在其他核意味着共享资源仍可以同时访问。因此,IDF FreeRTOS 中的临界区使用自旋锁实现,自旋锁可以静态或动态分配;
下一篇:
Type-C