本文由網友投稿,站長是一點都不懂硬體。
作者:陳顯達
原文標題:【單片機入門】(一)應用層軟體開發的單片機學習之路-----基礎知識入門
原文連結:https://www.cnblogs.com/1996-Chinese-Chen/p/16786374.html
引言
工作了五六年,一直都是以软件为主,期间也是各个方向都玩,移动端,PC 端,网页端,后面在去年西安疫情的那一个月,突然觉得硬件也有很多可玩之处,相比于软件,看得见摸得着的东西可能更容易令人接受,做出成品也更容易有成就感,所以在那段时间我就去研究了一下树莓派,然后当时用 node 还有 c#操控树莓派来进行和传感器等电子元器件进行交互,感兴趣的可以看看我之前的文章C#控制树莓派入门 - 四处观察 - 博客园 (cnblogs.com),这篇文章仅仅用了做树莓派的入门,实际上,和我们这篇单片机的入门实际上也是有一些共性相通的地方。接下来,让我们一起了解一下单片机的入门基础知识吧。
何為單片機
單片機。最小計算機運行系統,百度百科做的解釋集成電路晶片,是採用超大規模集成電路技術把具有數據處理能力的 cpu、隨機存儲器 ram、只讀存儲器 rom、多種 i/o 口和中斷系統、定時器/計數器等功能(可能還包括顯示驅動電路、脈寬調製電路、模擬多路轉換器、a/d 轉換器等電路)集成到一塊矽片上構成的一個小而完善的微型計算機系統,在工業控制領域廣泛應用。從上世紀 80 年代,由當時的 4 位、8 位單片機,發展到現在的 300m 的高速單片機。
可以看到,一個單片機基本上可以當作是一個小型計算機,具有存儲,計算,輸入和輸出,計時定時器等能力,當然了,我們一台完整的計算機與我們進行交互,也是通過 io 去進行交互,通過滑鼠或者鍵盤連接到 io 口上就可以在計算機上面進行輸入輸出,那普通的單片機上面的輸入輸出就需要通過單片機上面的 io 口,就是那些針腳去進行通訊,可以看如下圖,這是一個 esp32 的一個單片機,上面包括了那麼多的 io 引腳,統稱為 gpio,那麼這個 gpio 是何方神聖呢,gpio 的全稱是 general-purpose input/output,翻譯過來也就是通用的輸入輸出接口,在這個單片機上面一共有四十個 gpio 接口。
單片機接口
按照 gpio 分類可以分為:
power,電源接口,下圖這個開發板上面有一個 3.3v 和一個 5v 的一個電源接口,同時可以用來做輸入或者輸出電源,用來給單片機進行供電,或者複雜的接串聯給整體項目中的所有電子元器件進行供電。
gnd:電線接地端接口,上面的 power 是正極,那麼 gnd 就是電路中的負極,或者接地線路。
gpio:就是可以作為通用的輸入輸出接口,可以用來和電子元器件進行交互,例如讓一個 led 燈亮起來,可以使用 gpio 的輸出高低位來進行讓 led 亮起來,高低位,則是給電子元器件進行釋放電流或者關閉電流就是一個開關,這裡不做過多解釋,後面我們會做實驗一步一步,讓大家學會。
adc:模數轉換器,將輸入的一個模擬信號的電壓,轉為數字,將輸入的模擬電壓或電流轉換為表示電壓或電流的大小的數字,獲取到採集的數據,然後轉為具體的數字,例如溫度傳感器,氣壓傳感器等等,都是通過獲取的模擬信號電壓,轉為具體的數字。
control:控制引腳,通常單片機帶了一個 en 的按鈕用來重啟單片機,如果將線路接入到這個 en 引腳則可以控制單片機進行重啟。
uart:串口通訊的一種,通用異步收發傳輸器(universal asynchronous receiver/transmitter),同一套 uart,具有兩個引腳,一個是 rx,一個是 tx 引腳,rx 用來接收數據,tx 引腳用來寫入數據,可以看到 r 的全稱是 receiver 用來接收,t 的全稱是 transmitter,用來傳輸數據,如果我們有一個 usb 轉 ttl 模塊,則可以使用 pc 和我們的單片機進行通訊發送接收數據,忘了提一嘴,通常用來做串口通訊的時候,rx 引腳必須接通訊方的 tx 引腳,tx 引腳和 rx 引腳相接,即 a 和 b 兩個單片機,需要進行 uart 串口通訊,那麼 a 的 rx 接口必須和 b 的 tx 接口相接,a 的 tx 接口必須和 b 的 rx 接口相接,a 接收數據來自於 b 的 tx,a 的發送數據 a 的 tx 然後 a 寫入到 b 的 rx,除非電子元器件有特別改動,通常情況都是 rx 接 tx,tx 接 rx。
spi:是串行外設接口(serial peripheral interface)的縮寫,是一種高速的,全雙工,同步的通信總線,並且在晶片的管腳上只占用四根線,分別是
- (1)miso– master input slave output,主設備數據輸入,從設備數據輸出;
- (2)mosi– master output slave input,主設備數據輸出,從設備數據輸入;
- (3)sclk – serial clock,時鐘信號,由主設備產生;
- (4)cs – chip select,從設備使能信號,由主設備控制。
首先從線的數量上,spi 就比 uart 多了兩條線,同時在設備上,spi 可以支持多設備的全雙工,但是同步的通訊總線,性能上可能不如 uart,但是在設備之間,spi 比 uart 具有更多的選擇性,由一個 spi 主設備,進行給從設備通過設定好的地址進行發送數據,可以使用同一個 spi 線路,控制多個電子元器件。
i2c:一個多主從的串行總線,又叫 i2c,是由飛利浦公司發明的通訊總線,屬於半雙工同步傳輸類型總線。iic 總線是非常常見的數據總線,僅僅使用兩條線就能完成多機通訊,一條 scl 時鐘線,另外一條雙向數據線 sda。兩條線一個 sda 用來傳輸數據,一條 scl 時鐘線,用來控制數據收發,應答等等。 touch:esp32 板子上面帶了十個不同的個電容式觸摸板, dac:adc 的逆轉,adc 為模擬信號轉為數字的電子元器件,那 dac 則為將數位訊號轉為模擬信號從而轉為電壓的一種元器件。 flash:esp32 上面帶了不同大小的內存,還可以自己進行分區,貌似有 4m 的,8m 的,還有 16 的,用來存儲一些小型文件,臨時文件。 pwm:脈衝寬度調製,輸入不同的波形,可以用這個控制一些電子元器件的速率或者快慢調製,通過對 pwm 高低電平的占空比不同,進行控制。
以上為 esp32 系列單片機的所有的 gpio 功能講解。後續我會帶大家,去進行和不同的傳感器進行交互來獲取數據,單片機購買連接放在了最下方,我一直都是在這家店鋪購買,並不是托,哈哈
【手機天喵】https://m.tb.cn/h.UdRqdqk? tk=mols2bobteq cz3457 “esp32 開發板 wifi+藍牙 2 合 1 雙核 esp32 核心板無線藍牙開發板”
單片機結語
其實針對於單片機,我所認為的是通過這些 gpio 引腳去進行和電子元器件進行通訊,通過那些總線通訊方式進行收發數據,消息傳遞,同時底層是通過不同引腳的高低電平去進行控制。總之,單片機開發要懂一些常用的基礎電路知識,不然很容易燒壞電路板,電子元器件,有錢可任意妄為,哈哈。
環境搭建
上面,我們對什麼是單片機,以及單片機上面都有哪些引腳,都具備那些功能做了一個解釋,那麼接下來我們講解一下 esp32 開發環境在 arduino 上面的一個配置。點擊首選項

在此處可以配置項目文件夾,新建項目的存放文件夾,以及開發板的配置,點擊附加的開發板網址,在彈出的界面中寫入https://dl.espressif.com/dl/package_esp32_index.json,這個網址,用來配置esp32的相關開發包。然後可以在工具,開發板,開發板管理中搜索esp32,然後點擊安裝即可,但是此處需要梯子才可以下載,否則下載會很慢,可以自己去github下載後然後放在arduino本地新建一個hardware文件夾,裡面文件夾名稱路徑就和我圖的一樣否則環境配置失敗是無法讀取配置信息。
github 下载地址:https://github.com/espressif/arduino-esp32,下载后将里面的文件放进hardware/espressif/esp32文件夹中去,然后点击tools/get.exe,会去下载配置环境等待结束就可以找到ESP32的开发板,这中间下载速度可能会很慢,我会把所有的东西一并上传,然后下载稍作修改后就可以使用了。
下載地址:http://121.43.235.192:8082/s/Be88gki4eSFSMFs





結語
其實使用 vscode 也可以開發這個在 arduino 上配置好之後,在 vscode 中下載 arduino 插件即可使用 vscode 進行配置,取決於開發者,同時 vsc 開發還可以直接使用原生 c 語言進行開發,
可以参考 i 乐鑫官网给出的步骤,快速入门 - ESP32 - — ESP-IDF 编程指南 v4.4.2 文档 (espressif.com),这个文档还是很不错,使用原生 c 语言进行开发,其难度也相较 Arduino 难一些,我是刚开始使用这个环境开发的,后来换成了 Arduino 相对简单一些,同时还可以像 c#的 nuget 一样去搜索自己想要的库,同时也有例子,相对简单一些。
後續文章會玩一些簡單的電子元器件,今年做智能小車一共做了三個,同時買的電子元器件也有很多,後續我會一一帶大家去學習,去玩,然後有必要的話,也會直播做一些講解,方便更好的入門學習,有興趣的小夥伴可以持續關注,環境方面不懂的也可以隨時加這個群找我,這個群,用來對單片機感興趣的小夥伴的專屬群,大家一起學習一起進步,目前玩的是 esp 的板子,後面也會使用 51 或者 stm 系列的,有興趣的可以一起研究,一起學習。
