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

15608854882 发表于 2016-12-11 13:32

奈何col 发表于 2016-12-11 11:18
看懂这个例程就行啦

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

奈何col 发表于 2016-12-11 14:18

15608854882 发表于 2016-12-11 13:32
动态的显示 像在串口显示器那样

看懂这个例程,几乎和例程一样

15608854882 发表于 2016-12-11 14:33

奈何col 发表于 2016-12-11 14:18
看懂这个例程,几乎和例程一样

恩恩 我刚刚弄出来了动态显示但是 值是不对的   温度是-112直接插到开发板上的时候是实际的温度值 插到扩展板上 扩展板在插到开发板 温度值是负的

15608854882 发表于 2016-12-12 22:14

人呢

烈火 发表于 2017-1-4 18:23

本帖最后由 烈火 于 2017-1-4 18:28 编辑

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



/*
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>");
}

烈火 发表于 2017-1-4 18:49

本帖最后由 烈火 于 2017-1-4 18:51 编辑

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



#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>");
}




奈何col 发表于 2017-1-4 20:09

烈火 发表于 2017-1-4 18:49
另,这是我前几天在您写的《Arduino程序设计基础》这本书上看到的,照着写的程序,(和上面的大同小异,如 ...

换chrome

烈火 发表于 2017-1-4 20:36

奈何col 发表于 2017-1-4 20:09
换chrome

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



奈何col 发表于 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里面了,好奇怪呀。

页: 1 2 3 4 5 6 7 [8] 9 10 11 12
查看完整版本: Arduino教程——使用Ethernet构建简易的Web Server