项目背景
随着科技的飞速发展,智能家居逐渐成为现代生活的重要组成部分。智能家居系统通过物联网、人工智能等技术,实现了对家居环境的智能化控制,为人们的生活带来了极大的便利。2022年发布的义务教育信息科技新课程标准强调培养学生的信息意识、计算思维、数字化学习与创新能力以及信息社会责任。2024年教育部办公厅发布《关于加强中小学人工智能教育的通知》,进一步推动了人工智能教育在中小学的普及。在此背景下,将智能家居与信息科技教学相结合,不仅能够激发学生的学习兴趣,还能培养学生的跨学科思维和创新能力。
项目来源
智能家居作为现代科技的典型应用,融合了多种先进技术,涵盖了多学科知识领域。将其引入中小学信息科技教学,能够使学生直观地感受信息技术在生活中的应用,促进信息技术与数学、物理、艺术、科学等学科的深度融合,培养学生的综合素养和跨学科解决问题的能力。因此,结合跨学科主题“智能家居”,设计了“行空板K10智能家居控制系统”项目。
项目原理
本项目基于物联网架构,通过行空板K10实现家居设备智能控制。行空板K10直接驱动控制130风扇模块和LED灯、k10内置的扬声器喇叭(播放音频),通过K10自带语音识别功能接收语音指令(开关灯和风扇、查询天气、播放音乐),物联网平台siot v2用于接收远程终端(web端)的控制指令。项目中还利用行空板K10的屏幕实时显示当前时间、温度、光线强度,增强智能家居控制的体验性和趣味性。
步骤1 根据项目主题确定功能
1.系统实时显示时间
2.实时显示家居环境如家里的温湿度、环境光强度等;
3.语音识别控制家居设备:LED、风扇、行空板k10内置的扬声器喇叭(播放音频);
4.实时查询天气情况:本地的天气阴晴、最低温度、最高温度
步骤2 选择硬件设备
主控器:行空板K10(一块)
传感器:行空板K10自带的语音识别模块、温湿度传感器、数字环境光传感器、麦克风传感器;
执行器:Gravity: 130 直流电机、数字Red LED模块
其他组件:连接线、TF卡、局域网内部署siot服务器1台

步骤3 硬件组装与基础编程
1.硬件连线及系统运行界面

2.mind+编程界面截图(主要包括程序初始化、语音识别与控制、物联网Mqtt控制指令发送与接受)


/*!
* MindPlus
* esp32s3bit
*
*/
#include "asr.h"
#include <DFRobot_Iot.h>
#include "unihiker_k10.h"
#include <mPython_Weather.h>
#include <MPython_NtpTime.h>
// 动态变量
String mind_s_weather, mind_s_temp_1, mind_s_temp_2, mind_s_text;
// 函数声明
void obloqMqttEventT4sebh(String& message);
void DF_ChuShiHua();
void DF_WuLianWangYuYinKongZhiCeShi();
void onButtonAPressed();
void DF_K10NaZhiRGBDengShanShuo();
// 静态常量
const MsgHandleCb msgHandles[5] = {NULL,obloqMqttEventT4sebh,NULL,NULL,NULL};
const String topics[5] = {"siot/001","siot/002","","",""};
// 创建对象
DFRobot_Iot myIot;
UNIHIKER_K10 k10;
ASR asr;
uint8_t screen_dir=2;
mPython_Weather myWeather;
MPython_NtpTime ntptime;
AHT20 aht20;
Music music;
// 主程序开始
void setup() {
myIot.setMqttCallback(msgHandles);
k10.begin();
asr.setAsrSpeed(0);
k10.initScreen(screen_dir);
k10.creatCanvas();
asr.asrInit(CONTINUOUS, CN_MODE, 6000);
while(asr._asrState == 0){delay(100);}
k10.initSDFile();
k10.buttonA->setPressedCallback(onButtonAPressed);
DF_ChuShiHua();
}
void loop() {
if ((k10.readALS()<100)) {
digitalWrite(P0, HIGH);
delay(3000);
digitalWrite(P0, LOW);
}
DF_WuLianWangYuYinKongZhiCeShi();
}
// 自定义函数
void DF_ChuShiHua() {
k10.setScreenBackground(0x33FFFF);
k10.canvas->canvasText("智能家居监控", 46, 5, 0x0000FF, k10.canvas->eCNAndENFont24, 50, true);
k10.canvas->updateCanvas();
k10.rgb->brightness(round(9));
k10.rgb->write(-1, 0x000000);
myIot.wifiConnect("zlwxxrobot", "123456789");
while (!myIot.wifiStatus()) {}
DF_K10NaZhiRGBDengShanShuo();
myWeather.init("server.mindplus.top", "31982666", "E6MtBcxQ");
ntptime.setNtpTime(ntptime.UTCEast8_t, "edu.ntp.org.cn");
k10.canvas->canvasText(ntptime.getDate(), 2, 0x000000);
k10.canvas->canvasText(myIot.getWiFiLocalIP(), 13, 0x000000);
k10.canvas->updateCanvas();
delay(1000);
myIot.init("192.168.10.203","siot","3466242875331742","dfrobot", topics, 1883);
myIot.connect();
while (!myIot.connected()) {}
DF_K10NaZhiRGBDengShanShuo();
asr.addASRCommand(0+1, "kai deng");
asr.addASRCommand(1+1, "guan deng");
asr.addASRCommand(2+1, "da kai feng shan");
asr.addASRCommand(3+1, "guan bi feng shan");
asr.addASRCommand(4+1, "bo fang yin yue");
asr.addASRCommand(5+1, "tian qi");
pinMode(P0, OUTPUT);
pinMode(P1, OUTPUT);
}
void DF_WuLianWangYuYinKongZhiCeShi() {
k10.canvas->canvasText(ntptime.getTime(), 3, 0x000000);
k10.canvas->canvasText((String("温 度:") + String(aht20.getData(AHT20::eAHT20TempC))), 4, 0x000000);
k10.canvas->canvasText((String("环境光强度:") + String(k10.readALS())), 5, 0x000000);
if (asr.isWakeUp()) {
k10.canvas->canvasText("进入语音识别状态。请说出控制命令词", 5, 126, 0xFF0000, k10.canvas->eCNAndENFont16, 50, true);
}
else {
k10.canvas->canvasText("进入休眠状态。请说唤醒词“你好小行”", 5, 126, 0xFF0000, k10.canvas->eCNAndENFont16, 50, true);
}
k10.canvas->updateCanvas();
if (asr.isDetectCmdID(0+1)) {
myIot.publish(topic_1, "turn on the light");
}
if (asr.isDetectCmdID(1+1)) {
myIot.publish(topic_1, "turn off the light");
}
if (asr.isDetectCmdID(2+1)) {
myIot.publish(topic_1, "turn on the fan");
}
if (asr.isDetectCmdID(3+1)) {
myIot.publish(topic_1, "turn off the fan");
}
if (asr.isDetectCmdID(4+1)) {
music.playTFCardAudio("S:/1.wav");
}
if (asr.isDetectCmdID(5+1)) {
mind_s_weather = (String("扬州今天天气:") + String(myWeather.getWeather("weather", "101190601")));
mind_s_temp_1 = (String("最低温度:") + String((String(myWeather.getWeather("temperaturLow", "101190601")) + String("度"))));
mind_s_temp_2 = (String("最高温度:") + String((String(myWeather.getWeather("temperaturHigh", "101190601")) + String("度"))));
mind_s_text = (String(mind_s_weather) + String((String(mind_s_temp_1) + String(mind_s_temp_2))));
asr.speak(mind_s_text);
k10.canvas->canvasText(mind_s_weather, 7, 0x000000);
k10.canvas->canvasText(mind_s_temp_1, 8, 0x000000);
k10.canvas->canvasText(mind_s_temp_2, 9, 0x000000);
k10.canvas->updateCanvas();
delay(6000);
}
}
void DF_K10NaZhiRGBDengShanShuo() {
k10.rgb->write(0, 0xFF0000);
delay(200);
k10.rgb->write(0, 0x000000);
delay(200);
}
// 事件回调函数
void obloqMqttEventT4sebh(String& message) {
if ((message=="turn on the light")) {
asr.speak("灯已打开");
digitalWrite(P0, HIGH);
}
if ((message=="turn off the light")) {
asr.speak("灯已关闭");
digitalWrite(P0, LOW);
}
if ((message=="turn on the fan")) {
asr.speak("风扇已打开");
digitalWrite(P1, HIGH);
}
if ((message=="turn off the fan")) {
asr.speak("风扇已关闭");
digitalWrite(P1, LOW);
}
}
void onButtonAPressed() {
music.stopPlayAudio();
}

返回首页
回到顶部



评论