반응형

WiFi 기능을 기본 탑재하여 사용하기 쉽고 간편한 WiFi 전용 보드를 이용하여 블링크 클라우드(Blynk Cloud) 에 접속하여, 제어하려는 과정 중에서,  아두이노 IDE를 통해 코드를 전송하기 위해 코드를 컴파일했을 때 코드상 에러 없고, 라이브러리 문제도 없었으나,  "http:Blynk.Cloud" 클라우드 화면에서 자신의 WiFi 보드가 연결(Online) 되지 못하는 에러를 겪는 것에 대한 에러 해결 자료입니다.
(물론, 보드가 WiFi 네트워크에 잘 접속되어 있는 상태 임)

(WiFi 전용보드 : 주로 esp8266 칩셋을 이용한 D1, D1 mini, ESP8266, nodeMCU, 혹은 ESP32 , Nano33 ioT 보드 등)

 

 아래 온습도 프로젝트를 ESP32를 이용하여 만든, 블링크 클라우드(Blynk Cloud)의 화면을 보면 Off Line으로 나와 있는 것을 볼 수 있습니다.  물론 ESP32 보드는 스마트폰 핫 스팟이나 기타 WiFi 라우터 등에 잘 연결되어 있는 상태입니다. 

[ 에러 증상 ]

 또한, 아두이노 IDE의 시리얼 모니터 창을 열었을 때 Blynk Cloud와 잘 연결 되었다면 정상적인 연결 화면은 아래와 같습니다.  ( ESP32, ESP8266, Arduino Nano 33 IoT 등등 모두 동일 )

나의 WiFi보드가 Blynk Cloud 2.0에 정상적으로 접속되어 있는 모습


하지만 어떤 이유로 Blynk Cloud에 접속 되지 못하고 아래와 같은 "Invalid auth token" error 에러 메시지를 계속 표시하게 됩니다. 

나의 WiFi보드가 Blynk Cloud 2.0에 연결 되지 못하고 에러를 출력하는 모습

 

[ 에러 원인  #1 ]

이러한 에러가 나타나는 원인을 살펴보자면,  현재 Blynk 서비스의 경우 과거 Blynk 초기 시절에 제공하던 Blynk 서버의 포화로 인해 더 이상 신규 회원을 받아들일 수 없었고,  이와 함께 Web으로 접속하여 제어할 수 있는 클라우드 서버 서비스라는 새로운 기능까지 추가한다는 계획으로 인해, Blynk 2.0 이라는 새로운 서버 시스템을 구축하게 된 것입니다. 

그런데, 기존 Blynk 1.0 서비스 이용자들이 존재하고 있기 때문에, 기존 서비스도 유지하면서 새로운 Blynk 2.0 서비스를 함께 운영하는 상황에서 WiFi 보드 들이 Blynk 서버에 접속하려 할 때 ,   Blynk 1.0 과 Blynk 2.0 서버를 구분해서 연결시켜야 하는 이슈가 있었던 거죠.   

Blynk에서는 이를 해결하는 방법으로 BLYNK_TEMPLATE_ID (블링크 템플릿 ID) 라는 것을 착안하게 됩니다. 
즉, WiFi 보드에 입력되는 블링크 코드에서 Blynk 2.0 클라우드에 접속되는 대상들은 이 템플릿 ID를 부여하고, 이 ID가 확인이 되면 블링크 2.0 서버로 연결시키게 되며,  만약 이 템플릿 ID가 확인되지 않으면, 기존 Blynk 서버(legacy server)로 연결시키게 됩니다. 

그런데 만약 이 과정에서 ,  Blynk 코드에 이 템플릿 ID(BLYNK_TEMPLATE_ID) 가 코드상에서 Blynk Library (블링크 라이브러리) 보다 아래에 위치하게 되면, 템플릿 ID를 체크하지 못하게 되어 기존 blynk 서버로 연결시켜 버리게 되어, Blynk 2.0 클라우드로 접속되지 못하니 Off Line이 되어 버리는 것입니다. 

아래, 문제 없는 정상적인 코드 예시와,  문제가 발생한 코드 예시를 참조해 보세요. 

정상적인 템플릿 ID 위치

---------------------------------------------------------------------------------------------------------------------------------------------------------------

문제가 발생한 템플릿 ID 위치

[ 에러 해결 ]

따라서, 문제 해결을 위해서는,

반드시 Blynk 2.0 클라우드 서버 서비스에 제대로 접속(Online) 시키기 위해서는 템플릿 ID(BLYNK_TEMPLATE_ID)를 다른 코드(특히, Blynk 라이브러리) 보다 상위에 배치시키는 것을 잊지 말아야 합니다.

물론 기존 Blynk (legacy) 서비스에 이미 가입되어 있고 이를 사용 중인 상황이라면 이 템플릿 ID는 없는 상태로 코드 작성이 이루어 집니다.  

[ 에러 원인  #2 및 해결]

에러 원인 1에 대해 조치를 하여도, "Invalid auth token" error 에러를 표시하며, 해결이 안 되는 경우가 발생 할 수 있는데요, 
이럴 때는, 강제적으로 blynk.cloud 서버에 접속하도록 하면 해결 됩니다. 

아래가 지난 번 올린 Nano33 ioT에서의 동작을 위한 코드인데요, 
아래 코드 중에   
Blynk.begin(auth, ssid, pass);  이 부분을  
Blynk.begin(auth, ssid, pass, "blynk.cloud", 80);  로 변경해 보세요.

/* Nano33 IoT + Blynk 2.0 LED On/Off 실습 */

#define BLYNK_PRINT Serial
/* Blynk.Cloud 사이트에서 Nano33 IoT + LED에 대한 템플릿을 만든 후 대시보드에서 아래 3줄의 내용을 복붙복 하세요 */
#define BLYNK_TEMPLATE_ID "TMPL8FZBJtS4"
#define BLYNK_DEVICE_NAME "Nano33 ioT LED"
#define BLYNK_AUTH_TOKEN "3_no_kJo46jNhiMRzlpfPRlMELvHU-g4"

#include <WiFiNINA.h>     // 라이브러리 매니저창에서 WiFiNINA로 검색 후 설치할 것
#include <BlynkSimpleWiFiNINA.h>  // 라이브러리 매니저창에서 blynk로 검색 후 설치할 것
#include <DHT.h>       // 라이브러리 매니저창에서 DHT로 검색 후 설치할 것(by Adafruit 버전)

char auth[] = BLYNK_AUTH_TOKEN;
// 접속 가능한 WiFi ID와 패스워드를 입력하세요
char ssid[] = "myGalaxy";
char pass[] = "12345678";

void setup()
{
  Serial.begin(9600);
  Blynk.begin(auth, ssid, pass);
}

void loop()
{
  Blynk.run();
}

 

아래 코드는 수정 된 코드입니다.

/* Nano33 IoT + Blynk 2.0 LED On/Off 실습 */

#define BLYNK_PRINT Serial
/* Blynk.Cloud 사이트에서 Nano33 IoT + LED에 대한 템플릿을 만든 후 대시보드에서 아래 3줄의 내용을 복붙복 하세요 */
#define BLYNK_TEMPLATE_ID "TMPL2f0fgFk5"
#define BLYNK_DEVICE_NAME "Nano 33 ioT"
#define BLYNK_AUTH_TOKEN "7nL0OYYxNqzAqnGno10d2RRuRgAz3oYi"

#include <WiFiNINA.h>     // 라이브러리 매니저창에서 WiFiNINA로 검색 후 설치할 것
#include <BlynkSimpleWiFiNINA.h>  // 라이브러리 매니저창에서 blynk로 검색 후 설치할 것

char auth[] = BLYNK_AUTH_TOKEN;
// 접속 가능한 WiFi ID와 패스워드를 입력하세요
char ssid[] = "myGalaxy";
char pass[] = "12345678";

void setup()
{
  Serial.begin(9600);
//  Blynk.begin(auth, ssid, pass);    // Invalid auth token" error 에러가 날 경우 아래처럼 변경
  Blynk.begin(auth, ssid, pass, "blynk.cloud",80);
}

void loop()
{
  Blynk.run();
}

수정된 코드 다운로드 받기

Nano33_Blynk_LED.zip
0.00MB

[ 에러 원인  #3 ]

 세 번째의 경우는 그 두 번째 원인은 바로 회사나 특정 기관의 방화벽으로 인한 것으로 판단됩니다.  하지만 정확히 방화벽이 원인이라고 판단되는 명확한 근거는 없기 때문에, 방화벽을 포함한 연결 되는 곳의 WiFi네트웍 환경의 특정 원인으로 생각이 되는데요,  
이 또한, Blynk2.0 시스템인  Blynk.Cloud에 접속되지 못해 발생 되는 에러로 보입니다. 
 다시말해,  스마트폰 핫스폿으로 연결까지는 되지만, Blynk Cloud와는 연결이 되지 않아 "Invalid auth token" error 에러 메시지를 계속 표시하게 됩니다. 

↓아래는 코드의 변화 없는 동일한 코드를 방화벽 셋팅이 강화된 회사에서 업로드 하였을 때, "Invalid auth token" error 에러 메시지를 표시하며 연결이 안되는 모습입니다.

방화벽으로 인해 "Invalid auth token" error 에러 메시지를 계속 표시하는 모습

 

그리고  ↓아래는 일반 가정집에서 인터넷 환경에서 동일한 코드를 업로드 하였을 때, 바로 연결이 되는 모습입니다. 


현상을 정리하자면, 특정 영역의 방화벽 설정이 된 상태하에 있는 회사 PC에서 코드를 업로드한 보드 회로를 가지고,  특별한 방화벽 설정이 안 된 집에서 연결을 시도해 보아도 "Invalid auth token" error 에러 메시지를 표시하게 되는데요, 
만약, 집에서 코드가 업로드 되어 연결이 잘 되는 보드 회로를 회사에 가지고 가서 코드 재업로드 없이 그대로 WiFi 연결시키고 하였을 때는 Blynk Cloud 사이트와 연결이 잘 되는 것을 볼 수 있었습니다.  물론 잘 동작 되는 그 회로에 동일한 코드를 회사에서 재업로드 하면 역시나 "Invalid auth token" error 에러 메시지를 표시합니다.
  그리고 "Invalid auth token" error가 나는 상태에서는, Blynk cloud 사이트 자체는 웹브라우저에서 접속 잘 되지만 보드회로와 Blynk Cloud 서버와 사이에는 Off Line으로 표시 되고 연결 및 제어가 되지 않게 되죠 .)

 따라서, 코드 업로드 되는 네트웍 환경에 따라 Blynk.cloud에 접속되지 못해 발생 될 수도 있는 원인으로도 보입니다. 
하지만, 대부분의 경우,  1번과 2번의 해결 방법을 사용하면 해결 될 것으로 판단됩니다.

반응형