arduino + внешний VPS-сервер = производительность?

Тема в разделе "Arduino & Shields", создана пользователем Александр Земсков, 20 дек 2013.

  1. Столкнулся с проблемой, что в моем проекте ардуино может не хватить мощности и главное памяти. Тут я понял, что пора бросать проект и идти спать. Тут я понял, что ардуино нужен внешний помощник, но кто имеет много памяти и быстро выполняет сложнейшие операции за доли секунды??? ...и тут я вспомнил про свой VPS сервер... Вот собственно вопрос: как сделать так, чтобы ардуино через Ethernet shield подключалась к серверу, на сервере запущена программа. которая ждет подключения ардуино, как только ардино подключилась, серевер ждет команды управления (например прочитать что-то из файла (я себе это представляю вроде набора команд с ардуино к примеру: read_file /cd/project/files/test.txt) или наоборот записать в него (file_write /cd/project/files/test.txt ***ждать ответа от сервера "ok" далее отправляем, что писать (@-перевод на следующую строку)*** hello@world) или выполнить арифметическую операцию (&1 сложение; &2 вычитание; &3 умножение; &4 деление; # получить ответ) КСТАТИ! ЧУТЬ НЕ ЗАБЫЛ! СОЕДИНЕНИЕ ДОЛЖНО ЗАЩИЩАТЬСЯ ПАРОЛЕМ!
    Вот примерно как я представляю общение с сервером (// - это комментарий)
    arduino: hi //типо пинг сервера
    server: hi //ответ на пинг
    server: login //запрос логина
    arduino: abc //логин
    server: (если пароль/логин правильный отправляет ok, если нет no) ok //этот логин правельный
    server: pass //запрос пароля
    arduino: 123 //пароль
    server: ok
    arduino: &1
    server: ok
    server: a
    arduino: 2
    server: ok
    server: b
    arduino: 2
    server: ok
    arduino: #
    server: 4 //(2+2=4)
    arduino: &2
    server: ok
    server: a
    arduino: same //(вот тут-то самое интересное same означает результат предыдущего действия (он //хранится на сервере в переменной) в нашем случае он=4)
    server: ok
    server: b
    arduino: 3
    server: ok
    arduino: #
    server: 1 //(4-3=1)
    arduino: file_write /cd/test/test.txt //записать в файл test.txt
    server: ok
    arduino: hello@world //записать hello на первой строке, а world на второй
    server: ok
    arduino: ext //закрытие соединения
    server: ext //исключение ошибок
    arduino: ext //исключение ошибочных отсоединений
    не подскажете, как такое осуществить?)
     
  2. Megakoteyka

    Megakoteyka Оракул Модератор

    А на какого рода операции не хватает памяти и вычислительной мощности, если не секрет? Возможно, проблему можно решить и без сервера.
     
  3. синтез речи, слабенький, но синтез)
     
  4. Megakoteyka

    Megakoteyka Оракул Модератор

    Александр Земсков нравится это.
  5. Спасибо, а не подскажете серверную часть? (ведь, на сколько я понял эта клиентская)
     
  6. Megakoteyka

    Megakoteyka Оракул Модератор

    Это не клиентская часть, а пример использования машины состояний. Поняв логику данного подхода, Вы легко сможете написать и клиент, и сервер под свои нужды.
    Начните с составления протокола. Необходимо определить все возможные состояния клиента и сервера, а также условия переходов между этими состояниями. Важно на этапе продумывания протокола представлять себе, каким образом будет обрабатываться каждое состояние, иначе можно придумать такой протокол, который не получится реализовать. Продумать протокол - половина дела. Потом останется просто реализовать соответствующие машины состояний на стороне клиента и сервера, это уже больше дело техники.
    Если есть вопросы по машине состояний, задавайте в теме про машину. По протоколам - здесь.
     
    Последнее редактирование: 20 дек 2013
  7. большое спасибо!
    я тут уже немного вроде нашаманил
    Код (Text):
    int err_code = 0; //код ошибки
    int err_numb = 0; //общее кол-во ошибок если будет больше 5, выдавать сообщение "Соединение не надежно, сервер не будет подключен"
    int key_server = 0; //ключ сервера
    int key_client = 2423; //ключ клиента
    boolean server_connect = true; //подключение к серверу, идет-тру не идет-фолс
    boolean server_connected = false; //подключен сервер? да-тру нет-фолс
    char ip = xxx.xxx.xxx.xxx; //айпи удаленного сервера
    int ip1 = xxx; //первая часть айпи
    int ip2 = xxx; //вторая
    int ip3 = xxx; //третья
    int ip4 = xxx; //четвертая
    int server_get_key = 0; //часть ключа для генерации
    char username = lalkalalka; //имя пользователя, при подключении со значением rootlalka сервер открывает больше своих возможностей
    char password = 1234567; //пароль

    void key_generate(){
      key_server = ((ip1 + ip2 + ip3 + ip4)/4) + server_get_key;
      key_client = server_get_key + key_client;
    }

    void server_connection_start(){
     
    }

    void