作者:賴桑
Libmraa實在容量大又跑不快!想要讓7688開機後,只會做一次系統初始動作,之後的程式不管那一隻,它都只會直接進行IO讀取或控制,所以就找到了7688系統中,如同以前Apple 2時代,透過對特定目標位置存取,就能做出像是「PEEK」或「POKE」的效果。
其實不論哪一套Linux,最初跟幾十年前的Unix一樣都有「kernel device driver」的設計精神,它大略分成兩種:「區塊(block)存取」、「字元(character)存取」,而控制GPIO這類的需求,大部分只要字元存取就可以達成。本文就是介紹不要用Libmraa的方法,直接存取kernel device driver的方式控制GPIO,其實就是寫檔案而已啦~免緊張!
控制GPIO的材料準備
- LinkIt Smart 7688,有沒有Duo沒關係,因為主題是OpenWRT
- 一個220Ω固定電阻跟一個LED
方法敘述
7688的每隻腳位其實有不同的定義,比如本文範例中的GPIO43,以拿Duo為例,就圖表示,GPIO43其實也是EPHY_LED。
所以7688有個腳位多工器管理的指令:mt7688_pinmux 可以知道現在哪一群的腳位被定義成什麼
由圖可以看到我們要控制的GPIO43,目前所屬的Group ephy的狀態不是gpio,所以要改!
這樣一來,就回到GPIO43可以被控制的情況了,控制GPIO的進入點在OpenWRT中的 /sys/class/gpio 目錄下對應,所以切入 /sys/class/gpio 目錄後,就可以看到。
其中的 export 就是在要用的時候,先把控制點對應出來的標的,那 unexport 就是不要控制的時候,將控制點撤除的方法:「先把GPIO43的控制點對應出來」。
如圖,多了一個 gpio43 的控制點,這個控制點下面還有好幾個東西值得一提,那就是GPIO到底是輸出還是輸入,以及目前的值是甚麼?
其中的direction就是指目前是輸入還是輸出,可以用 cat 指令看到內容,如果direction內容是out就是輸出,反之為in就是輸入;若要修改輸入變成輸出,或者輸出變成輸入,同樣也是透過echo指令。
這樣GPIO43就變成輸出用的腳位了!而 gpio43/value 就是目前腳位的狀態,若為1就是HIGH,0就是LOW,同樣可以透過echo指令修改,不過,要注意如果direction的內容為in表示是輸入腳位的時候,寫入1或0可是被禁止的喔~
最後,來測試看看是否成功:
根據上圖的兩個指令,看看你的MediaTek 7688的LED是不是先點亮,然後又熄滅了?如果是,那恭喜你成功了!
小結
這樣的方法,可以不需要用Libmraa的方法去控制GPIO,且不管在Python、Node.js、C/C++……等程式語言支援下,只要是可以存取檔案功能的,就能控制LinkIt Smart 7688的GPIO,當GPIO43已經不再被使用了,記得:「把控制點退回去吧!」。
(如下圖,已經沒有gpio43了,除非有其他的模組、程式仍在使用)
- 【開箱評測】用Mbed上手開發DSI 2599開發板 - 2020/08/03
- 【OpenVINO™教學】自製麵包影像辨識POS機的應用 - 2019/12/24
- 【邊緣運算】OpenVINO好夥伴 — athena A1 Kit x86單板 - 2019/11/18
訂閱MakerPRO知識充電報
與40000位開發者一同掌握科技創新的技術資訊!
2016/12/24
賴桑大大:
這樣看來7688 Duo在Node.js下用mraa控LED可接
GPIO:43(p2)、20(p8)、21(p9)或
D0-D18
也就是Pin-out图(http://www.cnx-software.com/wp-content/uploads/2015/12/Link_Smart_7688_DUO_Pinout.png)中橘色部份
對嗎?
Ted Lee
2016/07/13
你好,實作之後發現7688 DUO沒有對應燈號會亮,但是很明確可以如網頁最後一張圖,能看到gpio43在列表裡面,也能下達
echo 1 > gpio43/value
與
echo 0 > gpio43/value
請問7688 duo上的燈號到底是有多少顆呢?(我板子上看到的是ON、WiFi、D13)
2016/07/19
可以下載官方網站上有PDF