外网远程控制LED小灯的实现

注:该项目参考自Arduino中文社区kevinzhang19701楼主的帖子
:小题大做之远程LED控制
http://www.arduino.cn/forum.php?mod=viewthread&tid=8463&fromuid=84650
(出处: Arduino中文社区)
在这里十分感谢这位老师。
我觉得这个很有潜力,控制LED小灯只是开始,有了这个基本的项目,就可以拓展为外网远程控制其他一些家庭电器,俨然可以成为智能家居的一个切入点。

1预备工作:

1.由于需要可以通过外网来控制小灯,所以内网穿透是必不可少的。
我们选择了花生壳来实现。
首先要找到花生壳官网(Oray)进行注册,然后你会获得一个免费的域名,这个免费的域名的长相十分奇怪不容记忆,但是免费送的并且仅仅只是实验测试用的所以就不要抱怨了。(当然你可以升级为付费版商业版的,域名端口都可以定制)
得到域名之后需要开启内网穿透服务,建议不想花费太多的话可以开启免费版(但是开通还是需要缴纳少量的费用)。我用的就是免费版的服务,足够这个项目用的。有一点需要注意,免费版的服务解析速度偏慢,而且有流量限制(每月1G),所以呢,网页如果需要加载很多图片视频的话,那么就得考虑升级个人商业版了。建议一切从简,学到原理最重要。
2.准备一台电脑来作为服务器。
当然实验阶段的话,可以用自己的笔记本或者一台二手旧电脑,不用担心性能,对这个实验项目古董电脑都绰绰有余了。(当然土豪就当我什么都没说,直接去某宝买专业的服务器或者工作站好了,至于工作站或者服务器的使用和配置方法去问度娘吧)

2硬件部分:

1.控制器部分:Arduino UNO R3 开发板

2.Ethernet W5100

这里写图片描述

3.导线,面包板,200欧(或者1K欧姆)的电阻两个,两个LED,路由器,网线

这里写图片描述

4.两件叠加效果图:

这里写图片描述

5.接线效果图:

这里写图片描述

3软件部分:

(默认JAVA开发环境已经配置好了,没有配好JAVA环境先配置环境)
1.Arduino IDE:
下载链接:https://yunpan.cn/cMjJIsprnQbad 访问密码 f834
Arduino IDE的安装十分简单不再多说了。
2.Tomcat:
下载链接:https://yunpan.cn/cMjJTDtkc8UDb 访问密码 fe5c
Tomcat也需要配置环境变量哦
3.MySQL:
下载链接:https://yunpan.cn/cMjJC35LDecxx 访问密码 071f
4.MySQL Workbench:
下载链接:https://yunpan.cn/cMjJ7bb4rPzJI 访问密码 b6d7
Workbench这个软件是搭配MySQL来使用的,它是MySQL的图形界面
5.eclipse jee:
下载链接:https://yunpan.cn/cMjZyfFRnfgCi 访问密码 0ac4
6.JDBC:
下载链接:https://yunpan.cn/cMjVsNUAMetP3 访问密码 4ad5
6.花生壳客户端:
下载链接:https://yunpan.cn/cMjZVw8hqcd33 访问密码 052e

4逻辑部分:

逻辑应该很清楚了:客户端可以通过外网访问到服务器,
服务器上有两个servlet:ControlServletResponseServlet
ControlServlet:主要接受来自于外网访客对LED开/关状态的变化,并要将这些变化状态写入MySQL数据库(对应0和1)
ResponseServlet:主要是回答W5100每隔1秒向服务器提交的LED状态查询。
然后
Arduino板子上的sketch只完成一个工作:
每隔1秒向服务器查询数据库里最新的LED状态,然后刷新LED高低电平。

5代码部分:

Arduino代码:

 #include <SPI.h>
#include <Ethernet.h>
byte mac[]    = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress dnserver(192, 168, 0,105);
IPAddress     ip(192, 168,0,111);
EthernetClient client;
char c;
String result;
void setup() {
  Serial.begin(9600);
  Ethernet.begin(mac, ip);
  delay(3000);
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  Serial.println("Ethernet connecting...");

}

void loop() {
  if (client.connect(dnserver, 80)) 
  {
      Serial.println("Connected");
      client.println("POST http://192.168.0.105:80/remoteControlByYuancong/ResponseServlet HTTP/1.1");
      client.println("Host:192.168.0.105");
      client.println();
      delay(1000);
     // Serial.println(client.available());//为什么返回值比实际的字符串长度多2?
       while(client.available())
       {
        c = client.read();
        result += c;
       }
       //Serial.println("==");
       Serial.println(result.substring(0,156));
       Serial.println(result.substring(147,156));
       Serial.println(result.substring(147,151));
      if (result.substring(147,151).equals("A2=1"))
      {
        digitalWrite(2, HIGH);
      }
      else
      {
        digitalWrite(2, LOW);
      }
      if (result.substring(152,156).equals("A3=1"))
      {
        digitalWrite(3, HIGH);
      }
      else
      {
        digitalWrite(3, LOW);
      }
    client.stop();
    result = "";
  } 


  else 
  {
    Serial.println("connection failed");
  }


}

web代码:

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>遥控</title>
<style type="text/css">

body{
    margin:0px;
    text-align:center;    /*居中*/
}

div{
    box-sizing:border-box;          /*盒子宽高设置以border为标准*/
}

#top{
    height:50px;         
    margin:0 auto ;
}
.container{
    width:270px;
    height:480px;
    margin:0 auto;
    background-color:#FFFFFF;
    background-image:url("images/76.jpg");
    <!--border-radius:10px;-->
    border-style:solid; 
    border-width:2px; 
    border-color:gray;
    box-shadow:5px 5px 5px gray;

}
.className{
  line-height:50px;
  height:50px;
  width:
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值