专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

AVR单片机与网络的连接

作者:李俊轩   来源:本站原创   点击数:  更新时间:2013年07月18日   【字体:

 

本文介绍关于ARV单片机通过一块芯片W5100上网模块与网络进行连接,一直以来对于嵌入式arduino怎么样和网络进行连接一直是我很好奇的问题,难得这几天公司给我一个关于利用嵌入式让AVR连接的应用,虽然对于英语水平还是很低下的我,没办法,为了兴趣和工作,只好硬着头皮看着外国一些关于AVR与网络连接的论坛。其中收获还是蛮大的,让自己知道了一些关于网络的知识和电路,特别是自己把一块ENC28J60上网模块的PCB顺利画出来进行生产,在画这个板的时候也是费了一番功夫,根据原理图,我觉得第12和第13引脚不应该是短路的,可是当PCB板拿到手的时候进行硬件测试,居然发现这两个引脚连在了一起。百思不得其解,把PCB板和画的图进行对比是没有错的,后来怀疑是IC的问题,但是经过看数据手册和IC不接在电路中的测试,没有问题。最近对HR911105A网口进行测试,兴奋地发现了问题是第3和第6是连在一起的。找出问题根源。




 
一直对于arduino这种开发平台和独特的编程风格的感兴趣。特别是他具有一个实时和电脑进行通讯的系统平台,长话短说,还是把硬件进行连接,以及代码的编写和调试,因为ardunio官方指代了一个关于Ethernet的库,所以把它下载下来,加以研究。终于写出了下面的一段代码:
#include <SPI.h>
 
 
//Test Code:
 
/*
* Web Server
*
* A simple web server that shows the value of the analog input pins.
*/
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 0, 48 };
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
client.print("welcome to B2CQSHOP");
client.println("<br />");
client.print("//*************************************");
client.println("<br />");
client.print("");
client.println("<br />");
client.print("//*************************************");
client.println("<br />");
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;
}
}
}
client.stop();
}
}
其实,写这番代码的时候也是费了一番周折的,因为参考网上一些关于ethernet的写法,刚开始编译的时候系统老是报错。错误的结果是:

 

经过查资料,终于知道了平时我们所说的SPI是什么东西,原来是“串行外围设备接口”,也就是网上很多LCD显示,为什么只有6根线就可以控制显示内容的东东。在官方网上找了好久,终于把到库,下载下来以后调用进程序,终于可以顺利的编译。心里那个激动,呵呵。希望可以出现预期结果。
但是问题不是我所想的那么简单。把自己程序中的IP地址输到网站地址栏,回车。晕。居然提示:

 

最后,终于在快绝望的时候看到了在打IP地址的时候多加了三个www. .晕死了。看来是自己打网址养好的“良好习惯”害了自己呀。嘿嘿。不过经过这次吃亏以后,至少以后不会再打错啦。^_^
结果出来了:/胜利

 

这只是一个小胜利的开始,在网上看了一下,有几个工程师在arduino上加了一个温湿度的传感器,随时的把测到的温度和湿度传到网站上去,可供别人打开网址时看到实时检测到的温度。得好好利用这个模块,相信对于信息时代的今天,作为一个电子工作者是有必要掌握这些知识的。
关闭窗口

相关文章