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 байт, но страница очень долго думает и выводится без картинки.
if (readString.indexOf("GET /images/on.png HTTP/1.1") >=0) { webFile = SD.open("images/on.png"); if(webFile){ Serial.println(webFile.size()); client.println("HTTP/1.1 200 OK"); client.println("Content-Type: image/gif"); while(webFile.available()) { client.write(webFile.read()); } webFile.close(); } }Судя по логам в хроме, картинку браузер получает, и даже определяет её размер, но всё равно не отображает
Разобрался, вот так заработало!
if (readString.indexOf("GET /images/off.png HTTP/1.1") >=0) { client.println("HTTP/1.1 200 OK"); client.println(); // забыл эту строку webFile = SD.open("images/off.png"); }