- 今日推薦
- 特別關注
做個鋼鐵俠「鋼鐵俠」
你是否想過成為一名 Geek,就像“野生鋼鐵俠”稚暉君那樣自己能做出各種新奇有趣的電子設備,但卻不知道從哪里入手、如何開始?今天我們不聊嵌入式、電路板、單片機原理,直接上手開始搞!
我認為對于零基礎的電子愛好者來說,一塊容易上手的開發板至關重要。否則復雜的安裝步驟和調試流程就能把最初的熱情消失殆盡,從而還沒看到一個成品就放棄了。所以,今天 HelloGitHub 帶來的 Arduino 就是一個非常容易上手的開源硬件平臺:
項目:github.com/arduino/Arduino
該項目包含 開發板(例如 Arduino UNO)和 軟件(Arduino IDE)兩部分,而且它擁有完善的中文社區和大量開源項目的示例,讓你遇到問題很容易就能找到解決辦法,想做項目也有完整的代碼和項目可以參照。
我當年在 C 語言都不是很熟練的情況下,只花了一天時間就能跟著教程用 Arduino 實現一些比較花哨的功能,由此足以見得 Arduino 真的非常適合作為電子愛好者的第一塊開發板。
下面我將通過:聞道(入門)、見道(上手)、入道三部分,幫助零基礎的電子愛好者快速入門 Arduino,開啟你的“鋼鐵俠”之旅。
一、聞道(介紹)1.1 推薦型號Arduino 到目前為止有很多種類的開發板,我在這里推薦大家使用 UNO 作為您的第一塊開發板。原因有以下幾點:
普及:玩 UNO 的人很多,網上有很多 UNO 的教程便宜:相比較其他類型開發板 UNO 真的是非常便宜了可拆卸:板子用的時間長了難免出現各種問題,可拆卸支持僅替換有問題的零部件1.2 UNO R3 開發板截止目前,市面上常見的 UNO 開發板為 UNO R3 開發板如圖所示:
Arduino UNO R3 使用一根數據線連接電腦即可實現 供電、編程、通信 等功能。
不要驚訝于開發板相比電腦竟然只有如此有限的資源,對于嵌入式來講這個參數足以適用于絕大多數場合。充足的電壓輸入范圍可以讓設備使用包括電腦 USB 接口、干電池、充電寶等多種方式供電而不會被燒毀。
關于購買方式,可以去各大電商平臺通過關鍵字“Arduino UNO R3”就能找出一大堆。
你可以選擇直接買套餐也可以自己買板子和然后根據需求購入的配件,買套餐的話圖個省心,如果是自行搭配能比套餐便宜百八十塊錢。
1.3 開發環境Arduino 開源項目有自己配套的跨平臺,編程環境——Arduino IDE 支持 Windows/Linux/macOS 操作系統。
它集成了 Arduino 開發所需的全部環境和支持庫,只需要選擇開發板然后鼠標點擊幾下即可實現編譯、燒錄、串口監控等功能。
此外,Arduino 也在近些年推出了網頁版編輯器以及 Arduino CLI,進一步降低了 Arduino 的開發門檻。
如果你不喜歡 Arduino 或者想使用其它 IDE,也可以選擇安裝 VSCode Platform IO 插件進行開發,Platform IO 也提供了開發包括 Arduino 在內大部分嵌入式開發所需環境,同樣可以實現一鍵編譯、下載、調試。
注意:本教程后續采用的是 Arduino IDE 進行講解和演示。
1.4 配置環境網上已經有很多 1.8 版本的使用教程,因為 v1 版本對于代碼自動補全做得不是很好。
所以,這里采用 Arduino IDE 2.0 RC 版本,在 Windows 操作系統做的演示。
官方下載地址:arduino.cc/en/software
進入下載網址后,下滑網頁即可看到 Arduino IDE 2.0 RC 的下載入口:
由于服務器位于國外,下載速度可能不是很快需要耐心等待
下載以后根據提示進行安裝后啟動程序可以看到如下界面:
注:這里大家的配色可能不同,默認是黑底白字,可以在 File->Preference->Theme 處更改
下面我們點開 “板級支持庫管理” 安裝 “Arduino AVR Boards” 的庫:
警告:由于 Arduino CLI 本身問題,這里可能會出現諸如 Access is denied 等錯誤,這時需要關閉殺毒軟件后才能正常安裝!!!
在此過程中會自動安裝驅動,請在提示中選擇 “是” 進行確認
安裝完成后應該會有如下文字輸出:
驅動安裝完成后插上我們的開發板,然后在 開發板選擇 下拉框進行選擇:
根據大家連接 USB 口的不同,這個不一定都是 COM3,大家需要自行判斷。或者在設備管理器中查看串口,或者拔插開發板看新增的是哪個 COM 口
1.5 運行段代碼下面運行一段點燈的代碼,類似于“Hello World”,萬物始于點燈!
選擇好后開發板后,復制如下內容到 編輯窗口:
void setup() { pinMode(LED_BUILTIN, OUTPUT);}void loop() { delay(300); digitalWrite(LED_BUILTIN, HIGH); delay(300); digitalWrite(LED_BUILTIN, LOW);}目前這段代碼現在看不懂不要緊,下面會有逐行的講解。
點擊 燒錄 按鈕,終端會出現如下提示:
并且開發板上的 LED 開始閃爍:
至此,環境就配置成功啦!
二、見道(上手)這里將介紹如何編寫 Arduino 的代碼。
Arduino 庫是使用 C 編寫的,官方將很多功能包裝成了一個個函數,但是對于初學者來講不需要了解這么多,只要有一點 C 語言基礎即可流暢使用。
Arduino 庫屏蔽了 AVR 單片機的底層細節,讓我們即使不了解模數電或者單片機相關知識也能輕松上手,現在就讓我們先簡單了解一下 Arduino 語言相關內容。
2.1 啟動流程一般來講,我們的 C 語言程序都是從一個 main 函數開始的,但是在之前的教程中我們發現 IDE 生成的文件中只有 setup 和 loop 兩個函數,那么 Arduino 是如何調用它們的呢?
實際上,真正的 main 函數存在于我們的 Arduino 庫文件中(位于 Arduino->main.cpp),其定義如下:
int main(void){ // 進行一些硬件和變量初始化工作 init(); initVariant();#if defined(USBCON) USBDevice.attach();#endif // 調用我們編寫的 setup() 函數 setup(); for (;;) { // 調用我們編寫的 loop() 函數 loop(); if (serialEventRun) serialEventRun(); } return 0;}可以看到我們編寫的 setup 和 loop 兩個函數會在 main 中進行調用。當然,相關文件是如何組織和編譯的這就是 Arduino 工具鏈所提供的功能了,這里我們不做深入了解,在初學階段我們只關心如何使用即可。
2.2 常用的函數Arduino 為我們提供了多種函數以供使用,具體細節可以查看 Arduino API 手冊。
不去記憶相關函數,善用 IDE 的智能補全和搜索引擎,便可快速上手
接下來我們通過講解上面的點燈代碼,簡單介紹幾個常用的函數:
void setup():初始化相關引腳和變量
在 Arduino 中程序運行會先調用 setup() 函數,用于初始化變量、設置針腳的輸出輸入類型、配置串口、引入類庫文件等等。每次 Arduino 上電或重啟后,setup 函數只運行一次,例如:
void setup(){ pinMode(LED_BUILTIN, OUTPUT); // 設置內置 LED 端口為輸出模式}之后會執行 loop() 函數,顧名思義該函數在程序運行過程中不斷地循環,直到芯片斷電為止。
void loop(){ delay(300); // 等待 300ms digitalWrite(LED_BUILTIN, HIGH);// 內置 LED 輸出高電平,點亮燈 delay(300); digitalWrite(LED_BUILTIN, LOW);// 內置 LED 輸出低電平,熄滅等}循環中的代碼每隔 300ms 點亮/熄滅燈,實現燈閃爍的效果。下面是用到的常量和函數詳解:
常量
HIGH | LOW:表示數字 IO 口的電平,HIGH 表示高電平(1 即輸出電壓“點亮”),LOW 表示低電平(0 即不輸出電壓“熄滅”)INPUT | OUTPUT:表示數字 IO 口的方向,INPUT 表示輸入(高阻態,即相當于電阻極大可以讀取輸入電壓信號),OUTPUT 表示(輸出電壓信號)數字 I/O
pinMode(pin, mode):數字 IO 口輸入輸出模式定義函數,參數 mode 可為 INPUT 或 OUTPUTdigitalWrite(pin, value):數字 IO 口輸出電平定義函數,參數 value 可為 HIGH 或 LOW,可用來點亮 LEDint digitalRead(pin):數字 IO 口讀輸入電平函數,返回值為 HIGH 或 LOW,可以用來讀數字傳感器注:參數 pin 值的范圍為 0~13,代指 14 根引腳。
時間函數
delay(ms):延時函數(單位 ms)以上為常見函數,不需要記憶有個印象即可,后面經常用就記住了。
2.3 什么是串口在寫代碼之前,需要先搞清楚什么是串口。
這個問題各種百科已經給出了答案,但是對于初學者來講這些文字難免有些官方。通俗來講,串口就是芯片之間通話的渠道。
一般來講我們使用開發板上的 UART 串口進行通信,它使用兩根信號線進行通信,一個名為 TX(消息發送端)一個名為 RX(消息接收端),他們的職責非常單一。
TX:只能發送消息RX:只能收聽消息所以使用的時候應該將 TX 和 RX 交叉連接:
此外,串口在使用的時候如果沒有額外的線纜給出同步時鐘信號則還需要指定串口的波特率,這相當于兩芯片之間的約定:我說我一分鐘能輸出 100 個二進制信號,那么平均來講每個信號的時長就是 1/100 秒,你只需要每 1/100 秒接收一次即可跟上我的腳步。
當然,這里的比喻存在些許漏洞,實際上的通信過程會稍微復雜一些以保證通信的可靠性和正確性。
我們現在開始實踐!由于篇幅關系,具體使用到的函數大家可以參考 API 手冊。
2.4 發送 HelloGitHub這里 Arduino 已經為我們準備好了 Serial(串口),只需要簡單幾步即可實現消息的發送。
這里使用的是一個 Arduino 官方庫,為我們準備好的 Serial 對象。如果您不了解 C 對象相關概念也不影響您的使用,類似 Serial.begin() 這種語法相當于函數調用(或者更官方的稱呼是“方法”),它只不過是 Serial 特有的函數而已。代碼如下:
#include <Arduino.h>void setup(){ // 設置波特率為 9600,我們的電腦讀取的時候也要保持相同 Serial.begin(9600);}void loop(){ // 串口輸出一行文字,會自動加換行符 Serial.println("HelloGitHub"); // 等待一會兒,防止發送太快卡死 delay(1000);}將上面的程序“燒錄”到開發板中,然后點擊 “Serial Monitor”(類似瀏覽器的開發者模式)查看串口。
這時就可以在控制臺,看到發送的消息了:
2.5 接收消息上面講完了如何發送,現在我們來說說如何讓 Arduino 從電腦或者什么其他地方接收消息。
下面是一段“回聲”代碼:
#include <Arduino.h>int count; // 記錄緩沖區字節數char buffer[65]; // 存儲從緩沖區讀出來的字符void setup(){ // 做一些初始化工作 Serial.begin(9600); count = 0;}void loop(){ // 這個 Serial.available() 會返回當前接受了多少字符存儲再緩存區 count = Serial.available(); if (count > 0) // 如果緩存區存了東西 { // 讀取 count 個字符到 buffer 中 Serial.readBytes(buffer, count); // 添加結尾,為了后面發送 buffer[count] = '0'; // 發送 Serial.println(buffer); } // 給一點時間多接收一點消息,不然只能一個字母一個字母的返回 delay(800);}燒錄以上程序,按照之前的方法查看串口。需要在這個框框里輸入要發送的內容,然后使用快捷鍵 Ctrl Enter 發送。
這里將在控制臺看到消息是板子接收電腦發送的消息后發送給電腦的,接收到的和發送的一摸一樣,故稱為“回聲”。
至此,關于串口的基本使用就講完了。雖然這里實現的功能很簡陋,但這是所有大神的必經之路。所有復雜的功能其實都是用這些看似簡陋的基礎功能實現的。
三、入道3.1 社區Arduino 擁有非常活躍的中文社區,新手提的問題大都能得到網友的熱心解答。社區里還有很多人分享自己的作品,即使是零基礎的小白也能在這里快速地成長。
3.2 作品展示超聲波避障小車
三自由度機械臂
簡易密碼鎖的制作
多功能透明顯示屏桌面站
相信不久的將來的你也可以做出,如此炫酷的電子玩意兒。
四、最后以上就是 HelloGitHub 講解開源系列之《Arduino 教程》入門篇的全部內容,如果你對 DIY 電子產品感興趣,不妨關注 HelloGitHub 能夠第一時間收到后續內容的更新。
預告:下一篇將介紹如何用 Arduino 做一個溫濕度顯示器,通過實戰加深對 Arduino 了解。
相關文章
- 2020數碼產品推薦「2022年電腦數碼新品內容營銷白皮書」
- 新安縣高層次人才引進「河南高學歷人才引進」
- 計算機專業要學什么科目「計算機專業有什么課程」
- 多彩貴州酒黔韻「為什么河沙里有貝殼」
- 陜西非文化遺產項目「陜西國家級非遺項目」
- 甘肅文縣特產咂桿酒「隴南到文縣多長時間」
- 電商平臺分析論文「電商平臺分析及選擇」
- 抖音電商的總結怎么寫「抖音年度總結在哪里看」
- 電商直播培訓ppt「電商運營季度PPT」
- rpa在電商行業的應用「電子商務對會計管理模式的影響」
- 電商會計工資高嗎「會計行業平均薪資」
- 優秀的電商設計師需要掌握哪些專業技能「電商設計需要學什么」
- 電商設計前景如何「電子商務藝術設計就業前景」
- 華容縣重大項目「華容縣2021重大項目規劃」
- 會計電商化是干嘛的「在電商做會計有發展嗎」
- 「白馬情中國夢」火圈舞、池哥晝、迎火把一大波現場圖來襲~
- 網易旗下的電商平臺「已經倒閉的網購平臺」
- 跨境電商支付分析報告「跨境電商支付存在的問題」