2019 臺灣符式推廣協會六月份理監事會與月會公告
日期:6/29(六)
地點:南港中研院物理研究所五樓會議室
時間:10:00~16:00

議程:

10:00~10:30 會務報告 主持人: 鄧淵元
10:30~11:00 C like language and system off chip in Forth CPU 主講人: 林春木
11:00~11:30 Yet Another Forth For Arduino 主講人: 陳爽
11:30~12:00 太陽爐與溫度感測器整合應用 主講人: 林明俊
12:00~13:30 午餐休息,壽星慶生。
13:30~14:00 PeForth 與 AI 遊戲競賽平台整合應用 主講人: 陳厚成
14:00~14:30 ForthWin 範例程式簡介 主講人: 張燕南
14:30~15:00 TinyForth 的新進展 主講人: 張吉進
15:00~15:30 樹梅派與Ichigo Jam 上的 Forth 應用 主講人: 鄧淵元
15:30~16:00 臨時動議與討論

備註:

請攜帶筆記型電腦

聯絡資訊

理事長: 鄧淵元 0975-393-503 deng.daniel@forth.org.tw

2019 臺灣符式推廣協會四月份月會
日期:4/20(六)
地點:南港中研院物理研究所五樓會議室
時間:10:00~16:00

議程:

10:00~10:30 主講人: 鄧淵元 PeForth VM 環境建立教學
10:30~11:00 主講人: 張吉進 TinyForth On Micro:bit 範例介紹
11:00~11:30 暑期推廣課程討論
11:30~12:00 會務討論
12:00~13:30 午餐休息
下午時段為 FVM 監控虛擬機技術研討會

13:30~14:00 報到
14:00~14:30 主講人: 賴溱君 FVM 監控虛擬機程式開發環境簡介
14:30~15:00 主講人: 陳爽 FVM 軟體開發環境
15:00~15:30 主講人: 呂明貴 範例講解與實作
15:30~16:00 課程問題討論

備註:

請攜帶筆記型電腦

聯絡資訊

理事長: 鄧淵元 0975-393-503 deng.daniel@forth.org.tw

直接下載 VM 執行

必要軟體:

  1. VirtualBox
  2. VM 檔案
  3. putty
  4. WinSCP

VM 環境建立

  • 作業系統以 Ubuntu Server 18.04 建立
  • 執行時記憶體大小請指定 2GB 以上
  • 檔案大小約 6.5 GB

VirtualBox 設定

設定網路連接埠轉送

網路連接埠轉送

新增轉送連接埠

新增轉送連接埠

新增 USB 對應連接埠

USB 對應連接埠

查看 ESP8266 使用的驅動程式與連接埠

查看 ESP8266 使用的驅動程式與連接埠

Linux 對應查詢 USB 設備指令

查詢 USB 設備指令

找到是對應 /dev/ttyUSB0

對應 /dev/ttyUSB0

沒有足夠權限可以讀取 /dev/ttyUSB0

對應 /dev/ttyUSB0

請參考安裝指令執行即可。

安裝指令

基礎系統

# =============================================================================
# 更新套件
sudo apt-get update
sudo apt-get upgrade -y
# =============================================================================
# 安裝必要套件
sudo apt-get install -y vim git
sudo apt autoremove -y
# 設定 vim 套件管理系統
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
# 載入 myBionic 專案,裡面有常用的設定檔與資料檔 
git clone https://github.com/r4forth/myBionic.git
# 複製 vimrc,讓 vim 使用比較便利
cp ~/myBionic/vimrc ~/.vimrc

安裝 Jupyter Notebook

# =============================================================================
# 安裝處理 Jupyter Notebook 環境
# 使用套件管理系統: Miniconda
# =============================================================================
# 安裝 Miniconda
# 64 位元版本
wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash ~/Miniconda3-latest-Linux-x86_64.sh -b -p $HOME/miniconda
# 新增環境變數路徑
sed -i '$ a\export PATH="$HOME/miniconda/bin:$PATH"' ~/.bashrc
# 環境變數啟用
source ~/.bashrc

# 更新 pip
pip install --upgrade pip
# 安裝 jupyter notebook
conda install jupyter -y

# 安裝 jupyter lab
conda install -c conda-forge -y jupyterlab

修正 Jupyter Notebook 設定

# 產生 Jupyter notebook 設定檔
jupyter notebook --generate-config
# 修改設定檔,允許遠端登入
sed -i '204s/#//' ~/.jupyter/jupyter_notebook_config.py
sed -i '204s/localhost/0.0.0.0/' ~/.jupyter/jupyter_notebook_config.py
# 不自動啟動瀏覽器
sed -i '267s/#//' ~/.jupyter/jupyter_notebook_config.py
sed -i '267s/True/False/' ~/.jupyter/jupyter_notebook_config.py
# 預設不使用密碼
sed -i '340s/#//' ~/.jupyter/jupyter_notebook_config.py
sed -i '340s/<generated>//' ~/.jupyter/jupyter_notebook_config.py

安裝 PeForth 核心

# =============================================================================
# 支援 PeForth 核心
# 參考連結: https://github.com/hcchengithub/peforth
# =============================================================================
# 安裝 PeForth(2018.07.19 PeForth 1.21 版)
pip install peforth

# 建立目錄
mkdir ~/miniconda/share/jupyter/kernels/peforth
# 改寫成使用 Github 專案的版本
cp ~/myBionic/kernel.json ~/miniconda/share/jupyter/kernels/peforth
sed -i '4s/3.6/3.7/' ~/miniconda/share/jupyter/kernels/peforth/kernel.json
sed -i '4s/~/./' ~/miniconda/share/jupyter/kernels/peforth/kernel.json

安裝 ESP8266 環境

# =============================================================================
# 支援 ESP8266 核心
# 參考連結: https://github.com/goatchurchprime/jupyter_micropython_kernel
# =============================================================================
git clone https://github.com/goatchurchprime/jupyter_micropython_kernel.git
pip install -e jupyter_micropython_kernel
# 安裝 ESP8266 核心
python -m jupyter_micropython_kernel.install
# 檢查 USB 設備的相關指令,本例是使用 CH341
# 系統訊息會顯示出連線的位置 ttyUSB0
# dmesg | grep ch341  
# 設定使用者有權限直接處理 serial port
# groups 檢查是否有 tty 與 dialout 的身分
# compgen -g | grep tty 檢察系統是否有存在 tty 群組
# 將 figtw 加入 tty 群組
sudo usermod -aG tty figtw
sudo usermod -aG dialout figtw
# 安裝序列連線軟體
sudo apt-get install -y picocom
# picocom -b 115200 /dev/ttyUSB0
# ctrl + a + q 離開軟體
# 要重新登入,設定才會生效
sudo reboot

樹莓 RaspberryPi 派:

一般而言,我自己做些小東西來控制各種電子玩意我喜歡用 Arduino。 原因無他,因為晶片價格便宜,開發環境完備,資源多。但是 Arduino 還是有缺點的,畢竟 ATmega 只是個簡單的八位元單晶片微處理器,不太可能在上面架上複雜的作業系統,所以要做重量級的應用就很吃力了。

若要做極端複雜的重量級運用,上網查了一下,目前最流行的應該就是樹莓派 Raspberry Pi 囉!採用主流威力強大的 ARM 架構微處理器核心,乙太網路,USB,HDMI 影像輸出的高度整合。採用 micro SD 來當巨量的儲存媒介,後期的版本連 wifi/藍芽都是內建的了。也有設計了 40 pins 的 GPIO 數位I/O來做各種外部控制的需求,仿效 Arduino 開源硬體的概念,吸引了各式各樣的硬體資源的進駐。最後配上特製的 Linux 作業系統。整個就是一台威到不行的超級迷你 Linux 電腦。有了 Linux 的威力進駐,那個使用幾乎是完全沒有任何極限的強大,甚至用一堆板子來組個超級電腦叢集都是可以囉!

極端迷你的體積,便宜的售價。這也使得 RaspberryPi 成為受歡迎的嵌入式系統平台。各種強大有趣的專案,例如 AI 人臉辨識,駭客用無線網路掃描儀,AI網路攝影機,家庭物聯網控制中心,掌上GameBoy 模擬器,... 有了 Linux 真的應用上幾乎沒有極限喲。

gFORTH 語言:

既然樹莓派採用的是 Linux 作業系統,自然我們這個核心是以 C 語言撰寫的,可以在各大 Linux/UNIX 核心下合作愉快的 gFORTH 公開 FORTH系統,也可以被輕易的安裝跟執行囉。這就是樹莓派的優勢囉,一採用了 Linux ,等於各種程式語言都可以直接進駐囉。從官方喜愛現在最紅的 Python, 或是 C++, ... 重新編譯安裝後就可以使用囉。要老骨頭的 FORTRAN,要年輕的 Apple Swift 可是都沒問題哪!

作為 FORTH 的愛好者,我們當然是要選用 FORTH 來做我們的控制語言啦!所以這篇就來個安裝篇,教你如何在樹莓派 RaspberryPi 上安裝 gFORTH,及一些對應的 GPIO 控制函式庫來做控制。

WiringPi GPIO 函式庫:

樹莓派對外部硬體控制的主角就是 40 Pins 的 GPIO, 這 40 Pins 都是數位 I/O 所以沒有 ADC/DAC 數位跟類比的轉換,這是唯一可惜比 Arduino 還弱的一個地方。另外一個小缺點,用的是 3.3V 的邏輯系統,也沒有設計保護,要很小心不然容易燒掉弄壞整片板子。(比 Arduino 脆弱多了)

目前由於非常受歡迎的 Python 語言官方已經有對應的函式庫來控制這些 GPIO。所以以樹莓派來做控制,目前看到最普遍跟受歡迎的還是採用 Python 語言,因為最簡單。 而其他語言,例如 C++ 語言想要控制的話,大家都是借助一個叫做 WiringPi (WiringPi 是一個免費的專案,官方連結在此!)的一個以C語言所撰寫的 RaspberryPi GPIO 控制函式庫來當作跟這些 GPIO 溝通的介面。WiringPi 設計上是仿效 Arduino 的開發環境,相類似的 I/O 控制語法,方便大家來使用並控制 GPIO 的輸入輸出囉。

這邊 gFORTH 想要做控制,跟 C++ 語言一樣,我們也是透過 WiringPi 這個介面來控制 GPIO 啦!原本的 gFORTH 當然不可能知道有 WiringPi 這種東西,這裡要透過國外一位所撰寫的 FORTH 呼叫 WiringPi 程式,來銜接 WiringPi 函式庫,最後讓我們的 gFORTH 可以控制 GPIO。

所以接續下來整個流程如下:

  1. 安裝 gFORTH
  2. 安裝 WiringPi 函式庫
  3. 下載 wiringPi.fs 串接 gFORTH 程式碼.
  4. 測試 LED 點滅

這整個安裝流程來自於 RaspberryPi 社群的這篇討論串,對於來龍去脈有疑慮的請參考。然後要謝謝 wiringPi.fs 的作者 Kris Johnson,透過他的程式碼,現在讓我們可以很方便的透過 gFORTH 來呼叫 WiringPi 作控制囉。

  1. 安裝 gFORTH

不像難搞的 Apple 那個麻煩的 MacOS。拜 Linux 有內建很方便的套裝安裝管理 apt-get 之賜,所以很簡單的,只要一行指令就搞定囉

sudo apt-get install gforth

(假如想自己從頭 build 整個 gforth, 請參考這篇樹莓論壇的文章.)

  1. 安裝 WiringPi 函式庫

兩個步驟 (對 WiringPi 有興趣的,這裏有篇台灣的 BLOG 也有詳述安裝跟使用方法,也很值得參考)

sudo apt-get install libtool-bin
sudo apt-get install wiringpi
  1. 下載 wiringPi.fs gFORTH 程式碼

作者 Kris Johnson 在 GitHub 的原始程式碼位置 重點其實是那個檔名叫 wiringPi.fs 的 FORTH 程式檔。

也可以照樹莓派論壇的方式用下列指令安裝

sudo apt-get install git-core
git clone https://github.com/kristopherjohnson/wiringPi_gforth.git
cp wiringPi_gforth/wiringPi.fs
  1. LED 點滅測試

軟體跟環境搞定了,讓我們來試看看能不能真的拿來控制囉!筆者拿來測試的這個樹莓派是 Zero W 的這個版本。這個版本真的是不錯,價格便宜,體積超迷你,又內建藍芽,wifi 這些很重要的通訊功能。真的是海放一些其他的控制板囉。

首先要先來搞懂 WiringPi 的 Pin 腳編號系統。 WiringPi 也支援 shell 指令,所以先鍵入下面指令,確認一下你的機型各接腳的編號分配的實際狀況。

sudo gpio readall

馬上會在終端機上顯示如下,所有 I/O 的目前狀況,各腳位的各種代碼及目前狀態 模式 IN/OUT, 數值 0/1。

RaspberryPi ZeroW 的分配情況

要非常注意的, Physical 是實際的接腳編號。 RaspberryPi 有兩種編號系統,一個叫做 wPi ,另外一個叫做 BCM 。採用哪種編號系統是由我們一開始啟始 WiringPi 函式庫時所決定的!

如果用 wiringPiSetupGpio 來啟始 wiringPi 函式庫,這時候接腳編號採用的就是 BCM 編號系統。

如果用 wiringPiSetup 來啟始 wiringPi 函式庫,這時候接腳編號採用的就是 wPi 編號系統。

然後要再三提醒,這個 RaspberryPi 不比 Arduino,是比較脆弱些!邏輯系統是採用 3.3 V 的,內部沒有保護電路,所以接錯接腳不小心接到 5V,或者通過的電流過大可是會直接燒壞這片貴貴的板子的喲!不想破財的話接電前可是要再三的確認跟檢查。

簡單的 LED 測試接線如下,

因為太簡單了,接線圖就不列了。就 GPIO 左邊那排算過來第6根腳 (物理接腳 pin 11 = BCM 17 = wPi 0) 接到 LED 正極,LED正極前接上一根 220 ohm (紅紅棕)的限流電阻。 ( (3.3V - 2V) / 220 ohm = 5.9mA 左右的電流)
接地接在 GPIO 右邊那排算過來第3接腳(物理接腳 pin 6, 0V GND) 接到 LED 負極。

物理接腳 pin 11 = BCM 17 = wPi 0

接線圖

程式解說

就先把 wiringPi.fs 這個 FORTH 跟 wiringPi 的函式庫介面程式碼先載進來

include wiringPi.fs

然後啟始 wiringPi 函式庫,它會回傳一個值,就直接忽視它 (哈..)

wiringPiSetupGpio  drop

因為用的是 wiringPiSetupGpio 來啟始,所以接腳編號採用的是 BCM 系統
(如果用 wiringPiSetup 來啟始,接腳編號會是 wPi 系統)
所以 物理接腳 pin 11 = BCM 17 = wPi 0

17 constant LED_Pin

我們是要控制 LED 的,所以這根 digital I/O 的模式是輸出 OUTPUT,利用 <pin> <INPUT/OUTPUT> pinMode 指令設定一下!

LED_pin OUTPUT pinMode

透過 <pin> <HIGH/LOW> digitalWrite 的指令,對 pin 腳輸出 HIGH/LOW 訊號

: LED_ON  LED_pin HIGH digitalWrite ;
: LED_OFF LED_pin LOW  digitalWrite ;

透過 <milliseconds> delay 的指令,讓程式精確停止特定 milliseconds

: Pause 500 delay ;

主程式,點亮 LED 後停 0.5秒,關掉 LED 後再停 0.5秒,然後無窮重複下去

: Flashing
   begin  LED_ON  Pause
          LED_OFF Pause
   again
;

想要停下來,用 control-C 兩鍵同時按下去後強迫停止。

一月份月會與理監事會

2019 臺灣符式推廣協會 第三屆理監事會與一月月會
日期:1/26(六)
地點:南港中研院物理研究所七樓會議室
時間:10:00~15:00

議程初稿

10:00~11:00 理監事會議:會務報告、財務報告
10:30~11:00 2019年年度工作計畫審議、會員報到
11:00~11:30 新會員自我介紹
11:30~12:00 主講人: 陳爽 WASM Forth DUMP 與 SEE 完整版
12:00~12:20 用餐時間、協會討論區與相關連結整理介紹
12:20~12:40 主講人: 戚桐欣 第二次書同文進度介紹
12:40~13:00 主講人: 謝榮林 Forth 中文化之進程與未來
13:00~13:20 主講人: 林明俊 樹梅派上使用 GForth 控制跑馬燈
13:00~13:20 主講人: 陳厚成 用 PeForth 協助看 AI 應用程式(預錄影片)

13:20~13:40 主講人: 張吉進 TinyForth on RISC-V 開發進度報告
13:40~14:00 主講人: 王國忠 溫室香菇使用IoT監控的初步構想
14:00~14:20 主講人: 廖浩凱 整合式工業控制器之介紹
14:20~14:40 主講人: 吳政昌 霸那控制器 (Botnana Control) 介紹
14:40~15:00 繳納會費與自由討論時間

聯絡資訊

理事長: 鄧淵元 0975-393-503 deng.daniel@forth.org.tw