本文是作者本科的实训作业,底层硬件是同组小伙伴所做,本人主要负责上位机和APP,会在本账号上发布上位机和APP的讲解和工程文件,供大家参考。
本设计主要需要两块CC2530单片机、蓝牙模块、WiFi模块、水质传感器、浊度传感器、安卓手机、无线路由器以及PC机等设备,如图所示。
整个系统描述如下:
水质传感器和其中一块单片机相连,浊度传感器和另一块单片机相连,两块单片机都各自连接了光照、温度、湿度传感器,单片机和安卓手机之间通过WiFi或蓝牙相连,安卓手机和电脑之间则借助无线路由器进行无线连接。
单片机以固定的频率采集四个传感器的信息,然后将采集的信息加上帧头、帧尾、校验等内容,封装成一个数据帧,通过WiFi或蓝牙的方式将其发送给安卓手机。
安卓手机端软件接收到单片机发送来的数据后,对数据帧中包含的数据进行识别、校验和提取,得到各个传感器的信息,显示在手机软件界面上,同时对传感器的信息进行再次封装,通过TCP或UDP协议发送给PC上位机。
PC上位机接收到安卓手机发送来的数据之后,对数据帧中包含的数据进行识别、校验和提取,得到各个传感器的信息以及手机的ID号,然后根据ID号将信息分类显示在上位机界面上。
APP所需要的模块如下:android.bluetooth包(蓝牙API都在这),socket通信(在与底层硬件连接时,app为服务端;与上位机连接时为客户端),其他UI组件(画图、显示数据这些)
系统关键函数如下:
1.蓝牙配对
private void bluetoothStart(NetConnection net) {
//建立蓝牙连接
final BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (!bluetoothAdapter.isEnabled()) {
bluetoothAdapter.enable();
}
Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();
String dstDeviceName = net.getBluetoothDeviceName();
BluetoothDevice dstDevice = null;
for (BluetoothDevice device : pairedDevices) {
if (device.getName().trim().equals(dstDeviceName.trim())) {
dstDevice = device;
break;
}