智能家居开发与设计 —基于氦氪的温湿度计开发.doc

上传人:marr****208 文档编号:133695916 上传时间:2020-05-29 格式:DOC 页数:20 大小:1.44MB
返回 下载 相关 举报
智能家居开发与设计 —基于氦氪的温湿度计开发.doc_第1页
第1页 / 共20页
智能家居开发与设计 —基于氦氪的温湿度计开发.doc_第2页
第2页 / 共20页
智能家居开发与设计 —基于氦氪的温湿度计开发.doc_第3页
第3页 / 共20页
智能家居开发与设计 —基于氦氪的温湿度计开发.doc_第4页
第4页 / 共20页
智能家居开发与设计 —基于氦氪的温湿度计开发.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《智能家居开发与设计 —基于氦氪的温湿度计开发.doc》由会员分享,可在线阅读,更多相关《智能家居开发与设计 —基于氦氪的温湿度计开发.doc(20页珍藏版)》请在金锄头文库上搜索。

1、智能家居开发与设计 02基于氦氪的温湿度计开发目录1. 作品介绍-第2页2. 准备材料-第3页3. 协议修改-第7页4. 代码编写-第9页5. APP演示-第19页6. 作品调试- -第21页上一篇教程我们介绍了氦氪通用演示产品的功能,本篇教程我们来做一个具体的作品:一个带小夜灯的温湿度计。只做温湿度计功能可能不是很实用,所以我们增加了一个LED灯,作为小夜灯来使用。作品功能:APP端:1.控制小夜灯的亮灭。2.显示当前的温度和湿度。设备端:1.按钮控制小夜灯的亮灭。所需硬件:1.氦氪WiFi模块氦氪WiFi模块的接线请参考文档氦氪模块硬件说明文档2.Arduino UNO这里就不贴照片了,使

2、用其他型号的Arduino板子也行,我自己用的是兼容Arduino UNO的板子。3.DHT22温湿度传感器4.RGB全彩LED5.按钮硬件接线说明:在氦氪通用演示产品的编辑页面修改通信协议:在编辑页面完成修改之后,我们得到的通信协议内容如下图所示:将氦氪WiFi模块与USB转串口模块连接,然后在电脑上用串口助手来模拟下该协议的数据收发。进入控制页面串口助手收到:48 16 02 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 62所以当我们的Arduino收到的有效数据(即valid_data数组里的数据)为02 00时,我们需要上

3、报当前的设备状态,即小夜灯的开关,当前温度和当前湿度,示例帧如下所示:48 16 01 01 01 00 02 11 34 00 00 00 00 00 00 00 00 00 00 00 00 A8在APP上点击小夜灯按键串口助手收到:48 16 02 01 02 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 65所以当我们的Arduino收到的有效数据(即valid_data数组里的数据)为02 01 01时,我们需要开小夜灯,然后再上报当前的设备状态,即小夜灯的开关,当前温度和当前湿度,示例帧如下所示:48 16 01 02 01 00

4、01 11 34 00 00 00 00 00 00 00 00 00 00 00 00 A8编写Arduino端的代码,代码如下:mw_shl_code=c,true#include#include#define DHTPIN 2#define DHTTYPE DHT22DHT dht(DHTPIN, DHTTYPE);u8 temp;u8 RecvBuffer20;u8 uLedStatus = 2;int buttonPin = 4;int buttonIsPressing = 0;int redLedPin = 9;int greenLedPin = 10;int blueLedPin

5、 = 11;float ftHumidity = 0.0;float ftTemperature = 0.0;void setup() Serial.begin(9600);pinMode(buttonPin, INPUT);pinMode(redLedPin, OUTPUT);pinMode(greenLedPin, OUTPUT);pinMode(blueLedPin, OUTPUT);dht.begin();HekrInit(SendChar);ledColor(0,0,0);delay(2000);getHumidityAndTemperature();void loop() GetD

6、ata();DataHandle();if(digitalRead(buttonPin) = LOW) delay(20); if(digitalRead(buttonPin) = LOW) if(buttonIsPressing = 0) if(uLedStatus = 2) ledColor(255,255,255); uLedStatus = 1; getHumidityAndTemperature(); valid_data0 = 1; valid_data1 = 0; valid_data2 = uLedStatus; valid_data3 = byte(int(ftTempera

7、ture); valid_data4 = byte(ftHumidity); for(int i=5; i=16; i+) valid_data= 0; HekrValidDataUpload(17); buttonIsPressing = 1; else ledColor(0,0,0); uLedStatus = 2; getHumidityAndTemperature(); valid_data0 = 1; valid_data1 = 0; valid_data2 = uLedStatus; valid_data3 = byte(int(ftTemperature); valid_data

8、4 = byte(ftHumidity); for(int i=5; i=16; i+) valid_data= 0; HekrValidDataUpload(17); buttonIsPressing = 1; if(digitalRead(buttonPin) = HIGH) delay(100); if(digitalRead(buttonPin) = HIGH) buttonIsPressing = 0; void getHumidityAndTemperature()float h = dht.readHumidity();float t = dht.readTemperature(

9、);if (isnan(h) | isnan(t) return;else ftHumidity = h; ftTemperature = t;void SendChar(unsigned char ch)Serial.write(ch);delay(2);void GetData(void)u8 i = 0;while(Serial.available() RecvBufferi+ = Serial.read(); if(RecvBuffer0 != 0x48) i = 0; delay(2);void ledColor(int red, int green, int blue) analo

10、gWrite(redLedPin,constrain(red,0,255); analogWrite(greenLedPin,constrain(green,0,255); analogWrite(blueLedPin,constrain(blue,0,255);void DataHandle(void)if(RecvBuffer0 = HEKR_FRAME_HEADER) temp = HekrRecvDataHandle(RecvBuffer); RecvBuffer0 = 0x00; if(ValidDataUpdate = temp) if(valid_data0 = 2) if(valid_data1 = 0) /收到状态查询命令 getHumidityAndTemperature(); valid_data0 = 1; valid_data1 = 0; valid_data2 = uLedStatus; valid_data3 = byte(int(ftTemperature); valid_data4 = byte(ftHumidity); for(int i=5; i=16; i+) valid_data= 0; HekrValidDataUpload(17); if(valid_data1 = 1) /收到控制小夜灯命令

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号