单片机开发---ESP32-S3模块上手

这篇具有很好参考价值的文章主要介绍了单片机开发---ESP32-S3模块上手。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景介绍

想起来之前做的半成品单片机游戏机,又想继续做一个,不过之前那个单片机驱动屏幕速率太低,已经无法改进了。所以这次斥巨资购买了一款顶配的ESP32S开发板,做个简单的游戏机,没问题。
esp32-s3,单片机,C语言典型代码,单片机,esp32s3,esp-idf,c语言,oled
完整介绍链接
这花花绿绿的介绍,看着让人甚是喜欢呢。
esp32-s3,单片机,C语言典型代码,单片机,esp32s3,esp-idf,c语言,oled

开发环境搭建

参考乐鑫官网的方式,我选择了windows开发环境
Windows 平台工具链的标准设置

安装完成会有两个图标,按照推荐选择了cmd方式
esp32-s3,单片机,C语言典型代码,单片机,esp32s3,esp-idf,c语言,oled
双击运行

esp32-s3,单片机,C语言典型代码,单片机,esp32s3,esp-idf,c语言,oled
随便选择一个工作目录,将范例的代码拷贝过来,就可以进行编译烧录了。

Hello World

必须先用hello world热热身
esp32-s3,单片机,C语言典型代码,单片机,esp32s3,esp-idf,c语言,oled

  1. 拷贝工程
    范例工程都在esp-idf\examples\下面
E:\esp32_new_tools>xcopy /e /i E:\esp32_new_tools\Espressif\frameworks\esp-idf-v4.4.3\examples\get-started\hello_world hello_world
E:\esp32_new_tools\Espressif\frameworks\esp-idf-v4.4.3\examples\get-started\hello_world\CMakeLists.txt
E:\esp32_new_tools\Espressif\frameworks\esp-idf-v4.4.3\examples\get-started\hello_world\example_test.py
E:\esp32_new_tools\Espressif\frameworks\esp-idf-v4.4.3\examples\get-started\hello_world\Makefile
E:\esp32_new_tools\Espressif\frameworks\esp-idf-v4.4.3\examples\get-started\hello_world\README.md
E:\esp32_new_tools\Espressif\frameworks\esp-idf-v4.4.3\examples\get-started\hello_world\sdkconfig.ci
E:\esp32_new_tools\Espressif\frameworks\esp-idf-v4.4.3\examples\get-started\hello_world\main\CMakeLists.txt
E:\esp32_new_tools\Espressif\frameworks\esp-idf-v4.4.3\examples\get-started\hello_world\main\component.mk
E:\esp32_new_tools\Espressif\frameworks\esp-idf-v4.4.3\examples\get-started\hello_world\main\hello_world_main.c
复制了 8 个文件

E:\esp32_new_tools>
  1. 配置工程

选择开发目标,目前支持’esp32’, ‘esp32s2’, ‘esp32c3’, ‘esp32s3’, ‘linux’, ‘esp32h2’.

idf.py set-target esp32s3

配置参数

idf.py menuconfig

查看开发板手册得知flash和内存类型
esp32-s3,单片机,C语言典型代码,单片机,esp32s3,esp-idf,c语言,oled
配置方法如下
flash大小
我买的是16MB flash
Serial flasher config —>
esp32-s3,单片机,C语言典型代码,单片机,esp32s3,esp-idf,c语言,oled
片外ram
Component config —> ESP32S3-Specific —>选中支持片外ram
esp32-s3,单片机,C语言典型代码,单片机,esp32s3,esp-idf,c语言,oled
再进入SPI ram config
选择mode,切换为Octal模式
esp32-s3,单片机,C语言典型代码,单片机,esp32s3,esp-idf,c语言,oled
最后返回上一级,顺带改一下工作频率
esp32-s3,单片机,C语言典型代码,单片机,esp32s3,esp-idf,c语言,oled
谁还嫌运行的快呢
esp32-s3,单片机,C语言典型代码,单片机,esp32s3,esp-idf,c语言,oled

  1. 编译
idf.py build
  1. 烧写与监测串口

烧写

idf.py -p COM6 flash

监视串口

idf.py -p COM6 monitor

烧写后监视串口

idf.py -p COM6 flash monitor

启动之后会看到Flash与内存大小
esp32-s3,单片机,C语言典型代码,单片机,esp32s3,esp-idf,c语言,oled
esp32-s3,单片机,C语言典型代码,单片机,esp32s3,esp-idf,c语言,oled

hello world只不过是一个延迟重启的程序。
esp32-s3,单片机,C语言典型代码,单片机,esp32s3,esp-idf,c语言,oled
需要换一个
esp32-s3,单片机,C语言典型代码,单片机,esp32s3,esp-idf,c语言,oled

驱动OLED

买了一个SPI的TFT屏幕,还没到货,所以先驱动一个SPI的Oled屏幕。屏幕引脚说明
esp32-s3,单片机,C语言典型代码,单片机,esp32s3,esp-idf,c语言,oled

核心的中间层代码如下

#define LCD_HOST    SPI2_HOST

#define PIN_NUM_MISO SPI2_IOMUX_PIN_NUM_MISO
#define PIN_NUM_MOSI SPI2_IOMUX_PIN_NUM_MOSI
#define PIN_NUM_CLK  SPI2_IOMUX_PIN_NUM_CLK
#define PIN_NUM_CS   SPI2_IOMUX_PIN_NUM_CS

#define PIN_NUM_DC   9
#define PIN_NUM_RST  4
#define PIN_NUM_BCKL 5

spi_device_handle_t spi;


void OLED_Write_SPI_Command(unsigned char SPI_Command)
	
{
    esp_err_t ret;
    spi_transaction_t t;
    memset(&t, 0, sizeof(t));       //Zero out the transaction
    t.length=8;                     //Command is 8 bits
    t.tx_buffer=&SPI_Command;       //The data is the cmd itself
    t.user=(void*)0;                //D/C needs to be set to 0
    ret=spi_device_polling_transmit(spi, &t);  //Transmit!
    assert(ret==ESP_OK);            //Should have had no issues.
}
 
void OLED_Write_SPI_Data(unsigned char SPI_Data)
{
    esp_err_t ret;
    spi_transaction_t t;

    memset(&t, 0, sizeof(t));       		//Zero out the transaction
    t.length=8;                 			//Len is in bytes, transaction length is in bits.
    t.tx_buffer=&SPI_Data;          		//Data
    t.user=(void*)1;                		//D/C needs to be set to 1
    ret=spi_device_polling_transmit(spi, &t);  //Transmit!
    assert(ret==ESP_OK);            		//Should have had no issues.
}

//This function is called (in irq context!) just before a transmission starts. It will
//set the D/C line to the value indicated in the user field.
void lcd_spi_pre_transfer_callback(spi_transaction_t *t)
{
    int dc=(int)t->user;
    gpio_set_level(PIN_NUM_DC, dc);
}

void OLED_SPI_init()
{
	esp_err_t ret;
	spi_bus_config_t buscfg={
	.miso_io_num=PIN_NUM_MISO,
	.mosi_io_num=PIN_NUM_MOSI,
	.sclk_io_num=PIN_NUM_CLK,
	.quadwp_io_num=-1,
	.quadhd_io_num=-1,
	//.max_transfer_sz=PARALLEL_LINES*128*2+8
	};
	
	spi_device_interface_config_t devcfg=
	{
		.clock_speed_hz=10*1000*1000,			//Clock out at 10 MHz
		.mode=0,								//SPI mode 0
		.spics_io_num=PIN_NUM_CS,				//CS pin
		.queue_size=7,							//We want to be able to queue 7 transactions at a time
		.pre_cb=lcd_spi_pre_transfer_callback,	//Specify pre-transfer callback to handle D/C line
	};

	
    //Initialize non-SPI GPIOs
    gpio_set_direction(PIN_NUM_DC, GPIO_MODE_OUTPUT);
    gpio_set_direction(PIN_NUM_RST, GPIO_MODE_OUTPUT);
    gpio_set_direction(PIN_NUM_BCKL, GPIO_MODE_OUTPUT);

	//Reset the display
    gpio_set_level(PIN_NUM_RST, 0);
    vTaskDelay(100 / portTICK_RATE_MS);
    gpio_set_level(PIN_NUM_RST, 1);
    vTaskDelay(100 / portTICK_RATE_MS);
	
	//Initialize the SPI bus
	ret=spi_bus_initialize(LCD_HOST, &buscfg, SPI_DMA_CH_AUTO);
	ESP_ERROR_CHECK(ret);

	//Attach the LCD to the SPI bus
	ret=spi_bus_add_device(LCD_HOST, &devcfg, &spi);
	ESP_ERROR_CHECK(ret);
}

注意SPI Oled使用前需要复位操作。

    gpio_set_level(PIN_NUM_RST, 0);
    vTaskDelay(100 / portTICK_RATE_MS);
    gpio_set_level(PIN_NUM_RST, 1);
    vTaskDelay(100 / portTICK_RATE_MS);

主函数

void oled_setup()
{
	OLED_Init();
	OLED_ColorTurn(0);//0正常显示 1反色显示
	OLED_DisplayTurn(0);//0正常显示 1翻转180度显示


	OLED_DrawBMP(0,0,128,64,BMP1); //显示图片
	vTaskDelay(1000 / portTICK_PERIOD_MS); //延时1秒 delay函数的单位为ms
	OLED_Clear();//清除界面

	OLED_ShowString(0,0,"PGG",16);

	OLED_ShowChinese(0,4,7,16);
	OLED_ShowChinese(20,4,8,16);

	OLED_ShowChinese(0,6,9,16);
	OLED_ShowChinese(20,6,10,16);
}


void oled_loop()
{
	int i = 0;
	for (;;) 
	{
		char show[8]={0};
		
        sprintf(show, "%d%%",i);
		OLED_ShowString(50,4,show,16);
		
        sprintf(show, "%d",i);
		OLED_ShowString(50,6,show,16);
		
        vTaskDelay(2000 / portTICK_PERIOD_MS);
		i++;
    }

}

显示了一下之前做血氧仪的内容,包括汉字和字符
esp32-s3,单片机,C语言典型代码,单片机,esp32s3,esp-idf,c语言,oled

完整工程 ,适用于ESP-IDF 4.4版本,复制一个helloworld程序,覆盖main路径下的内容即可。
下载完整工程

esp32-s3,单片机,C语言典型代码,单片机,esp32s3,esp-idf,c语言,oled
这套代码用在其他平台,也只需改三个函数适配,很简单。
esp32-s3,单片机,C语言典型代码,单片机,esp32s3,esp-idf,c语言,oled

注意事项

在带有 OSPI PSRAM(即内置芯片为 ESP32-S3R8)的模组中,管脚 IO35、IO36、IO37 用于连
接至模组内部集成的 OSPI PSRAM,不可用于其他功能。

SPI用哪些引脚,通过example或者文档,可以找到答案

esp32-s3,单片机,C语言典型代码,单片机,esp32s3,esp-idf,c语言,oled
例如SPI2
esp32-s3,单片机,C语言典型代码,单片机,esp32s3,esp-idf,c语言,oled
那么代码中

#define SPI2_IOMUX_PIN_NUM_HD   9
#define SPI2_IOMUX_PIN_NUM_CS   10
#define SPI2_IOMUX_PIN_NUM_MOSI 11
#define SPI2_IOMUX_PIN_NUM_CLK  12
#define SPI2_IOMUX_PIN_NUM_MISO 13
#define SPI2_IOMUX_PIN_NUM_WP   14

结束语

时隔许久又想起来写点什么,好久没玩单片机了,最近做了一个血氧仪,把之前的8266模块又拾起来玩了一下
esp32-s3,单片机,C语言典型代码,单片机,esp32s3,esp-idf,c语言,oled
不过自己做的东西,自己也不确定好不好用,数据准不准,是不是挺可笑。不过这可能就是目前小厂员工的状态,用不知底的东西做出来的东西,有时候就没有信息。
所以目前好多公司,还是会希望每个模块,都需要自己吃透,才能放心用在自己产品了。所以人员一旦过少,无法研发出高质量的产品,因为只来得及用起来,没有时间去思考为什么。
esp32-s3,单片机,C语言典型代码,单片机,esp32s3,esp-idf,c语言,oled
今天看到了这个消息
esp32-s3,单片机,C语言典型代码,单片机,esp32s3,esp-idf,c语言,oled
普通人通过生孩子和努力还会成功吗?
esp32-s3,单片机,C语言典型代码,单片机,esp32s3,esp-idf,c语言,oled文章来源地址https://www.toymoban.com/news/detail-817588.html

到了这里,关于单片机开发---ESP32-S3模块上手的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 51单片机与ESP8266轻松上手Onenet(三)--温度上传onenet平台

      51单片机与ESP8266快速上手物联网系列将一步步介绍89C51单片机将采集到的DS18B20的温度数据通过ESP8266 WIFI模块实时上传到onenet云平台这样一个案例。       前面我们硬件对ESP8266模块刷入OneNET的AT固件(51单片机与ESP8266轻松上手Onenet(一)--Onetnet MQTT 固件烧录),并对于OneNET-M

    2023年04月09日
    浏览(29)
  • ESP32单片机入门篇

    目录 一、ESP32单片机的基本概念 1.双核架构 2. Wi-Fi和蓝牙功能 3. 集成多种外设 4. 支持多种操作系统 二、开发环境 1. Arduino IDE 2. ESP-IDF 三、开发语言 四、注意事项 五、代码例程 (1)点亮LED灯 1. 电路图 2. 代码 3. 代码注释 4. 注意事项 (2)控制继电器 1. 电路图 2. 代码 3. 代码

    2024年02月08日
    浏览(42)
  • 单片机项目分享 单片机(stm32)远程智能宠物喂养系统 - 物联网 esp8266

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月19日
    浏览(48)
  • esp32单片机在arduino环境下,WIF联网

    文章目录 系列文章目录 前言 一、WIFI是什么? 二、使用步骤 1.引入库 2.读入数据 总结 随着人工智能的不断发展,物联网这门技术也越来越重要,很多人都开启了物联网学习,本文就介绍了物联网WIFI模块的基础内容。 WIFI在中文里又称作\\\"行动热点\\\",是 Wi-Fi联盟 制造商的商标

    2024年02月15日
    浏览(38)
  • esp32单片机在arduino环境下,串口接收解码

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 当主控芯片发送一串数据,但此数据为一串字符串,需要将此字符串翻译成整型数组,以形成指令,控制串口屏。 例如:esp32单

    2024年02月09日
    浏览(27)
  • 【上位机与下位机通信】使用WIFI模块ESP8266连接单片机与上位机通信

    承接上文WIFI上位机部分:【上位机】通过WIFI上位机与网络调试助手通信绘制曲线,现阶段实现了STM32单片机与ESP8266WIFI模块作为下位机与WIFI上位机通信。 ATK-ESP8266 是 ALIENTEK 推出的一款高性能的 UART-WiFi(串口-无线)模块,此处使用的是正点原子团队自主开发的ATK-ESP-01模块。

    2024年02月05日
    浏览(96)
  • 【Arduino环境下驱动合宙esp32c3单片机基本外设】

    本教程是参加FastBond2活动主题4 - 测量仪器中的【Arduino环境下驱动合宙esp32c3单片机基本外设】。 围绕FastBond2阶段1——基于ESP32C3开发的简易IO调试设备项目需求开发。 设计目标: 多种数字和模拟信号的输入输出:用户可以选择不同的输入输出模式,并通过设备的操作界面进行

    2024年02月04日
    浏览(40)
  • STM32+esp8266实现单片机与服务器的WiFi通信

             源码已上传至gitee: stm32: 一些stm32模块使用经验记录 - Gitee.com https://gitee.com/lrf1125962926/stm32/tree/esp8266wifi%E9%80%9A%E4%BF%A1/         本实验采用STM32F1系列+esp8266 01s模块,采用HAL库开发。主控芯片哪个系列和型号都可以,只要有两个串口(UART或者USART,以下统称串口)

    2024年02月07日
    浏览(35)
  • 单片机设计_语音识别分类智能垃圾桶(STM32 ESP8266 LD3320)

    想要更多项目私wo!!!         离线语音识别识别垃圾种类并且垃圾桶自动翻盖: 说出唤醒词“垃圾桶”后,再说一句垃圾名称,语音识别模块端识别到相应,便会将结果通过串口发送到STM32端,STM32端接着会发送打开相应垃圾桶盖的指令,6s后,垃圾桶盖自动关闭。

    2024年02月06日
    浏览(37)
  • 嵌入式项目分享 单片机(stm32)远程智能宠物喂养系统 - 物联网 esp8266

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月21日
    浏览(57)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包