ESP32雙核心及內建感測器積木

ESP32晶片內部有雙核心,每個核心可以單獨執行不同的任務而不會互相干擾。ESP32也內建了一個霍爾感應器,它有十個接腳具備電容觸控感應功能,所以可以當做觸控開關。為此特地設計了積木,讓大家可以很方便的設計相關的程式。

本積木並沒有使用外部函式庫,因此不需要更新吉哥積木,BlocklyDuino執行後便可以在「吉哥積木」→「ESP32」→「雙核心及內建感測」中找到相關積木。

霍爾感應器

1879年,埃德溫·赫伯特·霍爾(Edwin Herbert Hall)發現當導體有電流通過時,如果這個導體有磁場接近的話,導體內的電子會偏向一邊,繼而產生電位差(電壓)改變的現象,這便是「霍爾效應」。依據霍爾效應製造出來的感測器「霍爾磁性感測器」便具有感測磁場的能力。磁力是一種超距力,它的磁場不需直接接觸便能影響金屬、以及電子產品,因此,我們常會將霍爾磁性感測器用在不需要接觸便可以作動的應用上,例如磁卡鑰匙,不用接觸便能開關門;有一些窗戶的防盜裝置也是利用這種感測器,門窗緊閉時,門框的磁鐵靠近感測器,一旦門窗被強行打開,磁鐵被推開,感測器感測不到磁場,便會觸發警報。

在ESP32中,內部的霍爾感應器使用了GPIO39,所以如果你有使用擴展板,擴展板上的元件也使用到了GPIO39的話,那你就沒辦法使用霍爾感應器。

程式:

  1. 使用「ESP32內建感測器 讀取霍爾感測器值」這個積木,便能讀取到磁場大小。

  2. 可根據磁場的大小做邏輯判斷,觸發其他的程式。


程式結果:

沒有磁場靠近時,感應值20多

磁場靠近時,感應值飆高到200多

磁場的另一極靠近時,數值呈現負數

觸控感應

ESP32有十個接腳具備電容觸控感應功能,分別是GPIO0、2、4、12、13、14、15、27、32、33,除了GPIO0因為當序列埠使用,因此盡量不要使用這個腳位之外,其他的九個腳位都可以拿來當做觸控開關使用,只要手指接觸到,便能觸發。

範例程式:

  1. 使用「ESP32內建感測器 讀取觸碰感測值」這個積木,並設定腳位,便能讀取特定腳位的

  2. 可根據讀取值的大小判斷腳位是否被觸碰,進而觸發其他的程式。


程式結果:

腳位沒被碰觸,數值大約在70~80

碰觸P32腳位,數值迅速下降

碰觸P33腳位,數值迅速下降

雙核心功能

ESP32有二個核心,核心0及核心1,一般來說,ESP32的程式都是在核心1執行,核心0是閒置的,二個核心可以多工執行不同的任務而不互相干擾,這是很實用的一個功能,當某個核心正在痴痴等待某一些事完成的時候,另一個核心還可以繼續運作。透過雙核心程式的積木,你可以適當分配任務給不同的核心執行,任務之間不會互相干擾。

範例一:

  1. 程式啟動時,便指定Task0任務在核心0上執行,Task1在核心1上執行,Task0及Task1的任務名稱可以自行命名。

  2. 堆疊大小是分派給任務的記憶體配置,可自行設定,預設為10000。優先權數字愈大愈優先,數字相同則代表優先權是平等的。

  3. 將Task0或Task1的實際任務內容建立在「ESP32雙核心 初始化 重複執行」積木內。

  4. 本程式在啟動後自動執行Task0和Task1任務,Task0每一秒鐘讓P13的燈閃爍一次;Task1每二秒鐘讓P16的燈閃爍一次。二個任務獨立執行而不會互相干擾。

範例二:

  1. 程式啟動時,便指定Task1任務在核心1上執行,每二秒會讓P16的燈閃爍一次。

  2. 在原本程式的「重複執行」中判斷P5上的按鈕是否被按下,如果被按下,便在核心0上執行Task0的任務,每一秒讓P13的燈閃爍一次。

  3. 在原本程式的「重複執行」中判斷P36上的按鈕是否被按下,如果被按下,便刪除核心0上執行Task0的任務,P13的燈停止閃爍。

  4. 可隨時按下P5及P36的按鈕,執行或刪除Task0的任務。


程式結果: