文章類型
開發平台
解決方案
關注主題
文章類型
開發平台
解決方案
關注主題

【7688】不用Libmraa一樣可以控制GPIO

作者:賴桑

Libmraa實在容量大又跑不快!想要讓7688開機後,只會做一次系統初始動作,之後的程式不管那一隻,它都只會直接進行IO讀取或控制,所以就找到了7688系統中,如同以前Apple 2時代,透過對特定目標位置存取,就能做出像是「PEEK」或「POKE」的效果。

其實不論哪一套Linux,最初跟幾十年前的Unix一樣都有「kernel device driver」的設計精神,它大略分成兩種:「區塊(block)存取」、「字元(character)存取」,而控制GPIO這類的需求,大部分只要字元存取就可以達成。本文就是介紹不要用Libmraa的方法,直接存取kernel device driver的方式控制GPIO,其實就是寫檔案而已啦~免緊張!

控制GPIO的材料準備

  1. LinkIt Smart 7688,有沒有Duo沒關係,因為主題是OpenWRT
  2. 一個220Ω固定電阻跟一個LED
基本架構

基本架構

方法敘述

7688的每隻腳位其實有不同的定義,比如本文範例中的GPIO43,以拿Duo為例,就圖表示,GPIO43其實也是EPHY_LED。

GPIO43為EPHY_LED

GPIO43為EPHY_LED

所以7688有個腳位多工器管理的指令:mt7688_pinmux 可以知道現在哪一群的腳位被定義成什麼

非gpio狀態的Group ephy

非gpio狀態的Group ephy

由圖可以看到我們要控制的GPIO43,目前所屬的Group ephy的狀態不是gpio,所以要改!

可被控制的GPIO43

可被控制的GPIO43

這樣一來,就回到GPIO43可以被控制的情況了,控制GPIO的進入點在OpenWRT中的 /sys/class/gpio 目錄下對應,所以切入 /sys/class/gpio 目錄後,就可以看到。

/sys/class/gpio 目錄

/sys/class/gpio 目錄

其中的 export 就是在要用的時候,先把控制點對應出來的標的,那 unexport 就是不要控制的時候,將控制點撤除的方法:「先把GPIO43的控制點對應出來」。

gpio43 的控制點

gpio43 的控制點

如圖,多了一個 gpio43 的控制點,這個控制點下面還有好幾個東西值得一提,那就是GPIO到底是輸出還是輸入,以及目前的值是甚麼?

用cat指令查看內容

用cat指令查看內容

其中的direction就是指目前是輸入還是輸出,可以用 cat 指令看到內容,如果direction內容是out就是輸出,反之為in就是輸入;若要修改輸入變成輸出,或者輸出變成輸入,同樣也是透過echo指令。

透過echo修改

透過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了,除非有其他的模組、程式仍在使用)

退回控制點

退回控制點

賴建宏

賴建宏

社群稱號為「賴桑」的他,以電子電機的背景,熱衷於OSHW的應用開發與實作。現為台北科技大學電子所博士班學生,目前主推「農林漁牧大業」計畫的迷你型魚菜共生系統開發。
賴建宏

上一篇: | 下一篇:

3 Comments

  1. 你好,實作之後發現7688 DUO沒有對應燈號會亮,但是很明確可以如網頁最後一張圖,能看到gpio43在列表裡面,也能下達
    echo 1 > gpio43/value

    echo 0 > gpio43/value

    請問7688 duo上的燈號到底是有多少顆呢?(我板子上看到的是ON、WiFi、D13)

    Post a Reply
    • 可以下載官方網站上有PDF

      Post a Reply
  2. 賴桑大大:

    這樣看來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

    Post a Reply

我想回應

你的電子郵件位址並不會被公開。 必要欄位標記為 *

成城共創股份有限公司版權所有、轉載必究.Copyright(c) 2017 MakerPRO