资源预览内容
第1页 / 共20页
第2页 / 共20页
第3页 / 共20页
第4页 / 共20页
第5页 / 共20页
第6页 / 共20页
第7页 / 共20页
第8页 / 共20页
第9页 / 共20页
第10页 / 共20页
亲,该文档总共20页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
智能家居开发与设计 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这里就不贴照片了,使用其他型号的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时,我们需要上报当前的设备状态,即小夜灯的开关,当前温度和当前湿度,示例帧如下所示: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 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 = 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() GetData();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(ftTemperature); 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_data4 = 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();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) analogWrite(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) /收到控制小夜灯命令
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号