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.pswp.cn/news/285233.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285233.shtml
英文地址,請注明出處:http://en.pswp.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 語句中不要定…