ESP32入门 二(ESP32的hello world)

几乎所有学习编程的程序员或爱好者第一个练习程序都是这个叫"hello world"的程序,这个程序最初是指在计算机屏幕上输出"hello world"这行字串符的程序,这个例程在 Brian Kernighan 和 Dennis M. Ritchie合著的The C Programme Language使用而广泛流行。

如果在ESP32中使用,因为该设备在大部份的版本中,是并没有配备屏幕之类的输出模块的,所以如果要实现"hello world",最方便的方法是通过串口通信,把输出信息发送到计算机,从而实现输出可视化的信息。在本文最后,我们会实现并尝试详细说明这个例程,在这之前,先把在之前的文章中尚未介绍的一些知识点进行说明。

我们如果选择使用的是arduino IDE,新建一个项目或文件后,首先出现的是一段默认已经存在的代码:

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}

这里代码是分成了两个部份,每个部份我们把它称为函数,就是说,在这里,包含了两个初始的函数定义。函数可以理解为把一段代码打包,是一个固定的程序段,也可以称为子程序。定义最基本的函数正常情况下有四个部份

1.函数类型 - 如上面代码的void,就是一种函数类型,函数类型是定义这个函数运行的结果所返回的数据类型。void这个类型比较特殊,是指无类型的函数,就是说这个函数不返回任何结果。但不返回结果,并不是说这个函数不起任何作用。对于函数类型,后续会更详细的介绍。

2.函数名称- 如上面代码的setup,名称可以自定义,和变量一样,一些保留字或特殊符号不能使用,但这里的setup名称,不可以改变,因为这个setup函数和loop函相当于arduino留给开发者的两个固定的接口函数。

3.函数参数 - 如上面代码中的小括号(),在小括号里,可以为空,也可以定义一个或多个变量来作为参数,同样的,对于定义函数参数,后续也会详细介绍

4.函数主体代码 -如上面代码中的大括号{},在左右大括号之间,有一行或多行的空白,函数的所有代码就需要输入到这个大括号的中间。

这两个函数名称分别为setup和loop,如果就字面去理解,我们就可以大概了解这两个函数的作用。

setup在中文中有"软件或硬件的安装,设置"的意思,也就是说这个函数是设置一些功能的初始化。比如说,我们在之前的文章里,就是在这个函数里里对串口通信功能进行初化。

loop在中文中有"环形,循环"的意思,也正说明了这个函数的作用,在这个函数内的代码会不停地重复执行。
下面,我们用hello,world这个练习程序在更详细地观察这两个函数的作用。

我们输入以下代码:

void setup() {
  sleep(1);                                         //暂停运行1秒
  Serial.begin(9600);                               //初始化串口通信
  Serial.println("Hello world from setup function");  //向串口发送一段字符串,提示该字符串来自setup这个函数
}

void loop() {
  sleep(1);                                         //暂停运行1秒
  Serial.println("Hello world from loop function");   //向串口发送一段字符串,提示该字符串来自loop这个函数
}

我们打开串口监视器后上传这段代码,同时在串口监视器中观察代码的运行。
在这里插入图片描述
如果运行正确,应该会观察到如图所示的结果,可以看到输出的结果,分为两个类型,一个是从setup函数所发送的字符串"Hello world from setup function"和从loop函数所发送的字符串"Hello world from loop function",不同的是从setup所发送的字符串只有最前面的一句,而从loop函数所发送的字符串是每秒发送一次,只要不断开连接或关闭ESP32,可以观察到,ESP32会永久持继地每隔一秒发送一次该字符串。

我们知道,程序是自上而下的运行的,如果我们把这两个函数位置调换,把loop放在setup的前面,程序是不是就先运行loop呢,我们来做一个测试:

void loop() {
  sleep(1);                                         //暂停运行1秒
  Serial.println("Hello world from loop function");   //向串口发送一段字符串,提示该字符串来自loop这个函数
}

void setup() {
  sleep(1);                                         //暂停运行1秒
  Serial.begin(9600);                               //初始化串口通信
  Serial.println("Hello world from setup function");  //向串口发送一段字符串,提示该字符串来自setup这个函数
}

运行前为了防止混淆观察结果,我们在串口监视器上先点一下"清空输出""来清空之前收到的所有消息。
在这里插入图片描述
可以观察到,把两个函数调换位置后,运行的结果并未发生改变。

由此,我们可以得到结论,我们所定义的函数所在的位置并不能改变这两个函数的运行顺序,在ESP32中,setup总是优先于loop函数运行,且只运行一次。而loop函数在之后的运行中,总是永久持继地不断重复运行。

对于各类开发板来说,还存在另一种输出形式,对于ESP32来说,他属于是一款集多种功能于一身的微型控制器,既然是一个控制器,对其它的设备或元器件的控制应该才是这个开发板或这个芯片的主要功能。它对其它的设备或元器件主要方式是利用开发板上的引脚,这些引脚可以输出高、低电平,输出PWM信号,输出模拟信号,也可以通过UART/SPI/I2C等协议,对于这些功能具体的作用在后续的文章中会详细地进行介绍。

本文中我们用指令来控制指定的引脚输出高/低电平,相当于在ESP32这个微型控制器上实现类似"hello world"程序的功能。不同的是,在计算中的"hello world"是面向计算机屏幕输出一个字符串,在ESP32中是面向其它设备或元器件输出一个电平信号。这里,我们的输出对象选择的是一个非常简单好用的元件,叫 发光二极管,可以简称为LED,是非常常见的一种发光元器件。
在这里插入图片描述
在后续的学习中,也会常常用到这种元器件,用LED这种元件来测试的好处是这种元器件首选它便宜,功耗低,体积小,响应速度快,并有不同的颜色可以选择方便观察。原因是ESP32引脚所输出的电流大约在500Ma左右,如果用一些电流要求比较高的器件是无法驱动它进行工作的,所以,在后续的学习中,如果发现你的ESP32能点亮LED但换上小马达却不起作用时,就是这个原因。

为了方便学习这里推荐一个模拟ESP32环境的在线工具,可以让你在没有硬件的情况下也可以随时测试你的代码是否正常工作,工具地址:
https://wokwi.com/
进入网站后,如果有需求,可以试着注册一个帐号,当然,不注册也可以使用,我们找到ESP32的模拟器
在这里插入图片描述
可以看到,随了支持ESP32,这个网站也支持其它一些常见的开发板。
在这里插入图片描述进入后,我们可以看到,介面分为两大部份,左边是代码编辑区,右边是ESP32实物模拟区,在这里,我们可以给这个模拟的ESP32安装上一个LED,LED的正引脚连接到ESP32的2号引脚,LED的负引脚连接到ESP32的GND引脚。
在这里插入图片描述
点击加(+)号新建一个元器件,这里我们选择LED。
在这里插入图片描述
把LED拖动到方便的位置后,(如果需要旋转元件方便放置,选中该元件,按键盘的"R"键可以旋转该元件,"P"键可以把元件左右镜象翻转)直接点击所有元件的引脚就可以自动生成一根导线,我们用导线把LED和ESP32进行连接。注意:这里需要区别LED的正负引脚,如果接反,会造成测试结果出现偏差。
在这里插入图片描述
这里是模拟器,所以我们不用担心电流过大造成LED烧毁,如果你在真实硬件上连接,最好是能连接上一个330~500欧姆的电阻。比如这样:
在这里插入图片描述
下面我们写一段现实让LED每500毫秒反复亮灭的程序,来测试对ESP32引脚的控制,实现对外部元器件的控制。

void setup() {
  pinMode(2, OUTPUT);         //初始化2号引脚,设置为输出模式
}

void loop() {
  digitalWrite(2, HIGH);      //把2号引脚设置为高电平
  delay(500);                 //程序暂停500毫秒
  digitalWrite(2, LOW);       //把2号引脚设置为低电平
  delay(500);                 //程序暂停500毫秒
}

写好后点击运行按钮,观察右边的模拟窗口,可以发现我们的LED会每500毫秒反复地亮灭的过程。
在这里插入图片描述
到此,我们已经实现了通过串口监视器和通过引脚输出来实现能直观地观察到程序运行状态了,在之后的开发中,为了方便调试或输出程序运行的状态,这两种方式都是比较常用的输出方式。
在之后的文章中,将会介绍本篇中所用到的新函数,和介绍更多对于引脚进行控制的函数或方法。

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
VSCode 是一个轻量级的代码编辑器,提供了丰富的功能和插件,可以用来开发各种类型的项目,包括嵌入式系统。ESP32 是一款流行的开发板,它集成了蓝牙、Wi-Fi 等功能,非常适合物联网和嵌入式开发。 下面是使用 VSCode + ESP32 开发板的 “Hello World” 示例: 步骤 1:安装 VSCode 和相应的插件 - 下载并安装 Visual Studio Code(VSCode)。 - 打开 VSCode,点击左侧菜单栏的扩展按钮,搜索并安装 "PlatformIO IDE" 插件。 步骤 2:创建新项目 - 点击左侧菜单栏的 "PlatformIO" 图标,选择 "New Project"。 - 选择 "ESP32" 开发板,输入项目名称,并选择适合的目标框架(如:Arduino)。 步骤 3:编写代码 - 在 VSCode 中打开新项目文件夹。 - 编写一个简单的 "Hello World" 程序,例如在主代码文件(如:main.cpp)中使用 Serial.print("Hello World")。 步骤 4:编译和烧录 - 点击 VSCode 右下角的 "Upload" 按钮来编译代码并将其上传到 ESP32 开发板中。 - 确保 ESP32 开发板已正确连接到计算机,并选择正确的端口。 - 点击 "Upload and Monitor" 开始编译和烧录过程。 步骤 5:运行程序 - 在 VSCode 中打开串口监视器,查看 ESP32 开发板输出的 "Hello World"。 通过以上几个简单步骤,我们就可以在 VSCode 中使用 ESP32 开发板完成一个简单的 "Hello World" 项目。VSCode 提供了强大的代码编辑和调试功能,可以帮助开发人员更高效地进行嵌入式项目开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

字节狂徒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值