我们已经安装好了ESP-IDF官方sdk开发环境,如果还没安装可以参考我的这篇文章进行安装 Windows下esp-idf的环境搭建。
开发环境:ESP-IDF 4.3
操作系统:Windows10 专业版
本文旨在教会你如何使用ESP32通过串口的方式打印数据到电脑显示器。
首先进入我们的开发环境,安装好开发环境你的桌面应该有这三个东西,用PowerShell打开即可。
使用cd命令进入目标目录,如下所示
cd D:\ProjectData\Idf-Data\idf_study
idf.py create-project filename
filename是你起的工程名
我起的名字是 0_HelloWorld,所以命令是:
idf.py create-project 0_HelloWorld
现在工程已经建立好了,那么我们就可以来编写我们的HelloWorld程序了,我们在Windwos下进入工程目录0_HelloWorld,我们可以看到里面有一个CMakeLists.txt,它的作用是告诉我们的编译器编译的目录在哪些地方可以找到。
另一个main文件夹,它的作用自然是存放我们写的代码,进入main目录,打开这个C文件,这里我用的是NotePad++文本编辑器。
其实写代码不需要多好用的软件,有了编译环境用记事本也可以一样的写。
大家肯定是熟悉C语言的,在app_main函数中我们加上代码就完成了代码的编写
#include
void app_main(void)
{
//注意,此处一定要加\n,否则无法看到输出
printf("HelloWorld!\n");
}
然后保存退出,准备编译我们的第一个项目。
此时我们回到我们的ESP-IDF虚拟环境,也就是这个黑框(如果你用的是PowerShell那么就是蓝框),输入以下命令进入工程目录。
cd 0_HelloWorld
现在我们插上我们的ESP32,检查我们的串口号,右键单击 此电脑-> 管理 -> 设备管理器 -> 端口 可以找到。
我的ESP32连接在COM5,所以接下来我的编译命令是:
idf.py -p COM5 flash monitor
flash是将工程项目烧录至COM5口的设备,如果没有编译则会进行编译,monitor参数的作用是打开串口监视器。
因为是第一次编译,所以我们需要等待的时间比较久。编译过程的快慢与我们的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中,下面是我的效果:
输入 ctrl+c退出串口监视器回到目录。
现在你可以尽情更改你的代码了,因为其他文件已经编译过了,接下来的编译会速度非常快。如以下这样修改我们主函数的代码:
#include
void app_main(void)
{
while(1)
printf("HelloWorld!");
}
然后把编译过程重新走一遍,也就是回到控制台输入编译命令:
idf.py -p COM5 flash monitor
你可以感觉得到的编译速度非常之快,我们观察串口的输出:
你会观察到每过几秒钟就会闪过一堆花花绿绿的文字,那是因为超出了ESP32的默认内存分配,导致了任务栈溢出,导致了ESP32的重启,要改变这种情况只需要加上延时函数,ESP-IDF内置了延时函数,我们在此先不讲。
除了标准库中的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是嵌入式实时操作系统的一种,所以我们需要根据不同时刻执行不同的任务来进行我们代码和程序的编写,这个时刻的输出也能有助于我们的调试。
esp_log.h库其实是用于打印日志,但是帮助我们简单调试也是可以使用的,printf语句则是由fputc改写而来,需要重定向至串口才能看到输出到显示屏,在ESP-IDF中官方已经完成了改写操作,并不需要像stm32中那样进行繁琐的操作。
最后,记得多加练习。