物联网Arduino定时开关与手机控制智能灯

简介: 此项目主要是包含NTP获取时间和手机连接控制组成1. 本项目效果:晚上到点强制关灯睡觉,早上开灯提醒起床,如果晚上不想睡可以通过手机建立连接进行控制开灯或者关灯,还增加了一些KTV爆闪等有趣效果模式(有些费灯)

此项目主要是包含NTP获取时间和手机连接控制组成


1. 本项目效果:

晚上到点强制关灯睡觉,早上开灯提醒起床,如果晚上不想睡可以通过手机建立连接进行控制开灯或者关灯,还增加了一些KTV爆闪等有趣效果模式(有些费灯)


2. 项目使用的设备及软件

使用的硬件:wemos D1,继电器

软件环境编译 :Arduino

线路连接如下:9391933f73744f49b4dd6ca3e2ba6150.jpg3. 代码

#include <NTPClient.h>
// change next line to use with another board/shield
#include <ESP8266WiFi.h>
//#include <WiFi.h> // for WiFi shield
//#include <WiFi101.h> // for WiFi 101 shield or MKR1000
#include <WiFiUdp.h>
#define GPIOR D5//调用GPIOR端口 D5
//#define WEEK1  "1"   
//#define WEEK2  "2"   
//#define WEEK3  "3"   
//#define WEEK4  "4"   
#define WEEK5  "5"     
#define WEEK6  "6"
#define WEEK7  "7"
const char *ssid     = "Xiaomi_0992";//WIFI账号
const char *password = "2020AP1335";//WIFI密码
int port =8888;//端口号,手机连接时输入
WiFiServer server(port);//设置服务器端口号
WiFiUDP ntpUDP;//用于获取当前时间
// You can specify the time server pool and the offset (in seconds, can be
// changed later with setTimeOffset() ). Additionaly you can specify the
// update interval (in milliseconds, can be changed using setUpdateInterval() ).
NTPClient timeClient(ntpUDP, "europe.pool.ntp.org", 8*3600, 60000);
void initWifiSta()//WIFI初始化
{
    WiFi.mode(WIFI_STA);         // 设置STA模式
    WiFi.begin(ssid, password);   //连接网络
    while (WiFi.status() != WL_CONNECTED)//等待连接上,在连接过程打印.
    {
        Serial.print(".");
        delay(500);
    }
    Serial.println(WiFi.localIP());//通过串口调试小助手 打印wemos的IP地址
}
void initGPIOR()//定义GPIOR函数
{
    pinMode(GPIOR,OUTPUT);//打开
    digitalWrite(GPIOR,LOW);//一开始灯是开的
}
void setup()
{
    initGPIOR();
    initWifiSta();
    server.begin();
    timeClient.begin();
    Serial.begin(115200);
    WiFi.begin(ssid, password);
    while ( WiFi.status() != WL_CONNECTED )
    {
        delay ( 500 );
        Serial.print ( "." );
    }
    timeClient.begin();
}
void loop() 
{
    int  i;
    char cmd;
    String time0;//当前时间变量
    String week;//当前星期几变量
    const char *time1 = "22:40:00";
    const char *time2 = "22:45:00";
    const char *time3 = "23:18:00";
    const char *time4 = "23:20:00";
    const char *time5 = "09:30:00";
    const char *time6 = "07:42:00";
    timeClient.update();
    //获取时间
    week = timeClient.getDay();//获取当下星期几
    time0 = timeClient.getFormattedTime();//获取当下时间
    week.c_str();
    time0.c_str();//将string类型转换为 char类型
    Serial.println(time0.c_str());//往串口打印当前时间
    Serial.println(timeClient.getDay());//往串口打印当前星期几
    WiFiClient client =server.available();//服务器初始化
    //如果是周五或者周六或者周天
    if((strcmp(week.c_str(),WEEK5)==0)||(strcmp(week.c_str(),WEEK6)==0)||(strcmp(week.c_str(),WEEK7)==0))
    { 
        if(strcmp(week.c_str(),WEEK5)==0)
        {
            if(strcmp(time0.c_str(),time3) == 0)//周五23:18:00闪烁一下提醒关灯
            {
                digitalWrite(GPIOR,HIGH);//关灯
                Serial.println("t 5 close");
                delay(1500);
                digitalWrite(GPIOR,LOW);//开灯
                Serial.println("t 5 open");
            }
            if(strcmp(time0.c_str(),time4) == 0)//周五23:20:00到点关灯
            {
                digitalWrite(GPIOR,HIGH);//关灯
                Serial.println("5 close");
            }
            else if(strcmp(time0.c_str(),time6) == 0)//周五07:42:00到点开灯
            {
                digitalWrite(GPIOR,LOW);//开灯
                Serial.println("5 open");
            }
        }
        if(strcmp(week.c_str(),WEEK6)==0)
        {
            if(strcmp(time0.c_str(),time3) == 0)//周六23:18:00闪烁一下提醒关灯
            {
                digitalWrite(GPIOR,HIGH);//关灯
                Serial.println("6 t close");
                delay(1500);
                digitalWrite(GPIOR,LOW);//开灯
                Serial.println("6 t open");
            }
            if(strcmp(time0.c_str(),time4) == 0)//周六23:20:00到点关灯
            {
                digitalWrite(GPIOR,HIGH);//关灯
                Serial.println("6 close");
            }
            else if(strcmp(time0.c_str(),time5) == 0)//周六09:30:00到点开灯
            {
                digitalWrite(GPIOR,LOW);//开灯
                Serial.println("6 open");
            }
        }
        if(strcmp(week.c_str(),WEEK7)==0)
        {
            if(strcmp(time0.c_str(),time1) == 0)//周六22:40:00闪烁一下提醒关灯
            {
                digitalWrite(GPIOR,HIGH);//关灯
                Serial.println("7 t close");
                delay(1500);
                digitalWrite(GPIOR,LOW);//开灯
                Serial.println("7 t open"); 
            }
            if(strcmp(time0.c_str(),time2) == 0)//周天22:45:00到点关灯
            {
                digitalWrite(GPIOR,HIGH);//关灯
                Serial.println("7 close");
            }
            else if(strcmp(time0.c_str(),time5) == 0)//周天09:30:00到点开灯
            {
                digitalWrite(GPIOR,LOW);//开灯
                Serial.println("7 open");
            }
        }
    }
    else  //((strcmp(week.c_str(),WEEK1)==0)||(strcmp(week.c_str(),WEEK2)==0)||(strcmp(week.c_str(),WEEK3)==0)||(strcmp(week.c_str(),WEEK4)==0))//如果是周一到周四
    {
        if(strcmp(time0.c_str(),time1) == 0)//22:46:00灯闪一下
        {
            digitalWrite(GPIOR,HIGH);//关灯
            Serial.println("1 t close");
            delay(1500);
            digitalWrite(GPIOR,LOW);//开灯
            Serial.println("1 t open");
        }
        if(strcmp(time0.c_str(),time2) == 0)//22:50:00彻底关灯
        {
            digitalWrite(GPIOR,HIGH);//关灯
            Serial.println("1 close");
        }
        if(strcmp(time0.c_str(),time6) == 0)//07:42:00开灯
        {
            digitalWrite(GPIOR,LOW);//开灯
            Serial.println("1 open");
        }
    }
    while(client.connected())//等待手机连接Wemos D1
    { 
       while(client.available()>0)//有数据到来,类似串口那个函数
       {  
            cmd = client.read();//读取数据
            Serial.println(client.read());//打印输入的几
            Serial.println(cmd);//打印输入的几
            if(cmd == '1')//如果手机输入字符串 1
            {
                Serial.println("phone 1");
                digitalWrite(GPIOR,LOW);//开灯
            }
            if(cmd == '2')//如果手机输入字符串 2
            {
                Serial.println("phone 2");
                digitalWrite(GPIOR,HIGH);//关灯
            }
            if(cmd == '3')//如果手机输入字符串 3//小众吓人模拟停电模式
            {
                Serial.println("phone 3");
                for(i=0;i<3;i++)
                {
                    digitalWrite(GPIOR,HIGH);//关灯
                    delay(6000);
                    digitalWrite(GPIOR,LOW);//开灯
                    delay(150);
                }
            }
           if(cmd == '4')//如果手机输入字符串 4//进入顿挫模式
           {
                Serial.println("phone 4");
                for(i=0;i<8;i++)
                {
                    digitalWrite(GPIOR,HIGH);//关灯
                    delay(1000);
                    digitalWrite(GPIOR,LOW);//开灯
                    delay(1000);
                }
            }
           if(cmd == '5')//如果手机输入字符串 4//进入快顿挫模式
           {
                Serial.println("phone 5");
                for(i=0;i<10;i++)
                {
                    digitalWrite(GPIOR,HIGH);//关灯
                    delay(500);
                    digitalWrite(GPIOR,LOW);//开灯
                    delay(500);
                }
            }
            if(cmd == '6')//如果手机输入字符串 4//进入激情爆闪模式
            {
                Serial.println("phone 6");
                for(i=0;i<25;i++)
                {
                    digitalWrite(GPIOR,HIGH);//关灯
                    delay(200);
                    digitalWrite(GPIOR,LOW);//开灯
                    delay(200);
                 }
             }
            if(cmd == '7')//如果手机输入字符串 4//进入摇滚模式
            {
                Serial.println("phone 7");
                for(i=0;i<15;i++)
                {
                    digitalWrite(GPIOR,HIGH);//关灯
                    delay(500);
                    digitalWrite(GPIOR,LOW);//开灯
                    delay(400);
                    digitalWrite(GPIOR,HIGH);//关灯
                    delay(300);
                    digitalWrite(GPIOR,LOW);//开灯
                    delay(200);
                }
            }
        }   
        delay(1000); 
    }
    delay(1000);
    //Serial.println(WiFi.localIP());  //通过串口打印wemos的IP地址
}   

4. 调试过程


c2541353a5044d268998947733af584b.png

5. 视频展示

代录制

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
15天前
|
传感器 监控 安全
未来家居生活的智能化革命:探索物联网技术在智能家居中的应用
【8月更文挑战第5天】当物联网技术遇上智能家居,一场关于便捷、舒适与节能的生活革命悄然拉开帷幕。本文将探讨物联网如何通过高度互联的设备网络,实现家庭环境的智能管理,提升居住体验的同时,促进能源的有效利用。
|
20天前
|
传感器 监控 安全
智能物联网技术在现代城市管理中的应用与挑战
【7月更文挑战第31天】本文深入探讨了智能物联网技术在现代城市管理中的关键作用,并分析了其带来的显著效益及所面临的主要挑战。文章通过具体案例分析,展示了物联网技术如何优化城市基础设施、改善公共服务质量以及增强城市安全系统。同时,本文也指出了物联网技术在数据安全、隐私保护、技术标准化和成本投入方面的主要挑战,并对未来的发展方向提出了展望。
|
2月前
|
传感器 数据采集 存储
物联网技术在智能环境监测中的部署与优化
物联网技术在智能环境监测中的部署与优化
|
2月前
|
传感器 监控 安全
智能城市:物联网推动城市智能化发展
【6月更文挑战第1天】物联网驱动智能城市的发展,连接城市设施,优化交通、能源管理和公共安全。通过传感器实时收集信息,如交通流量监控和智能电表,实现效率提升及节能减排。然而,数据安全、隐私保护和技术标准统一是待解决的挑战。尽管如此,智能城市潜力巨大,需要各方合作克服挑战,共创便捷、可持续的城市环境。
41 3
|
7天前
|
机器学习/深度学习 传感器 物联网
使用Python实现深度学习模型:智能物联网与智能家居
【8月更文挑战第13天】 使用Python实现深度学习模型:智能物联网与智能家居
17 2
|
23天前
|
存储 传感器 安全
云上智能物联网平台:构建未来智联世界的基石
四、未来发展趋势 4.1 边缘计算的融合 随着物联网设备数量的不断增加和数据量的快速增长,边缘计算将成为云上智能物联网平台的重要组成部分。通过将计算能力和数据存储能力下沉到边缘侧,可以减少数据传输延迟和带宽消耗,提高系统的响应速度和稳定性。
75 7
|
23天前
|
存储 边缘计算 人工智能
云上物联网:连接万物,驱动智能未来
标准化与互操作性:随着物联网设备的不断增多和应用场景的日益广泛,标准化和互操作性将成为云上物联网发展的重要趋势。通过制定统一的标准和规范,实现不同品牌、不同型号物联网设备之间的互联互通和互操作,将大大提升云上物联网的灵活性和可扩展性。 边缘计算与云端协同:未来的云上物联网将更加注重
53 7
|
20天前
|
机器学习/深度学习 人工智能 安全
智能之网:探索AI在物联网中的应用与挑战
随着科技的飞速发展,人工智能(AI)已经渗透到我们生活的方方面面,特别是在物联网(IoT)领域的应用日益广泛。本文将探讨AI技术如何在物联网中发挥作用,提升设备智能化水平,优化数据管理,以及在实现这一过程中遇到的技术、安全和伦理等挑战。通过分析具体案例,我们将揭示AI和物联网结合带来的创新机遇及其对未来社会可能产生的影响。
|
1月前
|
机器学习/深度学习 数据可视化 物联网
物联网设备的数据可视化与分析:解锁未来智能世界的钥匙
【7月更文挑战第6天】物联网设备的数据可视化与分析是解锁未来智能世界的关键。通过不断探索和实践,我们可以更好地利用物联网数据,推动技术创新,提升社会运行效率,为人们的生活带来更多便利和惊喜。面对技术挑战,我们应保持开放心态,积极学习新技术、新方法,不断优化数据可视化与分析的流程和效果,为物联网的繁荣发展贡献力量。
|
21天前
|
传感器 供应链 物联网
ERP系统与物联网(IoT)集成:实现智能化业务管理
【7月更文挑战第29天】 ERP系统与物联网(IoT)集成:实现智能化业务管理
45 0

相关产品

  • 物联网平台