2017-07-05 12 views
1

私はdjnagoによってWebサイトを構築したいと思います。このサイトは私の粒子Photonと接続している温度センサーから値を取ることができます。私はネットをチェックしましたが、Photonとdjangoフレームワークを接続できる互換性のあるライブラリが見つかりませんでした。これを行うのに有益な図書館がありますか? 私の「Temperature.ino」コード:djangoのウェブサイトを構築して、粒子 - フォトンの温度センサーで値を取得したい

#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 
} 

答えて

0

私はあなたが(ほとんどが、私はそれを聞いた)あなたの光子からHTTPを介してデータを送ることができると思うし、HTTPを使用して、あなたのDjangoアプリケーションにデータをプッシュすることができます呼び出します。
Django側では、APIを構築するためにdjangorestfraeworkを使用してください。

+0

私はnetをチェックしました。 HTTPはほとんどの場合役に立ちます。 –

0

私はParticle-Photonについて考えていませんが、基本的にあなたの.ino拡張子はあなたのファイルがArduinoファイルであることを示しています。

Arduinoはシリアル通信でPythonに接続できます。 Djangoフレームワークでは、シリアル通信を使用して温度センサーデータを取得し、ロジック適用されたデータをJSON形式(django restフレームワークを使用)で返すことでarduino(あなたの場合はパーティクルフォトン)のデータを取得できます。

+0

はい。私はこれを試みます。 –

関連する問題