前期编写准备
打开VS code 选择一个文件夹
(此处可参考博主之前所写的一篇博客,从样例中拷贝一份blink文件,存入另外一个文件夹中便于使用,同时可修改文件名作为测试,此处我将它更改为了blinktoblinktest2)
打开 blinktoblinktest2 依据电路板的引脚修改可执行代码,我设计的是不同的开关启动,能够引起不同的发光二极管按照一定规律闪烁和蜂鸣器的响动
选择好端口com 4之后,再点击ESP-IDF Build project(即最下方垃圾桶右侧处)进行编译,编译成功结果如下图
代码如下,仅供参考
此代码测试情况良好,不过也存在了一定的缺陷,有待调试
/* GPIO 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 <string.h>
#include <stdlib.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
#include "driver/gpio.h"
#define GPIO_OUTPUT_IO_LED2 15
#define GPIO_OUTPUT_IO_LED3 2
#define GPIO_OUTPUT_IO_LED4 4
#define GPIO_OUTPUT_IO_BEEP 19
#define GPIO_OUTPUT_PIN_SEL ((1ULL<<GPIO_OUTPUT_IO_LED2) | (1ULL<<GPIO_OUTPUT_IO_LED3) | (1ULL<<GPIO_OUTPUT_IO_LED4)| (1ULL<<GPIO_OUTPUT_IO_BEEP))
#define GPIO_INPUT_IO_SW3 14
#define GPIO_INPUT_IO_SW4 12
#define GPIO_INPUT_IO_SW5 13
#define GPIO_INPUT_PIN_SEL ((1ULL<<GPIO_INPUT_IO_SW3) | (1ULL<<GPIO_INPUT_IO_SW4)| (1ULL<<GPIO_INPUT_IO_SW5))
void TaskReadSW3(void* arg)
{
uint32_t io_num;
while(1)
{
if(gpio_get_level(GPIO_INPUT_IO_SW3))//按下是0,松开是1
{
gpio_set_level(GPIO_OUTPUT_IO_LED2, 0);//输出0,灯灭
//gpio_set_level(GPIO_OUTPUT_IO_BEEP, 0);//输出0,蜂鸣器不响
}else
{
gpio_set_level(GPIO_OUTPUT_IO_LED2, 0);//输出0,灯灭
vTaskDelay(200 / portTICK_RATE_MS);//延时200ms
gpio_set_level(GPIO_OUTPUT_IO_LED2, 1);//输出1,2灯亮
vTaskDelay(50 / portTICK_RATE_MS);//延时50ms
gpio_set_level(GPIO_OUTPUT_IO_LED3, 1);//输出1,3灯亮
vTaskDelay(50 / portTICK_RATE_MS);//延时50ms
gpio_set_level(GPIO_OUTPUT_IO_LED4, 1);//输出1,4灯亮
vTaskDelay(100 / portTICK_RATE_MS);//延时100ms
gpio_set_level(GPIO_OUTPUT_IO_BEEP, 1);//输出1,蜂鸣器响
vTaskDelay(100 / portTICK_RATE_MS);//延时100ms
gpio_set_level(GPIO_OUTPUT_IO_BEEP, 0);//输出0,蜂鸣器不响
vTaskDelay(50 / portTICK_RATE_MS);//延时50ms
}
vTaskDelay(500 / portTICK_RATE_MS);//延时500ms
}
}
void TaskReadSW4(void* arg)
{
uint32_t io_num;
while(1)
{
if(gpio_get_level(GPIO_INPUT_IO_SW4))//按下是0,松开是1
{
gpio_set_level(GPIO_OUTPUT_IO_LED3, 0);//输出0,灯灭
}else
{
gpio_set_level(GPIO_OUTPUT_IO_LED3, 0);//输出0,灯灭
vTaskDelay(200 / portTICK_RATE_MS);//延时200ms
gpio_set_level(GPIO_OUTPUT_IO_LED4, 1);//输出1,4灯亮
vTaskDelay(50 / portTICK_RATE_MS);//延时50ms
gpio_set_level(GPIO_OUTPUT_IO_LED3, 1);//输出1,3灯亮
vTaskDelay(50 / portTICK_RATE_MS);//延时50ms
gpio_set_level(GPIO_OUTPUT_IO_LED2, 1);//输出1,2灯亮
vTaskDelay(50 / portTICK_RATE_MS);//延时50ms
}
vTaskDelay(500 / portTICK_RATE_MS);//延时500ms
}
}
void TaskReadSW5(void* arg)
{
uint32_t io_num;
while(1)
{
if(gpio_get_level(GPIO_INPUT_IO_SW5))//按下是0,松开是1
{
gpio_set_level(GPIO_OUTPUT_IO_LED4, 0);//输出0,灯灭
}else
{
gpio_set_level(GPIO_OUTPUT_IO_LED4, 0);//输出0,灯灭
vTaskDelay(200 / portTICK_RATE_MS);//延时200ms
gpio_set_level(GPIO_OUTPUT_IO_BEEP, 1);//输出1,蜂鸣器响
vTaskDelay(100 / portTICK_RATE_MS);//延时100ms
gpio_set_level(GPIO_OUTPUT_IO_BEEP, 0);//输出0,蜂鸣器不响
vTaskDelay(50 / portTICK_RATE_MS);//延时50ms
gpio_set_level(GPIO_OUTPUT_IO_LED4, 1);//输出1,4灯亮
vTaskDelay(50 / portTICK_RATE_MS);//延时50ms
gpio_set_level(GPIO_OUTPUT_IO_LED2, 1);//输出1,2灯亮
vTaskDelay(50 / portTICK_RATE_MS);//延时50ms
gpio_set_level(GPIO_OUTPUT_IO_LED3, 1);//输出1,3灯亮
vTaskDelay(50 / portTICK_RATE_MS);//延时50ms
}
vTaskDelay(500 / portTICK_RATE_MS);//延时500ms
}
}
void app_main()
{
gpio_config_t io_conf;
//disable interrupt
io_conf.intr_type = GPIO_PIN_INTR_DISABLE;
//set as output mode
io_conf.mode = GPIO_MODE_OUTPUT;
//bit mask of the pins that you want to set,e.g.GPIO18/19
io_conf.pin_bit_mask = GPIO_OUTPUT_PIN_SEL;
//disable pull-down mode
io_conf.pull_down_en = 0;
//disable pull-up mode
io_conf.pull_up_en = 0;
//configure GPIO with the given settings
gpio_config(&io_conf);
//disable interrupt
io_conf.intr_type = GPIO_PIN_INTR_DISABLE;
//bit mask of the pins, use GPIO4/5 here
io_conf.pin_bit_mask = GPIO_INPUT_PIN_SEL;
//set as input mode
io_conf.mode = GPIO_MODE_INPUT;
//enable pull-up mode
io_conf.pull_up_en = 1;
gpio_config(&io_conf);
//start gpio task
xTaskCreate(TaskReadSW3, "TaskReadSW3", 2048, NULL, 10, NULL);
xTaskCreate(TaskReadSW4, "TaskReadSW4", 2048, NULL, 10, NULL);
xTaskCreate(TaskReadSW5, "TaskReadSW5", 2048, NULL, 10, NULL);
int cnt = 0;
while(1) {
printf("cnt: %d\n", cnt++);
printf("cnt111: %d\n", cnt++);
vTaskDelay(1500 / portTICK_RATE_MS);//延时1500
}
}
电路板参考如下
不明白的可以参考我之前写的一篇文章,里面有较为详细的解释
重启单片机进入下载模式
在connecting处陆续出现小点点时,需要先按住电路板处 按钮“0开关” 再按按钮0开关旁边的按钮“重启开关”
原理性说明:ESP32单片机在启动时,GPIO0接地,单片机会进入下载模式。且电路板的按钮0连接单片机的GPIO0。所以按住按钮0(让GPIO0接地),再按重启按钮,就能下载程序了。
————————————————
版权声明:本文为CSDN博主「小赖的Today」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_63459816/article/details/123315122
此时再点击重启按钮sw2将程序存入电路板
存入结果如下图所示
接下来就可以测试电路板的功能啦 对测试结果感兴趣可以看一下这个视频
blink测试
blink2
悄咪咪的偷了个懒
以上为本人学习过程,可能还有些许错误,欢迎大家提出问题!一起学习!
感谢观看!