enc28j опрос клиентов

Тема в разделе "Arduino & Shields", создана пользователем vankenshtein, 14 ноя 2014.

  1. vankenshtein

    vankenshtein Нерд

    Есть два клиента и один сервер. Ко всем трем подключены гироскопы.Суть вопроса: как вывести данные с двух клиентов и данные сервера на одной страничке?
    Библиотека http://adatum.ru/rabota-arduino-nano-s-setevy-m-kontrollerom-enc28j60.html
    Код клиента1:

    Код (Text):
    #include "I2Cdev.h"
    #include "MPU6050.h"
    #include "etherShield.h"
    #include "ETHER_28J60.h"

    #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
        #include "Wire.h"
    #endif
    MPU6050 accelgyro;
    int16_t ax, ay, az;
    int16_t gx, gy, gz;
    #define OUTPUT_READABLE_ACCELGYRO

    static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24};
    static uint8_t ip[4] = {192, 168, 0, 113};                    
    static uint16_t port = 80;                                  
    ETHER_28J60 e;

    void setup()
    {
      #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
            Wire.begin();
        #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE
            Fastwire::setup(400, true);
        #endif
      accelgyro.initialize();

      e.setup(mac, ip, port);
    }

    void loop()
    {
      // read raw accel/gyro measurements from device
        accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
        // these methods (and a few others) are also available
        //accelgyro.getAcceleration(&ax, &ay, &az);
        //accelgyro.getRotation(&gx, &gy, &gz);
     

      if (e.serviceRequest())
      {
        e.print("<H3>12 FLOOR VALUES</H3><br/><table border=1>");
        e.print("<tr><th>OS</th><th>Value</th></tr>");
        e.print("<tr><td>"); e.print("ax"); e.print("</td><td>"); e.print(ax); e.print("</td></tr>");
        e.print("<tr><td>"); e.print("ay"); e.print("</td><td>"); e.print(ay); e.print("</td></tr>");
        e.print("<tr><td>"); e.print("az"); e.print("</td><td>"); e.print(az); e.print("</td></tr>");
        e.print("<tr><td>"); e.print("gx"); e.print("</td><td>"); e.print(gx); e.print("</td></tr>");
        e.print("<tr><td>"); e.print("gy"); e.print("</td><td>"); e.print(gy); e.print("</td></tr>");
        e.print("<tr><td>"); e.print("gz"); e.print("</td><td>"); e.print(gz); e.print("</td></tr>");
        e.print("</table>");
        e.respond();
      }
      delay(100);
    }
     
    Код клиента2:
    Код (Text):
    #include "I2Cdev.h"
    #include "MPU6050.h"
    #include "etherShield.h"
    #include "ETHER_28J60.h"

    #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
        #include "Wire.h"
    #endif
    MPU6050 accelgyro;
    int16_t ax, ay, az;
    int16_t gx, gy, gz;
    #define OUTPUT_READABLE_ACCELGYRO

    static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x00, 0x10, 0x24};
    static uint8_t ip[4] = {192, 168, 0, 114};                    
    static uint16_t port = 80;                                  
    ETHER_28J60 e;

    void setup()
    {
      #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
            Wire.begin();
        #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE
            Fastwire::setup(400, true);
        #endif
      accelgyro.initialize();

      e.setup(mac, ip, port);
    }

    void loop()
    {
      // read raw accel/gyro measurements from device
        accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
        // these methods (and a few others) are also available
        //accelgyro.getAcceleration(&ax, &ay, &az);
        //accelgyro.getRotation(&gx, &gy, &gz);
     

      if (e.serviceRequest())
      {
        e.print("<H3>6 FLOOR VALUES</H3><br/><table border=1>");
        e.print("<tr><th>OS</th><th>Value</th></tr>");
        e.print("<tr><td>"); e.print("ax"); e.print("</td><td>"); e.print(ax); e.print("</td></tr>");
        e.print("<tr><td>"); e.print("ay"); e.print("</td><td>"); e.print(ay); e.print("</td></tr>");
        e.print("<tr><td>"); e.print("az"); e.print("</td><td>"); e.print(az); e.print("</td></tr>");
        e.print("<tr><td>"); e.print("gx"); e.print("</td><td>"); e.print(gx); e.print("</td></tr>");
        e.print("<tr><td>"); e.print("gy"); e.print("</td><td>"); e.print(gy); e.print("</td></tr>");
        e.print("<tr><td>"); e.print("gz"); e.print("</td><td>"); e.print(gz); e.print("</td></tr>");
        e.print("</table>");
        e.respond();
      }
      delay(100);
    }
     
    Как серверу получить данные с этих клиентов?
     
    Последнее редактирование: 14 ноя 2014
  2. AlexVS

    AlexVS Гик

    Может наоборот, клиенты должны отправить данные на сервер?
     
  3. vankenshtein

    vankenshtein Нерд

    Так и написано: Как серверу получить данные с этих клиентов?
     
  4. AlexVS

    AlexVS Гик

    Сервер должен обрабатывать GET запросы, а клиент формировать эти запросы, в которых и передаются необходимые параметры.
     
  5. vankenshtein

    vankenshtein Нерд

    А вы не могли бы подсказать как это сделать на моем примере?
     
  6. AlexVS

    AlexVS Гик

    Ну серверная часть у меня все таки работает на WEB сервере, поэтому там за это беспокоится не нужно было. А на клиенте формируется строка примерно следующего содержания:
    Код (Text):
    void CreateDataString()
    {
      dataString = "GET /cottage/?L=";
      dataString += User;
      dataString += "&Ps=";
      dataString += Passw;
      dataString += "&TC=";
      dataString += sensor.T;
      dataString += "&HC=";
      dataString += sensor.H;
      dataString += "&PC=";
      dataString += sensor.P;
      dataString += "&D=";
      dataString += TwoDigit(day());
      dataString += ".";
      dataString += TwoDigit(month());
      dataString += "-";
      dataString += TwoDigit(hour());
      dataString += ":";
      dataString += TwoDigit(minute());
    }
     
    А далее вызываешь нечто подобное:
    Код (Text):

    bool httpRequest()
    {
      if (client.connect(server, 80))
      {
        client.println(dataString);      
        client.println();
        client.println("Connection: close");
        client.println();
        EthernetClientRead();
        client.stop();
        ok = true;
      }
    }

     
     
  7. vankenshtein

    vankenshtein Нерд

    спасибо за подсказку, попробую разобраться. это все в клиенте прописывается, я правильно понял? А как эти данные принять серверу не знаете?