0

我买了一个 Arduino Ethernet Shield,但我在使用 SD 卡上的文件的 Web 服务器时遇到了问题。有一个服务器在端口 80 上运行服务数据,但是当我加载它时,我似乎得到了类似的数据

文件·找不到

文件未找到

文件未找到

文件未找到

标题>04 NotÁFhund<šhtml¦ 找不到文件

文件未找到

文件未找到

<”html> * 文件„未找到ž/p> žtitle>404 Not F·und

或者它开始下载与上面类似的东西(我假设标题像实际内容一样损坏)

如果我不使用 SD 卡,而只提供写入草图的预先编写的网页,那么只要 SD 卡不在插槽中,页面就会正确显示。此外,SD 库说它存在时看不到“index.html”

我在 Arduino Uno 上使用 Transcend Micro SDHC 4GB (FAT32) 和 Ethernet Shield R3,并尝试格式化 Micro SD 卡。我的草图如下。

#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>

// MAC address from Ethernet shield sticker under board
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 130); // IP address, may need to change depending on network
EthernetServer server(80);  // create a server at port 80

File webFile;

void setup()
{
  Ethernet.begin(mac, ip);  // initialize Ethernet device
  server.begin();           // start to listen for clients
  Serial.begin(9600);       // for debugging

  // initialize SD card
  Serial.println("Initializing SD card...");
  if (!SD.begin(4)) {
      Serial.println("ERROR - SD card initialization failed!");
      return;    // init failed
  }
  Serial.println("SUCCESS - SD card initialized.");
  // check for index.htm file
  if (!SD.exists("index.html")) {
      Serial.println("ERROR - Can't find index.html!");
  }      
  Serial.print("Running on ");
  Serial.println(Ethernet.localIP());
}

void loop()
{
    EthernetClient client = server.available();  // try to get client

    if (client) {  // got client?
        boolean currentLineIsBlank = true;
        while (client.connected()) {
            if (client.available()) {   // client data available to read
                char c = client.read(); // read 1 byte (character) from client
                // last line of client request is blank and ends with \n
                // respond to client only after last line received
                if (c == '\n' && currentLineIsBlank) {
                    // send a standard http response header
                    client.println("HTTP/1.1 200 OK");
                    client.println("Content-Type: text/html");
                    client.println("Connection: close");
                    client.println();
                    client.println("<html><head><title>404 Not Found</title></head><body><p>File not found</p></body></html>");
                    break;
                }
                // every line of text received from the client ends with \r\n
                if (c == '\n') {
                    // last character on line of received text
                    // starting new line with next character read
                    currentLineIsBlank = true;
                } 
                else if (c != '\r') {
                    // a text character was received from client
                    currentLineIsBlank = false;
                }
            } // end if (client.available())
        } // end while (client.connected())
        delay(1);      // give the web browser time to receive the data
        client.stop(); // close the connection
    } // end if (client)
}
4

2 回答 2

0

我对 SD 卡的体验是,读取它们比写入它们更稳定。因此,如果您有一个可以插入 PC 的 SDHC-USB 转换器(并且存在许多供应商/型号),那么请在您的 PC 上格式化和初始化 SD 卡。

有一个名为 SDFormatter V3.1 的免费软件包可以很好地使用 FAT32 格式化 SDHC 卡。不要相信磁盘在 SD 插槽中多次使用后是否已正确格式化。

使用 8.3 文件命名约定,并将文件格式化为 FAT32 设备。最后,将要传送的网页加载到 SD 卡的根目录中。

现在,将 SD 卡插入 Arduino 插槽并尝试从卡中读取数据。不要在Arduino上初始化或格式化卡。只需分配或启动 SDHC 设备并读取卡的根目录文件。

请发布您的测试程序。带有以太网内容的程序似乎无法正确“启动” SD 卡。这就是为什么你应该在以太网连接工作之前读取卡并将文件打印到显示器上(看起来就是这样,所以一旦你的文件测试程序工作你应该完成!)

使用 FAT32 格式的卡,编写一个测试程序,该程序将打开一个文件并将其内容写Serial回您的 PC。在处理无线/以太网连接之前调试此功能。

于 2013-08-14T19:16:55.057 回答
0

有两个问题需要寻找:1)您的屏蔽没有修复 5100 芯片错误,2)SPI 总线要求两个设备的 SS(从选择)不能同时处于活动状态(低),SS = 数字5100 的针脚 10 和 SS = SD 的数字针脚 4(屏蔽中包含的针脚)。

于 2013-09-23T08:47:27.057 回答