All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.rapplogic.xbee.examples.zigbee.ZNetApiAtExample Maven / Gradle / Ivy

/**
 * Copyright (c) 2008 Andrew Rapp. All rights reserved.
 *  
 * This file is part of XBee-API.
 *  
 * XBee-API is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *  
 * XBee-API is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *  
 * You should have received a copy of the GNU General Public License
 * along with XBee-API.  If not, see .
 */

package com.rapplogic.xbee.examples.zigbee;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

import com.rapplogic.xbee.api.AtCommand;
import com.rapplogic.xbee.api.AtCommandResponse;
import com.rapplogic.xbee.api.XBee;
import com.rapplogic.xbee.api.XBeeException;
import com.rapplogic.xbee.api.XBeeResponse;
import com.rapplogic.xbee.api.zigbee.AssociationStatus;
import com.rapplogic.xbee.util.ByteUtils;

/** 
 * This class contains AtCommand examples that are specific to ZNet radios
 * 
 * @author andrew
 *
 */
public class ZNetApiAtExample {

	private final static Logger log = Logger.getLogger(ZNetApiAtExample.class);
	
	private XBee xbee = new XBee();
	
	public ZNetApiAtExample() throws XBeeException {
		try {
			
			// replace with port and baud rate of your XBee
			xbee.open("COM6", 9600);	
			
			// get the 8 byte SH/SL address
			log.debug("SH is " + ByteUtils.toBase16(((AtCommandResponse)xbee.sendAtCommand(new AtCommand("SH"))).getValue()));
			log.debug("SL is " + ByteUtils.toBase16(((AtCommandResponse)xbee.sendAtCommand(new AtCommand("SL"))).getValue()));
			
			// uncomment to run
//			this.configureIOSamples(xbee);
//			this.associationStatus(xbee);
//			this.nodeDiscover(xbee);
//			this.configureCoordinator(xbee);
//			this.configureEndDevice(xbee);
		} finally {
			if (xbee != null && xbee.isConnected()) {
				xbee.close();		
			}
		}
	}

	private void associationStatus(XBee xbee) throws XBeeException {
		// get association status - success indicates it is associated to another XBee
		AtCommandResponse response = (AtCommandResponse) xbee.sendAtCommand(new AtCommand("AI"));
		log.debug("Association Status is " + AssociationStatus.get(response));		
	}
	
	private void configureEndDevice(XBee xbee) throws XBeeException {
				
		// basic end device configuration (assumes ZNet radio flashed with end device API firmware)
		XBeeResponse response = null;
		
		// reset to factory settings
		response = xbee.sendAtCommand(new AtCommand("RE"));
		log.debug("RE is " + response);

		// set PAN id to arbitrary value
		response = xbee.sendAtCommand(new AtCommand("ID", new int[] {0x1a, 0xaa}));
		log.debug("ID is " + response);
		
		// set NI -- can be any arbitrary sequence of chars
		response = xbee.sendAtCommand(new AtCommand("NI", new int[] {'E','N','D','_','D','E','V','I','C','E','_','2' }));
		log.debug("NI is " + response);

		// set API mode to 2.  factory setting is 1
		response = xbee.sendAtCommand(new AtCommand("AP", 2));
		log.debug("AP is " + response);			

		// save to settings to survive power cycle
		response = xbee.sendAtCommand(new AtCommand("WR"));
		log.debug("WR is " + response);			

		// software reset
		response = xbee.sendAtCommand(new AtCommand("FR"));
		log.debug("FR is " + response);	
	}
	
	private void configureCoordinator(XBee xbee) throws XBeeException {			
		// basic coordinator configuration (assumes ZNet radio flashed with COORDINATOR API firmware)
		XBeeResponse response = null;
		
		// reset to factory settings
		response = xbee.sendAtCommand(new AtCommand("RE"));
		log.debug("RE is " + response);

		// set PAN id to arbitrary value
		response = xbee.sendAtCommand(new AtCommand("ID", new int[] {0x1a, 0xaa}));
		log.debug("RE is " + response);
		
		// set NI
		response = xbee.sendAtCommand(new AtCommand("NI", new int[] {'C','O','O','R','D','I','N','A','T','O','R' }));
		log.debug("NI is " + response);

		// set API mode to 2.  factory setting is 1
		response = xbee.sendAtCommand(new AtCommand("AP", 2));
		log.debug("AP is " + response);			

		// save to settings to survive power cycle
		response = xbee.sendAtCommand(new AtCommand("WR"));
		log.debug("WR is " + response);			

		// software reset
		response = xbee.sendAtCommand(new AtCommand("FR"));
		log.debug("FR is " + response);	
	}

	/**
	 * This assumes an end device that is already has the configureEndDevice configuration
	 * Does not save configuration! -- use WR if you want this configure to survive power on/off.
	 * 
	 * @param xbee
	 * @throws XBeeException
	 */
	private void configureIOSamples(XBee xbee) throws XBeeException {			
		// basic coordinator configuration (assumes ZNet radio flashed with COORDINATOR API firmware)
		XBeeResponse response = null;
		
		// set IR to 1 sample every 10 seconds.  Set to 0 to disable
		response = xbee.sendAtCommand(new AtCommand("IR", new int[] {0x27, 0x10}));
		log.debug("IR is " + response);

		// set pin 20 to monitor digital input
		response = xbee.sendAtCommand(new AtCommand("DO", 0x3));
		log.debug("DO is " + response);

		// set pin 19 to monitor analog input
		response = xbee.sendAtCommand(new AtCommand("D1", 0x2));
		log.debug("D1 is " + response);
		
		// set pin 18 to monitor analog input
		response = xbee.sendAtCommand(new AtCommand("D2", 0x2));
		log.debug("D2 is " + response);
		
		// set pin 16 to monitor digital input
		response = xbee.sendAtCommand(new AtCommand("D6", 0x3));
		log.debug("D6 is " + response);
		
		// optionally configure DH + DL; if set to zero (default), samples will be sent to coordinator
	}
	
	public static void main(String[] args) throws XBeeException {
		PropertyConfigurator.configure("log4j.properties");
		new ZNetApiAtExample();
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy