2020年8月25日 星期二

MicroPython在 ESP8266/ESP32(ㄧ) 使用 uPyCraft 開發工具

        除了使用C語言來撰寫控制微控器(MicroController)的程式,目前非常多人使用的Python程式語言也可以撰寫控制程式;只是一般微控器上的記憶體容量並不大,所以無法使用Python的所有功能。因此劍橋大學的 Damien P. George教授開發了 Python的精簡版,能使用在微控器上的 MicroPython。但必須要注意它並非能使用所有Python的函數庫及功能。(註1、2)

         ESP8266及ESP32模組的相片如下,左邊的是ESP8266,右邊的是ESP32。在 Arduino中要燒錄程式到微控器時,都要按右下角的按鈕(BOOT/FLASH)。

        市面上有可以一鍵燒錄的ESP32模組,如下圖。還提供可以外加電源輸入的插槽(左下角)。


        要在 ESP32 或是 ESP8266上使用 MicroPython 前,必須將相對應 MicroPython 的韌體(Firmware)燒錄到微控器上。在 Google上搜尋 MicroPython 就可以找到連接的網址:https://micropython.org/,上方的 DOWNLOAD 網頁內,就可以選擇要搭配相關微控器的MicroPython。

       ESP32:https://micropython.org/download/esp32/

        

        ESP8266:https://micropython.org/download/esp8266/

        網站是使用 esptool.py 來燒錄韌體。但如果對於文字模式的操作有困難,建議可以使用uPyCraft 這套由大陸 DFRoot 公司所推出免費的整合式開發軟體(IDE),它整合了終端機、Python 程式編輯器及軟體線上燒錄的功能。下載網址:https://github.com/DFRobot/uPyCraft。下載zip檔後,解壓縮後,以系統管理員身分執行 uPyCraft 應用程式。

        若是在執行後,出現找不到 MSVCR100.dll 的訊息,請到微軟的下載中心 Download Center
網站:https://www.microsoft.com/en-us/download/details.aspx?id=26999。

        

       Microsoft Visual C++ 2010 Service Pack 1 Redistributable Package MFC Security Update        選擇 Chinese(Traditional) 語系後,按下 Download 按鈕。


        在下載頁面,記得要下載的是 vcredist_86.exe,然後進行安裝。就可以解決問題。
如果選成 vcredist_x64.exe 是沒用有的。猜想  uPyCraft 是不是32位元版的原因。 

        開啟程式後,在 Tools 功能表下,從 board 中選取 esp32,再設定 Serial 中設定 esp32 模組連接的串列埠號(要按各自 esp32 連結到電腦的埠號)。


        若 ESP32模組未安裝 MicroPython韌體的話,uPyCraft會出現下面的視窗:


        此時,可以直接燒錄 uPyCraft所提供的 MicroPython韌體,但還是建議使用 MicroPython官網所提供韌體。burn_addr(燒錄韌體的起始位址)要設定成 0x1000,就可以開始燒錄。

        按下 ok按鈕後,先進行清除(Erase)的工作,如果無法開始清除,試著按住ESP32模組上右下角的BOOT按鍵,直到開始清除。


        清除後,接著就會進行燒錄(Burn)的工作。

        燒錄完,不會出現任何的提示訊息,此時可以按下uPyCraft視窗右邊功能鈕的連結(Connect)。


        連接上 ESP32 模組,在 uPyCraft下半部的 Shell 視窗就會出現 MicroPython 的提示 >>>,可以輸入指令進行測試,另外左邊的視窗,點選 device,會顯示 ESP32模組上的檔案。


        接下來自行輸入一個 python 程式,或是由 範例 (Examples)中選取一個程式,進行測試是否可以在 ESP32 模組上使用 Python,最簡單的測試範例就是可以讓 onBoard 的 LED閃爍。所以選擇 blink.py。


        撰寫好 MicroPython 程式,可以使用功能表 Edit下的 syntaxCheck 進行語法的檢查。
   

        如果有錯誤的地方,例如 while Ture 後面,忘了加上:經過 yntaxCheck 檢查,會在 Shell 視窗出現錯誤的訊息。如下圖:


       語法檢查後,沒有問題就可以在 Tools 功能表下的 DownloadAndRun 命令或是直接按下快捷鍵 F5,將 MicroPython 檔案 (blink.py)上傳到 ESP32 後,執行程式,檢查結果是否正確。


        在 uPyCraft 左邊的視窗,在 device 資料夾中,可以看到剛上傳到 ESP32的檔案 (blink.py), 還有 boot.py。


        如果要執行在 ESP32 內的某個 MicroPython 檔案,可以利用 uPyCraft 左邊的視窗,從 device 資料夾中點選檔案後,按下滑鼠右鍵,選擇 Run 的命令。如果選擇 Default Run,則是 ESP32一接上電源後就會馬上執行程式 blink.py。

 
        選擇 Default Run命令後,會產生一個 main.py檔案,裡面的指令就是 ESP32 接上電源後就會執行的檔案(blink.py)。再按下 ESP32模組上的 RST 或是 EN 按鈕就會看到執行的結果。 如果要停止執行,選擇 Tools功能表下的 Stop命令。


        要注意的是: 如果直接關掉 uPyCraft 程式或是拔起 ESP32模組,再開啟  uPyCraft 或是插回 ESP32模組,此時  uPyCraft 將無法連線上 ESP32模組,會出現重新燒錄韌體的視窗。

       MicroPython檔案系統,在根目錄(device)下常會有兩個 python 檔案:boot.py 與 main.py。在 ESP32開機後,會先去根目錄下找尋 boot.py 檔案,存在的話就先執行此開機檔; 然後再尋找 main.py,如果有的話就會再執行這個程式。 main.py 裡面主要就是一個執行特定應用邏輯無窮迴圈。(註3)

        一旦將 blink.py設定成  Default Run,會產生 main.py 無限迴圈執行檔案,以致關掉uPyCraft程式或是拔起 ESP32模組後 ,uPyCraft 無法連線上 ESP32模組。

       要解決這個問題,若是在設定成  Default Run 後,先從 Tools 功能表下的 Stop 命令停止程式執行,再刪除 main.py,將會出現 delete error。

       

        目前想到解決的方法是:

       1.開啟 main.py

       2.將 main.py內的 exec(open('./main.py').read(),globals()) 程式刪除掉。

       3.再從 Tools 功能表中,選擇 Download命令,將 main.py清除空白。


        如果未清除 main.py 內的 exec(open('./main.py').read(),globals()) ,就關掉 uPyCraft 程式或是拔起 ESP32模組,那除了重新燒錄韌體外,可以選擇用 Thonny 整合開發軟體來刪除 main.py。

        uPyCraft更多的使用方法,請參考註2的說明文件。

        另外要注意的是:使用 uPyCraft 燒錄 ESP8266 韌體時,burn_addr 要設定成 0x0 (預設值)。


註1:超圖解Python物聯網實作入門,趙英傑,旗標出版社(2018)。

註2:uPyCraft簡體中文說明文件:http://docs.dfrobot.com.cn/upycraft

註3:MicroPython on ESP8266 (六) : 檔案系統測試,小狐狸事務所,http://yhhuang1966.blogspot.com/2017/05/micropython-on-esp8266_18.html

註4:經典ESP學習網站(Random Nerd Tutorials): https://randomnerdtutorials.com/

沒有留言:

張貼留言