通過前面兩篇貼子的介紹,相信大家已經掌握如何使用 Python 操作 GPIO 和 I2C 了。
那么今天我們可以更進一步,通過 Python 中的 GPIO 和 PWM 接口使蜂鳴器發聲。
當然,如果只是實現這個功能就太無聊了,所以我們可以擴展一下,做個稍微有意思一些的東西。
嗯。。。想想做點啥呢?!翻箱倒柜一番之后,我找到了下面這塊擴展板。
這是小熊派鴻蒙開發套件中的“智慧安防”擴展板,板子上搭配了一個紅外傳感器和一個蜂鳴器。
基于這個板子,可以開發一個簡單的安防案例:當紅外傳感器有感應(有人靠近)時,觸發蜂鳴器發出警告(發聲)。
在開始之前需要先介紹一個新概念:脈沖寬度調制(Pulse Width Modulation),即:PWM。
這是一個屬于硬件電路層面的概念,對于物聯網開發來說不需要特別深入的對它進行研究,只需要掌握基本原理后應用到開發中即可。
簡單的說,PWM 就是利用數字信號輸出模擬信號的一種技術。眾所周知,現代計算機系統是數字驅動的,即:所有計算機部件在高低電平的交替驅動下工作。
如果所有的外設都是數字的,那么事情就很簡單了,直接 GPIO 連接就可以通信。
然而,有些外設就不是數字的,而是模擬的,需要接收模擬信號(如:正弦波信號),所以需要借助處理器使用 PWM 技術實現模擬信號。
基本原理如下:
根據電工電子學老師的說法,如果需要產生這樣的一個正弦波,可以用多個方波代替,其效果是相同的。
圖 a) 中的正弦波可以用一個個幅值相同但是寬度不同的方波代替,如圖 b) ,只要這些方波與 t 軸圍起來的面積和原始正弦波與 t 軸圍起來的面積相同即可。
有了上面的原理之后,接下來需要討論的就是:如何調節出等效的方波?
為了解決這個問題,需要了解占空比的概念!占空比指在一個周期內,信號處于高電平的時間占據整個信號周期的百分比。
在上圖中一個周期是 4ms ,而高電平在一個周期中的持續時間是 1ms,所以占空比為 25% 。
掌握了這些理論性的東西之后,就可以考慮如何實操的問題了:怎么實現 PWM 信號(方波信號)輸出?
很幸運,Hi3861中自帶了 PWM 模塊,所以在代碼層面只需要調用相關 API 接口向 PWM 模塊設置必要參數,就可以輸出需要的連續 PWM 信號(方波信號)。
上面表格中的接口功能可謂一目了然,幾乎可以做到“開箱即用”,唯一需要做解釋的就是 start(port,duty,freq)這個函數。
port 表示 PWM 信號的輸出通道編號,freq 用于控制 PWM 信號的輸出頻率,duty 用于指定占空比,占空比的值為 duty 和 freq 的比值。
Ok!有了這些鋪墊,可以上代碼了!
Snippet 1部分的代碼先對 GPIO_7 進行初始化和功能設置,目的是接收 is1 也就是紅外傳感器的感應信號,當 Hi3861 接收到這個紅外感應信號就會觸發回調 is1_callback() 。
Snippet 2 部分的代碼復用 GPIO_8 使其連接 PWM 模塊,目的是對 PWM 進行參數設置。
這里可以更進一步的給大家科普一下 GPIO 和 PWM 的關系:在理論上可以直接用 GPIO 產生需要的方波信號,但現實中并不會這么做!
原因很簡單,這么做會耗費大量的處理器資源,并且產生的方波信號頻率有限。
所以,一般都會引入獨立的 PWM 模塊,處理器通過 GPIO 與這個模塊連接在一起,從而能夠對其進行參數設置。之后,具體產生方波的工作就由 PWM 模塊完成了。
接下來,看看回調函數 is1_callback() 的實現。
代碼很簡單,核心部分就是對變量 pwm_on 進行標記,即:當接收到紅外感應信號的時候將 pwm_on 賦值為 True。
然后呢?然后在別處進行處理!
腳本文件的最后,可以看到處理 pwm_on 為 True 的代碼,即:當 pwm_on 為 True 時,調用 start() 函數促使 1 號 PWM 通道產生方波信號。
而 1 號 PWM 通道連接的是一個蜂鳴器,產生方波信號的最終結果就是使得蜂鳴器發聲。
整體流程如下:
最終效果如下:
可以看到,當我靠近開發板時,紅外感應器立即發送感應信號,進而觸發蜂鳴器發聲。
WOW!一個簡單的安防系統就這么完成了!
PS:最新版 Python 引擎庫能夠支持幾乎所有鴻蒙的外設接口,以及基礎浮點運算。
Enjoy It!
代碼開源地址:
https://gitee.com/delphi-tang/python-for-hos
編輯:jq
-
開發板
+關注
關注
25文章
5075瀏覽量
97663 -
GPIO
+關注
關注
16文章
1205瀏覽量
52164 -
紅外感應器
+關注
關注
0文章
11瀏覽量
8406
原文標題:用鴻蒙開發板做一個報警器,超簡單
文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論