想做鋼鐵俠?聽說很多大佬都是用它入門的

作者:HelloGitHub-Anthony

你是否想過成爲一名 Geek,就像“野生鋼鐵俠”稚暉君那樣自己能做出各種新奇有趣的電子設備,但卻不知道從哪裏入手、如何開始?今天我們不聊嵌入式、電路板、單片機原理,直接上手開始搞!

我認爲對於零基礎的電子愛好者來說,一塊容易上手的開發板至關重要。否則複雜的安裝步驟和調試流程就能把最初的熱情消失殆盡,從而還沒看到一個成品就放棄了。所以,今天 HelloGitHub 帶來的 Arduino 就是一個非常容易上手的開源硬件平臺:

項目地址:https://github.com/arduino/Arduino

該項目包含 開發板(例如 Arduino UNO)和 軟件(Arduino IDE)兩部分,而且它擁有完善的中文社區大量開源項目的示例,讓你遇到問題很容易就能找到解決辦法,想做項目也有完整的代碼和項目可以參照。

我當年在 C 語言都不是很熟練的情況下,只花了一天時間就能跟着教程用 Arduino 實現一些比較花哨的功能,由此足以見得 Arduino 真的非常適合作爲電子愛好者的第一塊開發板

下面我將通過:聞道(入門)、見道(上手)、入道三部分,幫助零基礎的電子愛好者快速入門 Arduino,開啓你的“鋼鐵俠”之旅。

一、聞道(介紹)

1.1 推薦型號

Arduino 到目前爲止有很多種類的開發板,我這裏推薦大家使用 UNO 作爲您的第一塊開發板。原因有以下幾點:

  1. 普及:玩 UNO 的人很多,網上有很多 UNO 的教程
  2. 便宜:相比較其他類型開發板 UNO 真的非常便宜了
  3. 可拆卸:板子用的時間長了難免出現各種問題,可拆卸支持僅替換有問題的零部件

1.2 UNO R3 開發板

截止目前,市面上常見的 UNO 開發板爲 UNO R3 開發板如圖所示:

Arduino UNO R3 使用一根數據線連接電腦即可實現 供電、編程、通信 等功能。

硬件詳細參數
微控制器 ATmega328P
工作電壓 5 伏特
輸入電壓(推薦) 7-12 伏特
輸入電壓(極限) 6-20 伏特
數字輸入輸出引腳 14 個
PWM 引腳 6 個
模擬輸入引腳 6 個
輸入/輸出引腳直流電流 20 毫安
3.3V 引腳電流 50 毫安
Flash Memory(閃存) 32 KB (ATmega328P) 其中有 0.5 KB 用於系統引導
SRAM(靜態存儲器) 2 KB (ATmega328P)
時鐘頻率 16 MHz
EEPROM 1 KB (ATmega328P)
內置 LED 引腳 13
68.6 mm
53.4 mm
25 克

不要驚訝於開發板相比電腦竟然只有如此有限的資源,對於嵌入式來講這個參數足以適用於絕大多數場合。充足的電壓輸入範圍可以讓設備使用包括電腦 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 操作系統做的演示。

官方下載地址:https://www.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 生成的文件中只有 setuploop 兩個函數,那麼 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;
}

可以看到我們編寫的 setuploop 兩個函數會在 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 或 OUTPUT
  • digitalWrite(pin, value):數字 IO 口輸出電平定義函數,參數 value 可爲 HIGH 或 LOW,可用來點亮 LED
  • int digitalRead(pin):數字 IO 口讀輸入電平函數,返回值爲 HIGH 或 LOW,可以用來讀數字傳感器

注:參數 pin 值的範圍爲 0~13,代指 14 根引腳。

時間函數

  • delay(ms):延時函數(單位 ms)

以上爲常見函數,不需要記憶有個印象即可,後面經常用就記住了。

2.3 什麼是串口

在寫代碼之前,需要先搞清楚什麼是串口。

這個問題各種百科已經給出了答案,但是對於初學者來講這些文字難免有些官方。通俗來講,串口就是芯片之間通話的渠道

一般來講我們使用開發板上的 UART 串口進行通信,它使用兩根信號線進行通信,一個名爲 TX(消息發送端)一個名爲 RX(消息接收端),他們的職責非常單一。

  • TX:只能發送消息
  • RX:只能收聽消息

所以使用的時候應該將 TXRX 交叉連接:

此外,串口在使用的時候如果沒有額外的線纜給出同步時鐘信號則還需要指定串口的波特率,這相當於兩芯片之間的約定:我說我一分鐘能輸出 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 能夠第一時間收到後續內容的更新。

講解開源項目:https://github.com/HelloGitHub-Team/Article

預告:下一篇將介紹如何用 Arduino 做一個溫溼度顯示器,通過實戰加深對 Arduino 瞭解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章