物联网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
相关文章
|
1月前
|
人工智能 边缘计算 监控
【开源视频联动物联网平台】视频AI智能分析部署方式
【开源视频联动物联网平台】视频AI智能分析部署方式
207 3
|
10天前
|
传感器 数据采集 存储
物联网技术在智能环境监测中的部署与优化
物联网技术在智能环境监测中的部署与优化
|
27天前
|
传感器 监控 安全
智能城市:物联网推动城市智能化发展
【6月更文挑战第1天】物联网驱动智能城市的发展,连接城市设施,优化交通、能源管理和公共安全。通过传感器实时收集信息,如交通流量监控和智能电表,实现效率提升及节能减排。然而,数据安全、隐私保护和技术标准统一是待解决的挑战。尽管如此,智能城市潜力巨大,需要各方合作克服挑战,共创便捷、可持续的城市环境。
33 3
|
1天前
|
网络协议 IDE 开发工具
玩转OneNET物联网平台之MQTT服务⑤ —— OneNet智能灯+MVP框架
玩转OneNET物联网平台之MQTT服务⑤ —— OneNet智能灯+MVP框架
|
4天前
|
传感器 物联网 数据挖掘
物联网在智能农业中的应用
物联网在智能农业中的应用
11 0
|
1月前
|
物联网 测试技术 Android开发
构建未来:基于Android的智能物联网家居控制系统
【5月更文挑战第28天】 随着物联网(IoT)技术的不断演进,智能家居系统正变得越来越普遍。本文深入探讨了利用Android平台构建一个高效、可扩展的智能物联网家居控制系统。我们将分析系统架构、关键技术组件以及开发中的最佳实践,旨在为开发者提供一个清晰的指南,以实现设备之间的无缝通信和自动化控制。
|
1月前
|
安全 搜索推荐 物联网
构建未来:基于Android的智能物联网家居系统
【5月更文挑战第15天】 在快速发展的数字化时代,智能物联网(IoT)技术与移动操作系统的结合正在塑造未来家居的生活方式。特别是Android平台,以其开放性、灵活性和广泛的用户基础,成为智能家居创新的理想选择。本文将探讨如何利用Android系统构建一个高效、安全且易于扩展的智能家居控制系统,涵盖系统设计、关键技术实现以及可能面临的挑战。通过分析具体案例,我们旨在为开发者和企业提供一套可行的解决方案蓝图,以促进智能家居领域的进一步发展。
|
1月前
|
传感器 存储 安全
【物联网】Arduino 实验合集
【物联网】Arduino 实验合集
49 2
|
1月前
|
存储 安全 物联网
Web3的时代-科技变革助力物联网智能化
Web3的时代正在到来,科技变革将助力物联网的智能化发展。随着Web3技术的不断创新和应用,我们有理由相信,物联网将迎来新的发展机遇和挑战,为构建智慧化的数字未来贡献更多可能性。
22 0
|
1月前
|
传感器 物联网 大数据
物联网(IoT)技术与应用:塑造未来的智能化生活
【5月更文挑战第1天】物联网(IoT)技术整合传感器、嵌入式系统、云计算与大数据,连接智能设备,重塑生活与工作方式。应用涵盖智能家居、工业自动化、农业、智能城市及医疗健康,提升效率与便利性。然而,数据安全、设备兼容性及网络基础设施仍是挑战。随着5G和AI进步,IoT将在更多领域发挥潜力,驱动社会智能化转型,需关注技术挑战并加强创新。

热门文章

最新文章

相关产品

  • 物联网平台