vscode下使用idf开发ESP32点亮LED

大约是2019年那会儿,自己做了一个ESP32的开发板,使用的模块是ESP32-S。这个模块我在乐鑫官网一直没找到,应该是安信可从乐鑫买的芯片ESP32(不带S),然后自己做模块,起的名字。

当时乐鑫提供的开发环境,懂得都懂,那叫一个倒反天罡,用过的人没有一个不说难用。幸好安信可感觉他们家芯片有价值,于是自己想办法,基于Eclipse做了二次开发,提供了一个说得过去的开发环境,但也仅仅是说得过去。

我当时在那个环境下完成了ESP8266的自学,想着再把ESP32学一下,后来一方面原因是精力分散,另一方面实在是有点恨铁不成钢,所以就暂停了。

几年后,乐鑫应该是意识到了这个问题。在VS Code上提供了idf插件,可以很方便的实现开发环境的搭建。于是我又翻出了当年做的那个小板子,看着它,异常怀念,再点一次灯吧。

开发环境的搭建就不说了,网上资料很多,直接从点亮LED开始。

一、新建工程

    在VS Code的idf插件页面,点击新建工程:New project。

    点击后,弹出如下页面,依次输入工程名称、存放路径、板子型号,推测我手里的ESP32-S应该是普通的ESP32芯片,所以随便选了一个。最后选择:Choose Template。意思是从官方的例程中,选一个做为新工程的模板。

    点击后,跳转到创建新项目的页面。

    依次选择:ESP-IDF,然后从下面的例程中点击:blink,即可以此为模板,创建我们的新工程。

    箭头3指向的位置,说明该工程支持的芯片型号。然后点击位置4。这时电脑屏幕的右下角弹出一个提示框,如图。

    大致意思是,工程已经被创建,是否在新窗口中打开。点击:YES ,即可。

    如上图,工程创建成功,双击main下的c文件,即可打开该工程主要代码,如右侧所示。

    二、工程编译

      工程创建成功后,先编译一下工程,因为有很多信息要编译之后才能准确显示。点击VS Code左下方工具栏里,类似扳手的图标,开始进行编译。

      如上图所示,箭头1对应的位置为编译的按钮;箭头2对应的位置为编译成功输出的信息。第一次编译花的时间比较多,我这里用了大约4分钟左右。

      因为代码里有很多基于“#ifdef”的条件编译代码,只能等编译成功后,编辑器获取完整的信息,才能正确显示“#ifdef”对应的信息。

      这时再看它的代码,大致能看懂。就是个点灯的例子,但是也分成了两种。

      #ifdef CONFIG_BLINK_LED_STRIP
      #elif CONFIG_BLINK_LED_GPIO

      一种是普通的点灯:CONFIG_BLINK_LED_GPIO。即一个IO配置为输出模式,控制一个LED,定时翻转。

      另一种控制的是类似WS2812这种的三色LED:CONFIG_BLINK_LED_STRIP。也是只需要一个IO,只要按照特定时序发送信号,就能控制一个三色LED。

      这一节先看普通的点灯。对应的IO编号是:CONFIG_BLINK_GPIO。

      鼠标右键点击,选择:查找定义。可以看到它实际对应的管脚编号,是IO5。如下图:

      在这里,我们可以把它改成板子上实际要用的IO编号。我这里实际使用的IO是26,改成26即可。

      但实际,正规的修改方法不是在这,而是通过menuconfig。

      几年前,我也写过ESP32点灯的文章,当时找不到IO编号修改的位置,现在终于把这个坑添上了。

      三、进入menuconfig修改配置

        menuconfig是一套图像化管理工具,主要用于Linux系统下,管理代码工程、模块及功能。乐鑫的工作人员把这套工具用到了ESP8266和ESP32的管理上,实现了这类芯片功能的图形化配置。

        (万恶的产品经理,一个单片机级别的东西,搞得这么复杂!!!!)

        使用方法很简单,在界面最下面点击箭头1所示位置:打开ESP-IDF终端。然后在位置2(终端)那里输入相关指令。

        注意,一定要先点击位置1,使用工具栏的按钮打开终端,不要直接点击位置2的终端。虽然直接点击位置2,看起来效果是一样的,但它是不支持命令输入的。

        在位置2输入命令:idf.py menuconfig,然后敲回车。

        弹出menuconfig界面,可以用鼠标调整边框来调整显示区域,效果如下:

        该页面下,鼠标无效,主要靠键盘。使用键盘上的上下箭头,移动到:Example Configuration 这一行,敲回车。弹出如下页面:

        在第二行,可以看到:Blink GPIO number的编辑选项。移动到第二行,敲回车,显示如下:

        输入板子上对应的LED管脚,我这里是IO26,输入26,然后敲回车即可。观察下面的快捷键,“S”是保存,“Q”是保存+退出。保险起见,我们先按“S”,再按“Q”。中间有提示你需要确认的,直接敲回车即可。

        退的不干净,有残影。不停的敲回车,刷新过去即可。

        四、再次编译

          因为做了修改,所以要再次点击编译按钮。这次会快一些,差不多两分钟吧。

          五、程序烧录

            先要确保板子已经通过USB数据线连接到电脑上,驱动已经正常安装。设备管理器中能看到对应的串口号,我这里是COM4。

            如上图,点击左下侧端口那里。最上面会显示当前电脑中连接的串口,点击COM4即可。

            点击五角星那里选择烧录方法,然后在上面弹出的下拉框那里选择UART。

            最后点击五角星旁边的闪电按钮,完成程序的烧录。下载成功后,提升如下信息:

            现在,可以看到板子上的LED,正在一闪一闪的闪烁。和程序中设定的1秒的实际能够对应上。

            六、对照程序

              回到主函数中,看一下主要的代码功能。其实也很简单,一个是GPIO的初始化,然后就是进入while中的一个死循环。在里面不停的打印信息、更新LED状态、延时。

              void app_main(void)
              
              {
              
                  /* Configure the peripheral according to the LED type */
              
                  configure_led();
              
                  while (1) {
              
                      ESP_LOGI(TAG, "Turning the LED %s!", s_led_state == true ? "ON" : "OFF");
              
                      blink_led();
              
                      /* Toggle the LED state */
              
                      s_led_state = !s_led_state;
              
                      vTaskDelay(CONFIG_BLINK_PERIOD / portTICK_PERIOD_MS);
              
                  }
              
              }

              至此,LED点灯成功,5年前的坑终于添上了。

              发表评论

              此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据