18luck网站

18luck网站電子設計 | 18luck网站Rss 2.0 會員中心 會員注冊
搜索: 您現在的位置: 18luck网站 >> 編程學習 >> Python >> 正文

Python轉向MicroPython?

作者:佚名    文章來源:網絡    點擊數:    更新時間:2023/11/7
線電軌

一、問題/目標

  前麵我們(men) 學習(xi) 了 Python語言, 開發無線電軌智能車模使用的是 MicroPython 語言,如何從(cong) Python 語言編程, 轉向 MicroPython 語言編程,下麵讓我們(men) 來談談以下三個(ge) 問題: (1)他們(men) 之間的區別;(2) MicroPython中特殊的硬件開發軟件包;(3)在 MicroPython 開發單片機中嵌入式程序的三個(ge) 需要注意到的特點,Setup-Loop 整體(ti) 框架結構;硬件相關(guan) 軟件結構;硬件中斷的使用。下麵讓我們(men) 逐一討論一下。

 

二、基本原理

1、與Python之間的差異

  • Introduction to MicroPython – Python for Microcontrollers

  MicroPython 語言是集成了 Python 語言的一個(ge) 分支, 實現了 Python 3.4 版本語言標準。它是專(zhuan) 門為(wei) 在單片機這類嵌入式微控製器上,  實現的一款簡潔穩定的Python語言解釋器由於(yu) 它屬於(yu) 高級解釋型語言,  使得單片機的開發變得容易起來現在已經有眾(zhong) 多的單片機平台都支持 MicroPython 進行應用軟件的開發。對於(yu) 初學者來講,  在語法層麵, MicroPython 與(yu) Python 語言的差別基本上不易被覺察。  這裏就不做展開, 大家如果感興(xing) 趣,可以在 MicroPython 官網進行查看。  最後需要說明一點的是,  為(wei) 了便於(yu) 軟件開發,  在MicroPython中有一種交互式程序開發模式, REPL, 也就是 Read Evaluate Print Loop。MicroPython 在此模式下, 不斷讀取從(cong) 串口輸入的 MicroPython  指令, 執行後, 進行結果輸出。這個(ge) 過程不斷循環, 形成一個(ge) 交互式開發模式。

 

  比如在Thonny 環境中,利用上麵程序編輯窗口進行軟件開發屬於(yu) 正常程序開發,在Shell中就可以使用 REPL 機製進行交互式開發,比如下麵演示在 Shell 中 命令提示符後麵輸入不同命令,  回車後, MicroPython 執行結果的演示。手工輸入, 或者拷貝前麵的命令,  都可以進行執行。

 

2、硬件軟件包

  為(wei) 了應用到單片機平台中的硬件模塊,在 MicroPython 中還集成了很多特殊的軟件包。應用這些軟件包可以定義(yi) 一些與(yu) 硬件相關(guan) 的對象, 以及相關(guan) 的硬件函數接口。

  這裏以無線電軌智能車重核心控製板 ESP32為(wei) 例, 在它的MicroPython 中就集成了很多的硬件軟件包包括有管腳、異步串口、PWM、ADC 以及外部的 I2C, SPI 串行接口等。通過這些特殊的硬件驅動軟件包, 我們(men) 就可以在Python 語言中訪問利用這些硬件資源, 來控製車模的運行, 感知外部環境等。比如這裏是 I2C總線軟件包, 通過它可以連接單片機外部很多資源,為(wei) 了應用這個(ge) 端口,可以 import machine 軟件包中的 Pin, I2C 模塊,通過定義(yi) 相應的對象,   設置 I2C 總線端口的屬性,並與(yu) 外部設備通信。

 

  通過實驗 掌握更多單片機的這些硬件資源的特點和使用方法是應用單片機解決(jue) 車模控製問題的管腳所在。

3、嵌入式程序開發

  最後, 我們(men) 討論一下 MicroPython 開發嵌入式程序的特點。對於(yu) 初學者需要注意三個(ge) 方麵的內(nei) 容。第一個(ge) 就是程序主題大體(ti) 上呈現設置與(yu) 循環兩(liang) 部分。在設置部分,往往需要 import 所需要的軟件包、  對程序軟件變量和硬件模塊進行初始化等然後程序進入一個(ge) 由 for 或者 while 語句構成的無限循環結構,  在這個(ge) 結構中周期的執行一係列的指令, 完成控製的主要任務。第二部分就是需要理解程序中包含有一些與(yu) 硬件相關(guan) 的變量、對象等。它們(men) 需要不停的進行循環刷新和幅值,這些實時變量的值反映了單片機外部端口的電壓信號, 或者通訊數據等, 通過前麵的循環結構進行周期的讀取或者賦值。  最終形成對外部電路的控製。

 

  最後講一下在車模控製中會(hui) 碰到的另外一個(ge) 特殊編程技術,  那就是中斷。中斷是在 單片機內(nei) 部硬件在滿足某些條件下執行的程序片段,  比如當定時器硬件出現溢出是會(hui) 產(chan) 生周期的定時器中斷; 在外部端口出現電壓變化時會(hui) 出現 IO 信號中斷;在串口接收到數據的時候會(hui) 出現串口通訊中斷等。靈活的應用中斷是單片機嵌入式開發的重要技巧。 通常情況下,  前麵的 Loop 循環 以及中斷程序, 在嵌入式軟件開發中往往被稱為(wei) 嵌入式程序的 後台 任務和 前台 任務。

 

三、應用舉例

  這裏以無線電軌智能車綜合測試程序為(wei) 例,  來說明一下 MicroPython 程序的特點。對於(yu) 初學者來看, 這個(ge) 程序顯得有點複雜,但在整體(ti) 上, 大家看到, 它分為(wei) 前後兩(liang) 部分。  前麵部分屬於(yu) Setup 初始化部分,  做了很多的硬件初始化,  也定義(yi) 了一些函數。後麵一部分,就是有 while 形成的 循環控製部分,  這些屬於(yu) 軟件的後台任務部分。在每一次循環中依次執行 OLED 屏幕的刷新,按鍵的檢測處理,以及控製板上 LED 的閃爍, 用於(yu) 顯示程序運行狀態。此時估計大家會(hui) 有一個(ge) 疑問, 車模運動中舵機和電機控製代碼在哪裏執行呢?

 

  為(wei) 了解決(jue) 這個(ge) 疑問, 大家看這個(ge) 綜合演示程序的中間部分,在這裏定義(yi) 了 ESP32 硬件定時器對象, timer0,接下來定義(yi) 了一個(ge) 函數,  用於(yu) 定時器中斷函數後麵是對定時器進行初始化,設置定時器工作模式為(wei) 周期中斷模式,中斷周期為(wei) 10毫秒,  也就是100Hz 的重複頻率,第三個(ge) 參數設置中斷服務程序。這個(ge) 程序就是前麵定義(yi) 的 timer0  irq 函數。因此這個(ge) 中斷程序就會(hui) 在 Timer0 的中斷驅動下, 每隔精確的 10毫秒, 就被執行一次。 中斷程序屬於(yu) 嵌入式軟件的前台任務。 中斷程序定義(yi) 了中斷任務這些是需要用到的全局變量,  和程序中其它函數進行信息傳(chuan) 遞。讀取電磁場傳(chuan) 感器的交流電壓值判斷賽道的屬性計算舵機偏移量對舵機偏移量進行限幅下麵就是設置電機運行速度和舵機偏移量。中間部分是用於(yu) 控製電機是否運行的邏輯。之所以利用中斷周期進行車模控製,  主要是為(wei) 了保證控製時間的精確和周期的穩定。  這要比在 while 循環中執行控製命令更加可靠。

 

  大家感興(xing) 趣還可以研究一下這個(ge) 程序前麵的初始化過程,對於(yu) 一些和硬件相關(guan) 的模塊的使用,可以配合後麵相關(guan) 的實驗介紹進行聯係。通過這個(ge) 程序, 大家能夠熟悉 MicroPython 編寫(xie) 嵌入式軟件的一些特點。

 

1、演示代碼

Tags:Python,MicroPython  
責任編輯:admin
請文明參與討論,禁止漫罵攻擊。 昵稱:注冊  登錄
[ 查看全部 ] 網友評論
關於我們 - 聯係我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
返回頂部
刷新頁麵
下到頁底
晶體管查詢