2017-07-05 9 views
1

Je veux construire un site Web par djnago. ce site pourrait être en mesure de prendre des valeurs de capteur de température qui est la connexion avec ma particule-Photon. J'ai vérifié le net mais je n'ai pas trouvé une libary compatible qui pourrait être relier mon Photon et le django encadrent. Y a-t-il une bibliothèque utile pour le faire? mon code « Temperature.ino »:voulez construire un site web par django pour prendre une valeur par capteur de température sur particule-Photon

#include <OneWire.h> 
OneWire ds = OneWire(D4); // 1-wire signal on pin D4 

unsigned long lastUpdate = 0; 

float lastTemp; 

void setup() { 
    Serial.begin(9600); 
    // Set up 'power' pins, comment out if not used! 
    pinMode(D3, OUTPUT); 
    pinMode(D5, OUTPUT); 
    digitalWrite(D3, LOW); 
    digitalWrite(D5, HIGH); 
} 

// up to here, it is the same as the address acanner 
// we need a few more variables for this example 

void loop(void) { 
    byte i; 
    byte present = 0; 
    byte type_s; 
    byte data[12]; 
    byte addr[8]; 
    float celsius, fahrenheit; 

    if (!ds.search(addr)) { 
    Serial.println("No more addresses."); 
    Serial.println(); 
    ds.reset_search(); 
    delay(250); 
    return; 
    } 

    // The order is changed a bit in this example 
    // first the returned address is printed 

    Serial.print("ROM ="); 
    for(i = 0; i < 8; i++) { 
    Serial.write(' '); 
    Serial.print(addr[i], HEX); 
    } 

    // second the CRC is checked, on fail, 
    // print error and just return to try again 

    if (OneWire::crc8(addr, 7) != addr[7]) { 
     Serial.println("CRC is not valid!"); 
     return; 
    } 
    Serial.println(); 

    // we have a good address at this point 
    // what kind of chip do we have? 
    // we will set a type_s value for known types or just return 

    // the first ROM byte indicates which chip 
    switch (addr[0]) { 
    case 0x10: 
     Serial.println(" Chip = DS1820/DS18S20"); 
     type_s = 1; 
     break; 
    case 0x28: 
     Serial.println(" Chip = DS18B20"); 
     type_s = 0; 
     break; 
    case 0x22: 
     Serial.println(" Chip = DS1822"); 
     type_s = 0; 
     break; 
    case 0x26: 
     Serial.println(" Chip = DS2438"); 
     type_s = 2; 
     break; 
    default: 
     Serial.println("Unknown device type."); 
     return; 
    } 

    // this device has temp so let's read it 

    ds.reset();    // first clear the 1-wire bus 
    ds.select(addr);   // now select the device we just found 
    // ds.write(0x44, 1);  // tell it to start a conversion, with parasite power on at the end 
    ds.write(0x44, 0);  // or start conversion in powered mode (bus finishes low) 

    // just wait a second while the conversion takes place 
    // different chips have different conversion times, check the specs, 1 sec is worse case + 250ms 
    // you could also communicate with other devices if you like but you would need 
    // to already know their address to select them. 

    delay(1000);  // maybe 750ms is enough, maybe not, wait 1 sec for conversion 

    // we might do a ds.depower() (parasite) here, but the reset will take care of it. 

    // first make sure current values are in the scratch pad 

    present = ds.reset(); 
    ds.select(addr); 
    ds.write(0xB8,0);   // Recall Memory 0 
    ds.write(0x00,0);   // Recall Memory 0 

    // now read the scratch pad 

    present = ds.reset(); 
    ds.select(addr); 
    ds.write(0xBE,0);   // Read Scratchpad 
    if (type_s == 2) { 
    ds.write(0x00,0);  // The DS2438 needs a page# to read 
    } 

    // transfer and print the values 

    Serial.print(" Data = "); 
    Serial.print(present, HEX); 
    Serial.print(" "); 
    for (i = 0; i < 9; i++) {   // we need 9 bytes 
    data[i] = ds.read(); 
    Serial.print(data[i], HEX); 
    Serial.print(" "); 
    } 
    Serial.print(" CRC="); 
    Serial.print(OneWire::crc8(data, 8), HEX); 
    Serial.println(); 

    // Convert the data to actual temperature 
    // because the result is a 16 bit signed integer, it should 
    // be stored to an "int16_t" type, which is always 16 bits 
    // even when compiled on a 32 bit processor. 
    int16_t raw = (data[1] << 8) | data[0]; 
    if (type_s == 2) raw = (data[2] << 8) | data[1]; 
    byte cfg = (data[4] & 0x60); 

    switch (type_s) { 
    case 1: 
     raw = raw << 3; // 9 bit resolution default 
     if (data[7] == 0x10) { 
     // "count remain" gives full 12 bit resolution 
     raw = (raw & 0xFFF0) + 12 - data[6]; 
     } 
     celsius = (float)raw * 0.0625; 
     break; 
    case 0: 
     // at lower res, the low bits are undefined, so let's zero them 
     if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms 
     if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms 
     if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms 
     // default is 12 bit resolution, 750 ms conversion time 
     celsius = (float)raw * 0.0625; 
     break; 

    case 2: 
     data[1] = (data[1] >> 3) & 0x1f; 
     if (data[2] > 127) { 
     celsius = (float)data[2] - ((float)data[1] * .03125); 
     }else{ 
     celsius = (float)data[2] + ((float)data[1] * .03125); 
     } 
    } 

    // remove random errors 
    if((((celsius <= 0 && celsius > -1) && lastTemp > 5)) || celsius > 125) { 
     celsius = lastTemp; 
    } 

    fahrenheit = celsius * 1.8 + 32.0; 
    lastTemp = celsius; 
    Serial.print(" Temperature = "); 
    Serial.print(celsius); 
    Serial.print(" Celsius, "); 
    Serial.print(fahrenheit); 
    Serial.println(" Fahrenheit"); 

    // now that we have the readings, we can publish them to the cloud 
    String temperature = String(fahrenheit); // store temp in "temperature" string 
    Particle.publish("temperature", temperature, PRIVATE); // publish to cloud 
    delay(5000); // 5 second delay 
} 

Répondre

0

Je pense que vous pouvez envoyer des données par HTTP à partir de votre photon (la plupart du temps, je l'ai entendu parler), et en utilisant HTTP appelle, vous pouvez envoyer des données à votre application Django .
Sur le côté Django, utilisez djangorestfraework pour créer des API.

+0

J'ai vérifié net. HTTP sera utile surtout. –

0

Je n'ai aucune idée sur Particle-Photon mais fondamentalement votre extension .ino montre que votre fichier est un fichier Arduino.

Arduino peut être connecté à python via une communication série. Dans le framework Django, vous pouvez utiliser cette communication série pour obtenir les données du capteur de température et retourner vos données logiques appliquées au format JSON (en utilisant le framework de repos django) pour récupérer les données dans arduino (dans votre cas photon).

+0

oui. Je vais essayer ça. –