婉兮清扬

案上诗书杯中酒之快意人生

[实验] 第一个Sun SPOT应用

发表时间:2008-05-24 04:58:16
一、预备内容

首先,您需要安装JDKApache AntNetBeans以及Sun SPOT Manager。JDK 和Apache Ant都是使用Java语言进行应用开发的必备工具。你需要确保JDK和Ant的bin目录都在您的PATH环境变量里面。正确的安装JDK和Ant之后,您打开一个命令行窗口,应该 可以正确运行java、javac、ant命令。

更详细的安装和配置过程,请参考这个英语版的教程:http://www.sunstudentcourses.com/course/view.php?id=12

二、第一个Sun SPOT应用

下载源代码:SunSpotApplicationTemplate.zip 并解压缩。进入解压缩之后的文件夹。

(1) 检查连接到主机上的SPOT情况,可以使用如下命令:

ant info
ant slots

(2) 编译应用程序

ant jar-app

(3) 将应用程序部署到SPOT上

ant jar-deploy

(4) 运行部署到SPOT上的应用程序

ant run

我们看到,启动应用程序之后,左边第一个LED每3 秒左右闪烁一次红光。在主机屏幕上还能够找到“Hello, world!”这个字符串 -- 这是SPOT向主机发送的一个信息。

三、理解这个SPOT应用程序

package org.sunspotworld.demo;

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 java.io.*;
import javax.microedition.io.*;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class SunSpotApplication extends MIDlet {

/*
* SPOT中的虚拟机通过调用starApp方法来启动一个SPOT应用。
*/
protected void startApp() throws MIDletStateChangeException {

/*
* 标准输出为主机端
*/
System.out.println("Hello, world");

/*
* 监控SPOT是否通过USB连接到主机。如果是,获得从主机发送的命令。
*/
new BootloaderListener().start();

/*
* 获得自身的IEEE Mac地址
*/
IEEEAddress ourAddr = new IEEEAddress(Spot.getInstance().getRadioPolicyManager().getIEEEAddress());
System.out.println("Our radio address = " + ourAddr.asDottedHex());

/*
* 找到传感器板上的所有LED指示灯,用数组leds来表示
*/
ITriColorLED [] leds = EDemoBoard.getInstance().getLEDs();

/*
* 将第一个LED指示灯设置为亮度为100的红色
* 通常我们利用RGB来表示颜色,每个参数的数值范围在0到255之间。
*/
leds[0].setRGB(100,0,0);

/*
* 进入一个无限循环
*/
while (true) {

/*
* 点亮第一个LED指示灯(之前我们已经将其设置为亮度为100的红色)
*/
leds[0].setOn();

/*
* 等待1/4秒
*/
Utils.sleep(250);

/*
* 熄灭第一个LED指示灯
*/
leds[0].setOff();

/*
* 等待3 秒钟
*/
Utils.sleep(3000);
}
}

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
}
}

四、改进这个SPOT应用程序

现在,我们对这个应用程序进行一点改进。我们的目的是让第一、第二和第三个LED指示灯轮流点亮1/4秒,其颜色分别是全红,全绿和全蓝。完成一个循环过程之后,三个LED指示灯全部熄灭,等待3 秒钟,重新开始下一个循环。

修改过的应用程序片断如下:

ITriColorLED [] leds = EDemoBoard.getInstance().getLEDs();
leds[0].setRGB(255,0,0);
leds[1].setRGB(0,255,0);
leds[2].setRGB(0,0,255);

while (true) {
leds[0].setOn();
Utils.sleep(250);
leds[0].setOff();
leds[1].setOn();
Utils.sleep(250);
leds[1].setOff();
leds[2].setOn();
Utils.sleep(250);
leds[2].setOff();
Utils.sleep(3000);
}
我们重新编译、部署和运行这个应用程序:

ant jar-app
ant jar-deploy
ant run

你的第一个SPOT应用程序,就这么简单。我建议各位充分发挥想象力,看看能够用8 只LED做什么事情。
上一篇 下一篇

 
姓名:
评论:

请输入下面这首诗词的作者姓名。

白日依山尽,黄河入海流。
欲穷千里目,更上一层楼。

答案:

云与清风常拥有,
冰雪知音世难求。
击节纵歌相对笑,
案上诗书杯中酒。

蒋清野
2000.12.31 于 洛杉矶