項目說明:
本項目基于PIC32MM Curiosity開發(fā)板開發(fā)智能家居溫濕度計,并加上若干額外模塊,如日歷芯片模塊,雨滴檢測模塊,氣壓模塊,串口藍(lán)牙透傳模塊等等,用于擴(kuò)展該系統(tǒng)的日歷計時,檢測雨量密度,檢測氣壓,與PC機(jī)進(jìn)行串口藍(lán)牙通信功能,PC機(jī)端使用QT5.9開發(fā)上位機(jī)程序,顯示從開發(fā)板發(fā)過來的溫度,濕度,氣壓,雨量數(shù)據(jù),并可控制開發(fā)板的RGB燈的狀態(tài)。
硬件介紹:
1.日歷芯片模塊DS3231,采用溫度補(bǔ)償晶振,比一般的DS1302芯片精度高得多,多用于電腦主板的日歷芯片,I2C總線通信;
2.氣壓模塊BMP280,常用的檢測大氣壓的模塊,I2C總線通信;
3.雨滴檢測模塊,ADC;
4.藍(lán)牙無線串口HC05兩個;
5.SPILCD彩屏,用于顯示歡迎界面及各數(shù)據(jù);
6.開發(fā)板使用充電寶的5V供電,與電腦沒有任何物理連接。
7.DHT12模塊:
硬件連接:
1.開發(fā)板使用模擬I2C總線與DS3231,BMP280連接,兩個器件接的總線為同一組;
3.開發(fā)板使用模擬SPI引腳連接SPILCD彩屏;
4.開發(fā)板使用硬件串口連接HC05模塊;
5.開發(fā)板使用一根GPIO連接DHT12模塊;
6.藍(lán)牙無線串口HC05兩個,一個接到開發(fā)板的串口1,一個接到CH340模塊,CH340模塊接到電腦的USB接口上;
串口協(xié)議詳細(xì)說明及代碼:
串口協(xié)議類似于常見的TCP MODBUS協(xié)議,發(fā)送端和接收端以字節(jié)為單位,協(xié)議的格式可以完全由自己定義。要注意的是,DIY創(chuàng)客使用自己的協(xié)議給自己的板子使用協(xié)議是可以自由定義的,包括起始字節(jié),數(shù)據(jù)字節(jié),命令字節(jié),結(jié)束字節(jié)等等,但是,如果是工業(yè)用的通信,則協(xié)議由各方協(xié)商好,必須遵守某種規(guī)則,個人或單位不得隨意修改。
開發(fā)板端 - >電腦端串口數(shù)據(jù)協(xié)議格式:
開發(fā)板端(發(fā)送端):
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();
}
電腦端 - >開發(fā)板端串口數(shù)據(jù)協(xié)議格式:
電腦端(發(fā)送端):
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());
}
開發(fā)板端(接收端):
UART1_ReadBuffer(buf1,10);
LED_RGB_Set(LED_RGB_LD3,buf1[1]*5,buf1[2]*5,buf1[3]*5);
QT程序截圖(注:界面的日期和時間是開發(fā)板的日期和時間,并非電腦的系統(tǒng)日期時間):
詳細(xì)代碼與演示效果
請移步:基于PIC32MM Curiosity開發(fā)板開發(fā)智能家居溫濕度計
評論
查看更多