回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

【挑战二】智能家居控制系统 中等

头像 江志灏 2022.11.25 1445 8

项目制作背景

       智能家居是现在很多家庭都想有的智能设备。例如晚上房子外的门口灯没有关,都已经躺在床上了,又不想起床去关灯。家里楼层多,用电器也是没有关好,也不想每层的走一次去关。为解决这个事情。我设计一款可以用手机APP远程遥控的智能家居系统。

    

 

d5ad8d9d85c5dbd623953039579f413.jpg

制作步骤如下

1、在CAD中绘制好激光切割建模的模型图纸。

b2bec83ead9d8e9ae18daa0b8230fff.png

二、用激光切割机切割出来后进行外观组装。58e73294ebf546ef4adf4e35cf01540.jpg

三、用焊机和杜邦线焊接电机。

ff7e18dec2fbac260530c5da658b5c8.jpg

四,电路组装和调试。

cd48090adc3862683e65e919321c358.jpg

5、电路系统与外观结合组装。

c6f9a2859cb138700bf93d3e5011935.jpg

6、用Arduino编写程序进行电路测试。

c457f87a2dfe09beae0c6029eb60ca6.png

7、基本电路测试完成后,继续完成电路的组装,直至全部电路完成。

ff1bfad6d0bfc6e808ab799e8d37904.jpg

8、用Mind+编写人工智能哈士奇人工智能摄像头人脸识别,及语音控制和灯光控制程序。

e34ebbb40ea4c1110e02d194f856aa5.png

9、用Arduino编写esp8266主板物联网程序。

f319f2ffbacfc37749038de0ed9fbd4.png

10用巴法云平台获取智能家居获取的温度,湿度,光照度等数据。

image.png

11、获取周围环境光及温度的数据。

image.png

12、用APP Inventor 工具编写手机远程控制界面,可以实现远程遥控功能。

79a1deb239c24ac18f390d82ded88cd.png

下面看最终展示效果。

作品使用材料清单。

1、esp8266主板2个。

2、arduino主板1个。

3、OLDE显示屏1个。

4、60灯灯带1条。

5、人工智能哈士奇摄像头1个。

6、语音播放模块1个。

7、喇叭模块1个。

8、舵机模块1个。

9、8路继电器模块1个。

10、电机3个。

11、光线传感器1个。

12、温湿度传感器1个。

13、OLDE灯两个。

14、电源2个。

15、杜邦线若干。

16激光切割木板若干。

13、下面是激光切割图纸和编程代码。

代码

#define MAX_PACKETSIZE 512
#define KEEPALIVEATIME 30*1000
WiFiClient TCPclient;
String TcpClient_Buff = "";
unsigned int TcpClient_BuffIndex = 0;
unsigned long TcpClient_preTick = 0;
unsigned long preHeartTick = 0;
unsigned long preTCPStartTick = 0;
bool preTCPConnected = false;
bool subFlag = false;
void doWiFiTick();
void doTCPClientTick();
void sendtoTCPServer(String p);
void subTopic(String topic){
  String tcpTemp="";
  tcpTemp = "cmd=1&uid="+UID+"&topic="+topic+"\r\n";
  sendtoTCPServer(tcpTemp);
  tcpTemp="";
  Serial.print("sub topic:");Serial.println(topic);
  }
void doWiFiTick(){
 static bool taskStarted = false;
 static uint32_t lastWiFiCheckTick = 0;
 if ( WiFi.status() != WL_CONNECTED ) {
   if (millis() - lastWiFiCheckTick > 1000) {
     lastWiFiCheckTick = millis();
  }
 }
 else {
   if (taskStarted == false) {
     taskStarted = true;
     Serial.print("Get IP Address: ");
      Serial.println(WiFi.localIP());
      startTCPClient();
    }
  }
 }
void sendtoTCPServer(String p){
  if (!TCPclient.connected())
  {
     Serial.println("Client is not readly");
      return;
   }
   TCPclient.print(p);
  }
void startTCPClient(){
 if(TCPclient.connect(TCP_SERVER_ADDR, atoi(TCP_SERVER_PORT))){
   Serial.print("Connected to server:");
   Serial.println(TCP_SERVER_ADDR);
   subFlag = true;
   preHeartTick = millis();
   TCPclient.setNoDelay(true);
}
else{
  Serial.print("Failed connected to server:");
  Serial.println(TCP_SERVER_ADDR);
  TCPclient.stop();
  preTCPConnected = false;
 }
 preTCPStartTick = millis();
 }

#include <DHT.h>
#include <SimpleTimer.h>

#include <U8g2lib.h>
#include <Wire.h>

String T;
String S;
String GX;
DHT dht12(12, 11);
SimpleTimer timer;
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);

void subTopicCenter(){
 if(subFlag == true){
  subFlag = false;

    subTopic("lde2");

 }
}

  void doTCPClientTick(){
  if(WiFi.status() != WL_CONNECTED) return;
  if (!TCPclient.connected()) {
  if(preTCPConnected == true){
    preTCPConnected = false;
   preTCPStartTick = millis();
   Serial.println();
   Serial.println("TCP Client disconnected.");
  TCPclient.stop();
 }
else if(millis() - preTCPStartTick > 1*1000)
  startTCPClient();
}
else
{
 if (TCPclient.available()) {
   char c =TCPclient.read();
   TcpClient_Buff +=c;
  TcpClient_BuffIndex++;
  TcpClient_preTick = millis();
 if(TcpClient_BuffIndex>=MAX_PACKETSIZE - 1){
   TcpClient_BuffIndex = MAX_PACKETSIZE-2;
   TcpClient_preTick = TcpClient_preTick - 200;
 }
  preHeartTick = millis();
}
if(millis() - preHeartTick >= KEEPALIVEATIME){
  preHeartTick = millis();
  Serial.println("--Keep alive:");
  sendtoTCPServer("ping\r\n");
 }
 }
 if((TcpClient_Buff.length() >= 1) && (millis() - TcpClient_preTick>=200))
 {
 TCPclient.flush();
  TcpClient_Buff.trim();
   String topic = "";
   String msg = "";
if(TcpClient_Buff.length() > 15){
  int topicIndex = TcpClient_Buff.indexOf("&topic=")+7;
  int msgIndex = TcpClient_Buff.indexOf("&msg=");
  topic = TcpClient_Buff.substring(topicIndex,msgIndex);
  msg = TcpClient_Buff.substring(msgIndex+5);
}
if (msg == "9") {
    digitalWrite(13,HIGH);

  }
  if (msg == "10") {
    digitalWrite(13,LOW);

  }
 msg = "";
 topic = "";
TcpClient_Buff="";
TcpClient_BuffIndex = 0;
}
}

void publishMsg(String topic,String msg){
 String tcpTemp="";
  tcpTemp = "cmd=2&uid="+UID+"&topic="+topic+"&msg="+msg+"\r\n";
  sendtoTCPServer(tcpTemp);
  tcpTemp="";
  Serial.println("A message has been published");
  }

void Simple_timer_1() {
  T = String(dht12.readTemperature());
  publishMsg("led1", T);
}

void Simple_timer_3() {
  S = String(dht12.readHumidity());
  publishMsg("led3", S);
}

void Simple_timer_2() {
  if (GX > "600") {
    digitalWrite(13,HIGH);

  } else {
    digitalWrite(13,LOW);

  }
}

void page1() {
  u8g2.setFont(u8g2_font_timR10_tf);
  u8g2.setFontPosTop();
  u8g2.setCursor(5,10);
  u8g2.print("wendu:");
  u8g2.setCursor(50,10);
  u8g2.print(T);
  u8g2.setCursor(5,30);
  u8g2.print("wendu:");
  u8g2.setCursor(50,30);
  u8g2.print(S);
  u8g2.setCursor(5,50);
  u8g2.print("gxzhi:");
  u8g2.setCursor(50,50);
  u8g2.print(GX);
}

void Simple_timer_4() {
  GX = String(analogRead(A0));
  publishMsg("gx", GX);
}

void setup(){
  WiFi.begin("TP-LINK_6D5C", "15814598472");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("Local IP:");
  Serial.print(WiFi.localIP());

  T = "";
  S = "";
  GX = "";
  pinMode(13, OUTPUT);
   dht12.begin();
  timer.setInterval(1000L, Simple_timer_1);

  timer.setInterval(1000L, Simple_timer_3);

  u8g2.setI2CAddress(0x3C*2);
  u8g2.begin();
  timer.setInterval(1000L, Simple_timer_2);

  u8g2.enableUTF8Print();

  pinMode(A0, INPUT);
  timer.setInterval(1000L, Simple_timer_4);

}

void loop(){
    doWiFiTick();

  doTCPClientTick();
  subTopicCenter();


  u8g2.firstPage();
  do
  {
    page1();
  }while(u8g2.nextPage());


  timer.run();

}

评论

user-avatar
  • Galaxys

    Galaxys2024.12.09

    作者大大,能给一下原码吗

    0
    • 0L6t0KVTVzIZ

      0L6t0KVTVzIZ2024.10.25

      6

      0
      • 罗罗罗

        罗罗罗2024.10.14

        666

        0
        • 腿毛利小五郎

          腿毛利小五郎2023.03.02

          666

          0
          • 花生编程

            花生编程2023.01.20

            厉害赞

            0
            • 三春牛-创客

              三春牛-创客2022.12.30

              厉害

              0
              • 三春牛-创客

                三春牛-创客2022.12.30

                666

                0
                • 豆爸

                  豆爸2022.11.26

                  666

                  0