前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VsCode设置ESP32工具链+刨根问底点灯

VsCode设置ESP32工具链+刨根问底点灯

作者头像
云深无际
发布2021-01-20 15:44:47
3.6K0
发布2021-01-20 15:44:47
举报
文章被收录于专栏:云深之无迹云深之无迹

unplash


今天教大家ESP32在vscode上面的配置,以及点灯时的具体引脚定义.

已下软件都是要提前准备的,还有Python环境,不低于3.6

代码语言:javascript
复制
https://cmake.org/

首先下载cmake

下载中

选择所有用户

这就是装好的页面了

代码语言:javascript
复制
https://git-scm.com/downloads

接下来装Github

下载一下

完成

ls命令测试

还有一个高大上的GUI,对我的工作的效率提升不是一星半点儿

代码语言:javascript
复制
https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/index.html

本文的指导来源,我其实比较气的.先英文文章才中文

而且中文文章有错误,你得去看英文文章.以英文为准

代码语言:javascript
复制
https://github.com/espressif/vscode-esp-idf-extension

因为文章说是VScode,所以免不了装插件.我把这个也放再这里

ESP-IDF扩展使您可以轻松开发,构建,刷新,监视和调试ESP-IDF代码,其中一些功能包括:

  • 为首次使用的用户快速配置ESP-IDF扩展,以帮助您下载,安装和设置ESP-IDF以及Visual Studio Code扩展中的必需工具。
  • 通过将ESP-IDF示例复制到ESP-IDF中来快速进行原型制作:显示ESP-IDF示例项目。
  • 使用ESP-IDF应用程序级跟踪库中的应用程序跟踪时,如ESP-IDF应用程序级跟踪示例中所示。
  • 使用ESP-IDF的二进制文件的大小分析:二进制文件的大小分析。
  • SDK配置编辑器,用于配置ESP-IDF项目(esp-idf menuconfig)。
  • 轻松为ESP-32和ESP32 S2芯片构建,闪存和监视代码。
  • KConfig和ESP-IDF的语法突出显示Kconfig样式语法验证(如果启用)。
  • 命令的本地化(英语,中文,西班牙语),您也可以添加语言贡献。
  • Visual Studio Code中的OpenOCD服务器。
  • 代码覆盖率,用于突出显示编辑器源代码并生成HTML报告。
  • 使用ESP-IDF在ESP-IDF文档中搜索文本编辑器的选定文本:在文档中搜索...右键单击命令或使用其键盘快捷键。如果在ESP-IDF文档中找到基于您当前的vscode语言,ESP-IDF版本idf.espIdfPath(最新版本)和中的结果,结果将显示在ESP-IDF Explorer选项卡中idf.adapterTargetName

以上得内容是对插件内容得一个简单的描述,就是提供了一站式得服务,方便你更快得搬砖.

在code里面搜索这个

安装

其实哪个也无所谓

就是就是项目,可以自己探索

我们选择最新版

分别是IDF下载得镜像地址,我网好,GitHub

接着就是版本得选择,一般来说.高级得版本会修bug加功能

然后就是IDF得存放地址,我搞别的盘了

然后就是自己得Python得解释器得位置

下载中

SDK完成

编译工具ok

python虚拟环境建立中.防止污染目录

我们事先准备得目录

下载下来得包得大小

完成了,必须出现这个才可以

建立一个新得文件夹,用code打开

连电脑

注意看一下自己得COM口

点这里选择com口

选4

这个可视化得配置工具第一次使用要建立索引

比较慢

注意是点小齿轮

这个监视窗口,其实就串口得打印窗口

点这个小显示器出现上面得窗口


那现在环境也?了~是不是该写代码

但是摸摸脑壳,还是不知道该干什么!其实我们就该来看看自带得代码了,都是我们要学习得资源

此时你要打开命令窗口

输入我这么多的东西就出来了

dong!就出现了这么多得例子,是不是很nice是不是不慌了,

以上是第一个例子

代码语言:javascript
复制
ESP-IDF BLE ANCS示例
Apple Notification Center服务(ANCS)的目的是为Bluetooth配件(通过Bluetooth低能耗链接连接到iOS设备)提供一种简单方便的方法,以访问在iOS设备上生成的多种通知。

Apple Notification Center服务是一项主要服务,其服务UUID为7905F431-B5CE-4E99-A40F-4B1E122D00D0。

NP上只能出现一个ANCS实例。由于iOS的性质,不能保证始终存在ANCS。结果,NC应该寻找并订阅GATT服务的“服务已更改”特征,以便随时监视ANCS的潜在发布和取消发布。

ANCS的基本形式具有三个特征:
通知来源:UUID 9FBF120D-6301-42D9-8C58-25E699A21DBD(可通知)
控制点:UUID 69D1D8F3-45E1-49A8-9821-9BBDFDAAD9D9(可通过响应写入)
数据源:UUID 22EAC6E9-24D6-4BB5-BE44-B36ACE7C7BFB(可通知)
所有这些特征都需要访问授权。

硬件就是得点灯,点!

打开得目录

源码

这个地方是编译

900多文件,脑瓜子嗡嗡得

可以看带先是生成一个elf可以执行得文件

然后转换成bin文件

提示这个,是

有错误,烧录失败.

可能是配置不对

我们尝试探索一次这个可视化的功能

可以看到分为这么几个大类

SDK工具设置

编译种类

应用管理

引导配置

安全事件

串口烧录配置

例子配置什么得?慢慢研究

烧录得设置

SPI得种类

SPI得速率

如果你在上面得图形化窗口里面做了上面更改

就会在这个sdkconfig得文件里面有所体现

我单独得摘取了一段就是串口得配置

代码语言:javascript
复制
https://www.cnblogs.com/gtsup/p/9559770.html

出现这个的时候,摁下EN键.就可以下载了

成功的话会显示这个

代码语言:javascript
复制
https://github.com/espressif/esptool/issues/226

这个是解决的办法,其实就是摁下,

一开始就是io 0是悬空的

摁下就是接地了

这两个地方是通的

摁下后会0脚接地进入下载模式

你说点灯就这么大个包????


现在这个灯也不亮哎,咋办?

代码语言:javascript
复制
https://github.com/espressif/arduino-esp32/blob/master/variants/doitESP32devkitV1/pins_arduino.h
代码语言:javascript
复制
#ifndef Pins_Arduino_h
#define Pins_Arduino_h

#include <stdint.h>

#define EXTERNAL_NUM_INTERRUPTS 16
#define NUM_DIGITAL_PINS        40
#define NUM_ANALOG_INPUTS       16

#define analogInputToDigitalPin(p)  (((p)<20)?(esp32_adc2gpio[(p)]):-1)
#define digitalPinToInterrupt(p)    (((p)<40)?(p):-1)
#define digitalPinHasPWM(p)         (p < 34)

static const uint8_t LED_BUILTIN = 2;
#define BUILTIN_LED  LED_BUILTIN // backward compatibility
#define LED_BUILTIN LED_BUILTIN

static const uint8_t TX = 1;
static const uint8_t RX = 3;

static const uint8_t SDA = 21;
static const uint8_t SCL = 22;

static const uint8_t SS    = 5;
static const uint8_t MOSI  = 23;
static const uint8_t MISO  = 19;
static const uint8_t SCK   = 18;

static const uint8_t A0 = 36;
static const uint8_t A3 = 39;
static const uint8_t A4 = 32;
static const uint8_t A5 = 33;
static const uint8_t A6 = 34;
static const uint8_t A7 = 35;
static const uint8_t A10 = 4;
static const uint8_t A11 = 0;
static const uint8_t A12 = 2;
static const uint8_t A13 = 15;
static const uint8_t A14 = 13;
static const uint8_t A15 = 12;
static const uint8_t A16 = 14;
static const uint8_t A17 = 27;
static const uint8_t A18 = 25;
static const uint8_t A19 = 26;

static const uint8_t T0 = 4;
static const uint8_t T1 = 0;
static const uint8_t T2 = 2;
static const uint8_t T3 = 15;
static const uint8_t T4 = 13;
static const uint8_t T5 = 12;
static const uint8_t T6 = 14;
static const uint8_t T7 = 27;
static const uint8_t T8 = 33;
static const uint8_t T9 = 32;

static const uint8_t DAC1 = 25;
static const uint8_t DAC2 = 26;

#endif /* Pins_Arduino_h */

官方得Arduino库得引脚定义

也可以看到其他开发板得定义

代码语言:javascript
复制
https://github.com/espressif/arduino-esp32/releases/download/1.0.4/package_esp32_index.json

我还是得点个灯,我要看引脚.

气死我了

先把ESP32的arduino核心加上

代码语言:javascript
复制

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

用Arduino点亮成功

代码语言:javascript
复制
Chip is ESP32D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
MAC: 7c:9e:bd:f3:69:10
Auto-detected Flash size: 4MB
芯片是ESP32D0WDQ6(版本1)
功能:WiFi,BT,双核,240MHz,VRef标定,编码方案无
MAC:7c:9e:bd:f3:69:10
自动检测到的闪存大小:4MB

这个是Arduino自动分析的资料


一、基础信息 1、模组核心 ESP32-D0WDQ6 芯片 时钟频率调节范围为80MHz到240MHz 两个低功耗 Xtensa® 32-bit LX6 MCU。 • 448 KB 的 ROM,用于程序启动和内核功能调用 • 用于数据和指令存储的 520 KB 片上 SRAM • RTC 快速存储器,为 8 KB 的 SRAM,可以在 Deep-sleep 模式下 RTC 启动时用于数据存储以及被主 CPU访问 • RTC 慢速存储器,为 8 KB 的 SRAM,可以在 Deep-sleep 模式下被协处理器访问 • 1 Kbit 的 eFuse,其中 256 bit 为系统专用(MAC 地址和芯片设置); 其余 768 bit 保留给用户程序, 这些程序包括 flash 加密和芯片 ID 2、ESP32-WROOM-32 集成了 4 MB 的 SPI flash,连接 ESP32 的管脚GPIO6,GPIO7,GPIO8,GPIO9,GPIO10和GPIO11。这六个管脚不建议用于其他功能。和我们的资料相符合 3、模组使用40MHz晶振 4、Wi-Fi射频 频率 2412~2484MHz 功率 13dBm/11n,MCS7;18.5dBm/11b模式 灵敏度 -69~-98dBm IPEX天线的模组输出阻抗50Ω 5、蓝牙射频 接收器 灵敏度 -97dBm/@30.8% PER 共信道抑制比C/I +10 dB 邻道抑制比C/I ±1MHz -5dB 发射器 射频发射功率 0dBm 增益控制步长 3dBm 射频功率控制范围 -12 ~+12dBm

我今天一定得把这个灯点亮

这个是芯片得外壳

我们要参考这份资料

代码语言:javascript
复制
https://www.espressif.com/sites/default/files/documentation/esp32-wroom-32_datasheet_cn.pdf

名字叫这个

我对可视化得配置菜单做了翻译

这是对应得设置地方

这里写2

保存

保存得话,就会生成新得一份配置文件

原有的文件会加old

这里成功了,就是引脚2接灯

需要重新上电出结果

代码语言:javascript
复制
https://docs.platformio.org/en/latest/boards/espressif32/esp32doit-devkit-v1.html

这个图画错了,是IO 0的引脚奥.和BOOT这个按钮接在一起,按下BOOT接通

这个IO 0在这里

引脚出现3.25V

灯是2.58V(我觉得是2.6V)

硬件上面的IO2

这个是Arduino内部的LED闪烁引脚定义,可以知道等于2

=2,这个是具体映射到芯片的脚

这个是例子内的GPIO,也是2

以及vscode里面的引擎匹配的2

文章这么长了,也就吧源码分析一下吧

第一个函数在文档里面没有,但是在一个文件里面有,

代码语言:javascript
复制
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/gpio.html

在乐鑫的文档内部我找到了设置GPIO的函数

这个未知的函数,用vscode的代码引擎找到了

同时这个是它的所在地,参数也比较明了

可以认为是真实的在IO脚里面明确指定引脚的作用

可以看到其实就是一个参数而已,

设置pad的驱动能力

在这里

ESP32芯片有34个物理GPIOpad。每个pad都可用作一个通用IO,或连接一个内部的外设信号。IO_MUX、RTC IO_MUX 和 GPIO 交换矩阵用于将信号从外设传输至 GPIO pad。这些模块共同组成了芯片的 IO 控制。

可以看到其实是它最主要的功能就是通用的IO脚

但是这个函数在文档内是搜索不到得


继续看源码

代码语言:javascript
复制
/* Blink Example

   This example code is in the Public Domain (or CC0 licensed, at your option.)

   Unless required by applicable law or agreed to in writing, this
   software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
   CONDITIONS OF ANY KIND, either express or implied.
*/
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "sdkconfig.h"

/*可以使用项目配置菜单(idf.py menuconfig)选择要闪烁的GPIO,
    或者,您可以编辑以下行并在此处设置一个数字。
*/
#define BLINK_GPIO CONFIG_BLINK_GPIO//对这个要闪烁的引脚进行宏定义

void app_main(void)//main函数,么有参数,没有返回值
{
    /* 为焊盘BLINK_GPIO配置IOMUX寄存器(某些焊盘为
        重置时已复用到GPIO,但有些默认使用GPIO
        功能,需要切换到GPIO。咨询
        技术参考以获取打击垫及其默认设置的列表
        职能。)
    */
    gpio_pad_select_gpio(BLINK_GPIO);//
    /* 将GPIO设置为推/拉输出 */
    gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);//设置GPIO的工作模式
    while (1)//接着是一个死循环
    {
        /* Blink off (output low) */
        printf("Turning off the LED\n");//打印没有什么好说得,但是我这边不输出打印字符不知道为什么
        gpio_set_level(BLINK_GPIO, 0);
        vTaskDelay(1000 / portTICK_PERIOD_MS);//延时时间

        /* Blink on (output high) */
        printf("Turning on the LED\n");
        gpio_set_level(BLINK_GPIO, 1);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
}

上文所有得函数和逻辑我都分析了

此处是用定时器延时得

接着这个函数是周期性得输出电平

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档