일단 아래 Ubidots 글을 먼저 읽고 이 글을 보는 것을 추천드립니다.
이전 글은 Arduino UNO 로 활용한 예제이다. 이상없이 아주 잘동작하는 것을 확인 할수 있었다. 하지만 ARM 기반의 Arduino에서는 Ubidots예제가 동작하지 않는다는 소식을 듣고 한번 해보았다.
들은 소식대로 테스트를 한 두개의 예제에서 컴파일 에러가 나면서 컴파일이 되지 않았다. 테스트를 한 예제는 아래 두가지 이다.
UbidotsSaveValues
아직 실력이 부족하기 때문에 완벽하게 해결하지는 못하겠지만, 왜 안된것인지 확인해보고 임시 방편이라도 ARM 기반 Arduino 에서 Ubidots를 사용할수 있도록 해보았다.
사용 보드 & 환경 설정
Arduino MKRZERO
Arduino MKR-Ethernet Shield
인터넷이 연결된 공유기에 Arduino MKR-Etherent Shield 를 연결해서 사용한다.
UbidotsSaveValues 예제 에러
아래 그림과 같이 컴파일을 하게되면 컴파일 에러가 난다. 뭐가 문제일까...
컴파일 에러 메시지를 확인해보면 Arduino 보드 라이브러리인 samd 라이브러리에서 define 된 PORT 와 Ubidots 라이브러리에 사용된 PORT 변수가 이름이 동일 하기 때문에 충돌이 된것으로 보인다.
UbidotsSaveValues 예제 에러 해결(임시)
그래서 보드 라이브러리를 수정하기에는 일이 거대해질것 같아서, Ubidots 라이브러리에 있는 UbidotsEthernet.cpp, UbidotsEthernet.h 수정해 보았다.
UbidotsEthernet.h에서 PORT로 선언된 변수의 이름을 임시로 ETH_PORT 로 변경하고, UbidotsEthernet.cpp에서 PORT 변수가 사용된 부분도 ETH_PORT로 변경했다.
변수를 모두 변경하고 나니 컴파일 에러 없이 정상적으로 컴파일이 되는 것을 확인 할 수 있었다.
펌웨어 업로드를 하고 테스트 해보니 Ubidots 서버와 연결이 잘되는 것을 확인 할 수 있었다.
UbidotsGetValue 예제 에러
위의 내용을 수정했어도 UbidotsGetValue 예제에서도 컴파일 에러가 났다.
아래와 같은 메시지가 나왔다. getValue 함수를 호출하는데 사용된 const char형 포인터 변수에 관련된 에러로 보인다.
UbidotsGetValue 예제 에러 해결(임시)
그래서 const 형 포인터 변수를 일반 변수로 수정해 보았다.
그러니깐 컴파일 에러가 싹 사라지고 정상적으로 컴파일이 되었다.
펌웨어 업로드를 하고 시리얼 모니터로 확인해보면 Ubidots 서버에 정상적으로 접속 되는 것을 확인 할 수 있었다.
위 포인터 변수는 const로 선언되었기 때문에 문자열이 상수형태로 저장이 된다. 상수 형태로 저장되는 것을 변수형태로 저장하니 문제가 해결된 것이다.
정확하게 알지는 못하지만, AVR Arduino와 ARM Arduino 상수가 저장되는 메모리 구조가 달라서 충돌이 되는게 아닌가 하는 단순한 예상을 해본다. 솔직히 잘 모르겠다. 전문가에게 물어봐야겠다.
Ubidots에게 Feedback
내가 사용한 라이브러리는 github에서 다운 받아 사용했다. 그렇기 때문에 feedback을 하는 가장 이상적인 방법은 git을 이용해서 하는게 가장 이상적이지만, 나는 아직 git을 잘 사용하지 못해서 일단, Ubidots github에 issue를 제기해 보았다.
그리고 Ubidots 홈페이지에서도 채팅형식으로 질문을 할수 있길래 같은 내용으로 문의를 해봤다.
질문을 하는 방법이 아주 간단하다. Ubidots는 거의 모든것들을 간단하게 할수 있도록 구축해 놓은 것 같다.
답변도 과연 간단하고 빠르게 줄것인지 궁금하다.
<업데이트>
Ubidots github 담당자가 빠르게 답변을 남겨줬다. 뭐 답변에 대해서 요약을 하자면..
마음대로 수정해서 사용해라.
큰 문제가 라이브러리 없는 이상 라이브러리를 수정할 계획은 없다.
당신이 수정해서 PR을 하면, 우리가 머지해 주겠다.
뭔가 새롭게 할일이 생긴것 같다. 역시 Github 사용법을 공부해봐야 할것 같다.
'IT / Development > Arduino' 카테고리의 다른 글
아두이노로 리모컨 IR신호 확인하기 - IRremote Library를 활용한 (1) | 2019.04.18 |
---|---|
Arduino Uno와 WIZ550S2E를 사용한 Serial to Ethernet (0) | 2019.04.12 |
아두이노(Arduino Ethernet Shield)를 이용해 Ubidots for Education를 이용해보자 - 2 (0) | 2019.03.09 |
아두이노(Arduino Ethernet Shield)를 이용해 Ubidots for Education를 이용해보자 - 1 (0) | 2019.03.08 |
아두이노(Arduino Ethernet Shield)를 이용해 Ubidots를 이용해보자 - 2 (0) | 2019.03.07 |