当前位置: 首页 > news >正文

物联网之ESP32控制GPIO输出点亮LED、闪烁LED灯

MENU

  • 前言
  • 原理
    • GPIO引脚
    • LED
  • 硬件电路设计
  • 软件设计
    • 1、点亮一颗LED
    • 2、闪烁的LED


前言

不论学习什么单片机,最简单的外设莫过于IO口的高低电平控制LED,本文介绍如何使用Arduino控制ESP32的GPIO输出。通过本文的学习,掌握一定的Arduino程序架构知识,为以后大型项目程序学习打下基础,增强信心。


原理

GPIO引脚

引脚又叫管脚,英文叫Pin,就是从集成电路(芯片以及一些电子元件)内部电路引出与外围电路的接线的接口。
在ESP32开发板上,可以把这些称为引脚,引脚是从ESP32芯片内部引出,可以看到每个引脚都标有自己独特的名字。

ESP32

其中有一类引脚叫GPIO引脚,负责输入/输出电压。开发板上D开头的引脚都是这种引脚,比如D2、D4、D15等等。
输入暂时不讲,这里先讲一下输出,简单来说,每个GPIO都可以输出高低电平。
电路上某点的电压(对公共参考点)或电位是高还是低。比如在逻辑电路中,高于某个数值的电位称其为高电位,或高电平,低于某个数值,为低电位或低电平。比如ESP32中,高电平的数值大于2.5V,低电平的数值小于0.5V,具体的数值最好通过测试研究来确定。


LED

LED(light-emitting diode)即发光二极管。它具有单向导电性,通过5mA左右电流即可发光,电流越大,其亮度越强,但若电流过大,会烧毁二极管,一般我们控制在3mA~20mA之间,通常会在LED管脚上串联一个电阻,目的就是限制通过发光二极管的电流不要太大,因此这些电阻又可以称为限流电阻。当发光二极管发光时,测量它两端电压约为1.7V,这个电压又叫做发光二极管的导通压降。
发光二极管正极又称阳极,负极又称阴极,电流只能从阳极流向阴极。直插式发光二极管长脚为阳极,短脚为阴极。

LED


硬件电路设计

材料名称数量
直插式 LED1
1kΩ 电阻1
杜邦线(跳线)若干
面包板1

LED的正极接开发板的D12引脚,并串联一个电阻,负极接GND。

电路图

一定要接电阻,不然会由于电流过大,烧坏LED。


软件设计

1、点亮一颗LED

如果想要点亮这颗LED,只需要先设定相关引脚为输出模式,然后给这个引脚赋值一个高电平即可。

// 设置LED引脚
int led_pin = 12;void setup() {// 设定引脚为输出模式pinMode(led_pin, OUTPUT);// 点亮LEDdigitalWrite(led_pin, HIGH);
}void loop() {}

通过IDE编写上述代码,然后运行,此时会看到电路中的LED灯被点亮。


2、闪烁的LED

已经成功点亮一颗LED,接下来,可以尝试一下稍微复杂一点的逻辑,比如让颗LED闪烁。
实现LED闪烁的原理很简单,就是在loop函数中使用延时函数delay。先设置高电平,延时X秒,再设置低电平,延时X秒,之后就不断循环该语句即可。
在之前的初识Arduino编程语言中,已经学习loop函数的用法,如果想要让灯泡一直闪烁,则需要在loop函数中不断改变LED状态。

// 设置LED引脚
int led_pin = 12;void setup() {// 设定引脚为输出模式pinMode(led_pin, OUTPUT);
}void loop() {// 点亮LEDdigitalWrite(led_pin, HIGH);// 等待一段时间delay(1000);// 关闭LEDdigitalWrite(led_pin, LOW);// 等待一段时间delay(1000);
}

运行程序,LED就闪烁了。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 数据库中LIKE 和 NOT LIKE的用法辨析
  • [Python学习日记-12] 双色球彩票程序练习(使用到列表、判断、循环等)
  • 运营有哪几种?
  • MySQL——表操作
  • Django+Vue3前后端分离学习(二)(重写User类)
  • 代码随想录-- 二叉树 -- 二叉树的所有路径
  • 未来的去中心化网络:Web3与AI的深度融合探讨
  • 操作系统:线程实现方式
  • 最大时间
  • Open3D 四元数、欧拉角及旋转向量转旋转矩阵的方式
  • application/x-www-form-urlencoded与multipart/form-data与application/json的区别
  • 多态与接口(Golang)
  • 金融业开源技术 术语
  • 报错module ‘markdown‘ has no attribute ‘version‘解决方法
  • 网络包处理库Scapy: 计算checksum,csum
  • 【面试系列】之二:关于js原型
  • 【刷算法】求1+2+3+...+n
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • Javascripit类型转换比较那点事儿,双等号(==)
  • Spring Boot快速入门(一):Hello Spring Boot
  • Swoft 源码剖析 - 代码自动更新机制
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • ​人工智能书单(数学基础篇)
  • #Java第九次作业--输入输出流和文件操作
  • #mysql 8.0 踩坑日记
  • (52)只出现一次的数字III
  • (7)svelte 教程: Props(属性)
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (day6) 319. 灯泡开关
  • (Windows环境)FFMPEG编译,包含编译x264以及x265
  • (zt)最盛行的警世狂言(爆笑)
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (第二周)效能测试
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (六)Flink 窗口计算
  • (十一)手动添加用户和文件的特殊权限
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • (转载)利用webkit抓取动态网页和链接
  • .Net Core 中间件与过滤器
  • .Net 代码性能 - (1)
  • .net 流——流的类型体系简单介绍
  • .NET的数据绑定
  • @javax.ws.rs Webservice注解
  • @RequestMapping 的作用是什么?
  • @test注解_Spring 自定义注解你了解过吗?
  • [240621] Anthropic 发布了 Claude 3.5 Sonnet AI 助手 | Socket.IO 拒绝服务漏洞
  • [Algorithm][动态规划][子序列问题][最长递增子序列][摆动序列]详细讲解
  • [AutoSAR系列] 1.3 AutoSar 架构