web-сервер с flash-вставками

x-fish
Offline
Зарегистрирован: 30.01.2012

Добрый день!

Подскажите пожалуйста, можно ли сделать на Arduino web-сервер с вставками Flash?

Суть такая - нужно, чтобы на Arduino была записана страница index.html и файл флеш. Этот флеш размещается на странице и предназначен для управления одним светодиода и оптроном. Итоговый результат пока мне нужен примерно такой же, как в проекте:  http://robocraft.ru/blog/238.html, только там управление идет из HTML страницы, а мне нужно, чтобы было из ролика флеш, который будет реализовывать нужный мне функционал. Повторюсь - пока задача стоит следующая - просто из флеш управлять подобным светодиодом.

Как передать из флеш команду в HTML-страницу я знаю. Проблема больше заключается в том, можно ли этот файл флеш записать так, чтобы он потом при подключении к этому мини веб-серверу был выведен на странице в браузере.

Я думал сделать следующее: взять Arduino UNO 2011, Ethernet Shield W5100 c разьемом для MicroSD, карту MicroSD, светодиод. На карту MicroSD записать файл index.html, файл флеш-ролика, затем при подключении к этому веб-серверу чтобы открывалась страница с флеш, и я управляю из флеш свечением светодиода.

Приходилось ли сталкиваться  с подобными задачами?

С уважением...

step962
Offline
Зарегистрирован: 23.05.2011

 Сталкиваться не приходилось.

Может, это поможет - arduino.cc/playground/Interfacing/Flash

Или это - www.arduino.nl/

x-fish
Offline
Зарегистрирован: 30.01.2012

Задачу можно разбить на два этапа:

1. Записать на MicroSD карту файлы index.html и флеш, назначить  Ethernet Shield ip-адрес, организовать, чтобы при подключении к Arduino выводилась страница index.html  с флеш.

2. Организовать отправку из флеш обратно в Arduino простых команд на включение и выключение светодиода.

LEVV2006
LEVV2006 аватар
Offline
Зарегистрирован: 15.04.2011

Решил написать сюда так как темы мне показались схожими.))) Я являюсь обладателем уродского шилда DFRobot Ethernet Shield на чипе W5100. Что касается Ethernet то там всё нормально. Но sd карта не работает. Я выяснил почему. Вопрос не в этом. Собрал я пример sd карты с хабра на Prototyping Shield. Когда соединены arduino и proto то после заливки проги всё работает нормально. Как и должно быть. НО когда на arduino ставишь Ethernet Shield а сверху него proto то после заливки проги sd карта не работает. Помогает только полное выключение питание с последующим включением. Тогда sd карта начинает работать. В чём может быть проблема?

И кроме того это была предыстория)))) У меня давно возникла идея: можно ли залить на sd карту полноценные страницы сайта с картинками и в том числе с флешем. Через браузер управлять портами для начала.

Всё усугубляется тем что я не очень селён в программировании а web и подавно.
 

Dmitry K
Offline
Зарегистрирован: 11.08.2011

ресурсами ардуины вы врятли справетесь хотя не факт , хтмл страница мне кажется это максимум на что способна ардуина хотя тоже не факт, говорю так потому что пытаюсь  запустить веб на роутере, а роутер  является одноплатным компьютером под управлением ос линукс и имеющий оперативную память и флэш память для данных и работающий на 32х битном процессоре мипс архитектуры что вовсе не сопоставимо с 8ми бытным контроллером авр. хотя все зависит от поставленной задачи если будет достаточно нелепого хтмл то ресурсов я думаю хватит, а если шагнуть дальше применить базы данных для сохранения промежуточных параметров состояния датчиков обработчик php то вам я бы порекомендовал arduino.ru/forum/programmirovanie/arduino-upravlenie-cherez-veb-brauzer#comment-5291 недавно открытую тему гда рассматриваюся схожие вопросы, еси в паре слов то вам нада подключать ардуину к какомуто веб серверу либо поднятому на ПК либо поднятому например на вайфай роутере либо на чемто другом

x-fish
Offline
Зарегистрирован: 30.01.2012

Дело в том, что HTML открывается и полностью обрабатывается на компьютере. Также как картинки и флеш. Они хранятся на карте в виде файлов, которые нужно просто прочитать. Соответственно вся работа, которую делает Arduino - это просто передал по сети эти файлы.

Это РНР и им подобные являются серверными и исполняются на стороне сервера, со всеми вытекающими требованиями к наличию обработчика типа Apache (как на реальных серверах) и вычислительных мощностей.

LEVV2006
LEVV2006 аватар
Offline
Зарегистрирован: 15.04.2011

x-fish пишет:

Дело в том, что HTML открывается и полностью обрабатывается на компьютере. Также как картинки и флеш. Они хранятся на карте в виде файлов, которые нужно просто прочитать. Соответственно вся работа, которую делает Arduino - это просто передал по сети эти файлы.

Это РНР и им подобные являются серверными и исполняются на стороне сервера, со всеми вытекающими требованиями к наличию обработчика типа Apache (как на реальных серверах) и вычислительных мощностей.

Я пробовал так делать. Читает с флеши текстовый файл с хтмл кодом и передает. Но у меня все слова были с пробелом после каждой буквы.

x-fish
Offline
Зарегистрирован: 30.01.2012

LEVV2006 пишет:

 

Я пробовал так делать. Читает с флеши текстовый файл с хтмл кодом и передает. Но у меня все слова были с пробелом после каждой буквы.

Не совсем понял, что Вы имеете ввиду. Вы считывали через браузер? И что значит "все слова были с пробелом после каждой буквы"? В переданном тексте добавлялись по пробелу после каждой буквы? Например: "п р и м е р  т е к с т а "? 

Могли бы поподробнее рассказать о проекте? Может быть и я смогу Вам чем-то помочь.

LEVV2006
LEVV2006 аватар
Offline
Зарегистрирован: 15.04.2011

Да задумал такую вещь. Не знаю реализуема ли она. Я не сильно селён в программировании а в web делах и подавно. Это так предисловие)))

Хотел сделать маленький web сервер чтобы заходить на arduino через браузер и управлять портами (вкл/вык) для начала. . А там всё красиво отображается (возможно с картинками и т.д)

Грубо скрестил 2 стандартных примера web server и sd карту. По алгоритму с карточки из файла должна считаться строка <h1>LED control</h1> и отобразиться в браузере.

Путём экспериментов нашёл оптимальную строку кода

client.println(char(myFile.read()));

в результате в браузере отображается < h 1 > L E D c o n t r o l < / h 1 >

я уж не знаю что делать и с чем это связано? + всё усугубляется тем что sd карточка плохо работает с езернет шилдом
 

x-fish
Offline
Зарегистрирован: 30.01.2012

ОК. Скажите, а у вас  строка "<h1>LED control</h1>" записана в файл с каким расширением? Могли бы Вы привести здесь код для ардуины? Каким браузером пользуетесь? 

Дело в том, что обычно HTML код записывается в файл с расширением html, например - index.html. Вы так делали? Хотя, тот же Internet Explorer у меня отобразил эту строку без тегов h1. Вы код записывали с учетом всех минимально необходимых тегов, которые должны быть? Ну, например:

<html>
<head>
<title>LED control</title>
</head>
<body>
LED control - example
<br>
Добро пожаловать! :)
</body>
</html>

И еще подумал - если ардуина сама добавляет в html код по лишнему пробелу после каждого символа, то может сделать цикл, в котором пропускать каждый второй символ, считываемый из файла?

 

LEVV2006
LEVV2006 аватар
Offline
Зарегистрирован: 15.04.2011

это не совсем тот код который указан в стандартных примерах. Но он у меня боле менее работает с sd картой.
В нём много лишнего.
 

Пользуюсь оперой.
Попробовал сохранить файл в хтмл. Он вообще не читается
 

Вот здесь есть пример. Но я ничего не понимаю

#include <SPI.h>
#include <Client.h>
#include <Ethernet.h>
#include <Server.h>
#include <Udp.h>
#include <SD.h>
char t;
File myFile;


byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
byte ip[] = { 
  192, 168, 169, 4 };			// ip in lan
byte gateway[] = { 
  192, 168, 169, 1 };			// internet access via router
byte subnet[] = { 
  255, 255, 255, 0 };                   //subnet mask
Server server(80);                                      //server port




void setup()
{
  Ethernet.begin(mac, ip, gateway, subnet);
  Serial.begin(9600);
  Serial.print("Initializing SD card...");  
  pinMode(2, OUTPUT);
  if (!SD.begin(2)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");
}

void loop(){
  Client client = server.available();
  if (client) {
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (c == '\n') {


          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();

          client.println("<h1>LED control</h1>");






          myFile = SD.open("test.txt");
          if (myFile) {
            Serial.println("index.html");

            // читаем из файла, пока не достигнем конца файла:
            while (myFile.available()) {

              client.println(char(myFile.read()));

            }
            // закрываем файл:
            myFile.close();
          } 
          else {
            // а если не открылся, то пишем об ошибке:
            Serial.println("error opening index.html");
          }   






          client.println("<hr />");
          client.println("<hr />");
          client.println("</body></html>");
          client.stop();
        }
      }
    }
  }
}