Arduino+Ethernet shield:入门,服务器,微博
让你的Arduino上网
- 引言:Ethernet和Ethernet Shield
- 准备清单
- Arduino Duemilanove 或 UNO
- Ethernet Shield
- 一条USB线
- 一条以太网线
- 路由器
- Arduino IDE(集成开发环境)
- Ethernet库(Arduino IDE中一般直接就有)
- 一个新浪微博帐号
- 先把硬件搞定
需要注意的是,我在连接完后发现,Arduino的USB接口外壳是金属的,为了防止不小心把上层的Ethernet Shield短路,我在两块板子的接触部位垫了一张纸。图中的白色部分就是这张纸。
- 软件:步骤一,最基础的效果
打开它。
现在需要编辑一下这个文件。这里给出了代码。
/*
* Web Server
*
* A simple web server that shows the value of the analog input pins.
*/
#include
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; byte ip[] = { 10, 0, 0, 177 };
Server server(80);
void setup() { Ethernet.begin(mac, ip); server.begin(); }
void loop() { Client client = server.available(); if (client) { // an http request ends with a blank line boolean current_line_is_blank = true; while (client.connected()) { if (client.available()) { char c = client.read(); // if we’ve gotten to the end of the line (received a newline // character) and the line is blank, the http request has ended, // so we can send a reply if (c == ‘n’ && current_line_is_blank) { // send a standard http response header client.println(“HTTP/1.1 200 OK”); client.println(“Content-Type: text/html”); client.println();
// output the value of each analog input pin for (int i = 0; i < 6; i++) { client.print(“analog input “); client.print(i); client.print(” is “); client.print(analogRead(i)); client.println(“br /”); } break; } if (c == ‘n’) { // we’re starting a new line current_line_is_blank = true; } else if (c != ‘r’) { // we’ve gotten a character on the current line current_line_is_blank = false; } } } // give the web browser time to receive the data delay(1); client.stop(); } } 把byte IP改成你需要的地址。一般改为192.168.1.177即可。 接着,上传文件到Arduino。需要注意的是,我一开始在传时一直弄不好,后来才发现是串口号忘记选了。在上传程序的时候一定要记得选择正确的,对应你的Arduino板的串口。
- 测试!
这时Arduino Analog口当前的读数。如果你看到了,那么恭喜你,你的Arduino已经连接到你家的局域网了。
- 在任何地方访问!
添加一条新内容。如果你使用的是192.168.1.177,那么就像这样
好了! 现在,找到你家现在的IP地址(这个IP地址是你的互联网服务提供商给你的,你可以在你路由器的状态信息中找到)。 在浏览器中输入它,接着,你就会看到刚才出现的页面。不同的是,现在在任何地方都可以访问它。你可以把这个地址告诉你的亲戚朋友,让他们试一试。
- 软件:步骤二,加点内容
// output the value of each analog input pin
for (int i = 0; i < 6; i++) {
client.print(“analog input “);
client.print(i);
client.print(” is “);
client.print(analogRead(i));
client.println(“br /”);
}
break;
}
用了一个循环,来显示模拟口1-6的读数。
这里的client.print用来输出文字,我们就用这个函数来写自己的文字。
client.println用来写HTML代码,比如
client.println(“br /”);
就是换一行。 用这两个函数就可以实现自己编辑文本。 比如我想加一句话“These are analog ports’ readings”,换行,“Thanks!”,那么就在break前面加上
client.print(“These are analog ports’ readings”);//这句输出第一句话
client.println(“br /”);//这句换行
client.print(“Thanks!”);//这句输出第二句
文字输出就这样解决!
- 软件:步骤三,让Arduino发微博
#if defined(ARDUINO) && ARDUINO > 18 // Arduino 0019 or later
#include
#endif
#include
//#include Only needed in Arduino 0022 or earlier
#include
// Ethernet Shield 设置
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// substitute an address on your own network here
// 配置Arduino的局域网IP地址
// 请确保IP没有防火墙限制、没有和局域网内其他IP冲突
byte ip[] = { 192, 168, 2, 250 };
// 此处填写您的token和token secret (get it from http://arduino2weibo.sinaapp.com/)
Weibo weibo(“YOUR-TOKEN-HERE”,“YOUR-TOKEN-SECRET-HERE”);
// Message to post
// 由于Arduino IDE不支持敲中文,我做了个中文编码工具
// 想发送中文请访问 http://arduino2weibo.sinaapp.com/encode.php
//微博的内容(自己可以改)
char msg[] = “Hello Weibo!I’m Arduino! http://arduino2weibo.sinaapp.com";
void setup()
{
delay(1000);//先等一会儿
Ethernet.begin(mac, ip);//确定物理地址和IP地址
Serial.begin(9600);//开始串口输出
Serial.println(“connecting …”);//正在连接
if (weibo.post(msg)) {//如果连接成功
int status = weibo.wait();//那就显示“稍等”
if (status == 200) {//如果发送成功
Serial.println(“OK.”);//那就显示“OK”
} else {//否则……
Serial.print(“failed : code “);//显示“失败:错误代码是……”
Serial.println(status);//“错误代码”
}
} else {//如果没连上
Serial.println(“connection failed.”);//那就显示“连接失败”
}
}
void loop()//为什么loop是空的呢?那是因为微博发一条就够了:D
{
}
(以上一段代码出自脑震荡,为方便大家看懂我加了些注释)
给Arduino上电,这时打开微博,你的Arduino已经会说话了!
如果你想自定义微博内容,可以更改”msg“函数的值。需要注意的是,Arduino不支持中文,要发送中文,请使用UTF-8 ENCODE工具。
要想监控Arduino发微博的进度,可以打开Arduino IDE中的Serial Monitor。
最后提醒各位:Arduino IDE的版本千万要高于(或等于)0019,推荐Arduino 1.00。我一开始搞不定就是因为用的IDE版本过低!
关于Ethernet的入门内容就介绍到这里,更多有趣的内容,请查看网站里“MAKE&Arduino”分类!