应用案例
项目说明:
本项目基于PIC32MM Curiosity开发板开发智能家居温湿度计,并加上若干额外模块,如日历芯片模块,雨滴检测模块,气压模块,串口蓝牙透传模块等等,用于扩展该系统的日历计时,检测雨量密度,检测气压,与PC机进行串口蓝牙通信功能,PC机端使用QT5.9开发上位机程序,显示从开发板发过来的温度,湿度,气压,雨量数据,并可控制开发板的RGB灯的状态。
硬件介绍:
1.日历芯片模块DS3231,采用温度补偿晶振,比一般的DS1302芯片精度高得多,多用于电脑主板的日历芯片,I2C总线通信;
2.气压模块BMP280,常用的检测大气压的模块,I2C总线通信;
3.雨滴检测模块,ADC;
4.蓝牙无线串口HC05两个;
5.SPILCD彩屏,用于显示欢迎界面及各数据;
6.开发板使用充电宝的5V供电,与电脑没有任何物理连接。
7.DHT12模块:
硬件连接:
1.开发板使用模拟I2C总线与DS3231,BMP280连接,两个器件接的总线为同一组;
2.开发板使用ADC引脚连接雨滴传感器;
3.开发板使用模拟SPI引脚连接SPILCD彩屏;
4.开发板使用硬件串口连接HC05模块;
5.开发板使用一根GPIO连接DHT12模块;
6.蓝牙无线串口HC05两个,一个接到开发板的串口1,一个接到CH340模块,CH340模块接到电脑的USB接口上;
串口协议详细说明及代码:
串口协议类似于常见的TCP MODBUS协议,发送端和接收端以字节为单位,协议的格式可以完全由自己定义。要注意的是,DIY创客使用自己的协议给自己的板子使用协议是可以自由定义的,包括起始字节,数据字节,命令字节,结束字节等等,但是,如果是工业用的通信,则协议由各方协商好,必须遵守某种规则,个人或单位不得随意修改。
开发板端 - >电脑端串口数据协议格式:
开发板端(发送端):
buf2[0]=1,buf2[1]=temp,buf2[2]=humi;
电脑端(接收端):
void MainWindow::Timer_Update()
{
readComString=serial->readAll();
if(readComString!=0&&readComString.data()[13]==0x0d)
{
ui->PGB1->setValue(readComString.data()[1]);
ui->PGB2->setValue(readComString.data()[2]);
qs1.sprintf("%02d-%02d-%02d",readComString.data()[3],
readComString.data()[4],readComString.data()[5]);
qs2.sprintf("%02d:%02d:%02d",readComString.data()[6],
readComString.data()[7],readComString.data()[8]);
pres_int=readComString.data()[9]<<8|readComString.data()[10];
pres_flo=readComString.data()[11];
qs3.sprintf("%d.%2d帕",pres_int,pres_flo);
rain=readComString.data()[12];
qs4.sprintf("密度%04d",rain);
ui->LCDN1->display(qs1);
ui->LCDN2->display(qs2);
ui->TL7->setText(qs3);
ui->TL9->setText(qs4);
}
serial->flush();
}
电脑端 - >开发板端串口数据协议格式:
电脑端(发送端):
void MainWindow::on_HS2_valueChanged(int value)
{
qDebug()<
green=value;
qba1[0]=2;
qba1[1]=red*2;
qba1[2]=green*2;
qba1[3]=blue*2;
qba1[4]=0x0d;
serial->write(qba1.data());
}
开发板端(接收端):
UART1_ReadBuffer(buf1,10);
LED_RGB_Set(LED_RGB_LD3,buf1[1]*5,buf1[2]*5,buf1[3]*5);
QT程序截图(注:界面的日期和时间是开发板的日期和时间,并非电脑的系统日期时间):
详细代码与演示效果
请移步:基于PIC32MM Curiosity开发板开发智能家居温湿度计
全部0条评论
快来发表一下你的评论吧 !