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

本文以 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开发板的板载按键进行交互。如果你有任何问题或者想法,欢迎在评论区留言。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

阿里通义千问「全民舞王」,一张照片就能跳《科目三》,刷爆朋友圈

这两天看朋友圈、网上都在发这种跳舞的视频。只要上传一张全身照,就可以生成各种跳舞的视频。 比如前段时间火爆海底捞的《科目三》,还有《DJ慢摇》、《鬼步舞》、《兔子舞》、甚至还有咱《秧歌舞》。 先来一睹为快! 阿里通义千问「全民舞王…

Numpy和Pandas知识点总结

1.python常见的开源库介绍 1.1numpy 一个运行速度非常快的数学库,主要用于数组计算 1.2pandas 一个强大的“分析结构化数据”的工具集,底层依赖numpy 用于数据挖掘和数据分析,同时也提供数据清洗功能 pandas主要有两种数据结构&#xf…

VMware--安装CentOS系统

在虚拟机安装CentOS系统 1 下载CentOS镜像 方式一:可以到官网下载,下载速度较慢。 https://vault.centos.org/7.6.1810/isos/x86_64/ (最后的 / 不要漏掉) 方式二:可以到国内的镜像网站下载。 阿里开源镜像站&…

『年度总结』逐梦编程之始:我的2023学习回顾与展望

目录 前言 我与Python 我与C语言 第一篇正式博客: 第二篇正式博客(扫雷): 指针学习笔记: C语言学习笔记: 我与数据结构: yuan 这篇博客,我将回顾2023年编程之旅的起点,同时展…

Unity | NGO网络框架

目录 一、相关属性及变量 1.ServerRpc属性 2.ClientRpc属性 3.NetworkVariable变量 二、相关组件 1.NetworkManager 2.Unity Transport 3.Network Object 4.NetworkBehaviour: 5.NetworkTransform Syncing(Synchronizing) Thresholds Interpolation 三…

原生微信小程序AR(扫描指定图片显示glb模型)

效果 ar案例视频 准备:需要准备要扫描的图片地址和扫描成功后显示的模型 1.在components创建组件 index.js文件代码 Component({properties: {title: {type: String,value: ,},intro: {type: String,value: ,},hint: {type: String,value: ,},code: {type: String…

引导过程和服务

宏内核(monolithic kernel):又称单内核和强内核,Unix,Linux把所有系统服务都放到内核里,所有功能集成于同一个程序,分层实现不同功能,系统庞大复杂,Linux其实在单内核内核实现了模块化&#xff…

汽车电子学习总结

国内的主要有比亚迪、联合汽车电子(联电)、麦格米特、上海电驱动;国外的主要有欧美系的博世、麦格纳、大陆、博格华纳;日系的电装、电产等公司。

【Android Studio】在单独的窗口中启动模拟器

参考:https://developer.android.com/studio/run/emulator-launch-separate-window?hlzh-cn 默认情况下,Android 模拟器会在 Android Studio 中运行。这样,您就可以高效地使用屏幕空间,使用热键在模拟器和编辑器窗口之间快速导航…

华为交换机基于mac地址划分VLAN

SW1配置 vlan 10mac-vlan mac-address 5489-98c3-5611 #pc1 mac地址 mac-vlan mac-address 5489-98c3-5622 #pc2 mac地址 interface GigabitEthernet0/0/1undo port hybrid vlan 1 #禁用交换机默认的vlan 1,避免产生干扰port hybrid untagged vlan 10mac-vlan enab…

【Java】RuoYi-Vue-Plus 多数据源整合TDengine时序数据库——服务端自动建库建表

目录 环境准备整合TDengine 数据源1. 添加驱动依赖2. 添加数据源配置3. 添加Mapper4. 添加建表sql脚本5. Controller 测试效果 环境准备 RuoYi-Vue-Plus v5.1.2JDK17Maven 3.6.3Redis 5.XMySQL 5.7TDengine 2.6.0.34 客户端 整合TDengine 数据源 1. 添加驱动依赖 注意&…

【AWS系列】巧用 G5g 畅游Android流媒体游戏

序言 Amazon EC2 G5g 实例由 AWS Graviton2 处理器提供支持,并配备 NVIDIA T4G Tensor Core GPU,可为 Android 游戏流媒体等图形工作负载提供 Amazon EC2 中最佳的性价比。它们是第一个具有 GPU 加速功能的基于 Arm 的实例。 借助 G5g 实例,游…

亚信安慧AntDB数据库:企业核心业务系统数据库升级改造的可靠之选

在近期召开的“2023年国有企业应用场景发布会”上,亚信安慧公司的核心数据库产品AntDB闪耀登场,技术总监北陌先生针对企业核心业务系统数据库升级改造的关键议题发表了深度分享。他从研发、工程实施和运维管理三个维度细致剖析了当前企业在进行数据库升级…

OpenCASCADE MFC例子

OpenCASCADE MFC例子 说明 一直对OpenCASCADE一直都比较感兴趣,这个例子是我参考这位大神C幼儿园中班小朋友的专栏做出来的OpenCASCADE_C幼儿园中班小朋友的博客-CSDN博客 不过我用的是vcpkg的方式安装OpenCASCADE,这个需要注意一下,可能需…

智慧机房建设浪潮:2024年动环监控系统厂家排名出炉

近几年来,伴随着信息化技术的快速发展,老旧的传统机房在设备性能、网络安全、数据统计等各方面都已经不再能完全满足使用需求,国内多个机房兴起了轰轰烈烈的智慧机房建设浪潮。不同于传统机房只能依赖人工24小时值守,智慧机房凭借…

数据库之存储引擎

1. 存储引擎的概念 存储引擎是MYSQL数据库的组件,负责执行时间的数据I/O操作(数据的存储和提取),工作在文件系统之上,数据库的数据会先传到存储引擎,再按照存储引擎的存储格式保存到文件系统。 &#xff…

Spring学习 Spring IOC

创建工程: 2.1.程序的耦合 耦合:耦合指的就是对象之间的依赖关系。对象之间的耦合越高,维护成本越高。 案例:没有引入IOC容器时系统的Web层、业务层、持久层存在耦合 /*** 持久层实现类*/ public class UserDaoImpl implements U…

判断完全数-第11届蓝桥杯省赛Python真题精选

[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第27讲。 判断完全数&#…

如何理解Nacos的CP和AP架构模型?

Nacos是阿里巴巴开源的注册中心和配置中心,它既可以替应用服务管理服务相关的元数据,也可以管理服务相关的配置信息。 Nacos既支持单机部署,也支持集群部署,为了保证数据的一致性,在集群模式下,Nacos既支持…

CAD加密软件哪个好?CAD图纸加密软件哪个好(图纸加密软件哪个最好用)

图纸防泄密软件现在市场上是很多的,但是普遍采用的图纸防泄密软件技术是采用透明加密的技术,当企业采用透明加密技术对的图纸文件进行安全防护时,也是最安全的最稳定的技术。 现在常用的使用透明加密技术,对企业图纸防泄密的方法…