网络上关于Arduino Ethernet的教程不多,刚刚入门的伙伴们,先给大家提供一篇:官方Arduino Ethernet中文介绍,以便快速了解它的参数及用法。而后可以学习一下这篇构建简易Web Server教程。Arduino官方的以太网板采用的是WIZnet-W5100,而目前市场上也有很多结合最新的W5500的Arduino Ethernet板。如下例程都是适用的。
转自:Arduino中文社区 作者:奈何Col
本教程适用于使用WIZnet w5100/w5500的Arduino控制器。
程序一
这里我们使用Arduino Ethernet建立一个简单网页服务器,当Arduino服务器接收到浏览器访问请求时,即会发送响应消息,浏览器接收到响应消息,会将其中包含的HTML文本转换为网页显示出来。
这样就可以将传感器获取到的信息显示到网页上,每个在该网络范围内的计算机或其他移动设备,无论什么平台都可以通过网页浏览器了解到各传感器的数据。
/*
OpenJumper WebServer Example
建立一个显示传感器信息的Arduino服务器
[url=http://www.openjumper.com/]http://www.openjumper.com/[/url]
[url=http://x.openjumper.com/ethernet/]http://x.openjumper.com/ethernet/[/url]
*/
#include
#include
// 设定MAC地址、IP地址
// IP地址需要参考你的本地网络设置
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,177);
// 初始化Ethernet库
// HTTP默认端口为80
EthernetServer server(80);
void
setup() {
// 初始化串口通信
Serial.begin(9600);
// 开始ethernet连接,并作为服务器初始化
Ethernet.begin(mac, ip);
server.begin();
Serial.print(
"server is at "
);
Serial.println(Ethernet.localIP());
}
void
loop() {
// 监听客户端传来的数据
EthernetClient client = server.available();
if
(client) {
Serial.println(
"new client"
);
// 一个Http请求结尾必须带有回车换行
boolean currentLineIsBlank =
true
;
while
(client.connected()) {
if
(client.available()) {
char
c = client.read();
Serial.write(c);
// 如果收到空白行,说明http请求结束,并发送响应消息
if
(c ==
'\n'
&& currentLineIsBlank) {
// 发送标准的HTTP响应
client.println(
"HTTP/1.1 200 OK"
);
client.println(
"Content-Type: text/html"
);
client.println(
"Connection: close"
);
client.println();
client.println(
""
);
client.println(
""
);
// 添加一个meta刷新标签, 浏览器会每5秒刷新一次
// 如果此处刷新频率设置过高,可能会出现网页的卡死的状况
client.println(
""
);
// 输出每个模拟口读到的值
for
(
int
analogChannel = 0; analogChannel < 6; analogChannel++) {
int
sensorReading = analogRead(analogChannel);
client.print(
"analog input "
);
client.print(analogChannel);
client.print(
" is "
);
client.print(sensorReading);
client.println(
"
"
);
}
client.println(
""
);
break
;
}
if
(c ==
'\n'
) {
// 已经开始一个新行
currentLineIsBlank =
true
;
}
else
if
(c !=
'\r'
) {
// 在当前行已经得到一个字符
currentLineIsBlank =
false
;
}
}
}
// 等待浏览器接收数据
delay(1);
// 断开连接
client.stop();
Serial.println(
"client disonnected"
);
}
}
<
html
>
<
head
>
<
meta
charset
=
"UTF-8"
>
<
title
>OpenJumper!Arduino Web Server
title
>
<
script
type
=
"text/javascript"
>
function send2arduino(){
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
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();
}
function getBrightness(){
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
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,5000);
script
>
head
>
<
body
>
<
div
align
=
"center"
>
<
h1
>Arduino Web Server
h1
>
<
div
>brightness:
div
>
<
div
id
=
"brightness"
>??
div
>
<
button
id
=
"light"
type
=
"button"
>Turn on
button
>
<
button
type
=
"button"
>About
button
>
div
>
body
>
html
>
/*
OpenJumper WebServer Example
[url]http://www.openjumper.com/ethernet/[/url]
显示室内照度+开关灯控制
通过手机、平板、计算机等设备访问
Arduino Server,就看到当前室内光线照度
在A0引脚连接光敏模块,用于采集室内光线;在2号引脚连接LED模块。
奈何col 2014.12.25
*/
#include
#include
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, ip);
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(
""
);
client.println(
"OpenJumper!Arduino Web Server "
);
client.println(
"Arduino Web Server
brightness:"
);
client.println(analogRead(Sensor));
client.println(
"
"
);
}