如何从Arduino的SD卡打开网页?

时间:2017-04-05 11:43:24

标签: arduino sd-card arduino-uno

我正在尝试使用arduino board one执行以下操作:

  1. 制作授权画面(登录)。

  2. 如果客户输入正确的用户名和密码,则打开存储在SD卡中的htm文件。

  3. 以下是代码:

    #include <SPI.h>
    #include <Ethernet.h>
    #include <SD.h>
    
    byte mac[] = {
      0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
    };
    IPAddress ip(192, 168, 1, 117);
    EthernetServer server(80);
    char header[500];
    int bufferSize = 0;
    File file;
    
    void setup() {
      Ethernet.begin(mac, ip);
      server.begin();
      Serial.println(Ethernet.localIP());
      Serial.begin(9600);
    }
    
    
    void loop() {
      EthernetClient client = server.available();
      if (client) {
        Serial.println("Nuevo Cliente");
        boolean currentLineIsBlank = true;
        while (client.connected()) {
          if (client.available()) {
            char c = client.read();
            if(bufferSize < 500) header[bufferSize++] = c;
    
    
            if (c == '\n' && currentLineIsBlank) {
    
              'arduino:admin' (user:password)
    
              Serial.println(header);
    
              if(strstr(header, "YXJkdWlubzphZG1pbg==") != NULL) {
                client.println("HTTP/1.1 200 OK");
                client.println("Content-Type: text/html");
                client.println("Connection: close");
                client.println("Reading SD");
                if(strstr(header, "GET / HTTP/1.1")) {
                  file = SD.open("ftp.htm");
                    if (file) {
                       while(file.available()) {
                          client.write(file.read());
                         }
                        file.close();
                      } 
                      break;        
                } else {
                  client.println("<!DOCTYPE HTML>");
                  client.println("<html>");
                  client.println("BLANK PAGE");
                  client.println("</html>");
                }
    
              } else {
                client.println("HTTP/1.1 401 Unauthorized");
                client.println("WWW-Authenticate: Basic realm=\"Secure\"");
                client.println("Content-Type: text/html");
                client.println();
                client.println("<html><h1 style='text-align:center;color:red;'>Denegado<h1/></html>");
    
    
              }
    
              bufferSize = 0;
              StrClear(header, 500);
    
              break;
    
            }
            if (c == '\n') {
              currentLineIsBlank = true;
            }
            else if (c != '\r') {
              currentLineIsBlank = false;
            }
          }
        }
        delay(1);
        client.stop();
        Serial.println("client disconnected");
      }
    }
    
    void StrClear(char *str, char length)
    {
        for (int i = 0; i < length; i++) {
            str[i] = 0;
        }
    }
    

    我现在面临的问题是当我插入micro SD卡时...我的IP地址变为255.255.255.255(我无法解释原因):

    enter image description here

    另一个问题是登录弹出窗口有效,如果我有外面的micro SD卡。 。 。这很糟糕,因为我想从SD卡打开我的“迷你服务器”的主要网页。

          if(strstr(header, "YXJkdWlubzphZG1pbg==") != NULL) {
            client.println("HTTP/1.1 200 OK");
            client.println("Content-Type: text/html");
            client.println("Connection: close");
            client.println("Reading SD");
            if(strstr(header, "GET / HTTP/1.1")) {
              file = SD.open("ftp.htm");
                if (file) {
                   while(file.available()) {
                      client.write(file.read());
                     }
                    file.close();
                  } 
                  break;        
            } else {
              client.println("<!DOCTYPE HTML>");
             ..........
             ..........
    

    如何在卡上打开网络文件?如何在插入卡时解决IP问题?

0 个答案:

没有答案