2017年1月27日 星期五

【ESP8266】MicroPython的快速入門教程

https://my.oschina.net/shaoziyang/blog/781235


ESP8266MicroPython的快速入門教程
ESP8266版本的MicroPythonpybaord版本的有不少區別,無論從使用習慣還是API上,都有許多不同。下面以ESP-MP-01開發板為例,介紹使用方法。這個方法也可以用在NodeMcu、機智雲等開發板上。

準備工作
在開始玩MicroPython前,我們需要做好準備工作。
硬體上,只需要一根macroUSB資料線,大部分安卓手機的資料線都可以,很多開發板也帶有macroUSB線,即使沒有,淘寶上幾元包郵的也可以使用。
軟體上,需要準備的東西多一點。
·        CH340USB驅動
·        終端軟體
MicroPython需要使用支援串口功能的終端,而不能使用普通的串口調試工具。很多隻在windows下工作的嵌入式開發者可能不太習慣使用終端軟體,這可能需要一點時間去適應。論壇搜集了常用的幾種終端軟體,大家可以試試。
·        超級終端(WinXP
·        putty
·        kitty
·        xshell
·        SecureCRT
·        MobaXterm
大部分MicroPython的版本,物理串口都只使用了一種串列傳輸速率:115200, n, 8, 1, none。當然對於象pyb這樣使用的USB虛擬串口,其實串口參數隨便設置成什麼效果都是一樣的,但是使用標準參數還是可以減少不必要的問題。
因為ESP8266本身沒有USB介面,因此也無法象pyb那樣使用虛擬磁片功能,雖然內部有很大的Flash,卻無法直接象磁片那樣訪問,只能通過串口或wifi方式訪問。檔案傳輸只能通過象webrepl_cliESPlorer等軟體完成,相比pyboard顯得不夠方便,希望後續會有更好的檔案傳輸和文件管理工具。
通過USB連接開發板
不像STM32版本的pyboardESP8266本身沒有USB,只能通過TTL串口和Wifi訪問ESP8266。我們先介紹通過串口方式進行連接。
MicroPython ESP8266開發板上,帶有macroUSB介面,以及USB轉串口晶片CH340,它可以方便實現電腦與ESP8266模組的連接。使用前需要先安裝CH340的驅動,這樣當MicroPython開發板連接到電腦,就會出現一個串口設備。下面是windows上顯示的虛擬串口,Linux下通常是/dev/ttyUSB0


使用終端軟體連接開發板
為了使用MicroPython,我們需要運行一個終端軟體,下面以putty為例,其他軟體用法也類似。
先要設置串口,選擇CH340的串口(Windows上在裝置管理員中查看串口,Linux下在/dev/中查看),並設置串列傳輸速率為115200。有些軟體還要設置更多參數,一般設置8位元資料,無校驗,1位停止位,無流量控制等。

然後在串口設置中將Flow Control改為None

然後按下open,就可以進入終端介面了。這時介面上可能什麼也沒有,因為MicroPython已經運行,正在等待輸入命令。我們可以按下開發板的復位鍵,就可以看到螢幕上的提示資訊。最開始有一段亂碼,這是ESP8266模組開機時內部的調試資訊,串列傳輸速率和我們的不相同,所以是亂碼,後面就正常了。等出現三個尖括弧的提示符,就可以輸入命令了。

開機時會有一小段延時,螢幕顯示Hello,同時LED在閃。這是在運行我們的一個Morse(莫爾斯碼)常式,向大家發送Hello。大家可以列印main.py,就知道運行的程式了。
在終端中輸入程式
為什麼要使用終端軟體,而不是串口調試軟體,最主要的原因就是在終端裡可以靈活的輸入程式,運行程式。
一般情況下,我們都是在repl交互模式下輸入代碼,在python的命令提示符(>>>)後就可以輸入代碼,可以用左右方向鍵改變字元位置,插入新的字母。也可以用Del或者BS鍵刪除字母。輸入時,可以靈活使用TAB鍵進行代碼補全。完成一行後用回車鍵換行。這些和標準的python環境一樣。
在終端下,靈活使用快速鍵可以幫助我們。常用的快速鍵有:
·        CTRL-A -- on a blank line, enter raw REPL mode(這個快速鍵不是為了輸入程式,一般不要使用)
·        CTRL-B -- 在空命令列下,回到正常 REPL 交互模式
·        CTRL-C -- 中斷正在運行的程式
·        CTRL-D -- 軟復位
·        CTRL-E -- 粘貼模式
·        上下方向鍵 -- 調出以前輸入命令
運行程式時,如果出現問題可以隨時用Ctrl-C中止運行,或者在空命令列下用Ctrl-D軟復位。如果還不能解決問題,就直接按復位鍵進行硬復位。
遇到有疑問的地方,可以輸入help()查看幫助,甚至可以查看一個函數或者庫的説明,如help(machine)
還可以用dir()查看已經載入的模組、函數、變數,也可以用dir查看一個庫裡面包含的內容,如dir(machine)
粘貼代碼
對於較長的程式,用鍵盤輸入不但麻煩,效率低,也容易輸入錯誤。一種方法是先將程式複製到剪貼板,然後粘貼進去。在空命令列下按下快速鍵Ctrl-E就會進入粘貼模式:

putty下,滑鼠右鍵就可以將剪貼板內容複製到repl中。在其他軟體中,可能稍有區別。粘貼後,用Ctrl-D完成粘貼,或者用Ctrl-C取消粘貼。

查看開發板上的文件
NicroPython開發板都是帶有檔案系統的,它將剩餘的Flash空間,類比成磁片,可以通過多種方式訪問。在pyboard上,因為帶有USB介面,所以可以類比成虛擬磁片,通過系統的檔案管理員訪問,非常方便。而在ESP8266上,沒有USB介面(只有USBTTL串口),所以只能通過串口或者Wifi方式訪問。
·        文件列表
通過串口訪問檔的方法,和pyb上是一樣的,都是通過os模組。先看看下面例子,列出目前的目錄下的檔和目錄:
import os
os.listdir()
['boot.py', 'demos', 'drive', 'main.py']
上面就是開發板默認帶有的文件。os模組中的listdir()函數提供查看檔清單的功能。它還支援目錄,例如:
os.listdir('demos')
['led_test.py', 'morse.py', 'pwm_test.py', 'timer_test.py', 'webservicedemo.py']
這就是開發板的demos目錄下的檔。
·        查看目前的目錄
        os.getcwd()
·        改變目前的目錄
        os.chdir()
例如:
os.chdir('/demos')
os.getcwd()
'/demos'
·        查看檔內容
MicroPython沒有提供Linux下的cat或者windowstype這樣直接查看檔的方法,但是可以通過檔讀寫的方式查看檔內容。如:
f = open('main.py', 'r')
f.readall()
"print('Welcome to using MicroPython LR ver 1.1.0!')\nprint('Hello!')\nimport morse\nmorse.send('Hello', 2)\n"

運行板載常式
大家拿到的開發板,已經帶有常式了。如果刷了MicroPython官方固件,就會丟失常式,這時可以重新刷一下我們提供的帶有常式的開發板固件。
開發板的常式在/demos目錄下,用os.listdir('/demos')就可以查看檔列表,裡面有我們提供了幾個常式。
·        led_test.pyLED測試,演示了LED的基本控制,
import led_test
led_test.led_test()
·        morse.py,莫爾斯碼,開機時的LED閃爍,其實就是在發送Hello的莫爾斯碼。如果感覺比較耽誤時間,可以隨時用Ctrl-C中止運行。
import morse
morse.send('123', 2, 0)
morse.send()函數有三個參數,第一個是要發送的字串,第二個是IO,在ESP8266LEDGPIO2,如果用在pybaord上,可以是'A13'這樣的用法。第三個參數可以不用,它代表LED是正極驅動還是負極驅動。
·        pwm_test.pyPWM測試,通過PWM改變LED亮度,實現呼吸燈功能。
import pwm_test
pwm_test.PWM_test()
如果要停止呼吸等,運行下面命令
pwm_test.PWM_stop()

·        timer_test.py,演示了計時器的用法,每秒翻轉一次LED
import timer_test
timer_test.timer_test()
要停止計時器,使用下面命令
timer_test.tm.deinit()

更多用法,大家可以參考一下快速參考裡的用法,以及ESP8266的教程。
大家可能發現,運行上面的常式時,沒有加上路徑,因為我們已經將demos目錄添加到系統路徑了。
import sys
sys.path
['', '/', '/lib', '/drive', '/demos']



沒有留言:

張貼留言

2024_09 作業3 以Node-Red 為主

 2024_09 作業3  (以Node-Red 為主  Arduino 可能需要配合修改 ) Arduino 可能需要修改的部分 1)mqtt broker  2) 主題Topic (發行 接收) 3) WIFI ssid , password const char br...