Arduino教程——使用Ethernet构建简易的Web Server-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: 奈何col

Arduino教程——使用Ethernet构建简易的Web Server

  [复制链接]
发表于 2016-12-11 13:32 | 显示全部楼层
奈何col 发表于 2016-12-11 11:18
看懂这个例程就行啦

动态的显示 像在串口显示器那样

点评

看懂这个例程,几乎和例程一样  详情 回复 发表于 2016-12-11 14:18
 楼主| 发表于 2016-12-11 14:18 | 显示全部楼层
15608854882 发表于 2016-12-11 13:32
动态的显示 像在串口显示器那样

看懂这个例程,几乎和例程一样
发表于 2016-12-11 14:33 | 显示全部楼层
奈何col 发表于 2016-12-11 14:18
看懂这个例程,几乎和例程一样

恩恩 我刚刚弄出来了动态显示  但是 值是不对的   温度是-112  直接插到开发板上的时候是实际的温度值 插到扩展板上 扩展板在插到开发板 温度值是负的
发表于 2017-1-4 18:23 | 显示全部楼层
本帖最后由 烈火 于 2017-1-4 18:28 编辑

楼主你好,本人小白,我用你的第二个代码烧进arduino后(只是把DHCP设置IP改成了自动获取IP,其他不变,如下:
上传完成后,能够读出自动获取的IP,浏览器输入IP后串口也显示new client!。但是浏览器确是一片空白,为什么呢?
D:\1.png

1.png

[mw_shl_code=applescript,true]/*
OpenJumper WebServer Example
http://www.openjumper.com/ethernet/

显示室内照度+开关灯控制
通过手机、平板、计算机等设备访问
Arduino Server,就看到当前室内光线照度
在A0引脚连接光敏模块,用于采集室内光线;在2号引脚连接LED模块。

奈何col 2014.12.25
*/

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
//IPAddress ip(192,168,1,177);
EthernetServer server(80);
EthernetClient client;
String readString="";
int Light=2;
int Sensor=A0;

void setup() {
  Serial.begin(9600);
  //初始化Ethernet通信
  Ethernet.begin(mac);
  server.begin();
  pinMode(Light,OUTPUT);
  Serial.print("Server is at ");
  Serial.println(Ethernet.localIP());
}

void loop() {
  // 监听连入的客户端
  client = server.available();
  if (client) {
    Serial.println("new client");
    boolean currentLineIsBlank = false;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        readString += c;
        if (c == '\n') {
          Serial.println(readString);
          //检查收到的信息中是否有”on”,有则开灯
          if(readString.indexOf("?on") >0) {
            digitalWrite(Light, HIGH);
            Serial.println("Led On");
            break;
          }
          //检查收到的信息中是否有”off”,有则关灯
          if(readString.indexOf("?off") >0) {
            digitalWrite(Light, LOW);
            Serial.println("Led Off");
            break;
          }
          //检查收到的信息中是否有”getBrightness”,有则读取光敏模拟值,并返回给浏览器
          if(readString.indexOf("?getBrightness") >0) {
            client.println(analogRead(Sensor));
            break;
          }
          //发送HTML文本
          SendHTML();
          break;
        }        
      }
    }
    delay(1);
    client.stop();
    Serial.println("client disonnected");
    readString="";
  }
}

// 用于输出HTML文本的函数
void SendHTML()
{
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println("Connection: close");
  client.println();
  client.println("<!DOCTYPE HTML>");
  client.println("<html><head><meta charset=\"UTF-8\"><title>OpenJumper!Arduino Web Server</title><script type=\"text/javascript\">");
  client.println("function send2arduino(){var xmlhttp;if (window.XMLHttpRequest)xmlhttp=new XMLHttpRequest();else xmlhttp=new ActiveXObject(\"Microsoft.XMLHTTP\");element=document.getElementById(\"light\");if (element.innerHTML.match(\"Turn on\")){element.innerHTML=\"Turn off\"; xmlhttp.open(\"GET\",\"?on\",true);}else{ element.innerHTML=\"Turn on\";xmlhttp.open(\"GET\",\"?off\",true); }xmlhttp.send();}");
  client.println("function getBrightness(){var xmlhttp;if (window.XMLHttpRequest)xmlhttp=new XMLHttpRequest();else xmlhttp=new ActiveXObject(\"Microsoft.XMLHTTP\");xmlhttp.onreadystatechange=function(){if (xmlhttp.readyState==4 && xmlhttp.status==200)document.getElementById(\"brightness\").innerHTML=xmlhttp.responseText;};xmlhttp.open(\"GET\",\"?getBrightness\",true); xmlhttp.send();}window.setInterval(getBrightness,1000);</script>");
  client.println("</head><body><div align=\"center\"><h1>Arduino Web Server</h1><div>brightness:</div><div id=\"brightness\">");  
  client.println(analogRead(Sensor));
  client.println("</div><button id=\"light\" type=\"button\" onclick=\"send2arduino()\">Turn on</button><button type=\"button\" onclick=\"alert('OpenJumper Web Server')\">About</button></div></body></html>");
}[/mw_shl_code]
发表于 2017-1-4 18:49 | 显示全部楼层
本帖最后由 烈火 于 2017-1-4 18:51 编辑

另,这是我前几天在您写的《Arduino程序设计基础》这本书上看到的,照着写的程序,(和上面的大同小异,如下:),这个程序可以在web端显示,串口也能检测到IP,但是也是点击turn on按键LED和串口都没有反应呢。硬件是:Arduino UNO和Ethernet W5100扩展板。
1_副本.jpg 2017-01-04_183849.png


[mw_shl_code=applescript,true]#include "SPI.h"
#include "Ethernet.h"
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
EthernetServer server(80);
EthernetClient client;
String readString = "";
int Light = 2;
int Sensor = A0;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  Ethernet.begin(mac);
  server.begin();
  pinMode(Light, OUTPUT);
  Serial.print("Server IP is:");
  Serial.println(Ethernet.localIP());
}

void loop()
{
  // put your main code here, to run repeatedly:
  client = server.available();
  if (client)
  {
    Serial.println("new client!");
//    SendHTML();
    while (client.connected())
    {
      if (client.available())
      {
        char c = client.read();
        readString += c;
        if (c == '\n')
        {
          Serial.println(readString);
          if (readString.indexOf("? on") > 0)
          {
            digitalWrite(Light, HIGH);
            Serial.println("LED ON");
            break;
          }
          if (readString.indexOf("? off") > 0)
          {
            digitalWrite(Light, LOW);
            Serial.println("LED OFF");
            break;
          }

          if (readString.indexOf("? getBrightness") > 0)
          {
            client.println(analogRead(Sensor));
            break;
          }
          SendHTML();
          break;
        }
      }
    }
    delay(1);
    client.stop();
    Serial.println("client disconnected");
    readString = "";
  }
}

void SendHTML()
{
  client.println("HTTP/1.1 200 OK");
  client.println("Content - Type:text/html");
  client.println("Connection: close");
  client.println("");
  client.println("<! DOCTYPE HTML>");
  client.println("<html><head><meta charset = \"UTF - 8\"><title>LED</title>");
  client.println("<script type = \"text/javacript\">");
  client.println("funciton send2arduino(){ var xmlhttp; if(window.XMLHttpRequest) xmlhttp=new XMLHttpRequest(); else xmlhttp=new ActiveXObject(\"Microsoft.XMLHTTP\"); element = document.getElementById(\"light\"); if(element.innerHTML.match(\"Turn on\")) { element.innerHTML=\"Turn off\"; xmlhttp.open(\"GET\",\"? on\",true); } else { element.innerHTML=\"Turn on\"; xmlhttp.open(\"GET\",\"? off\",true); } xmlhttp.send(); }");
  client.println("function getBrightness(){ var xmlhttp; if(window.XMLHttpRequest) { xmlhttp=new XMLHttpRequest(); } else { xmlhttp=new ActiveXObject(\"Microsoft.XMLHTTP\"); } xmlhttp.onreadystatechange=function() { if(xmlhttp.readState==4 && xmlhttp.status==200) { document.getElementById(\"brightness\").innerHTML=xmlhttp.responseText } } xmlhttp.open(\"GET\",\"? getBrightness\",true); xmlhttp.send(); }");
  client.println("window.setInterval(getBrightness,1000);");
  client.println("</script>");
  client.println("</head><body><div align= \"center\"><h1>LED</h1><div>brightness:</div>");
  client.println("<div id=\"brightness\">");
  client.println(analogRead(Sensor));
  client.println("</div>");
  client.println("<button id=\"light\" type=\"button\" onclick=\"send2arduino()\">Turn on</button>");
  client.println("</div></body></html>");
}

[/mw_shl_code]


点评

换chrome  详情 回复 发表于 2017-1-4 20:09
 楼主| 发表于 2017-1-4 20:09 | 显示全部楼层
烈火 发表于 2017-1-4 18:49
另,这是我前几天在您写的《Arduino程序设计基础》这本书上看到的,照着写的程序,(和上面的大同小异,如 ...

换chrome
发表于 2017-1-4 20:36 | 显示全部楼层

我换成chrome了,但是结果web页面直接把源码显示出来了。下图左边是360浏览器显示,右边是chrome显示。 2017-01-04_203857.jpg



点评

F12看看有无报错,然后对应报错修改。应该都是浏览器的问题,如果没有报错的话,我也不知道咋改了  详情 回复 发表于 2017-1-4 20:57
 楼主| 发表于 2017-1-4 20:57 | 显示全部楼层
烈火 发表于 2017-1-4 20:36
我换成chrome了,但是结果web页面直接把源码显示出来了。下图左边是360浏览器显示,右边是chrome显示。

...

F12看看有无报错,然后对应报错修改。应该都是浏览器的问题,如果没有报错的话,我也不知道咋改了
发表于 2017-1-4 21:16 | 显示全部楼层
奈何col 发表于 2017-1-4 20:57
F12看看有无报错,然后对应报错修改。应该都是浏览器的问题,如果没有报错的话,我也不知道咋改了 ...

chrome把代码都识别到body里面了,好奇怪呀。
2017-01-04_211725.jpg
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 00:54 , Processed in 0.354511 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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