2011年10月27日木曜日

WiMAXの電波強度をURoad-7000SSで調べる

URoad-7000SSのWiMAX ランプ からでも電波強度がわかるのですが、Web設定画面の方が詳細でわかるようなので、 スクレイピングして電波強度を表示するようにしてみた。
電波強度としては、強い、普通、弱い、少し弱い、非常に弱い、圏外が区別できるようだ。
# -*- coding: utf-8 -*-
# uroad7000.py 2011.10.27
import base64
import urllib2
import urlparse
import time
import datetime
from BeautifulSoup import BeautifulSoup

def get_status(url):
    o = urlparse.urlparse(url)
    if o.username and o.password:
        user_passwd = o.username+":"+o.password
        url = url.replace(user_passwd+"@", "", 1)
        req = urllib2.Request(url)
        req.add_header("Authorization", "Basic " + base64.encodestring(user_passwd))
    else:
        req = urllib2.Request(url)
    try:
        response = urllib2.urlopen(req, timeout=2)
    except urllib2.HTTPError, err:
        print(err)
        return None
    except urllib2.URLError, err:
        print(err)
        return None
    except socket.timeout:
        return None
    else:
        data = response.read()
    soup = BeautifulSoup(data)
    for td in soup('td', id="WM_ConnectionStatus"):
        s = td.contents[0]
        if ord(s[0]) == 0xfeff:
            s = s[2:]
        status = s.strip(' ')
        return status
    return None

if __name__ == "__main__":
    # Uroad-7000SS
    url = "http://admin:admin@192.168.100.254/admin/wimax_status.asp"
    while 1:
        try:
            print datetime.datetime.now(),
            status = get_status(url)
            if status:
                print u"電波強度[%s]" % status
            else:
                print u"---"
            time.sleep(0.5)
        except KeyboardInterrupt:
            break


---

2011年10月18日火曜日

USB接続のGPSをmbedに繋げてみた

秋月のUSB接続のGPSモジュール(GT-730F/L)をmbedに繋げてみた。
全然データが流れてこないと思ったら、ボーレートを設定するのを忘れていた。
PL-2303にコマンドで38400bpsに設定して、バルク転送で読み込むとGPSデータがNMEA形式で流れ込んできます。

PL-2303 Driver for BeOSのソースコードが参考になりました。ありがとうございました。

// pl2303.cpp 2011/10/14
#include "mbed.h"
#include "USBHost.h"
#include "Utils.h"

#define PL2303_SET_LINE_CODING 0x20

u8 pl2303_buf[64];

void pl2303_Callback(int device, int endpoint, int status, u8* data, int len, void* userData)
{
    //printfBytes("pl2303_bulk_Callback", data ,len);
    for (int i = 0; i < len; i++) {
        printf("%c", data[i]);
    }    
    USBBulkTransfer(device, 0x83, pl2303_buf, sizeof(pl2303_buf), pl2303_Callback, userData);
}

int OnPL2303Insert(int device) 
{
    printf("PL-2303 inserted of %d\n",device);
    USBBulkTransfer(device, 0x83, pl2303_buf, sizeof(pl2303_buf), pl2303_Callback, (void*)0);
    u8 data[] = {0x00, 0x96, 0x00, 0x00, 0x00, 0x00, 0x08}; // 38400bps,8bit
    USBControlTransfer(device, REQUEST_TYPE_CLASS | RECIPIENT_INTERFACE, 
                               PL2303_SET_LINE_CODING, 0, 0, data, sizeof(data));
    return 0;
}

---