前言:

其實一直關注,發現 ESP32FORTH 的出現已經很久了!而且我還知道它是由丁陳漢蓀老師根據 eFORTH model 所開發出來的, 是 eFORTH 家族的另一個力作。

只是因為我對 ESP32 這顆 MCU 不熟悉,而且對於 Arduino 我一直覺得 FlashFORTH 已經蠻好用的了,所以沒時間再另闢戰場,再熟悉另一套系統,所以一直遲遲不願意動手去使用它。再來可能要對不起丁陳老師了,我對 eFORTH 還是有點偏見的。熟悉 eFORTH Model 的人應該都知道, eFORTH 系統是用 31個核心指令所建構起來的,也就是整個系統,只有31個低階指令是跟機器有關的。只要能搞定這31個指令, eFORTH 系統可以很快的在不同機器中轉移。

但相對的,也代表 eFORTH 相較其它的 FORTH 系統而言,效能較低。在 MCU 的這個領域,我們常需要的是即時控制,時脈跟反應都必須很精準,這個地方 eFORTH 的效能會是很大的致命傷。所以我會比較喜歡專為特定 MCU 所打造的 FORTH 系統,例如 Flash FORTH 之流的。所以,基本上基於效能因素,我是不喜歡使用 eFORTH 來做正事的。 (但,研究 FORTH系統而言,它是很棒的 Model)

但是,生命總會找到出路的。eFORTH的精簡短小,加上丁陳漢蓀老師的努力,現在的 eFORTH 可以架在 C 語言的編譯器之上。 ESP32FORTH 就是這樣的東西,它直接就是 Arduino 的 C語言所寫的,就簡簡單單一個 Arduino Sketch,編譯完畢後就給了你一個完整的 FORTH 系統。

因為是 Arduino Sketch,所以很容易的就可以把所有 Arduino 的硬體函式庫跟驅動程式完整的黏進來進來啊。所以以往 FORTH 的缺點,硬體驅動這邊沒有第三方函式庫的支援,一切都要自己辛苦的搞定,現在都不是問題了。 eFORTH 也進階到類似 Python 這樣,是個膠水黏合語言,可以快速的黏合所有的東西。

至於效能, ESP32 有高達 240Mhz 的速度, eFORTH 效能再差,也比 Python 好吧。然後 Python 這種語言,大家都拿可以來做物聯網應用了,更何況是效能更佳的 FORTH 語言呢。

因為眾多的優點,我本來在 follow 的一個法國的 Arduino FORTH 網站,它本來是 Flash FORTH 為主的網站。最近半年,也慢慢轉向丁陳老師的 ESP32FORTH。 ESP32強悍的硬體,配上黏合性高的 ,也已經被大家高度擴充跟跟整合非常好的 eFORTH ,還真得有點讓人驚艷,簡直就是台迷你 FORTH 電腦了啊!所以我們也跳坑啦,來玩玩 ESP32FORTH 吧!

先來第一篇, ESP32FORTH 的安裝指引。

 

ESP32:

簡單介紹一下這個非常有威力,恐怕是目前性價比最高的MCU吧!

ESP32由總部位於上海的中國公司樂鑫資訊科技(Espreffis) 所開發,採用台積電40奈米技術製造。它的前身是玩 Arduino 都知道的,最便宜的 Wifi 處理器 ESP8266 微控制器的後繼產品。

它的硬體規格簡介,

  • 處理器:
    • CPU: Xtensa 雙核心 (或者單核心) 32位元 LX6 微處理器, 工作時脈 160/240 MHz, 運算能力高達 600 DMIPS。
  • 記憶體:
    • ROM: 448 KB (64KB+384KB)
    • SRAM: 512 KB
    • RTC SRAM:
      • 8 KB 為慢速儲存器,可以在 Deep-sleep 模式下被次處理器存取
      • 8 KB 為快速儲存器,可以在 Deep-sleep 模式下RTC 啓動時用於數據儲存以及 被主 CPU 存取。
    • eFUSE:
      • 1 KB 256 bit 爲系統專用(MAC 位址和晶片設定);其餘 768 bit 保留給使用者應用,這些 應用包括 Flash 加密和晶片 ID。
    • External Memory 支援
      • QSPI 硬體,支援外部 Flash 及 SRAM
      • SPI 硬體,可對映到外部記憶體空間,部分儲存器可做為外部儲存器的 Cache
        • 外部 SPI Flash,最大支援 16 MB
        • 外部 SPI SRAM,最大支援 8 MB
  • 無線傳輸:
    • Wi-Fi: 802.11 b/g/n
    • 藍芽: v4.2 BR/EDR/BLE
  • 硬體 I/O:
    • GPIO: 32個
    • ADC: 12bits,多達18個通道
    • DAC: 8bits,2個
    • 觸控感應器: 10個
    • SPI: 4個
    • I2S: 2個
    • I2C: 2個
    • UART: 3個
    • Host SD/eMMC/SDIO: 1個
    • Slave SDIO/SPI: 1個
    • PWM: 16個通道
    • Ethernet: 專屬 DMA,支援 IEEE1588
    • Hall Probe Sensor: 1個
    • CAN 2.0/IR

 

玲瑯滿目,看了都傻了的這麼強大的硬體,結果價格約在台幣 200元左右,真的是可怕的市場破壞者啊。

 

 

ESP32FORTH:

前面有提了, ESP32FORTH 的起源來自於丁陳老師的 eFORTH。 eFORTH Model 最早來自於 1990年代,在8086上面開發出來的。因為 eFORTH 核心指令很少,所以非常適合轉移到各式各樣的機器上。不知不覺,30年過去囉,丁陳老師也幾乎把 eFORTH 移植到各式各樣的 MCU 上,從 8051,Arduino AVR, Arm,Stm,... 甚至是 FPGA 的 FORTH chip 核心,處處可見 eFORTH 的蹤影。

而 ESP32FORTH 就是丁陳老師的最新力作。

特別的是, ESP32FORTH 的 eFORTH 核心,直接改用 C 語言撰寫。等於把 eFORTH 嵌入 Arduino 的執行環境中,吸取兩家的長處,得到更廣泛的應用。目前看來成果是蠻驚艷的啦,用起來感覺還不錯。

 

 

ESP32 開發環境的安裝:

想要安裝 ESP32FORTH,如前面所述,整個系統是用 C語言寫的,所以 ESP32FORTH 其實只是一個 Arduino IDE下面的草稿碼 Sketch 檔案。

所以第一步,你需要先安裝 Arduino 的 IDE ,語言開發系統。這樣才能處理跟編譯上傳最後的目的碼上去 ESP32 執行。

當然有 Arduino IDE 還是不夠的,所以第二步,你需要在 Arduino IDE 上面安裝由樂鑫資訊科技(Espreffis) 所提供的,能正確處理 ESP32 的開發版管理員,這樣 Arduino IDE 才能知道要如何編譯能被ESP32所執行,並設定跟上傳編譯後的程式碼。

 

1. Arduino IDE 的安裝

請到 Arduino 官網下載並安裝最新版的 Arduino IDE

點我進連結

這裡筆者我用的是 MacOS,所以下載 MacOS 的版本

 

2. Arduino IDE 下,安裝 ESP32 專屬的開發板管理員

ESP32 並不是 Arduino 官方所認可的板子,所以自然 Arduino 官方不會提供任何的支援。

但 Arduino IDE 是個非常完善的系統,它允許第三方自己開發自己的開發板管理員來跟 Arduino IDE 一起協同運作。

這個第三方的開發板管理員,當然是得由 ESP32 的開發商,樂鑫資訊科技(Espreffis) 來提供。

 

所以接下來,打開 Arduino IDE 的偏好設定,點開最下面那欄 "額外的開發板管理員網址"

Arduino IDE prefence1.png

 

輸入下面網址

https://dl.espressif.com/dl/package_esp32_index.json

Arduino IDE prefence2.png

 

這樣你的 Arduino IDE 就知道要到哪裡去抓 ESP32 的開發板管理員囉。

 

接下來是點開菜單 "工具" 下方,"開發板",彈出菜單 "開發板管理員"

找到 esp32 後,按下"安裝",這樣 Arduino IDE 就會開始安裝 ESP32 的開發板管理員囉。

board manager.png

 

安裝過程中,會下載一堆不小的檔案,所以安裝需要點時間。

等安裝完畢後,就可以在 Arduino ID上 自由撰寫跟編譯 ESP32 的 C語言程式囉。而且蠻厲害的, 它跟 Arduino 大致相容。

setup(), Loop() 都一模一樣,

Serial.begin(), Serial.print(), Serial.println(), PinMode(), digitalRead(), digitalWrite() 這些也都一模一樣,所以非常的方便啊。也幾乎感覺不出來跟 Arduino 有多很大的差異啊!

有了這些,我們就可以來編譯我們的 ESP32FORTH 的系統囉。

 

 

ESP32FORTH 的下載

最新版本的 ESP32FORTH 可以到這裡下載,這應該是跟丁陳漢蓀老師一起合作的 Bradley D. Nelson 所建立的網站。

目前穩定的版本是 ESP32forth-7.05.04.zip

最新的 Beta 版本,ESP32forth-7.0.6.19.zip 又新添加了如浮點運算之類非常棒的功能。想嚐鮮的可以選這個版本。

 

下載完,你一定會很驚訝的,因為它真的就是一般的 Arduino Sketch 草稿檔,打開後直接進入 Arduino IDE,所有的程式碼都清清楚楚的在裡面。就像一般 Arduino 的程式一樣,編譯完上傳 ESP32 ,你就得到一個有Block編輯器,交談式的編譯除錯環境的一個完整的 FORTH 系統囉!

 

要編譯上傳前,開發板管理員要先選一下 ESP32,同時給上你要的設定。

這裡我用的版子上面寫 ESP32 WROOM-32U,所以我是遵照 Bradley D. Nelson 網站上面建議的設定來設定如下。

Setting.png

至於其他不同的版子,所需要的不同的設定,請自行查詢。

 

我的 ESP32 板子

IMG_9141.png

 

 

很簡單,就編譯上傳,就可以囉!

Compile Upload ESP32FORTH.png

 

最後,打開 Arduino 的序列埠監控視窗,設定 Baud Rate: 115200, 8N1

直接在 ESP32 上面給你一個棒棒的 FORTH 系統

Terminal 1.png

 

來 words 一下,看看有什麼指令

terminal words.png

 

簡單的九九乘法表,直接在 ESP32 上面編譯,測試一下,這真的是 FORTH 嗎?

: 9x9 10 1 do cr 10 1 do i . ." x " j . ." = " i j * . cr loop loop ;

9x9 table.png

真的噎,是 FORTH 無誤! 

 

 

故障排除

這裡看起來很順利,但是其實可能會不太順利。

筆者第一次在 Arduino IDE 安裝完畢 ESP32 的開發板管理員時,不管怎麼編譯是失敗。想說完蛋了,該不會完全不能用吧。 😭

最後編了一個簡單的 Serial.print("Hello World"); 結果還是編譯失敗,就確定了問題出在 ESP32 的開發板管理員應該沒有安裝成功,所以連這種這麼基礎的 Arduino 的程式碼都編譯不了。

但是很奇怪的,不管怎麼重新移除跟重新安裝都一樣,一樣編譯會失敗。

最後猜測應該是有殘存的檔案發生衝突了,所以打開 MacOS 的 Terminal ,透過 Arduino IDE 編譯錯誤碼跟訊息的指引,在 ~/Library/Arduino15/packages/ 裡面找到一個 esp32 的子目錄, rm -r 整個砍掉後再重新安裝 ESP32 開發板管理員後就完全正常了。

 

另外,筆者其實有兩台 iMac,一台是超級讚的的 iMac 27", 裡面的 MacOS 裝的是最新的版本 Monterey 。

結果也是一直給我回報 Error,編譯時一直卡在 exec: "python" : executable file not found in $PATH 的錯誤訊息。

原來, ESP32 編譯時會借助 python 2.7 來執行一些自動的動作。 基本上 Mac OS 都是內建 python 的,但 python 一直有舊版2.x 跟新版 3.x之爭。 Mac OS 本來預設內建的是 Python 2.7 舊版,但最後因為 Apple 覺得 Python 官方都已經不更新跟支援這個版本了,所以 Monterey 之後 python 2.7 就從預設的 /usr/bin/ 下面被移除了。

這樣造成 ESP32 編譯無法編譯,

解決方式就是,修改 ESP32  開發板管理員裡頭的設定檔,重新告訴 ESP32 編譯的時候,不要去抓已經不存在的 python (舊版 python 2.7) ,而是改去抓新版的 python3 來執行。

(這些細節,請參考這個網站)

所以,假如你是 MacOS Monterey,

首先,要安裝 Xcode Command Line 命令列開發者工具,這樣會正確安裝 Python 3 進來並允許你執行。

再來,你需要修改這個檔案

~/Library/Arduino15/packages/esp32/hardware/esp32/2.0.2/platform.txt

在這個鬼畫符的檔案中,搜尋 python 的文字,替換成 python3,再回存就可以囉!

python3 path.png

 

 

May FORTH with You

呵呵!! 💪💪💪

 

xxx

 

arrow
arrow

    ohiyooo2 發表在 痞客邦 留言(0) 人氣()