Веб-сервер Ethernet Shield - Не удается найти index.htm файл

я только что получил EthernetShield и посмотрел учебник о том, как разместить html-страницу с его помощью, но я не могу найти свою html-страницу на SD-карте.

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

byte mac[] = {0xA8, 0x61,0x0A, 0xAE, 0x3A, 0xC4 };

EthernetServer server(80);

File webPage;

void setup() {
  Ethernet.begin(mac);
  server.begin();
  Serial.begin(9600);

  Serial.println(Ethernet.localIP());

  Serial.println("Initializing SD card...");
  if(!SD.begin(4)){
    Serial.println("ERROR - SD card initialization failed!");
    return;
  }
    Serial.println("SUCCESS - SD card initialized.");
    if(!SD.exists("index.htm")){
      Serial.println("ERROR - Can't find index.htm file!");
    }
      Serial.println("SUCCESS - Found  index.htm file.");
} 

void loop() {
   EthernetClient client = server.available();
   if(client){
    boolean currentLineIsBlank = true;
    while(client.connected()){
      if(client.available()){
        char c = client.read();
        if(c == '\n' && currentLineIsBlank){
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println();

          webPage = SD.open("index.htm");
          if(webPage){
            while(webPage.available()){
              client.write(webPage.read());
            }
            webPage.close();
          }
          break;
        }
        if(c == '\n'){
          currentLineIsBlank = true;
        }
        else if(c != '\r'){
          currentLineIsBlank = false;
        }
      }
    }
    delay(1);
    client.stop();
   }
}

Когда я сохраняю HTML-файл, я не могу сохранить его в формате .htm

, 👍-1

Обсуждение

То, что вы подали, - это не 369 байт?, @timemage

Вас просто смущает упоминание о "Microsoft Edge"?, @timemage

@timemage нет, это не так, @antisocialkid

Сообщается, что в файле содержится 369 байт. Итак, что же содержит файл, если не то, что вы хотели?, @timemage

@timemage файл содержит только HTML-код, вы можете увидеть скриншот моей ошибки ниже, в разделе ответов., @antisocialkid

Ответы, которые вы даете, не кажутся ужасно связанными с заданными вопросами, и я не знаю, что еще я могу сказать или попросить, чтобы помочь вам, кроме этого: ваш вопрос * нуждается в уточнении *. Дополнительная информация, которую вы предоставляете, должна быть отредактирована в вашем вопросе. Здесь недостаточно информации, чтобы я подумал, что то, что вы видите, неожиданно., @timemage

@timemage Я новичок и не могу сказать, что очень хорошо понимаю, в чем проблема с размером файла. Я просто создал html-файл с простой страницей, а затем загрузил файл на SD-карту. Когда я загружаю код в arduino, вы также можете видеть на картинке, что он не читает мой файл., @antisocialkid

Привет @antisocialkid и добро пожаловать на Arduino Stack Exchange. Было бы очень полезно, если бы вы могли добавить скриншот (или исходный текст) того, что находится внутри index.htm - файл на SDкарте. Для этого вставьте SD-карту в компьютер и откройте `index.htm - файл в текстовом редакторе вроде Блокнота., @sa_leinad


1 ответ


Лучший ответ:

2

Windows скрывает расширение от вас.

Файл, который вы показали, либо index.htm или index.html. Если это последнее, вы можете изменить параметр Windows на "показывать расширения для известных типов файлов" или изменить скетч, чтобы он использовал index.html вместо `index.htm . Я бы выбрал последнее, так как оно самое простое.

EDIT: библиотека SD, похоже, не любит расширения файлов длиной более 3 символов. Поэтому изменение кода для использования "index.html - не работает.

,

Я изменил скетч, но он все равно не работает [ошибка] (https://imgur.com/a/jcH9Je2 ), @antisocialkid

Вы изменили if(!SD.exists("index.htm ")){ to if(!SD.exists("index.html ")){как хорошо?, @Gerben

да, все еще не работает, @antisocialkid

Я предполагаю, что с этим файлом происходит что-то странное. Как вы его создали? Что вы увидите, если щелкните файл правой кнопкой мыши и выберите пункт свойства? Особенно, что он говорит после "типа файла"; какое расширение файла находится между фигурными скобками?, @Gerben

Тип файла: Microsoft Edge HTML Document (.html), и я создал его в коде Visual Studio. (Сохранить как> индекс (с расширением HTML), @antisocialkid

Странно. Файл выглядит нормально, но почему-то SD-библиотека не может найти его на SD-карте., @Gerben

кроме того, SD-карта уже имеет формат FAT32, @antisocialkid

Может быть, попробовать сделать это с помощью файла ".txt". У меня заканчиваются идеи., @Gerben

наконец-то Windows позволила мне изменить файл расширения на ".htm", и теперь он работает!, @antisocialkid

. Я думаю, что это связано с соглашением [DOS 8.3 filename convention] (https://en.wikipedia.org/wiki/8.3_filename ). Ему не нравятся расширения файлов длиннее (/other) 3., @Gerben

@antisocialkid если ответ был полезен для вас, вы должны проголосовать за него. Если это ответ на ваш вопрос, вы должны его "принять"., @timemage

Возможно, стоит добавить, что он, вероятно, доступен под своим коротким названием, которое, скорее всего, ИНДЕКС~1.HTM , @timemage