电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
Arduino ESP32 Blinker 毕业设计 课程设计 DIY 001——基于ESP32的智能家居自动与远程控制系统的设计与制作
分 享
扫描二维码分享
Arduino ESP32 Blinker 毕业设计 课程设计 DIY 001——基于ESP32的智能家居自动与远程控制系统的设计与制作
arduino
esp32
blinker
xbk_559291
关注
发布时间: 2022-01-05
丨
阅读: 3792
#一、硬件材料: 1、1\*ESP32开发板 2、1\*红外传感器模块 3、1\*灯带 4、1\*DHT11温湿度模块 5、1\*MQ-2烟雾模块 6、1\*5V继电器 7、1\*风扇 8、1\*蜂鸣器模块 9、1\*超声波模块 10、1\*红色led 11、1\*舵机 12、其他可能需要的元器件(面包板、电阻、电容、导线/杜邦线等) 13、可能需要的工具(万用表、电烙铁及焊锡、剪钳/剪刀、剥线钳/打火机、普通胶布/电工胶布/胶枪等) # 二、程序功能: 第1步:ESP32开发板通过红外传感器模块,检测到有人时自动打开灯带。 第2步:ESP32开发板通过DHT11温湿度模块,检测温度和湿度,当温度超过x(暂定x=26)度时,打开蜂鸣器模块报警。 第3步:ESP32开发板通过MQ-2烟雾模块,检测烟雾气体,当浓度超过x(暂定x=600)时,通过5V继电器打开风扇进行排风。 第4步:ESP32开发板通过超声波模块,检测距离,当距离小于x(暂定x=20)厘米时,舵机转动90度,自动开门。 第5步:通过手机APP,可以查看烟雾的浓度。 第6步:通过手机APP,可以查看温度和湿度。 第7步:通过手机APP,可以远程调节灯带的颜色。 第8步:通过手机APP,调节成手动控制模式,可以远程控制灯带的打开和关闭。 第9步:通过手机APP,调节成手动控制模式,可以远程控制风扇的打开和关闭。 第10步:通过手机APP,调节成手动控制模式,可以远程控制舵机的转动。 第11步:当手动控制模式时,红灯点亮。 其他未有写明的地方,以需求出发点、示意图片/视频为参考。 # 三、接线图: ![](https://cf04.ickimg.com/bbsimages/202112/d6df7ca7fd7220740610e5037d621d93.png) # 四、Arduino关键代码: ## 4.1 传感器初始化代码: ```cpp Serial.begin(9600); // 初始化串口,波特率为9600 pixel.begin(); //初始化灯带 pixel.setPin(ledPin); //设置灯带引脚 pixel.updateLength(ledNumber); //设置led数量 pixel.updateType(NEO_GRB + NEO_KHZ800); //设置灯带类型 pixel.clear(); //关闭所有灯 pixel.show(); //显示灯带 pinMode(infraredPin, INPUT_PULLUP); //初始化红外传感器 pinMode(buzzerPin, OUTPUT); //初始化蜂鸣器 //digitalWrite(buzzerPin, buzzerOff); //上电关闭蜂鸣器 pinMode(fanPin, OUTPUT); //初始化风扇 digitalWrite(fanPin, fanOff); //上电关闭风扇 ultra.attach(ultrasonicTrigPin, ultrasonicEchoPin); //初始化超声波模块 myservo.attach(servoPin); //初始化舵机 myservo.write(0); //上电关门 pinMode(redLedPin, OUTPUT); digitalWrite(redLedPin, LOW); WiFi.begin(ssid, pswd); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } BLINKER_DEBUG.stream(Serial); //设置blinker调试打印串口 Blinker.begin(auth, ssid, pswd); //连接wifi buttonDoorOn.attach(doorOnCallback); buttonDoorOff.attach(doorOffCallback); buttonLedOn.attach(ledOnCallback); buttonLedOff.attach(ledOffCallback); buttonFanOn.attach(fanOnCallback); buttonFanOff.attach(fanOffCallback); buttonManual.attach(manualCallback); buttonAutomatic.attach(automaticCallback); buttonUpdate.attach(updateCallback); rgb.attach(rgbCallback); Blinker.attachHeartbeat(updateSensorData); Serial.println("\r\n\r\n\r\n"); Serial.println("程序初始化完成"); ``` ## 4.2 数据上传APP代码: ```cpp static unsigned long nowTime = 0; if (millis() - nowTime > 1000) { infraredCheckState = (!digitalRead(infraredPin)); //红外检测是否有人 DHT11.read(dht11Pin); //读取温湿度 humidityValue = DHT11.humidity; temperatureValue = DHT11.temperature; smogValue = analogRead(smogPin); //读取烟雾值 distance = ultra.rangeMeasure(); //得到前面障碍物的距离cm Serial.print("红外:"); Serial.print(infraredCheckState); Serial.print("\t温度:"); Serial.print(temperatureValue); Serial.print("\t湿度:"); Serial.print(humidityValue); Serial.print("\t烟雾:"); Serial.print(smogValue); Serial.print("\t距离:"); Serial.println(distance); if (controlMode == false) { //如果是自动控制 digitalWrite(redLedPin, LOW); if (infraredCheckState == true) { //如果有人就开灯 for (int i = 0; i < ledNumber; i++) { pixel.setPixelColor(i, pixel.Color(ledRedValue, ledGreenValue, ledBlueValue)); //设置LED灯颜色 } pixel.setBrightness(ledBrightness); //设置LED灯亮度 pixel.show(); Serial.println("自动开灯"); } else { //否则没有人就关灯 pixel.clear(); pixel.show(); Serial.println("自动关灯"); } if (temperatureValue > temperatureTriggerValue) { //如果温度大于设定的值就打开蜂鸣器 digitalWrite(buzzerPin, buzzerOn); Serial.println("自动打开蜂鸣器"); } else { //否则温度低于设定的值就关闭蜂鸣器 digitalWrite(buzzerPin, buzzerOff); Serial.println("自动关闭蜂鸣器"); } if (smogValue > smogTriggerValue) { //如果烟雾大于设定的值就打开风扇 digitalWrite(fanPin, fanOn); Serial.println("自动打开风扇"); } else { //否则烟雾低于设定的值就关闭风扇 digitalWrite(fanPin, fanOff); Serial.println("自动关闭风扇"); } if (distance < distanceTriggerValue) { //如果距离小于设定的值就开门 myservo.write(90); Serial.println("自动开门"); } else { //否则距离大于设定的值就关门 myservo.write(0); Serial.println("自动关灯"); } } else { digitalWrite(redLedPin, HIGH); } nowTime = millis(); } ``` ## 4.3 APP数据下发代码(部分——led颜色控制): ```cpp Serial.print("led颜色为:"); Serial.print(r_value); Serial.print("\t"); Serial.print(g_value); Serial.print("\t"); Serial.print(b_value); Serial.print("\t"); Serial.println(bright_value); ledRedValue = r_value; //LED的R ledGreenValue = g_value; //LED的G ledBlueValue = b_value; //LED的B ledBrightness = bright_value; //当前led的亮度 if (controlMode == true) { for (int i = 0; i < ledNumber; i++) { pixel.setPixelColor(i, pixel.Color(ledRedValue, ledGreenValue, ledBlueValue)); //设置LED灯颜色 } pixel.setBrightness(ledBrightness); //设置LED灯亮度 pixel.show(); } ``` # 五、效果演示: ## 5.1 Blinker APP手机界面: ![](https://cf04.ickimg.com/bbsimages/202112/f25e9251715ea6ca9543dec4a8d996ce.jpg) ## 5.2 视频链接: https://www.bilibili.com/video/BV1WF411B75K?share_source=copy_web
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
1
)
xbk_559291
关注
评论
(0)
登录后可评论,请
登录
或
注册
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交