ESP8266에서 Blynk와 ThingSpeak 모두에 데이터를 보내고 싶습니다.

Blynk는 아름다운



센서 데이터를 수집하고 시각화하는 서비스는 여러 가지가 있지만 최근 Blynk 이라는 서비스를 알았습니다. 다른 서비스와 비교해, 특히 Blynk는 디자인이 아름답고, 메인으로 사용하고 싶다고 생각하는 서비스입니다.



다만, (내 조사 부족일지도 모르지만) 앱을 기동하고 있지 않을 때의 데이터는 보존되어 있지 않은 것 같고, History Graph를 보면, 그 사이의 데이터는 빠져 버렸습니다.

ThingSpeak에서 데이터 축적



ThingSpeak 또한 데이터를 수집하고 시각화하는 서비스로 그래프를 브라우저에서 볼 수 있습니다. Blynk와 같이 스마트 폰 앱을 실행하지 않았더라도 항상 데이터를 수집합니다.

그럼 둘 다 사용하자! 어라… 잘 안돼?



그래서,
  • 실시간 센서 데이터를 보는 것은 Blynk
  • 과거의 센서 데이터를 보는 것은 ThingSpeak

  • 에서 할 수 있도록 노력했습니다. 그런데, Blynk를 사용하고 있으면 ThingSpeak에의 데이터 송신이 실패합니다(ThingSpeak.writeFields()의 반환값이 -302). ThingSpeak 라이브러리를 사용하지 않고 HTTP로 직접 액세스하는 프로그램을 작성해도 안됩니다.
    Blynk의 앱 측에서 오프라인으로 설정하면 문제없이 ThingSpeak에 보낼 수 있습니다. 혹시 ESP8266은 동시에 1커넥션 밖에 통신할 수 없는 것인가…

    솔루션: ThingSpeak로 보낼 때만 Blynk를 오프라인으로 설정


    void loop() {
      Blynk.run();
        :
      //数分おきに行うThingSpeakへ送信する処理
      if(...) {
        Blynk.disconnect();  // Blynkから切断
          :
        ThingSpeak.setField(1, tbuf);
        ThingSpeak.setField(2, hbuf);
        ThingSpeak.setField(3, pbuf);
        int code = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
          :
        Blynk.connect();  // Blynkに接続
      }
        :
    }
    

    이제 ThingSpeak에 연결할 수 있습니다. Blynk에서 연결을 끊는 동안은 물론 앱에서 액세스할 수 없지만 ThingSpeak으로 전송하는 것은 몇 분에 한 번이고 1-2초 만에 완료되므로 특별한 문제가 없습니다.

    역시 IoT 클라우드 서비스는 편리



    데이터를 수집하는 것만이라면 간단하지만, 그래프를 표시하게 되면 스스로 만드는 것은 힘들다. 과거의 데이터에 가세해, 최신의 데이터에 갱신해 가는 처리를 생각하면, 스스로 만들고 싶지 않네요. (^^;; 그래서 이렇게 데이터를 가시화 해주는 서비스는 정말 도움이됩니다.

    좋은 웹페이지 즐겨찾기