基于Freertos的ESP-IDF开发——1.HelloWorld

基于ESP-IDF的ESP32开发——1.HelloWorld

  • 前言
  • 创建一个新工程
  • 编写程序
  • 编译工程
  • 另一种printf函数
  • 结尾

前言

我们已经安装好了ESP-IDF官方sdk开发环境,如果还没安装可以参考我的这篇文章进行安装 Windows下esp-idf的环境搭建。

开发环境:ESP-IDF 4.3
操作系统:Windows10 专业版

本文旨在教会你如何使用ESP32通过串口的方式打印数据到电脑显示器。

创建一个新工程

首先进入我们的开发环境,安装好开发环境你的桌面应该有这三个东西,用PowerShell打开即可。

基于Freertos的ESP-IDF开发——1.HelloWorld_第1张图片
进入我们的需要创建工程的目录,复制下面这个路径。
基于Freertos的ESP-IDF开发——1.HelloWorld_第2张图片

使用cd命令进入目标目录,如下所示
cd D:\ProjectData\Idf-Data\idf_study

基于Freertos的ESP-IDF开发——1.HelloWorld_第3张图片
然后输入命令创建新工程,格式是:

idf.py create-project filename

filename是你起的工程名
我起的名字是 0_HelloWorld,所以命令是:

idf.py create-project 0_HelloWorld

基于Freertos的ESP-IDF开发——1.HelloWorld_第4张图片
然后我们等待数秒,工程就建好了。
基于Freertos的ESP-IDF开发——1.HelloWorld_第5张图片

编写程序

现在工程已经建立好了,那么我们就可以来编写我们的HelloWorld程序了,我们在Windwos下进入工程目录0_HelloWorld,我们可以看到里面有一个CMakeLists.txt,它的作用是告诉我们的编译器编译的目录在哪些地方可以找到。基于Freertos的ESP-IDF开发——1.HelloWorld_第6张图片

另一个main文件夹,它的作用自然是存放我们写的代码,进入main目录,打开这个C文件,这里我用的是NotePad++文本编辑器。

其实写代码不需要多好用的软件,有了编译环境用记事本也可以一样的写。
基于Freertos的ESP-IDF开发——1.HelloWorld_第7张图片
基于Freertos的ESP-IDF开发——1.HelloWorld_第8张图片
大家肯定是熟悉C语言的,在app_main函数中我们加上代码就完成了代码的编写

#include 

void app_main(void)
{
	//注意,此处一定要加\n,否则无法看到输出
	printf("HelloWorld!\n"); 
}

然后保存退出,准备编译我们的第一个项目。

编译工程

此时我们回到我们的ESP-IDF虚拟环境,也就是这个黑框(如果你用的是PowerShell那么就是蓝框),输入以下命令进入工程目录。

cd 0_HelloWorld

基于Freertos的ESP-IDF开发——1.HelloWorld_第9张图片

现在我们插上我们的ESP32,检查我们的串口号,右键单击 此电脑-> 管理 -> 设备管理器 -> 端口 可以找到。
基于Freertos的ESP-IDF开发——1.HelloWorld_第10张图片
我的ESP32连接在COM5,所以接下来我的编译命令是:

idf.py -p COM5 flash monitor

flash是将工程项目烧录至COM5口的设备,如果没有编译则会进行编译,monitor参数的作用是打开串口监视器。
基于Freertos的ESP-IDF开发——1.HelloWorld_第11张图片
因为是第一次编译,所以我们需要等待的时间比较久。编译过程的快慢与我们的CPU能力息息相关,所以不推荐使用树莓派等微型主机设备。在等待的过程中你可以简单学习以下命令:

idf.py create-project filename //创建一个新工程
idf.py fullclean //清理原先编译生成的数据
idf.py -p port monitor //打开port的串口监视器,例如port可以是COM5
idf.py -p port flash //向位于port的设备烧录程序
idf.py build //编译
idf.py set-target esp32 //选择编译的目标芯片,这里我写的是esp32,如果不写那么它将输出有哪些可以选择的目标芯片
idf.py menuconfig //打开配置菜单,后期我们会频繁使用到它

好了,这个时候我的老年机已经编译好了,也已经烧录到了ESP32中,下面是我的效果:基于Freertos的ESP-IDF开发——1.HelloWorld_第12张图片

输入 ctrl+c退出串口监视器回到目录。

现在你可以尽情更改你的代码了,因为其他文件已经编译过了,接下来的编译会速度非常快。如以下这样修改我们主函数的代码:

#include 

void app_main(void)
{
    while(1)
	printf("HelloWorld!");
}

然后把编译过程重新走一遍,也就是回到控制台输入编译命令:

idf.py -p COM5 flash monitor

你可以感觉得到的编译速度非常之快,我们观察串口的输出:

基于Freertos的ESP-IDF开发——1.HelloWorld_第13张图片
你会观察到每过几秒钟就会闪过一堆花花绿绿的文字,那是因为超出了ESP32的默认内存分配,导致了任务栈溢出,导致了ESP32的重启,要改变这种情况只需要加上延时函数,ESP-IDF内置了延时函数,我们在此先不讲。

另一种printf函数

除了标准库中的printf函数,ESP-IDF其实还有另一种输出函数:
我们把主函数中的代码更改为以下

#include 
#include 

static const char *TAG = "Hello Project";

void app_main(void)
{
	
	ESP_LOGI(TAG,"Hello ESP32!");
}

然后编译烧录我们的项目至ESP32,可以看到输出了TAG标签的内容和我们加上的字符内容。前面的(313)是指在启动之后的313毫秒时刻执行了 **ESP_LOGI(TAG,“Hello ESP32!”)**这行语句。Freertos是嵌入式实时操作系统的一种,所以我们需要根据不同时刻执行不同的任务来进行我们代码和程序的编写,这个时刻的输出也能有助于我们的调试。

基于Freertos的ESP-IDF开发——1.HelloWorld_第14张图片

结尾

esp_log.h库其实是用于打印日志,但是帮助我们简单调试也是可以使用的,printf语句则是由fputc改写而来,需要重定向至串口才能看到输出到显示屏,在ESP-IDF中官方已经完成了改写操作,并不需要像stm32中那样进行繁琐的操作。

最后,记得多加练习。

你可能感兴趣的:(单片机,物联网,iot)