最近想玩玩ESP32,在某宝上买了个ESP32的板子,40块的价格,带有1.14寸TFT显示屏,WiFi和蓝牙,小飞哥觉得还是可以的。入手,盘他。
完成目标
- 了解ESP32-ttgo板子资源
- 学会vscode+platformIO IDE环境搭建
- 学会新建或者导入工程
- 学会操作GPIO
硬件环境
- ESP32-ttgo开发板
软件环境
- vscode
- vscode插件platformIO IDE
先来几张靓照,type-c接口,有电池充电供电电路,用户按键,还是非常小巧的:
某宝价格
1、官方规格说明
项目 | 规格 |
Chipset | ESPRESSIF-ESP32 240MHz Xtensa® single-/dual-core 32-bit LX6 microprocessor |
FLASH | QSPI flash 4MB |
SRAM | 520 kB SRAM |
USB to TTL | CP2104 |
Modular interface | UART、SPI、SDIO、I2C、LED PWM、TV PWM、I2S、IRGPIO、ADC、capacitor touch sensor、DACLNA pre-amplifier |
Display | IPS ST7789V 1.14 Inch |
Working voltage | 2.7V-4.2V |
Working current | About 67MA |
Sleep current | About 350uA |
Size&Weight | 51.5225.048.54mm(7.81g) |
Power Supply | USB 5V/1A |
Charging current | 500mA |
Battery | 3.7V lithium battery |
JST Connector | 2Pin 1.25mm |
USB | Type-C |
OS | FREERTOS |
更多介绍:
2、引脚分配
3、开发环境搭建
开发环境真可谓是多种多样,windows,mac,linux都支持,各种环境配置详细见:https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32s2/get-started/
我使用的是vscode+platformIO IDE平台下开发的,vscode下载安装就不啰嗦了,安装完vscode之后,在扩展应用搜索platformIO IED,然后安装就可以了,可能需要等待一些时间,python环境会自动安装
安装完成之后,vscode左侧会出现platformIO IDE logo,感觉像个小蚂蚁头,嘿嘿,在右侧home界面有新建工程,导入工程等。
环境的搭建比较简单,无非就是可能需要时间等待,下面进行新建工程的介绍,主要关注Board、Framework就可以了
- board有好几款可以选择,内核都是一样的,选择一款就可以;Framwork:有两种,可以选择Arduino,或者选择官方的ESP-IDF,出于对ESP-IDF比较熟悉,我选择的是ESP32-IDF,当然啦,小伙伴们如果对Arduino比较熟悉,根据自己需要选择就可以了;Location:更改项目存储地址; 配置完,点击Finish就可以了,但是这个等待的时间太长了,让我一度崩溃,小伙伴们可以试试,不知道是不是小飞哥的网速比较渣。如果也是等了还就还不能创建成功,有另外一种办法是,不选择新建,选择导入例程,里面有不少官方例程,随便导入一个就可以了。 测试导入hello world工程,下图是导入的官方源码,修改为每秒打印一次。
然后编译、下载,编译成功
下载,下载就不用说了,唯一需要注意的是,下载是通过串口的,所以要注意,串口不要被占用,被占用的话会报如下错误,测试代码,程序已经是完美的运行起来了。
4、GPIO操作
以按键为例子,介绍GPIO的操作,硬件电路连接
硬件连接准备好了,ESP-idf库准备好了,如何编写应用程序呢,这时候就需要接口API了,还是上面的网址:
https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32s2/api-reference/index.html 介绍还是比较详细的,先来看GPIO的操作API,API函数也比较多,本次主要用到下面几个:
设置GPIO方向,也即是输入输出模式,可以配置为仅输入、仅输出、输入输出;esp_err_t gpio_set_direction(gpio_num_t gpio_num, gpio_mode_t mode)
GPIO set direction.
Configure GPIO direction,such as output_only,input_only,output_and_input
Return
ESP_OK Success
ESP_ERR_INVALID_ARG GPIO errorParameters
gpio_num: Configure GPIO pins number, it should be GPIO number. If you want to set direction of e.g. GPIO16, gpio_num should be GPIO_NUM_16 (16);
mode: GPIO direction获取GPIO电平状态 int gpio_get_level(gpio_num_t gpio_num)
GPIO get input level.
Warning
If the pad is not configured for input (or input and output) the returned value is always 0.
Return
0 the GPIO input level is 0
1 the GPIO input level is 1Parameters
gpio_num: GPIO number. If you want to get the logic level of e.g. pin GPIO16, gpio_num should be GPIO_NUM_16 (16);
按键代码实现及测试效果,按键按下时,打印信息。
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_spi_flash.h"
#include "driver/gpio.h"
void app_main()
{
//esp_err_t gpio_set_direction(gpio_num_t gpio_num, gpio_mode_t mode)
if (ESP_OK == gpio_set_direction(GPIO_NUM_35, GPIO_MODE_DEF_INPUT))
{
printf("Key1 GPIO Input mode set success\n");
}
int i = 0;
while (1)
{
if (!gpio_get_level(GPIO_NUM_35))
{
vTaskDelay(20 / portTICK_PERIOD_MS); //延时20ms消抖
if (!gpio_get_level(GPIO_NUM_35))
{
printf("Key GPIO Test\n");
}
}
i++;
if (i % 50 == 0)
{
printf("Hello esp32 ttgo!\n");
printf("hello world!\n");
}
vTaskDelay(10 / portTICK_PERIOD_MS);
}
本次的介绍就到这里啦,后面有更精彩的内容,欢迎大家持续关注嵌入式实验基地!
如果你觉得对自己有帮助的话,给个赞,点个关注,感谢前进的道路上有你的陪伴!
欢迎转发、留言、点赞、分享给你的朋友,感谢您的支持!