物联网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
相关文章
|
2月前
|
传感器 存储 人工智能
智能农业的未来:物联网技术如何革新传统农业
本文探讨了物联网(IoT)技术在农业中的应用及其对传统农业的革新。通过详细分析当前农业面临的挑战,如资源浪费和效率低下,文章阐述了物联网技术如何通过实时数据监控和自动化系统提高农业生产的效率和可持续性。此外,文章还讨论了实施物联网技术时需要考虑的技术、经济和社会因素,以及未来发展趋势。
|
3月前
|
物联网 数据管理 Apache
拥抱IoT浪潮,Apache IoTDB如何成为你的智能数据守护者?解锁物联网新纪元的数据管理秘籍!
【8月更文挑战第22天】随着物联网技术的发展,数据量激增对数据库提出新挑战。Apache IoTDB凭借其面向时间序列数据的设计,在IoT领域脱颖而出。相较于传统数据库,IoTDB采用树形数据模型高效管理实时数据,具备轻量级结构与高并发能力,并集成Hadoop/Spark支持复杂分析。在智能城市等场景下,IoTDB能处理如交通流量等数据,为决策提供支持。IoTDB还提供InfluxDB协议适配器简化迁移过程,并支持细致的权限管理确保数据安全。综上所述,IoTDB在IoT数据管理中展现出巨大潜力与竞争力。
106 1
|
3月前
|
传感器 监控 安全
未来家居生活的智能化革命:探索物联网技术在智能家居中的应用
【8月更文挑战第5天】当物联网技术遇上智能家居,一场关于便捷、舒适与节能的生活革命悄然拉开帷幕。本文将探讨物联网如何通过高度互联的设备网络,实现家庭环境的智能管理,提升居住体验的同时,促进能源的有效利用。
|
6天前
|
人工智能 监控 物联网
深度探索人工智能与物联网的融合:构建未来智能生态系统###
在当今这个数据驱动的时代,人工智能(AI)与物联网(IoT)的深度融合正引领着一场前所未有的技术革命。本文旨在深入剖析这一融合背后的技术原理、探讨其在不同领域的应用实例及面临的挑战与机遇,为读者描绘一幅关于未来智能生态系统的宏伟蓝图。通过技术创新的视角,我们不仅揭示了AI与IoT结合的强大潜力,也展望了它们如何共同塑造一个更加高效、可持续且互联的世界。 ###
|
18天前
|
安全 物联网 物联网安全
智能物联网安全:物联网设备的防护策略与最佳实践
【10月更文挑战第26天】随着物联网(IoT)技术的快速发展,智能设备已广泛应用于智能家居、工业控制和智慧城市等领域。然而,设备数量的激增也带来了严重的安全问题,如黑客攻击、数据泄露和恶意控制,对个人隐私、企业运营和国家安全构成威胁。因此,加强物联网设备的安全防护至关重要。
42 7
|
4月前
|
传感器 监控 安全
智能物联网技术在现代城市管理中的应用与挑战
【7月更文挑战第31天】本文深入探讨了智能物联网技术在现代城市管理中的关键作用,并分析了其带来的显著效益及所面临的主要挑战。文章通过具体案例分析,展示了物联网技术如何优化城市基础设施、改善公共服务质量以及增强城市安全系统。同时,本文也指出了物联网技术在数据安全、隐私保护、技术标准化和成本投入方面的主要挑战,并对未来的发展方向提出了展望。
|
18天前
|
传感器 存储 运维
智能物联网:LoRaWAN技术在低功耗广域网中的应用
【10月更文挑战第26天】本文详细介绍了LoRaWAN技术的基本原理、应用场景及实际应用示例。LoRaWAN是一种低功耗、长距离的网络层协议,适用于智能城市、农业、工业监控等领域。文章通过示例代码展示了如何使用LoRaWAN传输温湿度数据,并强调了其在物联网中的重要性和广阔前景。
49 6
|
18天前
|
存储 JSON 运维
智能物联网平台:Azure IoT Hub在设备管理中的实践
【10月更文挑战第26天】随着物联网技术的发展,Azure IoT Hub成为企业管理和连接数百万台设备的强大平台。本文介绍Azure IoT Hub的设备管理功能,包括设备注册、设备孪生、直接方法和监控诊断,并通过示例代码展示其应用。
21 4
|
17天前
|
传感器 监控 物联网
智能物联网:LoRaWAN技术在低功耗广域网中的应用
【10月更文挑战第27天】LoRaWAN技术是低功耗广域网(LPWAN)的重要代表,以其远距离通信、低功耗和低成本部署等优势,广泛应用于智能城市、农业监测和环境监测等领域。本文介绍LoRaWAN的工作原理及其实际应用,并提供示例代码展示如何使用LoRaWAN进行数据传输。
28 2
|
18天前
|
数据采集 传感器 监控
与传统的物联网相比,IIoT 智能化有何特点
IIoT(工业互联网)相较于传统物联网,其智能化特点主要体现在:更强大的数据处理能力、更精准的实时监控与预测分析、更高的安全性和可靠性,以及更深度的行业应用集成,推动了智能制造和工业4.0的发展。

相关产品

  • 物联网平台