1·ESP32-C3入门教程——不止点亮一颗灯

这篇具有很好参考价值的文章主要介绍了1·ESP32-C3入门教程——不止点亮一颗灯。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【写在前面】最近在读《ESP32-C物联网开发实战》,个人感觉书在这一块讲的并不太适合初学者。这里反过来,先通过实践的方式实现功能,搞懂每一行代码的实现机制之后,再去一个个研究硬件的原理和机制。
 

 如果还没搭建好环境,或者碰到找不到头文件的问题,以下指路:

环境搭建踩坑记http://t.csdn.cn/Z243W

目录

一点必要的准备知识

从点灯开始入坑

level1:光速点亮一颗灯

level2:点灯只是计划的一部分——利用定时器控制

定时器句柄

结构体初始化

部分API的实现过程梳理

level3:实现彩色光污染——利用PWM控制

拓展

 小结

一点必要的准备知识

链接指路:
这是关于ESP32 C3最通用入门知识整理(此处先占坑,最近已经在写了)

从点灯开始入坑

level1:光速点亮一颗灯

        一切就绪后,这里可以直接用例程,如果是默认安装路径的话,一般在C:\Espressif\frameworks\esp-idf-v4.3.2\examples\get-started,将blink文件用vscode打开即可,下面是blink.c的代码:

#include <stdio.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include <driver/gpio.h>
#include <sdkconfig.h>

#define BLINK_GPIO CONFIG_BLINK_GPIO//此处需要调整,下图有两种方法

void app_main(void)
{
    gpio_reset_pin(BLINK_GPIO);
    gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);
    while(1) {
        printf("Turning off the LED\n");
        gpio_set_level(BLINK_GPIO, 0);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
        printf("Turning on the LED\n");
        gpio_set_level(BLINK_GPIO, 1);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
}

        这段代码还是比较好阅读的,只采用了高低电平的方式控制LED,但是对于初学者仍有一些需要注意的地方,简单的模块也应当吃透。
1·ESP32-C3入门教程——不止点亮一颗灯

         然后连接好开发板,依次按照以下三个步骤,设置好COM口,选择对应的型号,在使用一键编译写入和显示按钮即可1·ESP32-C3入门教程——不止点亮一颗灯

        成功后你将得到一个闪烁的灯^ ^,由于每块板子不一样,这里以我手上的亿研开发板为例

1·ESP32-C3入门教程——不止点亮一颗灯

         仅需要将blink.c中的CONFIG_BLINK_GPIO 选择10(代码注释那里我给了两种方法),便可以实现。

level2:点灯只是计划的一部分——利用定时器控制

        肯定有细心的兄弟发现了Freertos中用来控制延时的函数 vTaskDelay() ,虽然vTaskDelay易于上手和理解,但它功能也很笨【但是比delay()还是要高级点,不是做空循环(持续消耗cpu),而是把任务挂起和唤醒(中间不消耗cpu)】,不是控制周期任务频率的好方法,其罪有二 qwq:

  • 其它任务和中断的活动会影响vTaskDelay()的调用频率,甚至连其余模块运行时间都会干扰到vTaskDelay()下一次调用的间隔时间
  • 在vTaskDelay()的时间内,程序无法向后运行,相当于被阻塞,除非只为了实现点灯,不然会影响整体的运行时间

        所以此刻我们需要学习定时器来实现精准的控制,所以在这个模块中,我将分成led模块和定时器模块,因为上文主要拿红灯作为举例,所以为了简化,我将绿灯和蓝灯部分注释掉了,如果想要加入的话稍加调整就可以实现了

//这是需要自己创建的led.h文件,请在文件根目录下创建component文件夹并放入此文件

#ifndef _LED_H_
#define _LED_H_


#define LED_RED_IO 		10  //这一块对gpio口进行宏定义(上文有写)
//#define LED_GREEN_IO 	7  
//#define LED_BLUE_IO 	6  


#define LED_ON          0   
#define LED_OFF         1   //这一块主要是控制亮灭的(上文提到的,低电平为亮)


void led_red(int on);
//void led_green(int on);
//void led_blue(int on);
//void initLed();

#endif



/*——————————————————————————————————————————————————————————————————*/

//下面是需要自己创建的led.c文件,请在文件根目录下创建component文件夹并放入此文件

/*——————————————————————————————————————————————————————————————————*/


#include "driver/gpio.h"
#include "led.h"


void led_red(int on)    //控制红灯
{
    if(on==LED_ON)  gpio_set_level(LED_RED_IO, LED_ON);//开灯
    else            gpio_set_level(LED_RED_IO, LED_OFF);//关灯
}

/*

void led_green(int on)  //控制绿灯
{
    if(on==LED_ON)    gpio_set_level(LED_GREEN_IO, LED_ON);//开灯
    else              gpio_set_level(LED_GREEN_IO, LED_OFF);//关灯

}


void led_blue(int on)   //控制蓝灯
{
    if(on==LED_ON)    gpio_set_level(LED_BLUE_IO, LED_ON);//开灯
    else              gpio_set_level(LED_BLUE_IO, LED_OFF);//关灯
}

*/



void initLed()  //LED初始化
{
    gpio_pad_select_gpio(LED_RED_IO);
    //gpio_pad_select_gpio(LED_GREEN_IO);
    //gpio_pad_select_gpio(LED_BLUE_IO);
    gpio_set_direction(LED_RED_IO, GPIO_MODE_OUTPUT);
    //gpio_set_direction(LED_GREEN_IO, GPIO_MODE_OUTPUT);
    //gpio_set_direction(LED_BLUE_IO, GPIO_MODE_OUTPUT);    
    
    led_red(LED_OFF);
    //led_green(LED_OFF);
    //led_blue(LED_OFF);
}

         灯的控制还是比较好理解的,还是原来的高低电平控制,只是将level1中提到的部分重新做成了一个头文件的形式。下面是定时器&主函数main.c部分的代码:

#include <stdio.h>
#include "esp_types.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
#include "driver/gpio.h"
#include "esp_log.h"
#include "soc/timer_group_struct.h"
#include "driver/periph_ctrl.h"
#include "driver/timer.h"
#include "esp_timer.h"
#include "led.h"


esp_timer_handle_t fw_timer_handle = 0;		//定时器句柄,在创建任务之前,一般都指向0地址,下文会解释
unsigned char led_flag=0;					//LED灯标志,用于闪灯

void fw_timer_cb(void *arg) 				//根据LED状态闪灯
{
	if(led_flag>0)
	{
		led_red(LED_ON);
		led_flag=0;
	}
	else
	{
		led_red(LED_OFF);
		led_flag=1;
	}
}

void app_main() 
{
	initLed();//LED初始化

	//定时器结构体初始化↓↓
	esp_timer_create_args_t fw_timer = 
	{ 
		.callback = &fw_timer_cb, 	//回调函数
		.arg = NULL, 				//参数
		.name = "timer1" 			//定时器名称
	};

	esp_err_t err = esp_timer_create(&fw_timer, &fw_timer_handle);	//周期定时器启动
	err = esp_timer_start_periodic(fw_timer_handle, 1000 * 1000);	//1秒回调一次

	if(err == ESP_OK)
	{
		printf("timer1 cteate and start ok!\r\n");
	}
}

其实代码还是挺短的,没有很复杂的地方,但是对初入门来说还是有很多问题存在的,比如:

定时器句柄

FreeRTOS经常会用到句柄,简而言之,句柄就是一个 void * 指针,指向了一块内存空间,这块内存才是我们需要的数据结构。

结构体初始化

1·ESP32-C3入门教程——不止点亮一颗灯

部分API的实现过程梳理

1·ESP32-C3入门教程——不止点亮一颗灯

1·ESP32-C3入门教程——不止点亮一颗灯

1·ESP32-C3入门教程——不止点亮一颗灯

         层级确实太丰富了,很多函数相互内嵌,在整理的时候有点无从下手导致花了一些时间,其实对于初学者来说确实不容易定位和理解,这一块建议直接查官方的编程指南,先从了解基本用法就可以,后续遇到需要深入调整和定制的时候再逐级研究。

        总之,还是多看,多想,单一的教程或者指导确实很难顾及到具体的每一个问题。

         例程中遇到的函数基本在官方的编程指南中一些需要注意的地方和用法,可以在官网进行查询,还是挺方便的。1·ESP32-C3入门教程——不止点亮一颗灯

level3:实现彩色光污染——利用PWM控制

        一般常见的RGB灯模组占用3-5个GPIO口(R G B “冷光CW” “暖光WW”),可以控制PWM的占空比来实现亮度、色温、色彩的调节。以我使用的为例,占用了3个GPIO口(具体上文已经介绍)。

        这次咱们思路就比较清晰了,先了解主要使用的函数以及功能实现所需要的架构,这一块书中讲的还是不错的,所以节选了一段《ESP32-C物联网开发实战》的内容:

1·ESP32-C3入门教程——不止点亮一颗灯

1·ESP32-C3入门教程——不止点亮一颗灯

         按照书中的思路通过占空比的调节,来实现渐变和交替显示,多是一件美事。

1·ESP32-C3入门教程——不止点亮一颗灯

        下面是main.c的代码,无需在component中添加.c.h文件,和书中的实现思路基本一致,由于是将例程修改和移植而来,所以如果是不同的板子或者想要实现不同的功能,还需要再做调整。

#include <stdio.h>
#include "esp_system.h"
#include "esp_spi_flash.h"
#include "esp_wifi.h"
#include "esp_event_loop.h"
#include "esp_log.h"
#include "esp_err.h"
#include "nvs_flash.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/ledc.h"
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/ledc.h"
#include "esp_event.h"



//定义LED灯的IO口
#define LED_RED_IO 		10  //对应红灯的LED,绿灯为7,蓝灯为6
#define LED_GREEN_IO 	7  //对应绿灯的LED,红灯为10,蓝灯为6
#define LED_BLUE_IO 	6  //对应蓝灯的LED,红灯为10,绿灯为7



#define LEDC_MAX_DUTY         	(8191)	//2的13次方-1(13位PWM)
#define LEDC_FADE_TIME    		(1000)	//渐变时间(ms)

#define PWM_RED_CHANNEL   LEDC_CHANNEL_0   //定义红灯通道
#define PWM_GREEN_CHANNEL   LEDC_CHANNEL_1   //定义绿灯通道
#define PWM_BLUE_CHANNEL   LEDC_CHANNEL_2   //定义蓝灯通道

unsigned char pwm_mode=1;	//PWM模块,如果为1表示通过库函数实现渐变功能

//ledc配置结构体
ledc_channel_config_t 	g_ledc_red,g_ledc_green,g_ledc_blue;

void PWM_init(void)
{
	//定时器配置结构体
	ledc_timer_config_t 	ledc_timer;
	//定时器配置->timer0
	ledc_timer.duty_resolution = LEDC_TIMER_13_BIT; //PWM分辨率
	ledc_timer.freq_hz = 5000;                      //频率
	ledc_timer.speed_mode = LEDC_LOW_SPEED_MODE;  	//速度
	ledc_timer.timer_num = LEDC_TIMER_0;           	// 选择定时器
    ledc_timer.clk_cfg = LEDC_USE_APB_CLK;
	ledc_timer_config(&ledc_timer);					//设置定时器PWM模式

	//PWM通道0配置->IO10->红色灯
	g_ledc_red.channel    = PWM_RED_CHANNEL;		//PWM通道
	g_ledc_red.duty       = LEDC_MAX_DUTY;			//占空比
	g_ledc_red.gpio_num   = LED_RED_IO;				//IO映射
	g_ledc_red.speed_mode = LEDC_LOW_SPEED_MODE;	//速度
	g_ledc_red.timer_sel  = LEDC_TIMER_0;			//选择定时器
	ledc_channel_config(&g_ledc_red);				//配置PWM


	//PWM通道0配置->IO7->绿色灯
	g_ledc_green.channel    = PWM_GREEN_CHANNEL;		//PWM通道
	g_ledc_green.duty       = LEDC_MAX_DUTY;			//占空比
	g_ledc_green.gpio_num   = LED_GREEN_IO;				//IO映射
	g_ledc_green.speed_mode = LEDC_LOW_SPEED_MODE;		//速度
	g_ledc_green.timer_sel  = LEDC_TIMER_0;				//选择定时器
	ledc_channel_config(&g_ledc_green);					//配置PWM

	//PWM通道0配置->IO6->蓝色灯
	g_ledc_blue.channel    = PWM_BLUE_CHANNEL;			//PWM通道
	g_ledc_blue.duty       = LEDC_MAX_DUTY;				//占空比
	g_ledc_blue.gpio_num   = LED_BLUE_IO;				//IO映射
	g_ledc_blue.speed_mode = LEDC_LOW_SPEED_MODE;		//速度
	g_ledc_blue.timer_sel  = LEDC_TIMER_0;				//选择定时器
	ledc_channel_config(&g_ledc_blue);					//配置PWM

	ledc_fade_func_install(0);							//使能ledc渐变功能
}	

//设置红灯的PWM级别
//输入level取值0~255
void CtrRBG_R(unsigned char level)
{
	int duty=0;

	if(level==255)
	{
		duty=LEDC_MAX_DUTY;
	}
	else if(level==0)
	{
		duty=0;
	}
	else
	{
		//计算占空比
		duty=(level*LEDC_MAX_DUTY)/255;
	}
	ledc_set_duty(LEDC_LOW_SPEED_MODE, PWM_RED_CHANNEL, duty);//修改占空比
	ledc_update_duty(LEDC_LOW_SPEED_MODE, PWM_RED_CHANNEL);//新的占空比生效
}

//设置绿灯的PWM级别
//输入level取值0~255
void CtrRBG_G(unsigned char level)
{
	int duty=0;

	if(level==255)
	{
		duty=LEDC_MAX_DUTY;
	}
	else if(level==0)
	{
		duty=0;
	}
	else
	{
		//计算占空比
		duty=(level*LEDC_MAX_DUTY)/255;
	}

	ledc_set_duty(LEDC_LOW_SPEED_MODE, PWM_GREEN_CHANNEL, duty);//修改占空比
	ledc_update_duty(LEDC_LOW_SPEED_MODE, PWM_GREEN_CHANNEL);//新的占空比生效
}

//设置蓝灯的PWM级别
//输入level取值0~255
void CtrRBG_B(unsigned char level)
{
	int duty=0;

	if(level==255)
	{
		duty=LEDC_MAX_DUTY;
	}
	else if(level==0)
	{
		duty=0;
	}
	else
	{
		//计算占空比
		duty=(level*LEDC_MAX_DUTY)/255;
	}

	ledc_set_duty(LEDC_LOW_SPEED_MODE, PWM_BLUE_CHANNEL, duty);//修改占空比
	ledc_update_duty(LEDC_LOW_SPEED_MODE, PWM_BLUE_CHANNEL);//新的占空比生效
}


//通过渐变功能演示PWM任务
void task_pwm1(void *pvParameter)
{
  int i=1;
  while(1)
  {
    if(1==pwm_mode)
    {
      printf("pwm mode1 has run %d times.\r\n",i);
    	//渐变功能演示PWM
	  i++;
      ///
      //红灯占空比100%-->0%-->100%,时间2*LEDC_FADE_TIME
      //红灯:灭-->亮-->灭,的过程
      ///

    	//红灯占空比100% 渐变至0%,时间LEDC_FADE_TIME
    	ledc_set_fade_with_time(g_ledc_red.speed_mode,
                      g_ledc_red.channel,
                      0,
                      LEDC_FADE_TIME);
    	//渐变开始
    	ledc_fade_start(g_ledc_red.speed_mode,
                      g_ledc_red.channel,
                      LEDC_FADE_NO_WAIT);
      vTaskDelay(LEDC_FADE_TIME / portTICK_PERIOD_MS);
	  
	
    	//红灯占空比0%渐变至100%,时间LEDC_FADE_TIME
    	ledc_set_fade_with_time(g_ledc_red.speed_mode,
                      g_ledc_red.channel,
                      LEDC_MAX_DUTY,
                      LEDC_FADE_TIME);
    	//渐变开始
    	ledc_fade_start(g_ledc_red.speed_mode,
                			g_ledc_red.channel,
                			LEDC_FADE_NO_WAIT);
      vTaskDelay(LEDC_FADE_TIME / portTICK_PERIOD_MS);
      vTaskDelay(LEDC_FADE_TIME / portTICK_PERIOD_MS);

      ///
      //绿灯占空比100%-->0%-->100%,时间2*LEDC_FADE_TIME
      //绿灯:灭-->亮-->灭,的过程
      //

    	//绿灯占空比100%渐变至0%,时间LEDC_FADE_TIME
    	ledc_set_fade_with_time(g_ledc_green.speed_mode,
                      g_ledc_green.channel,
                      0,
                      LEDC_FADE_TIME);
    	//渐变开始
    	ledc_fade_start(g_ledc_green.speed_mode,
                      g_ledc_green.channel,
                      LEDC_FADE_NO_WAIT);
      vTaskDelay(LEDC_FADE_TIME / portTICK_PERIOD_MS);


    	//绿灯占空比0%渐变至100%,时间LEDC_FADE_TIME
    	ledc_set_fade_with_time(g_ledc_green.speed_mode,
                      g_ledc_green.channel,
                      LEDC_MAX_DUTY,
                      LEDC_FADE_TIME);
    	//渐变开始
    	ledc_fade_start(g_ledc_green.speed_mode,
                      g_ledc_green.channel,
                      LEDC_FADE_NO_WAIT);
      vTaskDelay(LEDC_FADE_TIME / portTICK_PERIOD_MS);
      vTaskDelay(LEDC_FADE_TIME / portTICK_PERIOD_MS);



      ///
      //蓝灯占空比100%-->0%-->100%,时间2*LEDC_FADE_TIME
      //蓝灯:灭-->亮-->灭,的过程
      //


    	//蓝灯占空比100%渐变至0%,时间LEDC_FADE_TIME
    	ledc_set_fade_with_time(g_ledc_blue.speed_mode,
                      g_ledc_blue.channel,
                      0,
                      LEDC_FADE_TIME);
    	//渐变开始
    	ledc_fade_start(g_ledc_blue.speed_mode,
                      g_ledc_blue.channel,
                      LEDC_FADE_NO_WAIT);
    	//延时LEDC_FADE_TIME,给LEDC控制时间
      vTaskDelay(LEDC_FADE_TIME / portTICK_PERIOD_MS);


    	//蓝灯占空比0%渐变至100%,时间LEDC_FADE_TIME
    	ledc_set_fade_with_time(g_ledc_blue.speed_mode,
                      g_ledc_blue.channel,
                      LEDC_MAX_DUTY,
                      LEDC_FADE_TIME);
     	//渐变开始
    	ledc_fade_start(g_ledc_blue.speed_mode,
                      g_ledc_blue.channel,
                      LEDC_FADE_NO_WAIT);

    	//延时LEDC_FADE_TIME,给LEDC控制时间
      vTaskDelay(LEDC_FADE_TIME / portTICK_PERIOD_MS);
      vTaskDelay(LEDC_FADE_TIME / portTICK_PERIOD_MS);

    }
    else{
      vTaskDelay(5);//延时一下

    }
  }
}


void app_main()
{
  PWM_init();//PWM初始化
  xTaskCreate(&task_pwm1, "task_pwm1", 4096, NULL, 9, NULL);
  
}

拓展

        怎么将上面的程序修改,实现从单色光源控制到模拟256*256*256色彩的变换?(可以自己先试试,后续会更新完整代码和注释,也可以在评论区交流)

 小结

        通过将不同模块和点灯结合,也算是抛砖引玉,在整理的过程中获得了很多知识和灵感;本人新人一枚,之前在学STM32的时候,可以参考的教程和文章十分丰富,在CubeMx就可以实现所需要配置和调用的库,然后在keil直接调用初始化函数,自己写子函数和主函数就可以了,所以上手还是很快的;而在ESP32的学习过程中,却遇到了很多新的api、初始化设置、参数调用以及全新的编译环境。所以在写第一篇的时候也是一路摸黑,有时候一个问题看了很多资料仍然不太理解,但是摸着摸着也摸出了一些经验,点灯只是一个开始,下一章再和大家唠唠按键和中断~文章来源地址https://www.toymoban.com/news/detail-415062.html

到了这里,关于1·ESP32-C3入门教程——不止点亮一颗灯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ESP8266入门教程03:点亮LED灯

    ESP8266默认是高电平工作,所以想要点亮LED只需要给相应的引脚设置低电平即可。  第11行:使用pinMode(pin, mode)来设置GPIO口工作模式,pin取值范围0 ~ 16,数字引脚0-15可设置为INPUT、OUTPUT、INPUT_PULLUP模式(输入、输出、上拉输入);数字引脚16可设置为INPUT、OUTPUT、INPUT_PULLDOWN_16模式

    2024年02月14日
    浏览(52)
  • 【ESP32入门教程】ESP32开发板原理图,引脚图,引脚功能,ESP WROOM 32,介绍ESP32硬件

    记录本人学习历程,同时也分享给大家学习,仅供参考! 模组共有38个管脚,具体描述如下。 1. GPIO6至GPIO11 引脚 控制集成在模组内部的SPI Flash, 不建议用于其他功能 。 SCK/CLK GPIO6 SDO/SD0 GPIO7 SDI/SD1 GPIO8 SHD/SD2 GPIO9 SWP/SD3 GPIO10 SCS/CMD GPIO11 2.Strapping 管脚 ESP32共有5个Strapping管脚,。

    2024年02月08日
    浏览(65)
  • Arduino ESP32开发环境搭建入门教程,esp32的arduino开发环境搭建教程,arduino导入eps32开发插件

    从官网下载 Arduino IDE 软件并安装。下载链接:Software | Arduino 网盘链接:链接:https://pan.baidu.com/s/1ZuSbo1BPy8XyyXzfl4KNzg?pwd=f8yd 提取码:f8yd 1、找到Arduino IDE安装目录,打开hardware文件夹。 2、在hardware文件夹中创建一个espressif文件夹。 3、将解压出的文件夹移动到espressif文件夹中,

    2024年02月13日
    浏览(53)
  • ESP系列入门教程(一)——之用继电器简单驱动一个LED【附 ESP32 / ESP8266 通用代码】

    最近在跟着几个大佬的教学视频做项目。陆续会更新记录一些要点,便于后期总结笔记的时候进行引用。 也可以帮助有心跟着一起复刻的宝子们,更好地捋清思路。 【本系列教程 - 总目标】: 使用ESP系列板卡,通过MQTT进行数据通信,达到远程控制多个传感器的效果。 ◆配

    2024年01月19日
    浏览(46)
  • STM32F103C8T6基础开发教程(HAL库)—点亮第一颗LED灯

    STM32F103C8T6基础开发教程(HAL库)—开发环境配置 STM32F103C8T6基础开发教程(HAL库)—Keil添加注释的快捷键 STM32F103C8T6基础开发教程(HAL库)—点亮第一颗LED灯 STM32F103C8T6基础开发教程(HAL库)—LED灯交替闪烁 STM32F103C8T6基础开发教程(HAL库)—LED灯呼吸闪烁 STM32F103C8T6基础开发

    2024年01月18日
    浏览(59)
  • c3p0 数据池入门使用教程

    从零开始手写 mybatis (三)jdbc pool 如何从零手写实现数据库连接池 dbcp? 万字长文深入浅出数据库连接池 HikariCP/Commons DBCP/Tomcat/c3p0/druid 对比 Database Connection Pool 数据库连接池概览 c3p0 数据池入门使用教程 alibaba druid 入门介绍 数据库连接池 HikariCP 性能为什么这么快? Apache

    2024年03月15日
    浏览(54)
  • 【esp32c3配置arduino IDE教程】

    本文主线FastBond2阶段1——基于ESP32C3开发的简易IO调试设备,esp32c3环境搭建,设计目标如下 设计用户操作界面,该设备具备简单易用的操作界面,外加显示屏SSD1306和旋转编码器进行显示和控制,用户后期可进行二次开发WiFi或蓝牙连接电脑或手机监控。 多种数字和模拟信号的

    2024年02月03日
    浏览(54)
  • 006.合宙ESP32-C3+蓝牙调试器通过BLE发送接收数据教程

    在平衡小车制作过程中,需要对KP/KD/KSP/KSI等PID系数进行调试,而平衡小车无法通过USB等进行有线调试,而ESP32-C3自带蓝牙+WIFI,使用WIFI比较吃算力,故选择通过蓝牙进行调参,同时能够将Angle/Encoder/PWM等数据回传至手机端进行查看。 前期通过查找资料,发现合宙ESP32-C3自带蓝

    2024年02月03日
    浏览(54)
  • 新上架的简约版合宙ESP32C3使用arduino开发的教程

    经过两个月的缺货下架后,9块9包邮的合宙ESP32C3又重新上架了,真香。这一批都是没有带串口芯片的简约版(9块9要啥自行车)。在下架前,简约版要使用2.0.0版本的ESP32开发板库才能下载,而2.0.0版本有一些丢失arduino自带库的诡异BUG,所以一直没法用于下载。现在由于发布了2

    2024年02月05日
    浏览(87)
  • ESP8266入门教程12:自动配网

    下载第三方库WiFiManager到lib文件夹  ​git clone https://github.com/tzapu/WiFiManager.git 第2行:包含WiFiManager库的头文件 第12行:创建WiFiManager对象 第14行:配置自动配网热点名称 1、编译并上传固件,然后使用手机连接名称叫做“ESP8266-Auto”的WIFI热点 2、点击【Configure WiFi】开始配网,

    2024年02月12日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包