작성
·
413
0
안녕하세요 선생님
좋은 강의 덕분에 공부가 많이 되고 있습니다. 많은 도움 주셔서 감사합니다.
수업을 통해서 Wemos -> Mqtt->Nodejs->Mongodb까지 데이타가 날라가는 것을 구현을 했습니다. 그런데
다음과 같은 에러현상이 있어서 문의드리고자 합니다.
1. Wemos(아두이노)가 MQTT에 접속하여 정상적으로 센서값을 전송하다가 MQTT와 접속이 한번씩 끊어집니다.
-> 해결을 위해 구글 검색해서 아두이노 루프문에 mqtt 재접속 함수(그림3)를 만들고 호출해주었습니다. 재접속되서 다시 MQTT에 센서 측정값을 쏴주고 mqtt의 cmd 창에서는 data가 잘 들어오고 있습니다.
2. 그런데 위 현상이 발생하면 Nodejs 가 첨부와 같은 에러 메세지가 나오면서 정지합니다.
(에러코드와 메세지는 사진으로 첨부드립니다)
-> 이걸 해결해보려고 검색해서 테스트 해본 것은
1). Nodejs의 파일 모두에 //로 주석 단거는 다 옆이 아니라 위로 올리기
2). 아두이노의 PubsubClient.h파일에서 혹시 보내는 용량이 문제인가 해서
#define MQTT_MAX_PACKET_SIZE 를 128에서 512로 수정
3). PubsubClient.h에서 keepAlive interval in Seconds를 10초로 수정
4). www 파일 내부 곳곳에 console.log("position1"); 같은 flag를 달아서
죽는 곳을 찾아보기 --> 죽기전에 위치 표시없이 에러나면서 끝나네요 ㅜ
아직 해결을 못하고 있는데 혹시 선생님께서 이러 유사한 에러에 경험이 있으신지요.
제가 살펴볼만한 내용을 혹시 아시면 이야기 해주실 수 있을신지 궁금합니다.
매번 좋은 조언 감사합니다.
답변 2
0
0
열공하시는 군요~~
Node.js쪽에서 나는 에러는 아두이노에서 전달되는 센서데이터가 JSON형식이 아니기 때문에 나오는
에러인듯하는데 아두이노쪽에서
char message[64]="", pTmpBuf[50], pHumBuf[50];
dtostrf(tmp, 5,2, pTmpBuf);
dtostrf(hum, 5,2, pHumBuf);
sprintf(message, "{\"tmp\":%s,\"hum\":%s}", pTmpBuf, pHumBuf);
mqttClient.publish("dht11", message);
온습도를 저장하는 message변수를 JSON형태로 만들어주셨는지 체크해보시기 바랍니다.
(위 아두이노 소스코드에는 JSON형식으로 바꿔주는 부분이 없는 듯합니다.)
제가 제공하주는 소스로 여러 곳에서 실습을 했지만 끊기는 현상은 없었습니다.
다시한번 해보시고 질문주시기 바랍니다.~~