반응형
마지막 웹 페이지는 chart.js를 이용해서 멋들어지게 만들고 싶었으나,
프론트는 정말 마지막의 마지막에 완성하면서 하려고 한다.
그래서!!!
이번 글에서는
4. 웹으로 아두이노 데이터 보내기
를 마무리로 해보겠다.
저번
3. 아두이노에서 보내는 데이터는 다른 이름의 socket으로 보내기
에 이어서 웹으로 다른 이름의 socket을 만들어줬다.
// index.html의 script부분
<script>
var socket = io();
var form = document.getElementById('form');
var input = document.getElementById('input');
var data = document.getElementById('data');
socket.on('temp', function (msg) {
data.innerText = msg;
});
</script>
html부분에는 div태그 안에 p태그가 있고 그 부분에 온도 값을 표시해주려고 한다.
아두이노에서 랜덤한 값을 데이터로 보내주고,
웹에서 사용하는 'temp'라는 소켓으로 데이터를 보내주기 위해
잠깐 아두이노 코드를 수정해줬다.
// Arduino안의 함수
void socketIOEvent(socketIOmessageType_t type, uint8_t * payload, size_t length) {
switch (type) {
case sIOtype_DISCONNECT:
USE_SERIAL.printf("[IOc] Disconnected!\n");
break;
case sIOtype_CONNECT:
USE_SERIAL.printf("[IOc] Connected to url: %s\n", payload);
// join default namespace (no auto join in Socket.IO V3)
socketIO.send(sIOtype_CONNECT, "/");
break;
case sIOtype_EVENT:
{
//사물인터넷보드가 메세지를 수신하는 지점!
String msg = (char*)payload;
if (msg == "[\"request\",9999]") {
int temp = random(0,40);
// 사물인터넷보드가 데이터를 보내는 로직
DynamicJsonDocument doc(1024);
JsonArray array = doc.to<JsonArray>();
array.add("request");
array.add(temp);
String output;
serializeJson(doc, output);
socketIO.sendEVENT(output);
} else {
USE_SERIAL.println(msg + 'is wrong');
}
break;
}
case sIOtype_ACK:
USE_SERIAL.printf("[IOc] get ack: %u\n", length);
hexdump(payload, length);
break;
case sIOtype_ERROR:
USE_SERIAL.printf("[IOc] get error: %u\n", length);
hexdump(payload, length);
break;
case sIOtype_BINARY_EVENT:
USE_SERIAL.printf("[IOc] get binary: %u\n", length);
hexdump(payload, length);
break;
case sIOtype_BINARY_ACK:
USE_SERIAL.printf("[IOc] get binary ack: %u\n", length);
hexdump(payload, length);
break;
}
}
해당 코드를 실행하니
아두이노에서 랜덤한 값을 내뱉으며 잘 동작한다
그렇다면
웹에서는??
비록 한 줄이지만, 잘 표시가 되고 있다.
그렇다면 DB에서는????
마지막 데이터가 전송되기 전에 서버를 종료해서 18이라는 값은 오지 않았지만,
그래도 DB에 잘 저장되고 있다!!!
이번 프로젝트는 노드레드를 사용하지 않고 했다는 점에서 의미가 클 것 같다.
노드 레드를 사용하면 훨씬 쉽고 빠르게 만들 수 있기 때문에
나중에 실제 프로젝트에서는 노드 레드를 사용할 것 같다.
다만 노드레드에서 UI를 직접 만들 수 있는지 여부는 더 공부해봐야 할 것 같다.
많이 어설펐지만
아두이노 - 서버 - 웹(프론트)까지 서로 다이나믹하게 연결되는
이번 프로젝트도 완성!!!
'Study & Project ✏️ > node.js 🐣' 카테고리의 다른 글
[AWS nvm 설치] AWS, Linux, Linux2, CentOS에서 NVM 설치하기 (0) | 2023.05.02 |
---|---|
[socket.io] 프로젝트 준비5 - 아두이노 Socket.io (0) | 2022.02.15 |
[socket.io] 프로젝트 준비4 - 아두이노 Socket.io (0) | 2022.02.11 |
[socket.io] 프로젝트 준비3 - 아두이노 Socket.io (0) | 2022.02.10 |
[socket.io] 프로젝트 준비2 - 아두이노 Socket.io (7) | 2022.02.09 |