ZigBee的特点:近距离、低复杂度、自组织、低功耗、低数据速率、低成本。主要适合用于自动控制和远程控制领域,可以嵌入各种设备。
ZigBee的技术优势
①低功耗。在低耗电待机模式下,2 节5 号干电池可支持1个节点工作6~24个月,甚至更长。这是Zigbee的突出优势。相比较,
蓝牙能工作数周、WiFi可工作数小时。
现在,TI公司和德国的Micropelt公司共同推出新能源的Zigbee节点。该节点采用Micropelt公司的热电发电机给TI公司的Zigbee提供电源。
②低成本。通过大幅简化协议(不到蓝牙的1/10) ,降低了对通信控制器的要求,按预测分析,以8051的8位微控制器测算,全功能的主节点需要32KB代码,子功能节点少至4KB代码,而且Zigbee免协议专利费。每块芯片的价格大约为2 美元。
③ 低速率。Zigbee工作在20~250 kbps的较低速率,分别提供250 kbps(2.4GHz)、40kbps (915 MHz)和20kbps(868 MHz) 的原始数据吞吐率,满足低速率传输数据的应用需求。
④近距离。传输范围一般介于10~100 m 之间,在增加RF 发射功率后,亦可增加到1~3 km。这指的是相邻节点间的距离。如果通过路由和节点间通信的接力,传输距离将可以更远。
⑤短时延。Zigbee 的响应速度较快,一般从睡眠转入工作状态只需15 ms ,节点连接进入网络只需30 ms ,进一步节省了电能。相比较,蓝牙需要3~10 s、WiFi 需要3 s。
⑥高容量。Zigbee 可采用星状、片状和网状网络结构,由一个主节点管理若干子节点,最多一个主节点可管理254 个子节点;同时主节点还可由上一层网络节点管理,最多可组成65000 个节点的大网。
⑦高安全。Zigbee 提供了三级安全模式,包括无安全设定、使用接入控制清单(ACL) 防止非法获取数据以及采用高级加密标准(AES 128) 的对称密码,以灵活确定其安全属性。
⑧免执照频段。采用直接序列扩频在工业科学医疗( ISM) 频段,2. 4 GHz (全球) 、915 MHz(美国) 和868 MHz(欧洲) 。
路由器节点采集数据------>协调器节点
协调器节点------->路由器节点各种控制命令
传感器将各种物理量转化为计算机可以处理的数字量
上位机下位机:上位机是指人可以直接发出操控命令的计算机,一般是PC,屏幕上显示各种信号变化(液压,水位,温度等)
下位机是直接控制设备获取设备状况的计算机,一般是PLC/单片机之类的。
上位机发出的命令首先给下位机,下位机再根据此命令解释成相应时序信号直接控制相应设备。
由于 ZigBee 近距离、低复杂度、自组织、低功耗、低数据速率、低成本等优点符合家庭物联网应用要求的低成本,高安全性,较大的组网规模和较低的功耗要求。因此,市面上已有的物联网设备端更多的选用了 ZigBee 技术。但是目前市面上的ZigBee以自有协议较多,不能有效的实现互联互通,一般的手机没有配置ZigBee模块,所以不能与手机直接连接。因此我们加入了WiFi模块,来实现与手机移动端的连接。
老师建议是让我们租用一个云端服务器,但是贵啊,且技术渣渣,所以我们采用少量用户数据本地保存的方法,代码如下:
package com.example.ble;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import android.content.Context;
import android.os.Environment;
import android.util.Log;
public class manager {
private final static String DIR_NAME = "*****";
private final static String FILE_NAME = "*********";
static String dir_path = Environment.getExternalStorageDirectory()
.getAbsolutePath() + File.separator + DIR_NAME;
static File file = new File(dir_path);
public static void write(Context context, byte[] b, boolean append)
throws IOException {
if (!file.exists())
file.mkdir();
file = new File(dir_path + File.separator + FILE_NAME);
FileOutputStream fos = new FileOutputStream(file, append);
fos.write(b);
fos.close();
}
}