<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    布衣王子

    Email:roose2008@gmail.com QQ:79212131

    使用 Java ME 實現超低帶寬通信

    美國國防部和一些商業領域中,部分應用程序需要低速率(低功耗)的無線通信。舉例來說,如今大多數現代交通工具都隨帶胎壓監測系統。

    胎壓傳感器數據是如何從各個輪胎發送到車載嵌入式計算系統,并最終到達儀表板的呢?顯然,傳感器和儀表板的數據總線之間沒有線路連接。因此,正如您所想象的,一定有某種機制從胎壓傳感器檢索傳感器數據。并且,此機制一定是無線的,并且可以長時間連續運作,毫無中斷現象。

    在本技術文章中,我們將探討如何使用 Java ME 和 Sun SPOT 技術創建用于讀取傳感器數據的低帶寬無線系統。下圖顯示了一個與 US quarter 有關的 SPOT。


    下面列出了一些 Sun SPOT 規格。您將發現在這種新計算平臺上創建和部署應用程序為何會使我如此激動:

      Java ME CLDC 1.1 JVM (Squawk VM)
      180 MHz 32 位處理器
      512K RAM
      4M 閃存
      IEEE 802.15.4 無線傳感器
      3 軸加速度傳感器
      溫度傳感器
      光傳感器
      具有 6 個模擬輸入的模數轉換器 (ADC)
      2 個可程控開關
      充電電池

    注意:雖然 Sun SPOT 兼容 802.15.4 規范,但是它們并不完全兼容真正的 ZigBee 設備,因為它們沒有實現 ZigBee 協議 中的上層協議。因為許多人對 ZigBee 感到陌生,所以我們將它與某些常用的標準無線通信協議做一個比較。下表比較了 WiFi、Bluetooth 和 ZigBee 。

    WiFi Bluetooth ZigBee
    IEEE 規范 802.11b,g 802.15.1 802.15.4
    最大帶寬 54 Mb/s 3 Mb/s 250 kb/s
    最大通信范圍 300 ft. 300 ft. 914.40 cm.
    功耗率 小時 月/年

    如您所見,ZigBee(或者任何其他 IEEE 802.15.4 衍生協議)是無線傳感器應用程序的理想協議。這些應用程序以下列場景為代表,在這些場景中,建立到敏感傳感器或傳感器陣列(如胎壓傳感器)的連接是不切實際或不方便的。Sun SPOT SDK 包含 3 個 SPOT 設備。其中一個設備通過 USB 電纜連接到您的計算機上作為基站,而另外兩個設備可以自由移動。

    本技術文章將介紹兩個功能完整的應用程序,第一個是基站應用程序,從第二個應用程序(移動無線 Sun SPOT)接收數據。在這個場景中,我不計劃執行任何用于兩個設備互相找到對方的發現機制。因為我已經知道基站和移動 SPOT 的 ZigBee 地址,所以我計劃直接告訴雙方對方的地址。因為 SPOT 有一個 CLDC JVM,所以我將使用通用連接框架 ( Generic Connection Framework, GCF),以便建立基站與移動 SPOT 的連接:

    Connector.open("radiostream://0014.4F01.0000.1447:55");

    如您所見,移動 SPOT 的無線地址是 0014.4F01.0000.1447。雖然在此應用程序中,我選擇 55 作為端口號,但是您可以自由地選擇 31~127 之間的任意數值作為您的應用程序的端口號。

    下面是基站應用程序的完整代碼,文件名為 HostReceiver.java 。它打開了一個到移動 SPOT 設備的無線連接,并從遠程設備接收 10 個溫度值。
    package receiver;

    import com.sun.spot.peripheral.*;
    import com.sun.spot.peripheral.radio.*;
    import com.sun.spot.io.j2me.radio.*;
    import com.sun.spot.io.j2me.radiogram.*;
    import com.sun.spot.util.IEEEAddress;
    import java.io.DataInputStream;
    import javax.microedition.io.InputConnection;
    import com.sun.spot.util.*;

    import java.io.*;
    import javax.microedition.io.*;

    public class HostReceiver {
    /**
    * Print out our radio address.
    */
    public void run() throws IOException{
    IEEEAddress zigbeeAddress = new IEEEAddress(Spot.getInstance().getRadioPolicyManager().getIEEEAddress());
    System.out.println("The Host station Zigbee radio address = " + zigbeeAddress.asDottedHex());

    StreamConnection streamConnection = (StreamConnection) Connector.open("radiostream://0014.4F01.0000.1447:55");

    for(int i=0; i<10; i++){

    DataInputStream data_input_stream = streamConnection.openDataInputStream();

    double value = data_input_stream.readDouble();
    System.out.println("The temperature is: " + value + "F");

    data_input_stream.close();
    Utils.sleep(3000);
    }

    streamConnection.close();
    System.exit(0);

    }

    /**
    * Start up the host application.
    *
    * @param args any command line arguments
    */
    public static void main(String[] args) throws Exception {
    HostReceiver app = new HostReceiver();
    app.run();
    }
    }

    下面是移動 SPOT 應用程序的代碼,其使用它的溫度傳感器接收周圍的溫度。它將取樣 10 次溫度,并將數據發送到基站。此應用程序也做一些其他工作,打開外部的 LED,使其顯示不同顏色,讓操作員知道 SPOT 是否運作正常。所有代碼都包含在文件 SpotSender.java 中。

    package sender;

    import com.sun.spot.peripheral.Spot;
    import com.sun.spot.sensorboard.EDemoBoard;
    import com.sun.spot.sensorboard.peripheral.ITriColorLED;
    import com.sun.spot.peripheral.radio.IRadioPolicyManager;
    import com.sun.spot.io.j2me.radiostream.*;
    import com.sun.spot.io.j2me.radiogram.*;
    import com.sun.spot.util.*;
    import com.sun.spot.sensorboard.io.ITemperatureInput;

    import java.io.*;
    import javax.microedition.io.*;
    import javax.microedition.midlet.MIDlet;
    import javax.microedition.midlet.MIDletStateChangeException;

    import java.io.*;
    import javax.microedition.io.*;

    public class SpotSender extends MIDlet {
    public StreamConnection streamConnection = null;
    public ITemperatureInput temperatureSensor = null;
    public IEEEAddress zigbeeAddress = null;

    public SpotSender(){
    try {
    streamConnection = (StreamConnection) Connector.open("radiostream://0014.4F01.0000.1709:55");
    temperatureSensor = EDemoBoard.getInstance().getADCTemperature();
    zigbeeAddress = new IEEEAddress(Spot.getInstance().getRadioPolicyManager().getIEEEAddress());

    System.out.println("Our radio address = " + zigbeeAddress.asDottedHex());
    } catch (IOException e){
    System.out.println("exception in constructor");
    }
    }

    protected void startApp() throws MIDletStateChangeException {

    // get a reference to the LED array
    ITriColorLED [] leds = EDemoBoard.getInstance().getLEDs();

    // set LED2 to green
    leds[2].setRGB(0,100,0);

    for(int i=0; i<10; i++){

    // turn all LEDs off
    leds[2].setOff();
    leds[3].setOff();
    leds[4].setOff();

    // turn LED2 on
    leds[2].setOn();
    Utils.sleep(250);

    try{
    DataOutputStream data_output_stream = streamConnection.openDataOutputStream();
    data_output_stream.writeDouble(temperatureSensor.getFahrenheit());

    data_output_stream.close();

    // set the color to blue
    leds[3].setRGB(0,0,100);
    leds[3].setOn();
    } catch (Exception e){
    // set the color to red
    leds[4].setRGB(100,0,0);
    leds[4].setOn();
    }

    leds[2].setOff();
    Utils.sleep(3000);
    }

    try{
    streamConnection.close();
    } catch (IOException e){
    }
    }

    protected void pauseApp() {
    // This will never be called by the Squawk VM
    }

    protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
    // Only called if startApp throws any exception other than MIDletStateChangeException
    }
    }

    您可以自己部署和運行代碼,這會發生什么呢?您將獲得基站應用程序的輸出結果,如下所示:

    The Host station radio address = 0014.4F01.0000.1709
    [radiostream] Adding: Input from 0014.4F01.0000.1447 on port 55
    The temperature is: 90.5F
    [radiostream]Removing: Input from 0014.4F01.0000.1447 on port 55
    [radiostream] Adding: Input from 0014.4F01.0000.1447 on port 55
    The temperature is: 90.95F
    [radiostream]Removing: Input from 0014.4F01.0000.1447 on port 55
    [radiostream] Adding: Input from 0014.4F01.0000.1447 on port 55
    The temperature is: 90.05000000000001F
    [radiostream]Removing: Input from 0014.4F01.0000.1447 on port 55
    [radiostream] Adding: Input from 0014.4F01.0000.1447 on port 55
    The temperature is: 90.5F
    [radiostream]Removing: Input from 0014.4F01.0000.1447 on port 55
    [radiostream] Adding: Input from 0014.4F01.0000.1447 on port 55
    The temperature is: 90.95F
    [radiostream]Removing: Input from 0014.4F01.0000.1447 on port 55
    [radiostream] Adding: Input from 0014.4F01.0000.1447 on port 55
    The temperature is: 90.05000000000001F
    [radiostream]Removing: Input from 0014.4F01.0000.1447 on port 55
    [radiostream] Adding: Input from 0014.4F01.0000.1447 on port 55
    The temperature is: 90.5F
    [radiostream]Removing: Input from 0014.4F01.0000.1447 on port 55
    [radiostream] Adding: Input from 0014.4F01.0000.1447 on port 55
    The temperature is: 90.05000000000001F
    [radiostream]Removing: Input from 0014.4F01.0000.1447 on port 55
    [radiostream] Adding: Input from 0014.4F01.0000.1447 on port 55
    The temperature is: 90.5F
    [radiostream]Removing: Input from 0014.4F01.0000.1447 on port 55
    [radiostream] Adding: Input from 0014.4F01.0000.1447 on port 55
    The temperature is: 90.5F
    [radiostream]Removing: Input from 0014.4F01.0000.1447 on port 55

    posted on 2008-07-17 23:01 草包書生 閱讀(313) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    導航

    常用鏈接

    相冊

    java的相關連接

    最新評論

    主站蜘蛛池模板: 直接进入免费看黄的网站| 亚洲一区二区三区无码国产| 亚洲av日韩av永久无码电影| 在线视频免费观看爽爽爽| 久久精品国产亚洲AV未满十八| 猫咪免费人成网站在线观看| 亚洲综合在线视频| 久久香蕉国产线看免费| 777亚洲精品乱码久久久久久 | 精品国产综合成人亚洲区| a级黄色毛片免费播放视频| 中文亚洲AV片不卡在线观看| 一个人看的免费视频www在线高清动漫 | 国产免费黄色无码视频| 久久久亚洲精品蜜桃臀| 成人片黄网站色大片免费观看cn| 中文字幕亚洲日本岛国片| 97在线免费观看视频| 亚洲爆乳精品无码一区二区三区| 久久99精品国产免费观看| 91亚洲一区二区在线观看不卡 | 成人片黄网站色大片免费| 亚洲a∨国产av综合av下载| 亚洲av无码国产精品色在线看不卡| 一级毛片**免费看试看20分钟| 亚洲精品乱码久久久久久蜜桃不卡 | 在线视频免费国产成人| 无码免费又爽又高潮喷水的视频 | 91亚洲国产成人久久精品网址| 四虎永久在线精品免费观看视频| 亚洲人配人种jizz| 国产一区视频在线免费观看| 中文字幕免费在线观看动作大片| 亚洲国产老鸭窝一区二区三区| 嘿嘿嘿视频免费网站在线观看| 午夜亚洲国产理论片二级港台二级| 亚洲日韩人妻第一页| 久久九九兔免费精品6| 亚洲高清国产拍精品熟女| 亚洲深深色噜噜狠狠爱网站| 99在线精品视频观看免费|