0°

(二十六)msp430进阶:XBee S2(ZigBee)与MSP-EXP430G2 TI Launchpad连接

介绍

(二十六)msp430进阶:XBee S2(ZigBee)与MSP-EXP430G2 TI Launchpad连接

XBee S2模块

 

XBee  (ZigBee) 无线电基于  IEEE 802.15.4  (定义低速率无线个域网(LR-WPAN)的操作的技术标准)标准,它被设计用于点对点等无线通信。

ZigBee  是基于IEEE 802.15.4的规范,用于高级通信协议,用于创建   具有低功率数字无线电的个人局域网

以下是XBee无线电设备的主要功能,

  • 它们工作在2.4 GHz(非许可无线电频段)无线电频率上。
  • 低数据速率(≈250Kbps)。
  • 低功耗(1mW,6mW,250mW等)。
  • 短距离无线通信(90米,750米,1英里等)。

因此,它们用于家庭自动化,无线传感器网络,工业控制,医疗数据收集,楼宇自动化等。 

电路连接图

(二十六)msp430进阶:XBee S2(ZigBee)与MSP-EXP430G2 TI Launchpad连接

XBee电路图连接

 

(二十六)msp430进阶:XBee S2(ZigBee)与MSP-EXP430G2 TI Launchpad连接

XBee路由器(或终端设备)图

 

在这里,我们已将XBee S2连接到MSP-EXP430G2。此API在API模式下配置为协调器,API启用设置为1(您也可以将API启用设置为2,它将使用转义字符和数据)。

协调器接收的数据显示在16×2 LCD上,该LCD与MSP-EXP430G2连接。

另一个XBee设备在API模式下配置为路由器,API启用设置为1(您也可以将API启用设置为2,它将使用转义字符和数据)。对两个XBee设备使用相同的API启用设置。(您也可以在API模式下将此设备配置为终端设备)。

开关连接到路由器(或终端设备)XBee模块的引脚DIO1(模块上的引脚19),引脚配置为数字输入。

电位器给出1.2V并接地到其固定端子,电位器的可变端子连接到路由器(或终端设备)XBee模块的引脚AD2(模块的引脚18),并且引脚配置为模拟输入。

IO采样(IR)速率可以根据应用的要求设置,例如100毫秒。

所有配置和设置均使用Digi International提供的X-CTU软件完成。

路由器(或终端设备)XBee模块根据IR设置定期发送电位计和开关的IO样本。协调器接收此数据,并在MSP-EXP430G2 TI Launchpad中上传Sketch,解析收到的数据并从中提取IO样本信息。

它显示在16×2 LCD上,因此可以验证工作情况。

 

在这里,我们将使用XBee库。虽然该库适用于Arduino,但它也适用于MSP-EXP430G2 TI Launchpad

点击下载库:

限制以下用户组阅读此隐藏内容

请先登录

您的用户组:

提取库并将其添加到Energia IDE的库文件夹路径中。

有关如何将自定义库添加到Enegia IDE并使用其中的示例的信息,请参阅    “基础知识”部分中的“ 将库添加到Energia IDE ”。

在这里,我们通过修改作者给出的用于接收S2模块的IO样本的示例程序来创建。这些修改基本上取代了带LCD的串口进行调试,因为只有一个串口可用,并且在使用软件串口时无法使用。

 

程序

#include <XBee.h>
#include <LiquidCrystal.h>

/* Create object named lcd of the class LiquidCrystal */
LiquidCrystal lcd(10, 9, 8, 14, 13, 12, 11);  /* For 4-bit mode */

XBee xbee = XBee(); /* Create an object named xbee(any name of your choice) of the class XBee */

ZBRxIoSampleResponse ioSamples = ZBRxIoSampleResponse(); 
/* Create an object named ioSamples(any name of your choice) of the class ZBRxIoSampleResponse */

bool lcd_clear = 0;
bool xbee_sample = 1;

void setup() {
  Serial.begin(9600); /* Define baud rate for serial communication */
  xbee.setSerial(Serial); /* Define serial communication to be used for communication with xbee */
  lcd.begin(16,2);  /* Initialize 16x2 LCD */
  lcd.clear();  /* Clear the LCD */
  lcd.setCursor(0,0);  /* Set cursor to column 0 row 0 */
  lcd.print("XBee Demo"); /* Print data on display */
  delay(1000); 
  lcd.clear();
}

void loop() {
  bool analog, digital;
if(lcd_clear)
  {
    lcd.clear();
    lcd_clear = 0;
    xbee_sample = 1;
  }
if(xbee_sample)
  {
    lcd.setCursor(0,0);
    lcd.print("POT : ");
    lcd.setCursor(0,1);
    lcd.print("Switch : ");
    xbee_sample = 0;
  }
  xbee.readPacket(); /* Read until a packet is received or an error occurs */
if(xbee.getResponse().isAvailable()) /* True if response has been successfully parsed and is complete */
  {if(xbee.getResponse().getApiId()==ZB_IO_SAMPLE_RESPONSE) /* If response is of IO_Sample_response type *//* Get the IO Sample Response */
if (ioSamples.containsAnalog()) { /* If Analog samples present in the response */
        analog = 1;
      }else0;
      }
if (ioSamples.containsDigital()) { /* If Digital samples present in the response */
        digital = 1;
      }else0;
      }      
/* Loop for identifying the analog samples present in the received sample data and to print it */if(analog)
      {for (int i = 0; i <= 4; i++) { /* Only 4 Analog channels */if (ioSamples.isAnalogEnabled(i)) { /* Check Analog channel mask to see if the any pin is enabled for analog input sampling */
            lcd.setCursor(6,0);            
            lcd.print(ioSamples.getAnalog(i),DEC);
            lcd.print("   ");
          }
        }
      }else6,0);            
        lcd.print("No Data");
      }

余下程序:

限制以下用户组阅读此隐藏内容

请先登录

您的用户组:

完整程序下载

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
Arduino
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论