找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5122|回复: 2
打印 上一主题 下一主题
收起左侧

arduino微信远程继电器控制电灯设计

[复制链接]
跳转到指定楼层
楼主
本帖最后由 lfb532 于 2018-9-13 05:29 编辑

远程继电器控制电灯

       大家都知道,继电器在电路中是作为一个开关,当继电器s端收到高电平时,开关闭合,电路流通。我们就可以使用以小电压控制大电压。当打开微信物联网模块继电器实验界面,按下继电器开关,继电器开关闭合,电路流通,就可以控制风扇啊,灯啊,电饭煲啊等等大功率电器。


例如在微信界面点击继电器标志,微信界面发送字符“$RELAY,1#”至下位机,下位机根据程序判断继电器开始工作,向继电器S信号端输入高电平。
解释协议:继电器开始工作。
然后下位机给微信界面返回数据包$RELAY,(0-2),#
解释协议:$RELAY,0,#:成功;
                  $RELAY,1,#:失败;
                  $RELAY,2,#:不匹配当前

注:由于面包板上下两排的中间是分隔的不导电的,所以尽量在面包板的左半边区域或者右半边区域使用,如果有使用到面包板的整个区域,需要在中间用杜邦线如图2连接。如图用红线模拟内部电路,图1的电路(红线)中间是断开的,图2连接后的面包板的电路(红线)是流畅的、连接的。



1.准备工作
在接好线后烧录程序,注意:烧录时需拔掉arduino上的0和1引脚的接线,否则会上传失败!在上传成功后将0和1引脚的线接上
2.WIFI配置环境

方式一: 因每个WIFI的名称和密码不同,WIFI模块在出厂时没有进行配置,因此需要配置WIFI模块。配置时手机必须连接到当前环境的WIFI网络并能正常访问互联网。PS: 仅能识别常规的2.4G-WIFI信号,无法识别5G-WIFI。

方式二: 若要在没有WIFI网络的户外环境中使用微信遥控,需要两台具备移动网络的手机,其中一台当热点提供网络,另一台手机连接到此热点,后续配置方法相同。(仅建议使用方式一,部分手机提供的WIFI热点可能无法被WIFI模块识别。)


源程序如下:
  1. /**
  2. * @par Copyright (C): 2010-2019, Shenzhen Yahboom Tech
  3. * @file         3、远程继电器控制电灯
  4. * @author       zhoujie
  5. * @version      V1.0
  6. * @date         2017.11.14
  7. * @brief        arduino物联网实验
  8. * @details
  9. * @par History  见如下说明
  10. *
  11. */


  12. //定义引脚
  13. int RELAY_Pin = 9;             //继电器信号端S


  14. int incomingByte = 0;       // 接收到的 data byte
  15. String inputString = "";         // 用来储存接收到的内容
  16. boolean newLineReceived = false; // 前一次数据结束标志
  17. boolean startBit  = false;  //协议开始标志


  18. String returntemp = ""; //存储返回值

  19. void setup()
  20. {
  21.    pinMode(RELAY_Pin, OUTPUT);    //初始化RELAY IO口为输出方式
  22.   
  23.    Serial.begin(9600);        //波特率9600 (Wifi通讯设定波特率)
  24.   
  25.    digitalWrite(RELAY_Pin, LOW);    //RELAY初始化低电平

  26. }
  27. /**
  28. * Function       loop
  29. * @author        zhoujie
  30. * @date          2017.11.14
  31. * @brief         按照接收的数据根据协议完成相应的功能
  32. * @param[in]     void
  33. * @retval        void
  34. * @par History   无
  35. */
  36. void loop()
  37. {     
  38.     //$RELAY,1#        
  39.     while (newLineReceived)
  40.     {
  41.        if(inputString.indexOf("RELAY") == -1)  //如果要检索的字符串值“RELAY”没有出现
  42.        {
  43.            returntemp = "$RELAY,2,#";  //返回不匹配
  44.            Serial.print(returntemp); //返回协议数据包      
  45.            inputString = "";   // clear the string
  46.            newLineReceived = false;
  47.            break;   
  48.        }
  49.       
  50.        if(inputString[7] == '1')  //继电器开关闭合
  51.        {
  52.           int i = inputString.indexOf(",");      //从接收到的数据中检索字符串“,”出现的位置
  53.           int ii = inputString.indexOf("#", i);  //从接收到的数据中以i为起始位置检索字符串“#”的位置
  54.           if(ii > i && ii > 0 && i > 0 )         //如果ii和i的顺序对了并且检索到ii与i存在
  55.           {
  56.               digitalWrite(RELAY_Pin, HIGH);    //向继电器S信号端输出高电平,继电器开关闭合
  57.           }
  58.           else    //检索到ii和i的顺序不对或者没有检索到ii或者i
  59.           {
  60.             returntemp = "$RELAY,1,#";  //返回匹配失败
  61.             Serial.print(returntemp); //返回协议数据包      
  62.             inputString = "";   // clear the string
  63.             newLineReceived = false;
  64.             break;   
  65.           }
  66.        }
  67.        else   //继电器开关打开
  68.        {
  69.           digitalWrite(RELAY_Pin, LOW);  //向继电器S信号端输出低电平
  70.        }
  71.       

  72.       
  73.        returntemp = "$RELAY,0,#";  //返回匹配成功

  74.        Serial.print(returntemp); //返回协议数据包      
  75.        inputString = "";   // clear the string
  76.        newLineReceived = false;   

  77.     }
  78.    
  79. }
  80. /**
  81. * Function       serialEvent
  82. * @author        zhoujie
  83. * @date          2017.11.14
  84. * @brief         串口接收中断   serialEvent()是IDE1.0及以后版本新增的功能,不清楚为什么大部份人不愿意用,这个可是相当于中断功能一样的啊!
  85. * @param[in]     void
  86. * @retval        void
  87. * @par History   无
  88. */  
  89. void serialEvent()
  90. {
  91.   while (Serial.available())                    //如果串口接收到数据则进入循环
  92.   {   
  93.     incomingByte = Serial.read();              //一个字节一个字节地读,下一句是读到的放入字符串数组中组成一个完成的数据包
  94.     if(incomingByte ==




  95. )                     //如果到来的字节是





  96. ,开始读取
  97.     {
  98.       startBit= true;
  99.     }
  100.     if(startBit == true)
  101.     {
  102.        inputString += (char) incomingByte;     // 全双工串口可以不用在下面加延时,半双工则要加的//
  103.     }  
  104.     if (incomingByte == '#')
  105.     {
  106.        newLineReceived = true;                 //如果到来的字节是'#',读取结束
  107.        startBit = false;
  108.     }
  109.   }
  110. }



复制代码

所有资料51hei提供下载:
3.远程继电器控制电灯.zip (3 MB, 下载次数: 42)




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:243394 发表于 2018-9-17 13:05 | 只看该作者
谢谢分享的资料
回复

使用道具 举报

板凳
ID:442032 发表于 2018-12-8 11:48 | 只看该作者
学习谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表