Arduino Hello 5

来源:互联网 发布:雨花区网络问政 编辑:程序博客网 时间:2024/05/16 04:42
准备
我没有买原板,从授权供应商处购买兼容板,中国大陆地区的授权供应商请访问 http://arduino.cc/en/Main/Buy 页面,搜索 China。
我购买的是Arduino Ethernet兼容板,原板参见这里: http://arduino.cc/en/Main/ArduinoBoardEthernet 兼容板有一定的改动。
为了将电脑和原板和兼容板连在一起,不仅需要连接线缆,我购买的兼容板使用USB线连接,还需要下载相应的驱动程序,驱动程序依赖兼容板会有所不同,请联系供应商,同时要注意Windows、Mac OS X和Linux不同操作系统需要不同的驱动程序。
为了编写程序,还需要下载集成开发环境Arduino IDE,下载地址在 http://arduino.cc/en/Main/Software ,注意Windows、Mac OS X和Linux需要下载不同的程序。
Arduino使用类似于C语言的编程语言,需要有一定的C语言基础,详细的语法参考请参见 http://arduino.cc/en/Reference/HomePage
本实验需RJ-45网线,以及有线路由器或集线器,当然你的电脑也要在同一个局域网内。
转贴请注明原发位置:http://aiyingjian.com/forum.php?mod=viewthread&tid=6

Arduino Hello 5 说明
前面讲了如何将Arduino接入以太网,虽然Arduino默认提供ICMP回播,也就是能ping通,但没有应用服务器。本例中将编写一个HTTP服务器,可以通过浏览器访问,响应浏览器请求,并输出内容。

Arduino Hello 5 程序
    #include <SPI.h>    #include <Ethernet.h>    byte mac[] = {0x00, 0xFF, 0xBB, 0x10, 0x59, 0xF8};    byte ip[] = {192, 168, 2, 201};    EthernetServer server(80);    void setup()    {      Ethernet.begin(mac, ip);      server.begin();    }    char lastChar;    void loop()    {      EthernetClient client = server.available();      if(client) {        char c = client.read();        if ('\n' == lastChar && '\r' == c) {              client.println("HTTP/1.1 200 OK");              client.println("Content-Type: text/html");              client.println();              client.println("<html><body>Hello From Arduino! I have been running for ");              client.println(millis());              client.println(" milliseconds!</body></html>");              delay(1);              client.stop();        }        lastChar = c;      }    }

Arduino Hello 5 程序结构
EthernetServer server(80);
声明一个绑定于80端口的TCP服务器。
server.begin();
启动监听80端口的服务器,注意该函数应在Ethernet.begin后调用。
char lastChar;
为了判断HTTP请求头结束,需要判断HTTP请求头输出一个空行,因此需要判断前一个字符为\n和当前字符为\r的情况,Arduino中读取数据每次只能读取一个字节,所以需要保存之前的字符。
EthernetClient client = server.available();
从server对象获取一个client对象。
if(client) {}
判断client对象是否已有数据。
char c = client.read();
从client对象中读取一个字符。
if ('\n' == lastChar && '\r' == c)
判断前一个字符为\n和当前字符为\r的情况
client.println("HTTP/1.1 200 OK");
输出HTTP响应头的代码
client.println("Content-Type: text/html");
输出HTTP响应头中的内容类型。
client.println();
输出一个空行,代表响应头结束,开始内容。
client.println("<html><body>Hello From Arduino! I have been running for ");
输出HTML内容
client.println(millis());
输出当前系统已运行的时间,以毫秒为单位。
client.println(" milliseconds!</body></html>");
输出HTML内容
delay(1);
等待1毫秒,等待芯片发送所有内容。
client.stop();
关闭client对象。
lastChar = c;
记录本次字节,用于下次获取字节时处理

Arduino Hello 5 测试
完成后单击“文件”菜单,单击“下载”菜单项,Arduino IDE将自动编译程序,然后下载到Arduino板上。用网线将Arduino Ethernet兼容板连接到路由器上,可以看到RX指示灯不规律闪烁,代表接收到网络信号,当路由器或集线器支持100M,同时网络质量较好时,100M指示灯会亮,表示使用自动适应100M网络。
在电脑上打开浏览器,访问
http://192.168.2.201/
可以看到返回的内容。
Hello From Arduino! I have been running for 3045986 milliseconds!