как на одной странице отображать показания с трех enc28j mpu6050

vankenshtein
Offline
Зарегистрирован: 15.04.2014

Попробую поподробнее обьяснить заЕдачу. Есть 3 ардуинки(нано), 3 етернет модуля enc28j и три акселерометра установлены в разных помещениях, как сделать что б со всех трех датчиков показания отображались на одной странице?

 

Железо собрал, скетчи примеров работают. Помогите пожалуйста

vankenshtein
Offline
Зарегистрирован: 15.04.2014

Вот скетч, на всех трех одинаковый только мак адреса и айпишники разные



// I2Cdev and MPU6050 must be installed as libraries, or else the .cpp/.h files
// for both classes must be in the include path of your project
#include "I2Cdev.h"
#include "MPU6050.h"
#include "etherShield.h"
#include "ETHER_28J60.h"

// Arduino Wire library is required if I2Cdev I2CDEV_ARDUINO_WIRE implementation
// is used in I2Cdev.h
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
    #include "Wire.h"
#endif

// class default I2C address is 0x68
// specific I2C addresses may be passed as a parameter here
// AD0 low = 0x68 (default for InvenSense evaluation board)
// AD0 high = 0x69
MPU6050 accelgyro;
//MPU6050 accelgyro(0x69); // <-- use for AD0 high

int16_t ax, ay, az;
int16_t gx, gy, gz;



// uncomment "OUTPUT_READABLE_ACCELGYRO" if you want to see a tab-separated
// list of the accel X/Y/Z and then gyro X/Y/Z values in decimal. Easy to read,
// not so easy to parse, and slow(er) over UART.
#define OUTPUT_READABLE_ACCELGYRO

// uncomment "OUTPUT_BINARY_ACCELGYRO" to send all 6 axes of data as 16-bit
// binary, one right after the other. This is very fast (as fast as possible
// without compression or data loss), and easy to parse, but impossible to read
// for a human.
//#define OUTPUT_BINARY_ACCELGYRO


#define LED_PIN 13
bool blinkState = false;

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

void setup() {
    // join I2C bus (I2Cdev library doesn't do this automatically)
    #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
        Wire.begin();
    #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE
        Fastwire::setup(400, true);
    #endif

    // initialize serial communication
    // (38400 chosen because it works as well at 8MHz as it does at 16MHz, but
    // it's really up to you depending on your project)
    Serial.begin(38400);

    // initialize device
    Serial.println("Initializing I2C devices...");
    accelgyro.initialize();

    // verify connection
    Serial.println("Testing device connections...");
    Serial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");
    ethernet.setup(mac, ip, port);
    // use the code below to change accel/gyro offset values
    /*
    Serial.println("Updating internal sensor offsets...");
    // -76	-2359	1688	0	0	0
    Serial.print(accelgyro.getXAccelOffset()); Serial.print("\t"); // -76
    Serial.print(accelgyro.getYAccelOffset()); Serial.print("\t"); // -2359
    Serial.print(accelgyro.getZAccelOffset()); Serial.print("\t"); // 1688
    Serial.print(accelgyro.getXGyroOffset()); Serial.print("\t"); // 0
    Serial.print(accelgyro.getYGyroOffset()); Serial.print("\t"); // 0
    Serial.print(accelgyro.getZGyroOffset()); Serial.print("\t"); // 0
    Serial.print("\n");
    accelgyro.setXGyroOffset(220);
    accelgyro.setYGyroOffset(76);
    accelgyro.setZGyroOffset(-85);
    Serial.print(accelgyro.getXAccelOffset()); Serial.print("\t"); // -76
    Serial.print(accelgyro.getYAccelOffset()); Serial.print("\t"); // -2359
    Serial.print(accelgyro.getZAccelOffset()); Serial.print("\t"); // 1688
    Serial.print(accelgyro.getXGyroOffset()); Serial.print("\t"); // 0
    Serial.print(accelgyro.getYGyroOffset()); Serial.print("\t"); // 0
    Serial.print(accelgyro.getZGyroOffset()); Serial.print("\t"); // 0
    Serial.print("\n");
    */

    // configure Arduino LED for
    pinMode(LED_PIN, OUTPUT);
}

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);

 /*   #ifdef OUTPUT_READABLE_ACCELGYRO
        // display tab-separated accel/gyro x/y/z values
        Serial.print("a/g:\t");
        Serial.print(ax); Serial.print("\t");
        Serial.print(ay); Serial.print("\t");
        Serial.print(az); Serial.print("\t");
        Serial.print(gx); Serial.print("\t");
        Serial.print(gy); Serial.print("\t");
        Serial.println(gz);
    #endif

    #ifdef OUTPUT_BINARY_ACCELGYRO
        Serial.write((uint8_t)(ax >> 8)); Serial.write((uint8_t)(ax & 0xFF));
        Serial.write((uint8_t)(ay >> 8)); Serial.write((uint8_t)(ay & 0xFF));
        Serial.write((uint8_t)(az >> 8)); Serial.write((uint8_t)(az & 0xFF));
        Serial.write((uint8_t)(gx >> 8)); Serial.write((uint8_t)(gx & 0xFF));
        Serial.write((uint8_t)(gy >> 8)); Serial.write((uint8_t)(gy & 0xFF));
        Serial.write((uint8_t)(gz >> 8)); Serial.write((uint8_t)(gz & 0xFF));
    #endif */
    
    
    
    if (ethernet.serviceRequest())
  {
    
     
   
  
    
    ethernet.print("<meta http-equiv='refresh' content='5'/><center><H1>12 FLOOR</H1></center><center><b>MPU6050/GY512:<br></b>");
    ethernet.print("<b>AY.........");
    ethernet.print(ay);
    ethernet.print("<br></b>");
    ethernet.print("<b>AX.........");
    ethernet.print(ax);
    ethernet.print("<br></b>");
    ethernet.print("<b>AZ.........");
    ethernet.print(az);
    ethernet.print("<br></b>");
    ethernet.print("<b>GY.........");
    ethernet.print(gy);
    ethernet.print("<br></b>");
    ethernet.print("<b>GX.........");
    ethernet.print(gx);
    ethernet.print("<br></b>");
    ethernet.print("<b>GZ.........");
    ethernet.print(gz);
    ethernet.print("<br></b>");
    
    
   
     ethernet.respond();
  }

    // blink LED to indicate activity
    blinkState = !blinkState;
    digitalWrite(LED_PIN, blinkState);
    delay(100);
}

Подскажите пожалуйста что дальше делать, как данные со всех трех дуин на одной странице отобразить?

Araris
Offline
Зарегистрирован: 09.11.2012

vankenshtein пишет:

Попробую поподробнее обьяснить заЕдачу. Есть 3 ардуинки(нано), 3 етернет модуля enc28j и три акселерометра установлены в разных помещениях, как сделать что б со всех трех датчиков показания отображались на одной странице?

Одна из Ардуин должна стать Главной Ардуиной, а именно:

- собирать данные с Неглавных Ардуин (например, забирая с их страниц);

- формировать из собранных плюс собственных данных страницу.

vankenshtein
Offline
Зарегистрирован: 15.04.2014

Это понятно. Но как это реализовать? Не могли бы вы подсказать

Araris
Offline
Зарегистрирован: 09.11.2012

Простите, но я уже подсказал.

art100
Offline
Зарегистрирован: 09.03.2014

vankenshtein пишет:
...отображались на одной странице? Железо собрал, скетчи примеров работают. Помогите пожалуйста

человек не понимает оcнов пострения https://ru.wikipedia.org/wiki/Веб-сервер

на мелких контроллерчиках поднят его это даже сейчас исскуство

элементарной схемы

1 веб

3 клиента

нарисовать не в состянии

шиза