C# NanoFramework 点灯和按键 之 ESP32

本来周末是要搞个大的,WIFI 和 Web网页之类的,奈何搞了两天,并与外国友人聊过后,才发现是固件有问题,晚上与大佬进行交流后才发现,原来ESP32S的官方固件有问题,搞不了。

所以,建议买的话买ESP32,不带任何型号的就可以了。

我买的新板子已经在路上了,只能等板子来了才能后续了。

目前也能搞一些简单的,就先搞一下下。

嵌入式的基础知识

如果对单片机,嵌入式了解少的,还是有必要深入了解一下硬件的基础知识的。

可以参考 《零死角玩转STM32—F429挑战者.pdf 》来了解大多数相关知识,看看基础部分即可,当然多看点更好。

虽然,板子都不一样,但是,基础知识是差不多的,都是差不多的架构方式。

比如 STM32可以达到一百多个引脚,而ESP32可能只有40左右个引脚,除了内置WIFI已经占用的,大部分IO口都已经引了出来,可以自己对其进行硬件级的设计。

在开发板上,一般这样的引脚会单独引出来,供开发测试使用。

GPIO

啥是GPIO,英文: General-purpose input/output 中文就是 通用型之输入输出的简称,简单来说,就是CPU可以控制的引脚,通过CPU芯片的GPIO引脚与外部设备(传感器了,AD采集之类的设备)连接起来,从而实现与外部通讯、控制以及数据采集的功能。

GPIO 基本的输入和输出

基本的输入

最基本的输出,就是检测外部输入电平,比如,判断当前按键是否按下等。

基本的输出

最基本的输出就是控制芯片引脚输出高,低电平,实现开关控制,比如GPIO引脚接入到LED灯,那就可以控制LED灯的亮灭。接入到继电器或三极管,那就可以通过继电器或三极管控制外部大功率电路的开关或者说通断。

GPIO 图解

000ba00d2a449584f1a411efa8a42861.png

以上就是GPIO的原理图,当然,硬件可能会有升级,但是,大致原理是一样的。

深度的解释可以自己看看书上的介绍和网上的资料,这里我说说我的大概解释。

IO口本身上来讲就表现了两个意思,输入和输出。

所以,这个电路的作用就是尽量保证它的输入和输出稳定,安全,可靠。

当然,更安全的可靠的还是靠外部上拉等,它本身还是挺弱的,电压3.3V左右,电流估计更小,偏向于控制信号级。

所以,想获得外部的信息,还是输出信息到外部,可以通过图上大致了解到,图上也表现了这两条路,一个是输入,一个是输出。

C# 实现点灯和获取按钮项目

板子相关资料

我当前的板子是ESP32S,找了官方,终于找到了资料,地址如下:

https://docs.ai-thinker.com/esp32/boards/nodemcu_32s

大部分资料可以参考,可以下载

以下是它的功能引脚图

3347a0d348e3a0a880c11a5cd631f4f7.png

以下是它的全的电路图

886a0da1c4b132724f9ee25dadb00758.png

我们要点灯,和按键,所以需要找到这两个功能的IO是哪些。

LED和Button的GPIO

从图可知 LED 的 GPIO 是 IO2 (GPIO 2 的意思,就是第二个IO引脚)

611cdc2d31795a4ffcb189aa4a0bec92.png

按键的话,一个是EN,就是板子的开关使能键,这个键,用不了,我们只能用另外一个,那就是IO0,第0个键。

a63c3f6799ef9d31a2906f7337551626.png

代码相关

需要新增几个Nuget包

Install-Package nanoFramework.Hardware.Esp32 -Version 1.3.6.7
Install-Package nanoFramework.Runtime.Events -Version 1.10.0
Install-Package nanoFramework.System.Device.Gpio -Version 1.0.4

然后,增加点代码,逻辑很简单,按下Boot按键,把灯点亮,松开按键,把灯熄灭。

public class Program
{public static GpioPin led;public static GpioPin button;public static void Main(){var gpioController = new GpioController();button = gpioController.OpenPin(Gpio.IO00, PinMode.Input);led = gpioController.OpenPin(Gpio.IO02, PinMode.Output);button.ValueChanged += Button_ValueChanged;while (true){Thread.Sleep(1000);}}private static void Button_ValueChanged(object sender, PinValueChangedEventArgs e){Debug.WriteLine("按键事件 : " + e.ChangeType.ToString());Debug.WriteLine("按键当前值: " + button.Read());if (e.ChangeType != PinEventTypes.Rising){//按下点亮灯led.Write(PinValue.High);}else{//松开手把灯搞灭led.Write(PinValue.Low);}}
}

运行的结果

6933b2dd80b85847aa86a31c602f8980.png

可以明显看到,按下按键的时候, 当前值是 Low,松开后,是High。

cabbb11694463b2081faa440359083e8.gif

上边是按下按键的小图。

我自己反复试了试,启动的话大概2秒就可以按键有效了。按键与灯的逻辑,反应也十分的快。

总结

整体来看,操作方便了很多,还可以调试,就是板子要与固件要保持一致,要不然,会有很多的小问题,需要去克服。

代码地址

https://github.com/kesshei/NanoFreamworkKeyOrButtonDemo.git

https://gitee.com/kesshei/NanoFreamworkKeyOrButtonDemo.git

一键三连呦!,感谢大佬的支持,您的支持就是我的动力!

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

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

相关文章

【ArcGIS Pro微课1000例】0002:ArcGIS Pro 2.5二三维联动显示

ArcGIS Pro是一款全新的桌面应用程序,它改变了桌面GIS的工作方式,以满足新一代WebGIS应用模式。ArcGIS Pro采用Ribbon界面风格,给人全新的用户体验。它作为一个高级的应用程序,可以对来自本地、ArcGIS Online、或者Portal for ArcGIS的数据进行可视化、编辑、分析。同时,实…

Spring Boot 解决跨域Cors问题

后端主要代码: (http://localhost:8080/ ) /*WebCorsConfig.java*/ package com.example.demo.Controller;import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsR…

C语言试题147之创建一个链表并且排序输出这个链表

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目:创建一个链表并且排序输出这…

DOM节点创建(jQuery)

1DOM创建节点及节点属性 通过JavaScript可以很方便的获取DOM节点,从而进行一系列的DOM操作。但实际上一般开发者都习惯性的先定义好HTML结构,但这样就非常不灵活了。 试想下这样的情况:如果我们通过AJAX获取到数据之后然后才能确定结构的话&a…

PHP中刷新输出缓冲

2019独角兽企业重金招聘Python工程师标准>>> http://www.cnblogs.com/mutuan/archive/2012/03/18/2404957.html 转载于:https://my.oschina.net/wuzhencan/blog/652259

2021最新计算机二级C语言试题

一、选择题 (1) 下面叙述正确的是( C ) A. 算法的执行效率与数据的存储结构无关 B. 算法的空间复杂度是指算法程序中指令(或语句)的条数 C. 算法的有穷性是指算法必须能在执行有限个步骤之后终止 D. 以上三种描述都不对 (2) 以下数据结构中不属于线性数据结构的是( C ) A…

[webpack3.8.1]Guides-4-Output Management(输出管理)

Output Management This guide extends on code examples found in the Asset Management guide.这个指南将在上一个指南的基础上对示例代码进行扩展。 So far weve manually included all our assets in our index.html file, but as your application grows and once you sta…

有条件地 [JsonIgnore]

前言通常,在进行 JSON 序列化或反序列化时,如果要忽略某个属性,我们会使用 [JsonIgnore] 特性:public class User {public int Id { get; set; }[JsonIgnore]public string Name { get; set; } }var user new User { Id 1, Name…

C语言试题145之创建一个链表

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目:创建一个链表 2 、温馨提示 …

[转]IntelliJ IDEA 2019.3正式发布,给我们带来哪些新特性?

每篇一句 工欲善其事必先利其器 ——《论语卫灵公》 前言 千呼万唤始出来。自从JetBrains在今年7月24日发布了IDEA 2019.2版本后,从9月份开始我便一直在关注此版本正式版的发布。JetBrains公司在9月中旬就对外公布了下一个主要版本 2019.3的Roadmap,而且…

Git中的日常使用 码云

http://git.mydoc.io/?t83143转载于:https://www.cnblogs.com/yangyuqiu/p/6164822.html

【谭浩强版】C语言程序设计(第三版)课后习题完整答案附源码--高等教育出版社

文章目录 第一章 语言程序设计的概念第二章 基本数据类型第三章 C语言程序的流程控制第四章 模块化程序设计第五章 数组第六章 指针第一章 语言程序设计的概念 1.1 请编写一个程序, 显示以下两行文字。 #include <stdio.h> main() {printf("I am a student.\n&qu…

php判断是否为json格式的方法

http://www.poluoluo.com/jzxy/201403/265005.html 首先要记住json_encode返回的是字符串, 而json_decode返回的是对象 判断数据不是JSON格式: .代码如下:function is_not_json($str){ return is_null(json_decode($str));}判断数据是合法的json数据: (PHP版本大于5.3) .代码如…

FineReport中以jws方式调用WebService数据源方案

在使用WebService作为项目的数据源时&#xff0c;希望报表中也是直接调用这个WebService数据源&#xff0c;而不是定义数据连接调用对应的数据库表&#xff0c;这样要怎么实现呢&#xff1f; 在程序中访问WebService应用服务&#xff0c;将WebService返回的数据转为程序数据集&…

C语言试题148之海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只 猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了 一个,它同样把多的

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目:海滩上有一堆桃子,五只猴子…

一文读懂什么是CTO、技术VP、技术总监、首席架构师

究竟什么是CTO&#xff0c;一个公司真的需要CTO么&#xff1f;哪些公司的职位对于技术管理者来讲真的是CTO的职位&#xff1f;同样是技术最高负责人&#xff0c;为什么有人叫CTO、有人叫技术总监、技术VP&#xff0c;有人叫首席架构师&#xff1f;他们之间的差别是什么&#xf…

与MySQL传统复制相比,GTID有哪些独特的复制姿势?

与MySQL传统复制相比&#xff0c;GTID有哪些独特的复制姿势? http://mp.weixin.qq.com/s/IF1Pld-wGW0q2NiBjMXwfg 陈华军&#xff0c;苏宁云商IT总部资深技术经理&#xff0c;从事数据库服务相关的开发和维护工作&#xff0c;之前曾长期从事富士通关系数据库的开发&#xff0c…

【ArcGIS Pro微课1000例】0007:ArcGIS Pro 2.5质量检查:拓扑创建与编辑案例教程

文章目录 1. 加载矢量数据2. 创建数据库、要素数据集3. 拓扑创建4. 拓扑错误编辑与修改1. 加载矢量数据 矢量数据可以是单独shp格式的文件数据,也可是存在于数据库中的要素类。 2. 创建数据库、要素数据集 创建数据库 无论是在ArcMap,还是ArcGIS Pro中,创建拓扑都需要在…

C语言试题149之809乘以??=800乘以??+9乘以??+1 其中??代表的两位数,8乘以??的结果为两位数,9乘以??的结果为 3 位数。求??代表 的两位数,及 809乘以??后的结果

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目:809*??=800*??+9*??+1…

[转]想要成为一名优秀的Java程序员,这份文档必读

A、规则&#xff08;1–2 级&#xff09; 1、在switch 中每个 case 语句都应该包含 break 或者 return 。 2、不要使用空的for 、if 、while 语句。 3、在运算中不要减小数据的精度。 4、switch 语句中的 case 关键字要和后面的常量保持一个空格&#xff0c;switch 语句中不要定…