i2cProject_with_Jetson

server에 올라오는 명령어에 따라 Fan 제어 1)

찬영_00 2024. 11. 14. 18:52

나는 지금부터 i2c에 대해 이해하고, 데이터를 서버에 보내보기도 했다.

이제 이것을 활용할 일만 남았다.

 

따라서 이제 부터 프로젝트에 관련한 포스팅을 남길려한다.

따라서 기록물이 될 확률이 매우 높기 때문에 카테고리 이름을 i2c를 이용한 프로젝트라고 바꾸겠다.

 

프로젝트의 간략한 설명 : 사용자의 명령어를 받아 Fan을 속도 제어

 

해야 할 것들

- Jetson Nano와 Arduino Due의 i2c 통신으로 Fan 3개, PMS7003 3개의 값을 서버에 Post하기

- Jetson Nano와 Server 간 Mqtt로 명령어 실시간 통신

- Mqtt에서 받은 값 Arduino Due로 i2c 전송하기

 

대강 3개정도의 개발과정을 거쳐 보겠다.

 

코드는 전부 github에 올려두고 여기서는 기록만 할 예정이니 코드는 중간중간 달아두는 깃허브 링크를 참고하자

 


Jetson Nano와 Arduino Due의 i2c 통신으로 Fan 3개, PMS7003 3개의 값을 서버에 Post하기

현재 PMS 3개가 없어서 한개만 올리고, 2개는 주석처리 및  0값으로 진행하겠다.

피드백 받는 부분도 해두었다.

 

https://github.com/PCY00/KSensor/tree/main/24_11_8/V1/basic

 

KSensor/24_11_8/V1/basic at main · PCY00/KSensor

Contribute to PCY00/KSensor development by creating an account on GitHub.

github.com

 

 

error는 코드 오류로 수정 후 고쳤다.

 

현재까지 피드백, 그리고 fan 3개와 pms7003 3개의 값을 i2c를 통해 값을 얻고 서버에 값까지 올리는 것을 해보았다.

 

 다음 스텝으로 넘어가자

 

Jetson Nano와 Server 간 Mqtt로 명령어 실시간 통신

 

일단 먼저 nodejs를 설치해주자. (nodejs 18.20.4버전을 설치할 예정)

 

nodejs linux install를 인터넷 검색을 하자

 

홈페이지에 들어가자

 

 

위와 같이 설정해주고 아래 명령어를 리눅스에서 그대로 입력해준다.

 

commad 'curl' not found, but can be installed wiht : ~~~~

 

가 떴다. 간단하다 아래 명령어로 설치해준다. 나는 apt로 설치했다.

 

sudo apt install curl

 

다시 설치를 진행한다.

 

* 주의사항 

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash

이 명령어 실행 후 반드시 터미널 다시 실행시켜서 nvm install 18을 진행하라. 안그럼 설치 안됨

 

설치됐으면 버전 확인하고 넘어가자~

 

다음으로 

https://github.com/PCY00/KSensor/tree/main/24_08_31

 

KSensor/24_08_31 at main · PCY00/KSensor

Contribute to PCY00/KSensor development by creating an account on GitHub.

github.com

 

여기서 Ksensor.zip안에 있는 nCube를 가져오자

위에서 nCube와 tas를 이용해 mqtt를 할 예정이다.

 

위 파일에서는 내가 진행하는 프로젝트의 npm모듈들이 이미 설치되어있다.

따라서 이 포스트가 다시 한번 그저 기록물이라는 것을 알아두면 좋겠다.

 

원래는 nCube-Thyme-Nodejs 안에서 

npm install

을 진행해서 패키지들을 설치해줘야한다.

나는 이미 이 작업을 예전에 해두었고, 이번 작업에서 python과 serial통신으로 구현된 프로젝트를 c++과 i2c로 변환과정이라 이 작업은 해주지 않고 그대로 사용했다.

 

현재 테스트를 위해 위 서버를 테스트 서버로 변경할 것이다.

 

 nCube-Thyme-Nodejs 안에 conf.js를 찾아서 열자

 

열어서 서버 주소에 맞게 변경하고, cnt 수정 및 mqtt설정을 해주자

 

 

 

motor 컨테이너만 mqtt가 필요함으로 cnt_arr[1]로 했다.

 

다음으로 저장해주고 에러 없이 잘 실행되는지 확인해보자

node thyme

 

 

미리 이전에 컨테이너를 만들어놔서 위 같은 메세지가 뜨고, 맨 아래는 mqtt가 연결되었다고 뜬다

 

어차피 나는 mqtt만 이용하니 conf.js에서 사용하는 프로토콜을 mqtt로 변경해즈고 실행하자

 

그럼 이제 구독되어 있는 컨테이너에 데이터가 오면 그 데이터를 받아처리하는 tas를 설정해주자

 

tas는 현재 tcp통신으로 젯슨나노 안에서 코드에서 코드로 데이터를 전송하게끔 만들어 두었고, 우리는 c++과 js코드간 데이터를 tcp로 주고 받을 것을  만들어주면 된다.

 

tas 관련 코드는 아까 다운 받은 zip파일 안에 다 있으니 참고바란다.

 

* tas에서도 설정해 줄게 있는데 conf.xml에서 컨테이너 이름을 같게 설정해주어야 한다.

 

이렇게 되면 완성이다.

 

tcp통신하는 젯슨나노의 코드는 다음과 같다.

https://github.com/PCY00/KSensor/blob/main/24_11_8/TCP/tcp_basic.cpp

 

KSensor/24_11_8/TCP/tcp_basic.cpp at main · PCY00/KSensor

Contribute to PCY00/KSensor development by creating an account on GitHub.

github.com

 

 

 

실행순서

1. node thyme

2. ./tcp_basic

3. node app.js

 

사용자가 api로 motor에 값을 올리면 tas에서 값을 받아 tcp_basic으로 값을 보내고 받은 값을 출력하는 예제를 진행해보았다.

 

다음 포스팅에서 이것을 활용하여 아두이노 듀에에 달린 Fan을 제어하겠다.