W5100 картинки на карте памяти
- Войдите на сайт для отправки комментариев
Пт, 13/11/2015 - 10:25
Здравствуйте!
Хочу сделать веб-сервер, который будет управлять светодиодами.
index.htm удалось разместить на SD-карте, а вот картинки выводить не выходит.
Посмотрел много решений, копировал код себе, но что-то никак не показыавется картика!
В 40 строке в Сериал приходит подтверждение, что клиент запросил картинку, а сервер нашёл её на карте памяти.
Возможно, ошибка в 41-43 строках.
EthernetClient client = server.available(); if (client) { while (client.connected()) { if (client.available()) { char c = client.read(); if (readString.length() < 30) { readString.concat(c); } if (c == '\n') { //Проверяем строку от клиента и моргаем светодиодами if(readString.indexOf("bedLevel1=1") >=0) { digitalWrite(bedPin1, HIGH); BEDLEDON1 = true; }else if(readString.indexOf("bedLevel1=0")>=0){ digitalWrite(bedPin1, LOW); BEDLEDON1 = false; }else if(readString.indexOf("bedLevel2=1") >=0) { digitalWrite(bedPin2, HIGH); BEDLEDON2 = true; }else if(readString.indexOf("bedLevel2=0")>=0){ digitalWrite(bedPin2, LOW); BEDLEDON2 = false; } //отправляем HTML страницу с SD карты client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(); webFile = SD.open("index.htm"); if (webFile) { while(webFile.available()) { client.write(webFile.read()); } webFile.close(); } //узнаём, запросил ли клиент картинку, если да, отправляем if (readString.indexOf("GET /images/on.png HTTP/1.1") >=0) { webFile = SD.open("images/on.png"); if(webFile){ Serial.println("file ok"); // подтверждение картинки client.println("HTTP/1.1 200 OK"); client.println("Content-Type: image/gif"); client.write(webFile.read()); } webFile.close(); } readString=""; client.stop(); } } } }
Любой файл нужно отдавать побайтно. У вас, насколько я понял - попытка отдать его за раз (фактически - первый байт). Сделайте так-же, как отдаете index.htm.
Сделал!
Картинка весит 149 байт, но страница очень долго думает и выводится без картинки.
Судя по логам в хроме, картинку браузер получает, и даже определяет её размер, но всё равно не отображает
Разобрался, вот так заработало!