我們可以用與一般Arduino相同的步驟來寫入程式。首先,我們使用以下程式來對LED進行測試。將輸出設定為ESP-WROOM-02上的引腳13。
1 2 3 4 5 6 7 8 9 10 |
void setup() { pinMode(13, OUTPUT); } void loop() { digitalWrite(13, HIGH); delay(400); digitalWrite(13, LOW); delay(400); } |
LED閃爍了!
所以,我們成功使LED亮起了。接下來查看一下其他程式。我們可以考慮使用其wifi通信功能來實現多種應用,例如,創建一個可以遠端獲取資料的裝置,以實現遠端操控,就像汽車上的無線電控制那樣。
我們先來處理來自光學感測器的輸入。在Arduino UNO上有類比輸入引腳A0-A4,但是ESP-WROOM-02沒有像A0-A4這樣的類比輸入引腳。並且沒有數位引腳1,3-4,以及 6-11。這些引腳是無法使用的,因為這些引腳通常被用於執行ESP-WROOM-02的一些標準功能,如wifi通信。
ESP-WROOM-02似乎並沒有analogRead函數,所以無法使用該功能。那麼,我們如何來進行類比輸入呢?我們也許可以使用TOUT引腳上的 “system_adc_read ()”函數來獲取類比值。
但是,這與一般的Arduino類比引腳略有不同。TOUT引腳可以檢測出0V至1V之間的輸入值,但是如果直接向TOUT引腳輸入3.3V的值可能會損壞電路。而當添加一個光學感測器時,電源電壓為3.3V,因此必須進行調整,以使輸入TOUT的最大電壓值為1V。我們將使用幾個電阻來創建一個分壓器電路。
ESP-WROOM-02:用於獲取光學感測器值的程式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
//necessary for analog input with ESP-WROOM-02 extern "C" { #include "user_interface.h" } void setup() { Serial.begin(115200); //also different from ordinary Arduino pinMode(13, OUTPUT); } //obtain input value from TOUT pin int getToutValue(){ int res = system_adc_read(); //get the TOUT value here return res; } void loop() { int val= getToutValue(); Serial.print("value:"); Serial.println(val); if(val > 580){ digitalWrite(13, HIGH); delay(400); } else{ digitalWrite(13, LOW); delay(400); } } |
程式運行時,光學感測器的值將輸出到序列監視器。
在這種情況下,analogRead函數是沒有用的,那麼analogWrite又如何呢?Arduino UNO具有一個像類比引腳那樣可以輸出類比值的引腳。那麼ESP-WROOM-02呢?我們來運行以下程式。
ESP-WROOM-02:用於獲取光學感測器值的程式
1 2 3 4 5 6 7 8 9 10 |
void setup() { pinMode(13, OUTPUT); } void loop() { for(int i=0;i<256;i++){ analogWrite(13, i); delay(40); } } |
如上面的視訊所示,我們可以控制LED的亮度。LED逐漸變亮又逐漸變暗。由此可見,我們確實可以使用analogWrite函數!