使用.Net nanoFramework获取ESP32板载按键的点击事件

news2024/9/22 19:23:16

本文以 ESP32-S3-Zero 板载的按键为例,介绍了GPIO的使用方法,以及如何获取按键的点击事件。板载按钮作为自带的天然用户按钮,除了其本身的功能外,也可以作为某些应用场景下的简单的交互方式。

1. 引言

对于一般的产品来说,比如路由器等,都提供了 RESET 功能,我们通过板载的按键就可以轻松的实现,并获取到按钮按下的时间。我们也可以使用其作为配网按钮,当用户按下按钮时,设备进入配网模式,这样,就可以方便的实现设备的配网功能。

在这篇文章中,我们主要使用其进行一些简单的交互:按下 BOOT 按钮,点亮板载的 LED 灯,松开灯灭。

2. 板载按键

ESP32-S3-Zero 板载了两个按键,不同于一般的载板只有一个按键,同时用于复位或者进入下载模式。这就意味着,我们可以在自己的程序中使用一个按钮,方便用户进行交互。如下图所示,板载的两个按键,分别是标号6的 BOOT 和 标号7的 RESET 按键。

请添加图片描述

根据原理图,我们可以看到,这两个按键都是通过一个电阻分压电路,将按键的电平变化转换为电压信号,然后通过一个 IO 口输入到 ESP32-S3 芯片中。如下图所示,已经标出了 BOOT 按键 K2 的电压信号输入到了 IO0 引脚。当按键按下时,IO0 引脚与 GND 短接,电压为 0V,当按键松开时,IO0 引脚与 3.3V 之间有一个 10K 的电阻,电压为 3.3V。也就是说,当用户按下 BOOT 按钮时,IO0 引脚的电平会变为低电平,当用户松开时,IO0 引脚的电平会变为高电平。

请添加图片描述

知道了原理,我们就可以通过程序来获取按键的点击事件了。不过,虽然有两个按键,但是我们只能使用一个,因为另一个按键是用于复位的,当按下 RESET 按钮时,ESP32-S3 芯片会复位,这样,我们就无法获取到按键的点击事件了。

3. 获取按键的点击事件

在 nanoFramework 中,我们可以通过 GpioController 类来获取 IO 口的状态,也就是获取 IO 口的电平。我们可以通过 ValueChanged 事件来获取 IO 口电平的变化,从而获取到按键的点击事件。

在下面的代码中,我们 Ws2812c 类来控制板载的 LED 灯,ESP32-S3-Zero 的板载 LED 引脚为21,只有1个灯珠。我们通过 Image 属性来获取到灯珠的图像,然后通过 SetPixel 方法来设置灯珠的颜色,最后通过 Update 方法来更新灯珠的状态:

public static void Main()
{
    // 1 个灯珠,1像素
    int WS2812_Count = 1;
    //  ESP32-S3-Zero 灯珠的引脚
    int WS2812_Pin = 21;
    var gpioController = new GpioController();
    var leddev = new Ws2812c(WS2812_Pin, WS2812_Count);
    BitmapImage img = leddev.Image;
    
    var userbtn = gpioController.OpenPin(0,PinMode.InputPullDown);
    userbtn.ValueChanged += (s, e) =>
    {
        
        Debug.WriteLine("BOOT 按钮事件:" + e.ChangeType.ToString());
        Debug.WriteLine("IO0 的值:" + userbtn.Read());

        if (userbtn.Read() == PinValue.Low)
        {
            // 开灯
            img.SetPixel(0, 0, Color.White);
        }
        else
        {
            // 关灯
            img.SetPixel(0, 0, Color.Black);
        }
        leddev.Update();
    };
    Thread.Sleep(Timeout.Infinite);
}

如下图所示,我们可以看到,当按下 BOOT 按钮时,IO0 引脚的电平变为低电平,当松开时,电平变为高电平。在代码中我们根据当前的电平来设置灯珠的颜色,当按下按钮时,灯珠变为白色,当松开时,灯珠变为黑色,即灭灯。

请添加图片描述

通过上面的编码,我们很轻松的就制作了一个小电灯。当然,我们也可以通过修改代码,通过 flag 来控制灯珠的状态,这样,我们就可以实现按下按钮时,灯珠点亮,再次按下时,灯珠熄灭。

请添加图片描述

4. 最后

在这篇文章中,我们详细介绍了如何在.NET nanoFramework环境下,使用ESP32-S3-Zero开发板的板载按键进行简单的用户交互。我们了解了如何通过GPIO接口读取按键状态,并根据按键的状态控制板载LED的开关。这只是一个简单的示例,实际上,我们可以在这个基础上进行更多的扩展,比如,我们可以通过按键实现更复杂的功能,比如长按进入特定模式,或者双击执行特定操作等。

希望这篇文章能帮助你理解如何在.NET nanoFramework环境下,使用ESP32-S3-Zero开发板的板载按键进行交互。如果你有任何问题或者想法,欢迎在评论区留言。

最后,期待看到你使用这些知识创造出更多有趣的项目和产品。祝编程愉快!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1360883.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在 wsl 中运用 kubeconfig 实现自由管理 kubernetes 集群

本文来自我的博客地址 文章目录 k8s 集群配置理解 kubeconfig思路整理:在 wsl 上安装 kubectl配置自动补全 拷贝 kubeconfig登到 k8s 集群的 master 节点, 把 kubeconfig 拷贝到 wsl测试 kubectl k8s 集群配置 IPHost配置11.0.1.150master1 (keepalivedhaproxy)2C 4G 30G11.0.…

前端--基础 常用标签 - 超链接标签 ( 内部链接,空链接,下载链接,网页元素连接)

链接分类 : 外部链接 内部链接 空链接 下载链接 网页元素链接 内部链接 : 即 网站内部页面之间的相互链接,直接点击 链接内部页面名称即可 所谓内部链接,就是在同一个网站里面,有许多链接,当你在 a…

【STM32】RTC实时时钟

1 unix时间戳 Unix 时间戳(Unix Timestamp)定义为从UTC/GMT的1970年1月1日0时0分0秒开始所经过的秒数,不考虑闰秒 时间戳存储在一个秒计数器中,秒计数器为32位/64位的整型变量 世界上所有时区的秒计数器相同,不同时区…

MongoDB入门介绍与实战

目录 1. 什么是MongoDB? 2. 安装MongoDB 1. 离线安装 2. 使用docker-compose安装 3. mongo命令行实战 1. 连接到 MongoDB 数据库 2. 创建集合(表) 3. 插入数据 4. 查询数据 5. 更新数据 6. 删除数据 4. Springboot集成MongoDB实战…

参加CTF比赛不会这些技术点,过去也是当炮灰!【CTF要掌握哪些技术点】

文章目录 0.前言1. Web技术2. 逆向工程3. 密码学4. 网络分析5. 系统编程6. 二进制分析7. 密码破解8. 隐写术9. 社会工程学10. 日志分析 0.前言 很多人学了很久网络安全方面的技术出来还是找不到工作,这到底是为什么?其实是没弄清楚现在企业在网络安全方…

机器人开发--动力系统

机器人开发--动力系统 1 介绍概述BMS电池管理芯片系电源管理细分赛道,主要产品形态包括电池计量(电量计)、电池安全、充电管理等三大类芯片BMS 产业链动力电源、消费电子细分领域 BMS 芯片种类、技术及下游销量概览 电池电池包典型产品及参数…

多线程基础知识点

1. 进程 一个正在执行中的程序就是一个进程,系统会为这个进程发配独立的【内存资源】。进程是程序的一次执行过程,它有自己独立的生命周期,它会在启动程序时产生,运行程序时存在,关闭程序时消亡。 例如:正…

异地环控设备如何远程维护?贝锐蒲公英解决远程互联难题

青岛某企业致力于孵化设备、养禽设备和养猪设备的研发、生产和服务,历经三十多年发展,目前已成长为行业主要的养殖装备及工程服务提供商,产品覆盖养殖产业链中绝大多数环节,涉及自动化设备、环控设备、整体解决方案等。 在实际应用…

【kettle】pdi/data-integration 集成kerberos认证连接hdfs、hive或spark thriftserver

一、背景 kerberos认证是比较底层的认证,掌握好了用起来比较简单。 kettle完成kerberos认证后会存储认证信息在jvm中,之后直接连接hive就可以了无需提供额外的用户信息。 spark thriftserver本质就是通过hive jdbc协议连接并运行spark sql任务。 二、…

Android开发编程从入门到精通,安卓技术从初级到高级全套教学

一、教程描述 本套教程基于JDK1.8版本,教学内容主要有,1、环境搭建,UI布局,基础UI组件,高级UI组件,通知,自定义组件,样式主题;2、四大组件,Intent&#xff0…

C#编程-实现继承

C#允许您通过扩展现有类的功能以创建新类来实现继承。 从基类创建派生类 使用以下语法在C#中创建派生类: class <derived_class>:<base_class>{...}确定继承的层次结构 要确定继承层次结构,必须检查派生类与基类之间的关系种类。确保派生类是一种基类。 请考虑以…

数据结构 模拟实现Stack栈(数组模拟)

目录 一、栈的概念 二、栈的接口 三、栈的方法实现 &#xff08;1&#xff09;push方法 &#xff08;2&#xff09;pop方法 &#xff08;3&#xff09;peek方法 &#xff08;4&#xff09;size方法 ​编辑 &#xff08;5&#xff09;empty方法 四、最终代码 一、栈的…

自动重置密码

在运维工作中为用户重置密码是常见的操作&#xff0c;虽然手工运行 passwd 命令就可以很方便地设置&#xff0c;但在用户忘记密码后还需要管理员操作。在用户数量很大时也是不小的工作量。因此为用户提供工具来自动重置密码就很有必要。 技术方案 技术方案比较简单&#xff0…

和鲸社区数据分析每周挑战【第一百二十一期:电商店铺经营分析】

和鲸社区数据分析每周挑战【第一百二十一期&#xff1a;电商店铺经营分析】 文章目录 和鲸社区数据分析每周挑战【第一百二十一期&#xff1a;电商店铺经营分析】一、数据文档二、探索性数据分析三、品类销售效果评估四、用户参与活动优惠的购物行为分析五、不同订单来源对购买…

Qt实现文本编辑器(二)

上一章节讲述了如何制作文本编辑页面&#xff0c;以及应该有哪些功能需要实现&#xff0c;只是做了展示效果&#xff0c;实际的点击事件并没有处理。今天来具体讲解下是如何实现菜单栏以及工具栏上对应的需求吧~ 功能实现 功能&#xff1a; 1、动作消息触发 2、具体功能&am…

idea设置注释在鼠标当前位置,使其不从顶格位置添加注释

idea设置注释在鼠标当前位置&#xff0c;使其不从顶格位置添加注释 默认情况下&#xff0c;注释都是从改行的顶格开始&#xff0c;看起来不太美观而且不易清除分级 设置让其从代码处开始&#xff0c;步骤&#xff1a;File–>Sttings–>Editor–>Code Style &#xff…

使用 CompletableFuture 分批处理任务

一、无返回值任务函数 // 数据分批 List<List<StatisticsDTO>> batches Lists.partition(statisticsList, BATCH_SIZE); List<CompletableFuture<Void>> futures new ArrayList<>(batches.size());// 数据处理 for (int i 0; i < batches…

C++:类和对象(3)

目录 1.构造函数调用规则 2.深拷贝和浅拷贝 3.初始化列表 4.类对象作为类成员 1.构造函数调用规则 默认情况下&#xff0c;C编译器至少给类添加三个函数&#xff1a; 1.默认构造函数(无参&#xff0c;函数体为空) 2.默认析构函数(无参&#xff0c;函数体为空) 3.默认拷贝构…

GNSS位移监测站对尾矿库坝体表面位移进行自动化监测

表面位移监测&#xff1a;通过GNSS位移监测站对尾矿库坝体表面位移进行自动化监测&#xff0c;掌握尾矿坝整体表面位置的变化及其变化速率&#xff08;包括平面位移和垂直沉降&#xff09;&#xff0c;确定尾矿坝坝体整体位移变形的情况&#xff0c;是确定尾矿库安全性的重要指…

一文讲透SPSS相关性分析结果怎么看?

推荐采用《SPSS统计分析入门与应用精解&#xff08;视频教学版&#xff09;》 杨维忠、张甜 清华大学出版社“5.1 双变量相关分析” 的解答。 本节内容选自《SPSS统计分析入门与应用精解&#xff08;视频教学版&#xff09;》 杨维忠、张甜 清华大学出版社“5.1 双变量相关分析…