Geek的入門神器:micropython-能跑python的stm32開發板

    0x01 引言

    MicroPython是運行在微控制器上的Python,遵守MIT協議。劍橋大學數學科學中心的Damien P. George在研究各種深奧數學、物理問題之餘,還搞了一個MicroPython項目,將Python移植到ARM Cortex M微處理器上,並開發了電路板。2013年曾經在KickStarter上成功籌得近10萬英鎊。2014年成功完成項目,發貨。
    同時,這個項目也在GitHub上開源,至今已有1800+星,60位貢獻者。George曾在2014年PyCon UK上介紹MicroPython,所用硬件平臺叫pyboard。

    0x02 micropython開發板概述

    Micro Python是Python 3編程語言的一個簡潔和快速實現,專門優化運行於一個微控制器上。它基於ANSIC,語法跟Pyton 3基本一致,擁有自家的解析器、編譯器、虛擬機和類庫等,下面是MicroPython支持的一些常見開發板:
3、  TPYBoardV10x
[attach]379008[/attach]
            TPYBoard單片機開發板,現有TPYBoardV101、v102兩個版本,其中v102爲v101的升級版,新增swd接口。採用python開發語言,提供了30個GPIO,輕鬆使用python開發物聯網產品。支持Python3.0及以上版本的直接運行,支持重力加速度傳感器,支持上百周邊外設配件。

    0x03 TPYBoardV102爲例,講解micropython如何使用。
    下面以TPYBoardV102開發板爲例,詳解micropython如何使用。比如說,如果現在要運行第一個腳本,那麼在TPYBoardV102上面只要做這麼幾步:
         第一步:通過USB線插入TPYBoardV102跟電腦連接,然後電腦上面會彈出來一個名稱爲TPFLASHU盤,如下圖:


空間有點小隻有95KB,對你沒有看錯,不是95MB,只有95KB。這是因爲現在使用的是STM32芯片內置的flash空間,所以就只有這麼大了,但是這麼小寫入N個python腳本文件也是足夠的了。而且,我會告訴你插入TF卡後,能夠擴展到4個G的嘛。
         第二步:打開U盤打開后里面有如下四個文件:


其中main.py爲開機自動運行文件,可以將自己的代碼放在裏面;boot.py爲開機引導文件,由它加載main.py;pybcdc.inf爲windows下的虛擬串口驅動文件;README.txt包含開啓開發板的必要基礎信息。
第三步:編輯mian.py:
   現在我們可以開始編寫自己的 python 程序了。用文本編輯器打開 main.py 文件。Windows 環境下可以使用記事本或者其他編輯器。Mac 和 linux 下使用你喜歡的文本編輯器即可。打開文件後你將看到如下的一行:


該行以 # 字符開始,意味着只是一個註釋。這樣的命令行不會被執行,僅爲代碼提供信息用在這個 main.py 加多兩行,如下所示:

               
第一行表明使用 pyb 模塊,這個模塊包含了控制開發板的所有函數和類。
第二行打開了藍色的 LED:先是在 pyb 模塊中使用了 LED 類,創建了 LED 4 的實例,然後將其點亮
第四步:重置開發板
爲運行這個小小的腳本,我們需要保存並關閉 main.py文件,然後在 USB 設備中退出(或者卸載),就像退出移動磁盤一樣。
當設備安全退出或解除掛載後就來到了實現功能的地方:按下板上的復位鍵將重置開發板並運行寫好的程序。黑色的復位按鍵位於右邊,USB 接口下。當按下復位鍵後綠色的 LED 將快速閃爍,然後藍色的 LED 保持長亮。
至此編寫和運行第一個 MicroPython 程序就完成了,加油!

0x04 TPYBoard單片機開發板實用案例

實例一:點亮LEDS
    pyboard 板上最容易實現的事情莫過於點亮板上附帶的小燈。連接開發板,按照上篇教程中提到的登錄方法,就可與在解釋器中開始點亮 LED 燈了,代碼如下:
[code]myled = pyb.LED(1)
myled.on()
myled.off()
[/code]

這些命令將控制 LED 的亮和滅。
這種方式不錯,不過我們將嘗試讓其更智能化。在你擅長的文本編輯器裏打開 pyboard 裏邊的 MAIN.PY 文件,寫入或粘貼如下的代碼。如果你是 python 新手,那麼希望從此開始你能對 python 有正確的認識印象。
[code]led = pyb.LED(2)
while True:
   led.toggle()
   pyb.delay(1000)
[/code]

當你保存了文件後,按一下rst鍵,pyboard上的綠色LED將持續閃爍。


實例二:TPYboard控制LCD5110顯示6x8字符
先看一下LCD5110針腳含義吧(注意:LCD5110的針腳有些不一樣的)
TPYBoard的針腳與5110的針腳對應關係如下:

TPYBoard       LCD5110    memo
————————————————————————————
# any   Pin        => RST       Reset pin (0=reset, 1=normal)
# any   Pin        => CE        Chip Enable (0=listen for input,   1=ignore input)
# any   Pin        => DC        Data/Command (0=commands, 1=data)
#   MOSI          => DIN       data flow (Master out, Slave in)
#   SCK           => CLK       SPI clock
# 3V3   or any Pin  => VCC       3.3V logic voltage (0=off, 1=on)
# any   Pin        => LIGHT     Light (0=on, 1=off)
#   GND           => GND


還是看不明白的話,直接上針腳編號吧
TPYBoard       LCD5110    memo
————————————————————————————
Y10        => RST       Reset pin (0=reset, 1=normal)
Y11        => CE        Chip Enable (0=listen for input,1=ignore input)
Y9         => DC        Data/Command (0=commands, 1=data)
X8         => DIN       data flow (Master out, Slave in)
X6         => CLK       SPI clock
VCC
Y12        => LIGHT     Light (0=on, 1=off)

GND
接線ok後,可運行main.py了。
   main.py源代碼:
[code]#main.py
import pyb
import upcd8544
from machine import SPI,Pin
  
def main():
    SPI    = pyb.SPI(1) #DIN=>X8-MOSI/CLK=>X6-SCK
    #DIN =>SPI(1).MOSI 'X8' data flow (Master out, Slave in)
    #CLK =>SPI(1).SCK  'X6' SPI clock
    
    RST    = pyb.Pin('Y10')
    CE     = pyb.Pin('Y11')
    DC     = pyb.Pin('Y9')
    LIGHT  = pyb.Pin('Y12')
    lcd_5110 = upcd8544.PCD8544(SPI, RST, CE, DC, LIGHT)
    
    lcd_5110.lcd_write_string('Hello Python!',0,0)
    lcd_5110.lcd_write_string('Micropython',6,1)
    lcd_5110.lcd_write_string('TPYBoard',12,2)
    lcd_5110.lcd_write_string('v102',60,3)
    lcd_5110.lcd_write_string('This is a test of LCD5110',0,4)
    
  
if __name__ == '__main__':
    main()








[/code]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章