山姆的編程實作分享。。。

Sam Blog, Sam Sharing, Sam Studio

2020年11月30日

[Building Embedded Linux] Part 2: Buildroot vs. Yocto


Building Embedded Linux 的做法,在業界有 Buildroot 和 Yocto,兩種做法;兩者的差異,也有人做了一番比較,原文為底下連接。

Buildroot vs Yocto


對於 Linux 不是很熟悉的人, 建議可以直接看 Page 28, 29 以及 31。

Page 28: Buildroot minimal build takes 15+ minutes, Image size is 2.2MB

Page 29: Yocto minimal build takes 50+ minutes, Image size is 4.9MB

相信從這兩張 Slides, 就可以清楚明白這兩種做法的差異度了,這兩種做法沒有好壞之分,只有取捨問題而已。

那如何取捨呢?

原文的 Page 31 就提供了選擇的路徑


而我的選擇是 - Buildroot。

原因如下:

選擇 Buildroot ,除了他強調的 "簡單 ( Strong focus on simplicity )" 以及 “小巧 (small by default)”之外,我另一個在意點,是他保留了原有的 build tools ,如 kconfig, make ...,對於曾經嘗試 Building Embedded Linux 的我,熟悉度以及經驗的承續,都有加分的效果。

而不選擇 Yocto 的原因,是我曾經失敗過,知道 Building Embedded Linux 的 困難度,所以我目前的要求,不是細緻度。


2020年11月29日

[Building Embedded Linux] Part 1: 重拾 Embedded Linux


 


Building Embedded Linux 一直是作為工程師的我,想完成的一件事 (夢想),

那時掏寶在台灣還不盛行,所以上圖這塊板子 (S3C2440A) ,著實花了我好幾張小朋友;

自己搞了半年,雖是沒有具體的成果,但也從失敗中瞭解了更多 Embedded Linux 的知識;

而身處手機代工業的我,在 Google 推出了以 Linux 為核心的 Android 手機後,

我也就從在 "RTOS 打混" 輾轉換成在 "Embedded Linux 摸魚”了;

你說這是巧合,還是孽緣?


在 Linux 推出 20 年之際,偶然的機會又讓我看到 Buildroot 文章,

發現 Building Embedded Linux 不再是那麼瑣碎,已經可以有系統性的被建構

這著實又燃起了我的 "工程師魂" 了! 

我的 S3C2440A 是否可以重見天日 ?

還是孽緣作祟 

待續。。。


2020年11月28日

[MicroPython 教學] Ampy 基本操作


 Boot Process

MicroPython (MPY) 在 power-up 或是 hardware  reset 後, 正規 (standard) Boot Mode 是先執行 File System 上的 boot.py,然後 configure USB, 接著就是執行 main.py。

從 MPY 官方的文件裡,boot.py 是不建議一般使用者去更改他的,除非你是高級用戶 (advance user) ;也就是說,我們寫的 script 盡可能是改寫在 main.py 或是小改 main.py 來載入你自己的模組了。而能讓 MPY 執行你改寫的 script 方法,有以下 2 種方式可以達成。

  1. 和 Arduino 一樣,將改寫好的 main.py 和 MPY source code 重新編譯 ,然後再 download 重新編譯好的 MPY firmware,這樣你的 script 就能被順利的執行了。但這方法其實已失去 MPY 的設計原意了,因為這方法應該只有在改寫或新增 MPY Library 才發生才對,區區 main.py 更改應該使用第 2 種方法。

  2. 透過 Tool 載入改寫好的 main.py ( Load File ) 並執行他 ( Run File );MicroPython 官方提供的 File System Tool 是 rshell ( Remote MicroPython shell );rshell 功能完整,但對於只是想更改 MPY File System 內容的簡單目的則是過於複雜了,而且 rshell 在 Windows OS 有跑不起來的問題

ampy - Adafruit MicroPython Tool 

ampy 是一個相對精簡於 rshell 功能的 command line tool ;精簡而不複雜,對於只是想更改 MPY File System 內容的簡單目的則是綽綽有餘,加上能跨平台 Windows OS 也能 Run,也就成就他的普及率了。

Install ampy 


以下是安裝 ampy 的方法

Windows OS: 

pip install adafruit-ampy

Ubuntu OS: 

sudo pip3 install adafruit-ampy

Ampy Usage

ampy 的使用方法說明,只要在 Command Line 或 Terminal 的視窗需要輸入 ampy 就可以看到了;如下的畫面就是 ampy 跑在 Windows OS 的截圖。


當然, 以下的指令更為正規

ampy --help 

Command Format

 從上圖的說明,我們可以得知 ampy command format

ampy [OPTIONS] COMMAND [ARGS] 


Serial Port

不管是 rshell 或是 ampy ,在做檔案操作 (File Operation) 之前,都是必須先知道你板子 serial port 的位址。例如我的板子就是在 COM7,這可以在裝置管理員查到,如下圖。

所以想知道 MPY SD 的檔案資料就可如此下指令

ampy --port com7 ls

Set Path for Serial Port

在 Command Line / Terminal 視窗, 雖是一個上鍵就可以重複上一個指令,但若是想簡化指令,不再重複出現 --port com7 這段字串,是可以在 Command Line / Terminal 下輸入以下字串來設定 serial port 的路徑的。

set ampy_port=com7



List File : ls

在 Windows 要查一個檔案目錄的資訊是透過 dir (directory) command ,在 Linux 則是 ls (list) command ,因為 ampy 是從 rshell 簡化而來的,有 Linux 的身影,所以所有的 Commands 都是和 Linux 相同。

Syntax : ampy --port comport ls


Create and remove directory : mkdir / rmdir

新增一個檔案目錄的。

Syntax : ampy --port comport mkdir new/directory

Load File : put / get

將你電腦上的檔案複製到 MPY 板子上目錄的指令是 put 。

將MPY 板子上的檔案複製到你電腦上的指令則是 get 。

Syntax : ampy --port comport put filename

Run File : run

想讓 MPY 板子馬上執行你的 script 的指令則是 run 。

Syntax : ampy --port comport run filename



Remove File : rm

刪除 MPY 板子上檔案的指令則是 rm。

Syntax : ampy --port comport rm filename

Soft-Reset / Reboot : reset

最後一個 ampy 支援的 command 是 reset,reset command 則是執行 softreset ,讓 MPY 做 reboot 的動作。

Syntax : ampy --port comport reset

小技巧

示範完所有 ampy 支援的 commands 後,你是否有發覺沒有 rename 的 command, 想直接將 test.py 改名成 main.py ,是不是只能在 PC 端改好檔名再重新上載到 MPY 板端 ?

這裡教你一個小技巧,利用 put command ,直接做到 "側妃變正宮" 的方法。

Syntax : ampy --port comport put test.py main.py



2020年11月25日

[咖啡烘培][Quest M3] 烘培手法 - Check Point



緣由

上圖是我 2020/11/20 第一次烘 " 巴西 伊帕內瑪莊園 義式濃縮 精品豆" 的烘培曲線,

因為是第一次烘這款豆,烘培深度先抓在中深培 ,最終下豆時間是在 215℃ / 13:33,

試過沖煮拿鐵後,香氣與甜度都不錯,唯一缺點就是整體味道淡了些,覺得下豆時間早了點,

可以再深培些再下豆。

PS: 個人口味不喜重烘培,自己調配的義式混豆也都是在中深培度 (City or Full City)。


上面這個烘培,透過 Artisan 烘培曲線的幫助,進豆溫度,火力,風量的調節全都紀錄在

烘培曲線內了,理論上,下一鍋,我只要修正下豆時間,就可以得到我要的完美烘豆曲線了。

但真的是如此?

事實是,難度還是有點高!

不是有上一鍋的烘培曲線!進豆溫度,火力,風量調節的紀錄也全都有了啊!

還有難度的原因是甚麼呢 ?

那是,因為 Quest M3 這台機器並非數位化機器,火力,風量調節鈕都是類比式的,

很難精準的重複上次烘培的調節鈕刻度,再加上下一鍋也不一定有相同於當時的環境溫濕度。若是豆子非同一批次,就更難了!

所以,下一鍋還是需要在烘培過程中做適當的微調,那何時做微調?


Check Point

Quest M3 是一台約 1000W 的電熱器式咖啡烘培機,在加溫控制上會有嚴重延遲現象,

所以我的烘培手法是盡量不去改變火力,而是透過風力的調節。

從上圖的烘培曲線,你也可以發現我的火力調節在 2:30 後就維持在 8.5A,不再改變了。

所以整個烘培過程,我個人是在以下幾個 Check Points 作微調


Check Point 1 :  2:00 ~ 2:30

決定火力從 5A 回到 8.5A;決定的時機是回溫點的時間以及回溫點的溫度


Check Point 2 :  ~135℃

待 Delta 溫升穩定後,風力就可調至 6,這時豆溫約135℃。


Check Point 3 :  豆子由白轉黃

豆子由白轉黃,代表脫水即將完成,這時風力調節至 7,以利鍋內水氣排出


Check Point  4 :  豆子產生皺紋,準備一爆

這時風力調節至 8,以利煙的排出,等待一爆。


Check Point  5 :  一爆密集

在一爆密集時,豆子會釋放熱能;風力可做即時的調整 ;這時風力的調節取決於

Delta 溫升的穩定以及煙的大小


以上就是我透過在 Check Points 的豆貌觀察以及風力,火力及時的微調,

來達到在不同鍋的狀況下,仍然有一致性結果的方法。


PS: 在這篇各 Check Points 的烘培手法已與我在 6 月分享的烘培手法有大幅度的改變了;

最近也接觸了不少人的烘培手法,等我吸收後,再來分享吧!

2020年11月11日

[MicroPython 教學] The Best MicroPython IDE - PyCharm


MicroPython 官方並未提供整合的 GUI 開發環境 ( IDE : Integrated Development Environment ),僅提供 Command Mode Tools,讓開發者可以更新 firmware 以及替換板上檔案而已;但這樣的開發環境著實提高了入門門檻!


還好,在 GitHub 原始碼開發平台上,無私的開發者幫 MicroPython 解決了這樣的困境;例如 Visual Studio Code 以及 PyCharm 都有無數的 Micropython 套件 (Extension / Plugin) 供開發者選用,甚至有些組織還提供 MicroPython 專屬的 IDE。


但在親身體驗這些套件或 MicroPython 專屬的 IDE 後,發覺 MicroPython 專屬的 IDE 往往是連安裝都有問題,許久未見更新;一些套件則是缺東缺西,不夠完善,往往無法同時支援 PyBoard / STM32 boards 以及 ESP8266 / ESP32;唯有 PyCharm 的 MicroPython 套件最為完善,同時支援 PyBoard 以及 ESP8266 的下載方式,並且在 IDE 的開發環境下,整合了 AMPY ( Adafruit Micropython tool ) 。 



安裝

PS : 在安裝 PyCharm 前,記得先完成 Python 3 的安裝。


PyCharm 下載網址 ,安裝完成 PyCharm 後,請點選

" File -> Settings -> Plugins -> Marketplace ",然後搜尋 MicroPython 套件,並且安裝它。安裝完成 MicroPython 這套件後,請依照提示重新啟動 PyCharm ,以完成MicroPython 套件的安裝以及啟動。



New MicroPython Project

完成 IDE 以及MicroPython 套件的安裝後,接著就是來生成 MicroPython 的專案了;請點選 " File -> New Project…",接著就會跳出如下的 "Create Project”的視窗。



請在 " Location:”指定專案的開發路徑及資料夾,這裡,我的專案名稱是 "HelloMicroPython”,然後點選 " Create”生成專案。


PS : PyCharm 是一套針對 Python 語言開發的 IDE ,所以每個專案都有各自的虛擬環境 ( Virtual Environment )。



完成新專案的生成後,你應該可以看到如下圖的專案檔案結構,此時的所有檔案都只是 Python 新專案的相關聯檔案以及虛擬環境,還算不上是 MicroPython 的專案。



請點選 " File -> Settings -> Languages & Frameworks -> MicroPython ”

然後勾選 "Enable MicroPython support”。

接著在 "Device type”,點選你的開發板種類;如果你的開發板是 ESP8266 或 ESP32 則點選 “ESP8266",若是 STM32 系列,則點選 "Pyboard”。

在 "Device path” 填入 Serial Port 的路徑,如 COM3 。

最後在點選 "OK",這樣新專案的屬性才會轉換成 MicroPython 的專案。


PS :  如果是在 Ubuntu 的環境下,則是填入 /dev/ttyUSB0 或 /dev/ttyACM0 



main.py

到這一步驟, 只是建立一個 MicroPython 的新專案而已,main.py 還未被產生。

請點選 " File -> New... ”

然後選擇 "Python file”並填入新檔案名稱 "main.py",接著按下 Enter 鍵。



此時 "空白的" main.py 就被建立在專案檔案結構下了。



因為是 MicroPython 的專案,PyCharm 則會在這生成 main.py 檔案後, 提醒你專案還要額外安裝 Packages,如 pyserial,ampy 。



請大膽點選右側的 "Missing reqired MicroPython packages”讓 PyCharm 幫你安裝必要的軟件。


Project Structure

接下這步驟可做也可不做,但個人建議做,因為實在沒有必要將 .idea 這目錄下的檔案也歸類為 Source Directory。

請點選 " File -> Settings ->Project: Nam of your project -> Project Structure”,然後點選 ".idea”,接著按滑鼠右鍵將 "  .idea " 這目錄 “Exclude”出 Source Directory。



下圖是 "  .idea " 這目錄 “Exclude”出 Source Directory 的畫面。



Hello MicroPython on PyCharm

完成以上的步驟後,是時候在空白的 " main.py" 輸入程式碼了!

不免俗的,我們也來段 "Hello World”吧!

請在空白的 " main.py" 輸入print("Hello MicroPython on PyCharm")吧!


Download main.py to board

請點選 "main.py”,接著按滑鼠右鍵,選擇 Run ‘Falsh main.py’。




若板子就緒且 COM port 設定正確,你應該可以看到 main.py 被正確的下載到板子了,如下圖。



REPL

既然 main.py 已經成功的下載到板端了,當然就應該試試在 PyCharm 跑 REPL (  Read,Evaluate, Print and Loop )。

請點選 "Tools -> MicroPython ->MicroPython REPL”執行 REPL。



接著在 Terminal 視窗則會有如下的 REPL connected 的結果



這時你不妨按下 “Ctrl+D”,來個 soft reboot,就能看到你撰寫 main.py 的執行結果了。



Run AMPY

想必你也猜得到是在 Terminal 視窗執行 ampy,以下就是執行畫面的截圖。



想省去一直敲打comport 這段字串  “-p com7',可以在 Terminal 輸入如下圖的字串,來設定 comport 路徑。



以上就是 MicroPython 在 PyCharm 的使用教學,感謝閱讀!

熱門文章