2013-05-30 4 views
0

Arduino 동력의 Air Conditioner Remote를 구축 중입니다. 나는 실제 IR 리모트 트리거가 pusher.com에서 작동하지만, 방의 온도와 AC 유닛의 현재 상태 (켜기 또는 끄기, 포토 레지스터를 사용하여 전원 LED에서 읽음)에 대한 피드를 추가하려고합니다.Arduino가 Xively (Cosm) 및 Pusher를 사용하려고하면 얼입니다.

Xively 코드를 스케치에 추가하고 업로드하면 arduino가 고정됩니다. int로 축소했습니다 ret = xivelyclient.put (feed, xivelyKey); xively 라이브러리에서 put 함수를 호출합니다. 이 행을 주석 처리하면 푸셔 항목이 평소대로 실행됩니다.

나는 어떻게 푸셔를 만들고 잠깐 공존 할 수 있습니까? 이더넷 쉴드 연결을 위해 경쟁하고 있습니까?

#include <SPI.h> 
#include <Ethernet.h> 
#include <PusherClient.h> 
#include <HttpClient.h> 
#include <Xively.h> 

byte mac[] = { 
    0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEE }; 


PusherClient client; 

char xivelyKey[] = "myxivelykeyhere"; 
#define xivelyFeed 1454201282 



int IRledPin = 8;  
int sensorPin = 0; 



// Define the strings for our datastream IDs 
char sensorId[] = "temp"; 
XivelyDatastream datastreams[] = { 
    XivelyDatastream(sensorId, strlen(sensorId), DATASTREAM_FLOAT), 
}; 

// Finally, wrap the datastreams into a feed 
XivelyFeed feed(15552, datastreams, 1 /* number of datastreams */); 
EthernetClient Eclient; 
XivelyClient xivelyclient(Eclient); 



void setup() { 
    pinMode(IRledPin,OUTPUT); 



    Serial.begin(9600); 

    Serial.println("I'm Alive"); 

    if (Ethernet.begin(mac) == 0) { 
    Serial.println("Init Ethernet failed"); 
    for(;;) 
     ; 
    } 

    if(client.connect("336b1e021d66c95fad49")) { 
    client.bind("togglePower", togglePower); 

    client.subscribe("ac"); 
    Serial.println("Connected!"); 
    } 
    else { 
    while(1) { 
    } 
    Serial.println("Can't connect!!"); 
    } 
} 

void loop() { 
    if (client.connected()) { 
    client.monitor(); 
    } 

    int reading = analogRead(sensorPin); 
    float voltage = reading * 5.0; 
    voltage /= 1024.0; 
    float temperatureC = (voltage - 0.5) * 100 ; 

float temperatureF = (temperatureC * 9.0/5.0) + 32.0; 
Serial.print(temperatureF); Serial.println(" degrees F"); 


    datastreams[0].setFloat(temperatureF); 
    Serial.println("Uploading it to Xively"); 
    int ret = xivelyclient.put(feed, xivelyKey); 
    Serial.print("xivelyclient.put returned "); 
// Serial.println(ret); 
    delay(8000); 


} 


void togglePower(String data) { 
    Serial.println("togglePower() was triggered"); 
    pulseIR(8860); 
    delayMicroseconds(4360); 
    pulseIR(600); 
    delayMicroseconds(1580); 
    pulseIR(600); 
    delayMicroseconds(500); 
    pulseIR(600); 
    delayMicroseconds(480); 
    pulseIR(600); 
    delayMicroseconds(500); 
    pulseIR(600); 
    delayMicroseconds(480); 
    pulseIR(600); 
    delayMicroseconds(500); 
    pulseIR(600); 
    delayMicroseconds(500); 
    pulseIR(580); 
    delayMicroseconds(1600); 
    pulseIR(600); 
    delayMicroseconds(480); 
    pulseIR(600); 
    delayMicroseconds(1600); 
    pulseIR(600); 
    delayMicroseconds(1580); 
    pulseIR(600); 
    delayMicroseconds(500); 
    pulseIR(580); 
    delayMicroseconds(520); 
    pulseIR(580); 
    delayMicroseconds(1600); 
    pulseIR(600); 
    delayMicroseconds(1580); 
    pulseIR(600); 
    delayMicroseconds(500); 
    pulseIR(600); 
    delayMicroseconds(1580); 
    pulseIR(600); 
    delayMicroseconds(500); 
    pulseIR(580); 
    delayMicroseconds(500); 
    pulseIR(600); 
    delayMicroseconds(500); 
    pulseIR(600); 
    delayMicroseconds(500); 
    pulseIR(580); 
    delayMicroseconds(500); 
    pulseIR(600); 
    delayMicroseconds(500); 
    pulseIR(580); 
    delayMicroseconds(1600); 
    pulseIR(580); 
    delayMicroseconds(520); 
    pulseIR(580); 
    delayMicroseconds(1600); 
    pulseIR(600); 
    delayMicroseconds(1600); 
    pulseIR(520); 
    delayMicroseconds(1660); 
    pulseIR(520); 
    delayMicroseconds(1660); 
    pulseIR(520); 
    delayMicroseconds(1680); 
    pulseIR(580); 
    delayMicroseconds(1600); 
    pulseIR(520); 
    delayMicroseconds(580); 
    pulseIR(520); 
    delayMicroseconds(41480); 
    pulseIR(8840); 
    delayMicroseconds(2200); 
    pulseIR(540); 
    delayMicroseconds(28564); 
    pulseIR(8880); 
    delayMicroseconds(2140); 
    pulseIR(560); 

} 
void pulseIR(long microsecs) { 
    // we'll count down from the number of microseconds we are told to wait 

    cli(); // this turns off any background interrupts 

    while (microsecs > 0) { 
    // 38 kHz is about 13 microseconds high and 13 microseconds low 
    digitalWrite(IRledPin, HIGH); // this takes about 3 microseconds to happen 
    delayMicroseconds(10);   // hang out for 10 microseconds 
    digitalWrite(IRledPin, LOW); // this also takes about 3 microseconds 
    delayMicroseconds(10);   // hang out for 10 microseconds 

    // so 26 microseconds altogether 
    microsecs -= 26; 
    } 

    sei(); // this turns them back on 
} 

답변

1

대부분의 가능성이 아두 이노는 당신이, RAM에서 measure it해야 실행 : 아래

코드 (내가 이더넷 방패는 4 개 개의 동시 연결을 처리 할 수 ​​있다는 것을 읽을 생각했다). 또한

그럴 수 :

  • 라이브러리를 사용하지 않고 Xively에 데이터를 전송 (예 파일에서 아두 이노 IDE
    에서 찾을 수 있습니다 -»예 -»이더넷 -»(CosmClient, CosmClientString)

    그 오히려 오래된하지만 여전히 좋아 작동합니다, 당신은

  • 정지 사용 푸셔 Xively와 COSM를 교체하고 당신에게 매우
    의를 제공해야하는 ws://api.xively.com:8080/을 사용할 수 있습니다 imilar 채널/subcribe 기능을 게시하거나 전체 장치는 제 2 회 솔루션은 조금 더 많은 작업과 JSON 파서가 필요합니다

공급한다. 그러나 적어도 V1.0 때문에 아두 이노 IDE와 함께 제공되는 PubSub 라이브러리를 사용할 수있는 또 다른 옵션 to use MQTT,있다. WebSoket 엔드 포인트와 달리, Xively의 MQTT 브릿지에는 JSON 파서가 필요하지 않으며 CSV 데이터 형식도 함께 사용할 수 있습니다. 당신이 alredy 푸셔에 물건을 훨씬을 구현하지 않는 한 당신은 그냥 Xively/아두 이노의 MQTT를 사용하는 것이 좋습니다 것, 아주 쉽게 JavaScript app에서 웹 소켓을 사용할 수 있습니다.

여전히 일부 메모리 문제를 타격하는 경우, 당신은 당신이 포함 한 각 라이브러리에 대한 가장 기본적인 예와 사용을 측정해야한다. 빠르고 쉬운 솔루션을 원할 경우 Arduino Due을 사용해 볼 수도 있습니다. 더 나은 성장의 여지가 있기를 바랍니다. 또한 http://devicehub.net을 사용하는 것이 좋습니다