本來周末是要搞個大的,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 圖解

以上就是GPIO的原理圖,當然,硬件可能會有升級,但是,大致原理是一樣的。
深度的解釋可以自己看看書上的介紹和網上的資料,這里我說說我的大概解釋。
IO口本身上來講就表現了兩個意思,輸入和輸出。
所以,這個電路的作用就是盡量保證它的輸入和輸出穩定,安全,可靠。
當然,更安全的可靠的還是靠外部上拉等,它本身還是挺弱的,電壓3.3V左右,電流估計更小,偏向于控制信號級。
所以,想獲得外部的信息,還是輸出信息到外部,可以通過圖上大致了解到,圖上也表現了這兩條路,一個是輸入,一個是輸出。
C# 實現點燈和獲取按鈕項目
板子相關資料
我當前的板子是ESP32S,找了官方,終于找到了資料,地址如下:
https://docs.ai-thinker.com/esp32/boards/nodemcu_32s
大部分資料可以參考,可以下載
以下是它的功能引腳圖

以下是它的全的電路圖

我們要點燈,和按鍵,所以需要找到這兩個功能的IO是哪些。
LED和Button的GPIO
從圖可知 LED 的 GPIO 是 IO2 (GPIO 2 的意思,就是第二個IO引腳)

按鍵的話,一個是EN,就是板子的開關使能鍵,這個鍵,用不了,我們只能用另外一個,那就是IO0,第0個鍵。

代碼相關
需要新增幾個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);}}
}
運行的結果

可以明顯看到,按下按鍵的時候, 當前值是 Low,松開后,是High。

上邊是按下按鍵的小圖。
我自己反復試了試,啟動的話大概2秒就可以按鍵有效了。按鍵與燈的邏輯,反應也十分的快。
總結
整體來看,操作方便了很多,還可以調試,就是板子要與固件要保持一致,要不然,會有很多的小問題,需要去克服。
代碼地址
https://github.com/kesshei/NanoFreamworkKeyOrButtonDemo.git
https://gitee.com/kesshei/NanoFreamworkKeyOrButtonDemo.git
閱
一鍵三連呦!,感謝大佬的支持,您的支持就是我的動力!