首先来看一下硬件:
由图可见,就是这么个小东西,和我的手指对比一下也没多大,想看高清大图可以网上找,我手机摄像头坏了。
硬件控制最基本的就是 GPIO
控制,所以首先得找到 GPIO
引脚图,这个步骤是准没错的,以下就是 GPIO
引脚图:
另附官方文档源地址:ESP32-DevKitC V4 入门指南
备注,文档中我都是以我自己的开发板为基准的,我的板子是 ESP32-DevKitC V4
,有不一样的需要自行找到自己的开发板文档。
首先得思考一个问题,就是,点亮 LED
的原理,灯要亮,那么肯定得有电流通过,如果从没有接触过开发板的,虽然也写了几年程序,一开始肯定是云里雾里的,实际上我一开始也是云里雾里的。
我们搞程序开发的都知道,计算机的底层都是以 0
1
作为计算的,也就是高低电平,高电平就是1
,低电平(没有电压电流)就是0
。深入说的话这就是一门大学问了,这就涉及到数字电路设计以及逻辑门等相关的知识了,抛开这个不谈。对于这块 ESP32
开发板来说,高电平是3.3V
,低电平就是0V
。另外,这块开发板引脚图可见,有两个VCC
输出,一个5V0
一个3V3
,那么,我懒得接电阻分压的情况下,不烧毁这块开发板,我就直接把LED正极接到3V3
的引脚上,然后从图上找一个可以控制输出的 GPIO
,用于程序控制。
接下来,找了个GPIO12
把LED
的负极接入,然后再examples
下新建led.rs
,并粘贴以下代码;
#![no_std]
#![no_main]
use esp_backtrace as _;
use esp32_hal::{
peripherals::Peripherals,
prelude::*,
IO,
};
#[entry]
fn main() -> ! {
// 获取外围设备
let peripherals = Peripherals::take();
// 以 GPIO 多路复用创建 IO(输入输出)
let io = IO::new(peripherals.GPIO, peripherals.IO_MUX);
// 将 gpio12 将引脚配置为用作输出引脚
let mut led = io.pins.gpio12.into_push_pull_output();
loop {
// 将此引脚电平设为低电平
led.set_low().unwrap();
}
}
然后配置 Cargo.toml
,贴入以下配置:
[[example]]
name = "led"
执行程序:
cargo run --example=led
然后就能看到灯亮了,我先拍个照,贴一下照片:
从我拍的照片可以看到这个要黄不绿的灯亮了。
那么以上代码咋来的,很简单,首先是官方文档,附上链接如下:esp-template 简介
这个文档讲解了一整套程序的文件结构,以及对文件结构中每个文件都进行了说明,最主要的是讲解了 main.rs
这个我们要写的 ESP32
程序需要由哪几部分构成,那么,我们首先照葫芦画瓢就行,理解这个程序结构很重要,不然依葫芦画瓢都画不像,复制粘贴都不知道怎么贴。
瓢画好了,然后就是找到 GPIO
操作部分的文档复制粘贴代码就差不多了,然后找到官方点灯程序,这个程序里注释写得挺好:点灯程序示例。
主要看我这照葫芦画瓢得led.set_low().unwrap();
,我这个地方这个引脚输出低电平,也就是说,我上文说过的这个引脚接LED的负极。那么,这个接负极,然后程序控制了这个引脚输出低电平,电流自然就是从正极的3V3
高电平向低电平流动。这里容易混淆的是,我们一开始已经把LED的正极接入了 3V3
的正极,负极接入了这个 GPIO12
引脚,容易觉得这个时候灯是会亮的,实际上,这个时候这个引脚是断路的,也就是程序没有控制这个引脚输出,默认是断路的。
相当于来说,一个引脚存在三种状态:
低电平
- 这种情况下,如果用一根导线和
VCC
(正极)接起来,电流会向这个低电平方向流动 - 如果接
GND
(接地),同样接低电平,不产生电流
- 这种情况下,如果用一根导线和
高电平
- 这种情况下用一根导线和
GND
连在一起,那么此处电流就会往GND
方向流动 - 如果接
VCC
,电平一致,不会产生电流流动
- 这种情况下用一根导线和
断路
- 这种情况就是默认的,不管接啥,电路不导通
所以,把这个梳理清楚之后,我换一种接线方式,把原本接 VCC
的接线端,换成接到现在的GPIO12
,然后把原本接 GPIO12
的线换一下接到 GND
上。
然后把原本程序中的 led.set_low().unwrap();
改成 led.set_high().unwrap();
,然后看以下结果,灯照样是亮的:
整体看来,不管是搞硬件程序还是说写服务端程序或者说写前端程序,实际上开发过程中不需要接触硬件最底层的的程序逻辑,在已封装好的框架上层,只要理顺逻辑,然后按照理顺好了的逻辑把自己需要的代码从官方文档,或者是从官方开源的库也好,复制粘贴过来就行,暂时看起来还算挺简单,对于接下来的方向就是先把遥控板系统做起来。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。