ไม่ส่งค่า sensor ที่บอร์ด แบบ Realtime ขึ้นบน magellan

ช่วยแนะนำทีครับ
ผมเพิ่มโคดสวิชควบคุม relay หลังจากนั้นค่า sensor ที่บอร์ด Ais nb-iot devkit1 ก็ไม่ส่งค่าไปบน magellan

#include "Magellan_SIM7020E.h"
#include "ClosedCube_HDC1080.h"
Magellan_SIM7020E magel;       
ClosedCube_HDC1080 hdc1080;   
String sw_state;
String sw;
String payload;
const int Relay = 13;
void setup() 
{
  Serial.begin(115200);
  magel.begin();             
  payload="{\"sw\":0}";      
  magel.report(payload);     
   pinMode(Relay, OUTPUT);
Serial.println("ClosedCube HDC1080");
hdc1080.begin(0x40);
   
  Serial.print("Manufacturer ID=0x");
  Serial.println(hdc1080.readManufacturerId(), HEX); 
  Serial.print("Device ID=0x");
  Serial.println(hdc1080.readDeviceId(), HEX);   
      
  magel.begin();        
  
}

void loop() 
{ sw_state=magel.getControl("sw"); 
  
  if(sw_state.indexOf("40300")==-1) 
  {{
    if (sw_state == "1") {
      payload = "{\"sw\":1}";  
      digitalWrite(Relay, HIGH); 
     
      
    }
    else{
      payload = "{\"sw\":0}";  
      digitalWrite(Relay, LOW); 
      
       }
  }
  }

  Serial.print("sw ");
  Serial.println(sw);

  String temperature = String(hdc1080.readTemperature());
  String humidity = String(hdc1080.readHumidity());
  String payload = "{\"temperature\":" + temperature + ",\"humidity\":" + humidity + ",\"sw\":" + sw + "}";  
  magel.report(payload);                 
  delay(1000);

}
1 Like

กระทู้นี้เป็นไงบ้างครับ อัพเดทหน่อย

ดูโฟว์แล้ว โค้ต switch มันไม่ได้เกี่ยวกันเลยนะครับ คำถามคือ

1.โค้ต switch ที่ใส่เข้าไปใช้งานได้จริงไหม
2. มันเกิดการรีเซต จนมันใช้งานไม่ได้ทั้งคู่หรือไม่ อย่างไร

โค้ต switch ใช้งานได้ครับ ตอนนี้ทำได้แล้วครับ
ผมแยกการส่งค่าของสวิตช์โดยเพิ่มpayloadขึ้นมา

1 Like

ขอดูโค้ตที่แก้ไขหน่อยครับ

#include "ClosedCube_HDC1080.h"
#include "Magellan_SIM7020E.h"
Magellan_SIM7020E magel;          

ClosedCube_HDC1080 hdc1080;

const int lightSensorPin=34; 
String payload;
String sw;
const int Relay = 13;
String sw_state;
const int soimoiture_Sensor=12;
int soimoiture;
String sw_state2;
String sw2;
int setsoil = 20;
int mapsoimoiture;


void setup() 
{
  Serial.begin(115200);
  magel.begin();

  Serial.println("ClosedCube HDC1080");
  hdc1080.begin(0x40);

  
  hdc1080.begin(0x40);
  payload="{\"sw\":0}"; 
  payload="{\"sw2\":0}";       
  magel.report(payload);
   pinMode(Relay, OUTPUT);
   
  Serial.print("Manufacturer ID=0x");
  Serial.println(hdc1080.readManufacturerId(), HEX); // 0x5449 ID of Texas Instruments
  Serial.print("Device ID=0x");
  Serial.println(hdc1080.readDeviceId(), HEX);       // 0x1050 ID of the device
      
  magel.begin();                                     //Init Magellan LIB
}

void loop() 
{
  Serial.print("sw ");
  Serial.println(sw);
  Serial.print("sw2 ");
  Serial.println(sw2);
  String temperature=String(hdc1080.readTemperature());
  String humidity=String(hdc1080.readHumidity());
  String Light=String(analogRead(lightSensorPin)); 
  int soimoiture=(analogRead(soimoiture_Sensor)); 
  int mapsoimoiture = map(soimoiture, 0, 4095, 100, 0);
  String soimoiture_1 = String(mapsoimoiture);
  
  payload="{" + sw2 + "}";
  payload="{\"temperature\":"+temperature+",\"humidity\":"+humidity+",\"light\":"+Light+",\"soimoiture_1\":"+soimoiture_1+"," + sw + "}";  //Please provide payload with json format
  
  magel.report(payload);                                                                      //Report sensor data
  delay(1000);                                                                                //Delay 5 second
  
   sw_state=magel.getControl("sw");
   if(sw_state.indexOf("sw")==-1) //Response data is not 40300
   sw_state2=magel.getControl("sw2");
   if(sw_state2.indexOf("sw2")==-1) //Response data is not 40300
   
   
  
    if (sw_state == "1") {
      digitalWrite(Relay, HIGH); // ส่งให้ไฟติด
      payload = "{\"sw\":1}";  //Please provide payload with json format
      magel.report(payload);   //Initial switch data to Magellan
      payload = "{\"sw2\":0}";  //Please provide payload with json format
      magel.report(payload);   //Initial switch data to Magellan
      
      
       
    }
    if (sw_state == "0"){
      digitalWrite(Relay, LOW); // ส่งให้ไฟติด 
      payload = "{\"sw\":0}";  //Please provide payload with json format 
      magel.report(payload);   //Initial switch data to Magellan
      payload = "{\"sw2\":0}";  //Please provide payload with json format
      magel.report(payload);   //Initial switch data to Magellan
      
       
       }
       if (sw_state2 == "1") {
      if(mapsoimoiture < setsoil ){
              digitalWrite(Relay, HIGH);
              payload = "{\"sw2\":1}";  //Please provide payload with json format
              magel.report(payload);   //Initial switch data to Magellan
              payload = "{\"sw\":0}";  //Please provide payload with json format
              magel.report(payload);   //Initial switch data to Magellan
              
              
    }
    if(mapsoimoiture >= setsoil ){
              digitalWrite(Relay, LOW);
              payload = "{\"sw2\":1}";  //Please provide payload with json format
              magel.report(payload);   //Initial switch data to Magellan
              payload = "{\"sw\":0}";  //Please provide payload with json format
              magel.report(payload);   //Initial switch data to Magellan
              
    }
    
  }
  if (sw_state2 == "0"){
      digitalWrite(Relay, LOW); // ส่งให้ไฟติด  
      payload = "{\"sw2\":0}";  //Please provide payload with json format 
      magel.report(payload);   //Initial switch data to Magellan
      payload = "{\"sw\":0}";  //Please provide payload with json format
      magel.report(payload);   //Initial switch data to Magellan
      
     
       }
  
  
  }

แต่ตอนนี้ฟังชั่นการสั่งงานควบคุม relay แบบ อัตโนมัติที่ใช้ set soil กับmap มันทำงานไม่ถูกต้องตามที่ต้องการ
ต้องการให้ถ้าค่าความชื้นเยอะให้ตัดแต่บางครั้งก็ไม่ตัด รบกวนช่วยแนะนำหน่อยครับ

ตัดโค้ตส่วนนั้นมาดูหน่อย

 if (sw_state2 == "1") {
      if(mapsoimoiture < setsoil ){
              digitalWrite(Relay, HIGH);
              payload = "{\"sw2\":1}";  //Please provide payload with json format
              magel.report(payload);   //Initial switch data to Magellan
              payload = "{\"sw\":0}";  //Please provide payload with json format
              magel.report(payload);   //Initial switch data to Magellan
              
              
    }
    if(mapsoimoiture >= setsoil ){
              digitalWrite(Relay, LOW);
              payload = "{\"sw2\":1}";  //Please provide payload with json format
              magel.report(payload);   //Initial switch data to Magellan
              payload = "{\"sw\":0}";  //Please provide payload with json format
              magel.report(payload);   //Initial switch data to Magellan
              
    }
    
  }
  if (sw_state2 == "0"){
      digitalWrite(Relay, LOW); // ส่งให้ไฟติด  
      payload = "{\"sw2\":0}";  //Please provide payload with json format 
      magel.report(payload);   //Initial switch data to Magellan
      payload = "{\"sw\":0}";  //Please provide payload with json format
      magel.report(payload);   //Initial switch data to Magellan

อันนี้ครับ

ตอนมีปัญหา มีอะไร confirm ไหทว่า sw_state2 เป็น 1

sw_state2=magel.getControl(“sw2”);
if(sw_state2.indexOf(“sw2”)==-1)

ผมคิดว่าน่าจะบรรทัดนี้ครับ

ขอเหตุผลสนับสนุนหน่อยครับ

sw_state2=magel.getControl(“sw2”); //Get switch data from Magellan IoT platform

ตามที่ผมเข้าใจเหมือนเป็นการส่งค่าสวิชต์บนแดชบอร์ทเข้ามาเป็นค่าในแพลตฟอร์มของ arduino ครับ

แล้วเราจะมีวิธีทดสอบมันอย่างไรว่ามันทำงานได้ หรือมีปัญหา?