Nb-iot กับ blynk


(Komkris) #1

ผมอยากให้ Nb-iot (arduino UNO) ส่งข้อมูลเข้า Blynk ได้ เลยไปพบ ว่ามีคนตั้ง server เพื่อใช้เป็นทางผ่านให้ส่งได้

แต่ตัวผมเขียน code อย่างไรก็ส่งข้อมูลได้เพียงแค่ 4 key ( coap.iSYNC_POST ) เท่านั้น พอเพิ่มตัวที่ 5 เข้าไป โปรแกรมจะ เพี้ยน ทุกครั้ง ( freeze บ้าง , restart บ้าง ) อยากจะส่งได้หลาย ๆ key พอจะมีคำแนะนำบ้างมั้ยครับ

ถ้าไม่เกี่ยวข้องขออภัยด้วยนะครับ


(Komkris) #2

code นะครับ

#include <BC95.h>
#include <BC95Udp.h>
#include <CoAP.h>
#include <Dns.h>
#include <NTPClient.h>
#include <settings.h>

#include <Arduino.h>
#include <AltSoftSerial.h>
#include "BC95Udp.h"
#include "CoAP.h"


#include <DHT.h>;
#define DHTTYPE DHT22
#define DHTPIN 7
String status1;
String status2;
String Pin5;
String Pin6;
int P5;
int P6;
DHT dht(DHTPIN, DHTTYPE);
AltSoftSerial bc95serial;

BC95UDP udp;
Coap coap(udp);

#define iSYNC_KEY "5c5d82fa3860984ee2a93ba3"

void responseHandler(CoapPacket *packet, IPAddress remoteIP, int remotePort) {
    char buff[6];
    Serial.println("#iSYNC -> NBIoT");
    Serial.print("#[");
    sprintf(buff, "%d.%02d", packet->code >> 5, packet->code & 0b00011111);
    Serial.print(buff);
    Serial.print("]-> DATA : ");
    for (int i=0; i< packet->payloadlen; i++)Serial.print((char) (packet->payload[i]));
    Serial.println();
    Serial.println("#----------------------------");
}

void setup() {
    pinMode(5, INPUT_PULLUP);      // sets the digital pin 5 as input
    pinMode(6, INPUT_PULLUP);        // sets the digital pin 6 as input
    bc95serial.begin(9600);
    BC95.begin(bc95serial);
    BC95.reset();

    Serial.begin(9600);
    Serial.println(F("Starting..."));

    while (!BC95.attachNetwork()) {
        Serial.println("...");
        delay(1000);
    }
    Serial.println(F("NB-IOT attached.."));
 
    coap.response(responseHandler);
    coap.start();
    dht.begin();

}

long lasttime = millis();

void loop() {
    coap.loop();
    if(millis()-lasttime > 30000){
      lasttime = millis();
      float h = dht.readHumidity();
      float t = dht.readTemperature();
      String Temperature=String(t);
      String Humidity=String(h);
      String Pin5=String(digitalRead(5));//run
      String Pin6=String(digitalRead(6));//alarm
      //check status 
      if (digitalRead(5) == LOW) 
        { 
          status1 = String("1");
        } 
          else 
        { 
          status1 = String("0");//V3
        }
      if (digitalRead(6) == LOW) 
        { 
          status2 = String("1");
          coap.iSYNC_POST("5c697fd9f0a80317c5ceab10","alarm");//line alarm
        } 
          else 
        { 
          status2 = String("0");//V4
         } 
      
      //String payload="{\"Temperature\":"+Temperature+",\"Humidity\":"+Humidity+"}";
      coap.iSYNC_POST("5c697ad7f0a80317c5cea404",Temperature);//V1
      coap.iSYNC_POST("5c697c61f0a80317c5cea61c",Humidity);//V2
      coap.iSYNC_POST("5c697cadf0a80317c5cea681",status1);//V3 run
      //coap.iSYNC_POST("5c697cdbf0a80317c5cea6c1",status2);//V4 alarm
      //coap.iSYNC_POST("5c6fa6a189a6d26444c924ff",Pin5);//pin5
      //coap.iSYNC_POST("5c6fa80489a6d26444c92636",Pin6);//pin6
      //delay(2000);
      
      /*Serial.println(Pin5);
      Serial.println(Pin6);
      Serial.println(status1);
      Serial.println(status2);
      */


    //coap.iSYNC_POST("5c697fd9f0a80317c5ceab10","test");//V5 line
      }
 
      
    
}

(Permpol Thanapunnamas) #3

เว็บไม่ได้จำกัดเนื้อหาอะไร มีอะไรก็ลองเอามาปรึกษา ได้ ถ้ารู้จะตอบให้นะครับ

ที่นี้มาถึงเรื่องที่ถามมา ส่วนตัวไม่เคยใช้ NB-iot เลยก็เลยไม่ค่อยแน่ใจแต่ก็พอจะจับทางมองภาพออกอยู่บ้าง เรื่องที่ว่า พอใส่คำสั่ง post ที่ 5 ลงไปแล้วเกิด restart ผมว่ามันทำงานไม่ทันรึป่าว ถ้าเรา เบิ้นคำสั่งมากไปบอร์ดส่งดาต้าไม่ทัน ก็ทำให้ เกิน การ restart หรือ wdt ทำงานได้ใน esp8266 ครับ เบื้องต้นลอง วาง delay สัก 100 ระหว่าง บรรทัด post ดูเพื่อไม่ให้บอร์ดมันทำงานกระชั้นชิดเกินไปครับ


(Komkris) #4

ขอบคุณมากครับ เดี๋ยวจะลองดูครับ