mt7688-wiscan:WiFi 掃描小工具

一、前言

事情是這樣子的,最近我在做一個跟物聯網路有關的案子。我拿 MTK 的 Linkit Smart 7688 來做周邊機器節點 (7688 跑 station 模式),然後呢,每台周邊機器上都配有一個小螢幕,上面會顯示一些跟機器相關的資訊,其中需要 "連線強度" 那樣子的圖示。因為現場安裝的工程師,需要知道節點會不會離 AP router 太遠。
 
  原本我以為要拿到"連線強度"應該是小菜一碟,結果 7688 切到 station 模式之後,iwconfig 竟然拿到的 LQI 竟然是無用的!!! (LQI 跟 Signal level 完全不動啊~~ 哭臉)。反正,後來我花了一點時間在系統裡面翻翻找找的,都沒找到啦!差點要摔東西了~ 靠夭啊,這樣我是要怎麼在機器的 panel 上做出那個 "強度指示 icon" 啊!

(2016/4/13 21:20 註: 感謝北科大電子系李昭賢老師(力趣哥)的指導~~  原來 iwconfig 在 OpenWrt 即將被拿掉,目前該指令處於廢棄狀態, 請見OpenWrt官網說明,現在改用 iwinfo 指令,我也是用這支啦! 之前 iwconfig 不能用,讓我有點錯怪 MTK,真的很失禮阿~~歹勢歹勢~這點要親自登網誌道歉謝罪一下....)

  好啦!最後的結果,就是我寫了一支跑在 node.js 上的模組,給它用掃描的啦!為什麼要寫成 node.js 的模組啊??!!  很簡單啊! 因為節點程式就是用 node 設計的啦~~~ 沒有甚麼特殊理由....
  
  其實我的目標是要拿到 LQI 啦~ 啊不過因為這個模組可以掃出鄰近的 AP,所以就給它取的名字叫 wiscan (wifi scanner) 的意思,如果你的 node.js 應用程式需要掃出附近的 AP,或許這個模組可以幫上點小忙。以下就來簡單說明一下~
 

二、安裝 mt7688-wiscan

wiscan 程式很小、不需編譯,所以直接 ssh 登入 Linkit Smart 7688 後,在上面安裝就可以啦! 我這裡把它裝在 /app 目錄下,待會在裡面寫一支測試程式。

7688 (station mode, 當周邊節點使用)

root@mylinkit:~/app# npm install mt7688-wiscan


三、使用 lqi() 方法獲取連線品質指數 (LQI)

首先,你必須要先知道待測試目標 AP 的 SSID,通常是你的 7688 所連上的 AP router。如果你想測試 7688 對周遭 AP 的 LQI 也可以,只要你知道對方的 SSID 即可。
 
這裡以我們辦公室的 WiFi AP 為例,它的 SSID 是字串 'sivann',所以在呼叫 .lqi() 方法時填入,並且給它一個 callback(err, result) 以接回連線測試後的 LQI 數值。詳細說明請見 API 說明頁
 
MT7688 底層拋上來的 LQI 是一個介於 0 ~ 100 的相對數值,數字越大,代表連線品質越好。以下是範例程式 /app/scan.js:

var wiscan = require('mt7688-wiscan');

wiscan.lqi('sivann', function (err, result) {
    if (err)
        console.log(err);
    else
        console.log('LQI: ' + result);
});

每一次測試需要 5 秒鐘,所以如果你的程式要安排 re-scan,最好不要太快重掃(例如 1 秒就掃一次),因為根本沒有用,哈哈~ 在掃描期間的 5 秒內,不管你重掃幾次,都會得到一樣的結果,這應該是底層 driver 跟 hardware 的關係~




四、使用 scan() 方法掃描鄰近 AP 的資訊

這還蠻簡單的,直接呼叫 scan() 方法,然後給它 callback(err, result) 來接回結果即可。
 
var wiscan = require('mt7688-wiscan');

wiscan.scan(function (err, result) {
    if (err)
        console.log(err);
    else
        console.log(result);
});

掃完的結果是一個陣列,每一個元素都是一個資料物件,代表所掃到 AP 的資訊。這些資訊包含 AP 的 MAC 位址、ESSID 等 (以下請自己看)。這裡比較值得注意的是 signal 欄位,它的值一直都是 -256 (單位是 dBm),我猜這應該也是底層 driver 的問題,它就是不給你 signal strength,只給你 LQI,這我就沒法度了 (我嘗試過啦,就是找不到方法拿到 RSSI 嘛!! 如果有人知道的話,拜託一定要偷偷跟我講一下)


五、後記

最後,如果有人知道不必靠掃描就可以知道 LQI 的方法,拜託請教我一下啊!! 我直覺應該是有阿,通訊封包裡面應該是有類似的資料才是呀!只是我實在不知道要從哪裡去找,我在系統底下的 /dev, /sys, 跟 /proc 翻了一遍,就是沒找到呀!! (非常懊惱啊~~~ 超想知道這類資訊會在哪裡~~)
 
 
 
 
 
 
 
simen

An enthusiastic engineer with a passion for learning. After completing my academic journey, I worked as an engineer in Hsinchu Science Park. Later, I ventured into academia to teach at a university. However, I have now returned to the industry as an engineer, again.

1 Comments

  1. 我也是想說iwconfig的signal noise怎都沒在跳動
    不過在這指令有看到相關資訊
    $ cat /proc/net/wireless
    Inter-| sta-| Quality | Discarded packets | Missed | WE
    face | tus | link level noise | nwid crypt frag retry misc | beacon | 22
    ra0: 0000 10. -256 -256 0 0 0 0 0 0

    ReplyDelete
Post a Comment
Previous Post Next Post