我想从Arduino更改msg.payload的值并将其发送到节点。在mongodb中设置变量数据时如何将红色或蓝色发送到节点?

时间:2019-05-28 10:58:53

标签: node.js mongodb arduino ibm-cloud

想要从Arduino更改msg.payload的值并将其发送到节点。在mongodb中设置变量数据时,如何向节点发送红色或蓝色?

Aduino已成功将值发送到msg.payload,但如果使用语法,则不知道该值是否已更改。

///当从通信中接收到一个字符时,它将存储在此函数的// payload数组中。 //仅粘贴了最小的代码。

//该操作是使用mqtt通信将值发送到节点。

// Arduino源代码-------

enter code here

String sChipID;
char cChipID[20];

WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[255];

//rotary encoder inputs
int S = D1;     // SW, Switch
#define inputDT D2  // DT, OutA
#define inputCLK D3  // CLK, OutB

//rgb smd
int d5=D5;      //B
int d6=D6;      //R
int d7=D7;      //G

int counter = 0; 
int currentStateCLK;
int previousStateCLK; 

String encdir ="";


void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
  }
  Serial.println();

  String s;
  deserializeJson(doc,payload);
  root = doc.as<JsonObject>();

}


//A value is output to the counter using a rotary encoder
//ex)"Direction:--Value: 10 
//    10

void loop(){             
    if (!client.connected()) {
    reconnect();
  }
  client.loop();

   currentStateCLK = digitalRead(inputCLK);

   if (currentStateCLK != previousStateCLK){ 

     if (digitalRead(inputDT) != currentStateCLK) { 
       counter --;
       encdir ="CCW";
       digitalWrite(d5,0);   //B
       digitalWrite(d6,255); //R
       digitalWrite(d7,0);   //G  

       sprintf(msg,"%d",counter);

     } else {
       counter ++;
       encdir ="CW";
       digitalWrite(d5,255); //B
       digitalWrite(d6,0);   //R
       digitalWrite(d7,0);   //G

       sprintf(msg,"%d",counter);
     }
     Serial.print("Direction: ");
     Serial.print(encdir);
     Serial.print(" -- Value: ");
     Serial.println(counter);
     //
     Serial.println(msg);
     client.publish(outTopic, msg);  // The value is sent to msg.payload.

   } 
   previousStateCLK = currentStateCLK; 



//node-red function

if(msg.payload>1)
msg.payload="{\"chipid\":\"eab916\"\, \"act\":\"write\"\,\"data\":"+1+"}";
else
msg.payload="{\"chipid\":\"eab916\"\, \"act\":\"write\"\,\"data\":"+0+"}";
return msg;


//mongodb

{
    "_id" : ObjectId("5ce90950c088f32b1250a7e9"),
    "name" : "rotary",
    "chipid" : "eab916",
    "data" : "red"
}

正如预期的那样,随着值的上升和下降,mongdb中会识别红色,并且输出将更改为节点红色,但不会更改。

0 个答案:

没有答案
相关问题