MQTT
MQTT (Message Queuing Telemetry Transport)
- 컴퓨터 네트워크 상에서 소형 디바이스들 간에 데이터를 전송하기 위해 설계된 프로토콜.
- 신뢰성이 높고 대역폭이 제한된 환경에서 동작하도록 최적화됨. IoT 디바이스 사이의 통신에 사용됩니다.
-> [센서 데이터 수집, 제어 명령 전달, 상태 감지 등에 활용]
- 발행-구독(Publish-Subscribe) 모델
-> MQTT 브로커에 연결하여 메시지를 발행하거나, 구독하고자 하는 토픽에 대한 메시지를 받을 수 있음,
- TCP/IP 기반의 프로토콜로 동작하며, 일반적으로 인터넷을 통해 메시지를 전송하기 위해 TCP 포트 1883을 사용합니다. 또한, 보안 연결을 위해 TCP 포트 8883을 사용하는 MQTT over SSL/TLS (MQTTs)라는 변형이 있습니다.
nano 텍스트 에디터 기본 사항
다음은 Nano 편집기의 기본적인 명령어 목록입니다:
nano: Nano 에디터를 엽니다.
nano [filename]: 지정된 파일을 Nano 에디터로 엽니다.
Ctrl + G: 도움말을 표시합니다.
Ctrl + X: 에디터를 종료합니다. 만약 변경 사항이 있다면 저장 여부를 묻습니다.
Ctrl + O: 파일을 저장합니다.
Ctrl + W: 특정 문자열을 검색합니다.
Ctrl + \: 검색된 문자열을 모두 바꿉니다.
Ctrl + K: 현재 행을 잘라냅니다.
Ctrl + U: 잘라낸 행을 붙여넣습니다.
Ctrl + C: 현재 커서 위치의 문자를 복사합니다.
Ctrl + Space: 다음 위치에 마크를 설정합니다. 마크를 사용하여 텍스트를 선택할 수 있습니다.
Alt + A: 선택한 텍스트를 복사합니다.
Alt + 6: 복사한 텍스트를 붙여넣습니다.
Alt + U: 선택한 텍스트를 대문자로 변환합니다.
Alt + L: 선택한 텍스트를 소문자로 변환합니다.
Alt + R: 선택한 텍스트의 오른쪽 끝에 있는 공백을 제거합니다.
Alt + [키 왼쪽]: 커서를 이전 단어로 이동시킵니다.
Alt + [키 오른쪽]: 커서를 다음 단어로 이동시킵니다.
nano - python 테스트
nano를 활용해서 간단한 python 파일을 생성해보자.
bash에서 명령어 입력
nano pythontest.py
코드입력
import time
while True:
print(time.ctime())
time.sleep(10)
[참고]
import time: time 모듈을 현재 스크립트에 가져옵니다.
while True:: 무한 루프를 생성합니다. 루프 안의 코드는 계속해서 반복됩니다.
print(time.ctime()): 현재 시간을 문자열 형태로 출력
time.sleep(10): 10초 동안 스크립트 실행을 일시 정지.
따라서 이 코드는 무한 루프를 실행하며, 10초마다 현재 시간을 출력합니다.
# 저장(ctrl+O) , 엔터(enter) 및 닫기(ctrl+x)
실행
python3 pythontest.py
디렉토리 변경
cd /etc/xdg/lxsession/LXDE-pi/
// [참고] /etc/xdg/lxsession/LXDE-pi/로 현재 작업 디렉토리를 변경
// [참고] Raspberry Pi에서 LXDE 데스크톱 환경 설정 파일이 저장된 위치
sudo nano autostart
//autostart파일 코드 최하단에 다음 스니펫 추가.
//lxterrminal -e python /home/(user)/pythontest.py
권한 변경
sudo chmod 777 pythontest.py
- pythontest.py 파일의 소유자, 소유 그룹 및 기타 사용자에게 읽기, 쓰기, 실행의 모든 권한을 부여함.
- chmod: 파일 또는 디렉토리의 권한을 변경
- 777은 권한 설정을 나타내는 숫자입니다. [ 소유자(user)의 권한, 소유 그룹(group)의 권한, 기타 사용자(other)의 권한]
7: 읽기(r), 쓰기(w), 실행(x) 권한이 모두 허용
6: 읽기(r), 쓰기(w) 권한이 허용되며, 실행(x) 권한은 거부됨을 의미합니다.
5: 읽기(r), 실행(x) 권한이 허용되며, 쓰기(w) 권한은 거부됨을 의미합니다.
4: 읽기(r) 권한만 허용되며, 쓰기(w), 실행(x) 권한은 거부됨을 의미합니다.
0: 읽기(r), 쓰기(w), 실행(x) 권한이 모두 거부됨을 의미합니다.
재부팅 및 pythontest.py 자동시작 확인.
sudo reboot
[참고]
sudo kill -9 (process-ID)
//프로세스 강제종료
node-red
실행
node-red
# bash창에 커맨드 입력
# 브라우저에서 플로우 편집
노드 레드(Node-RED)는 시각적 플로우 프로그래밍 도구입니다. 주로 인터넷을 통한 기기 간 통신 및 자동화 작업을 구축하는 데 사용됩니다. 다음은 노드 레드에 대한 간단한 설명입니다.
시각적 플로우 프로그래밍: 노드 레드는 사용자가 시각적으로 플로우 다이어그램을 작성하고 프로그래밍 로직을 구축할 수 있는 도구입니다. 이를 통해 복잡한 작업을 시각적으로 이해하기 쉽게 표현할 수 있습니다.
노드(Node): 노드 레드에서 작업을 수행하는 개별 요소를 노드라고 합니다. 노드는 입력을 받아 처리하고 출력을 생성할 수 있습니다. 예를 들어, HTTP 요청을 처리하는 노드, 데이터베이스에 쿼리를 실행하는 노드, 이메일을 보내는 노드 등이 있습니다.
플로우(Flow): 플로우는 여러 개의 노드가 연결된 그래프로 표현되며, 노드 간의 데이터 및 제어 흐름을 정의합니다. 노드 레드에서는 다양한 노드를 플로우에 추가하고 연결하여 전체적인 작업 흐름을 구성합니다.
팔레트(Palette): 팔레트는 사용 가능한 노드들의 집합을 나타냅니다. 노드 레드에서는 팔레트에서 필요한 노드를 선택하여 플로우에 추가할 수 있습니다. 팔레트에는 미리 정의된 노드 외에도 다른 사람들이 만든 사용자 정의 노드도 포함될 수 있습니다.
페이로드(Payload): 노드 레드에서 데이터는 페이로드라는 용어로 표현됩니다. 페이로드는 노드 간에 전달되는 정보를 나타내며, 일반적으로 JSON 형식으로 표현됩니다.
흐름 제어(Flow Control): 노드 레드는 흐름 제어를 위한 다양한 기능을 제공합니다. 조건문, 반복문, 딜레이 등의 기능을 사용하여 흐름을 제어하고 비동기 작업을 수행할 수 있습니다.
노드 레드(Node-RED)는 많은 종류의 노드를 포함하고 있으며, 사용자들이 추가적인 노드를 개발하여 공유할 수도 있습니다. 다음은 일반적으로 사용되는 몇 가지 주요한 노드의 종류입니다:
입력 노드(Input Nodes): 입력 노드는 외부 이벤트를 감지하고 노드 플로우에 데이터를 주입하는 역할을 합니다. 예를 들어, HTTP 요청을 수신하는 HTTP 입력 노드, 타이머 이벤트를 생성하는 타이머 입력 노드, MQTT 메시지를 구독하는 MQTT 입력 노드 등이 있습니다.
출력 노드(Output Nodes): 출력 노드는 노드 플로우에서 처리된 데이터를 외부로 전달하는 역할을 합니다. 예를 들어, HTTP 응답을 보내는 HTTP 출력 노드, 이메일을 보내는 이메일 출력 노드, MQTT 메시지를 게시하는 MQTT 출력 노드 등이 있습니다.
함수 노드(Function Nodes): 함수 노드는 자바스크립트 코드를 실행하여 데이터를 변환하거나 처리하는 역할을 합니다. 함수 노드는 데이터를 받아들여 원하는 방식으로 가공하고 출력으로 전달할 수 있습니다. 사용자 정의 로직을 구현하기에 적합한 노드입니다.
흐름 제어 노드(Flow Control Nodes): 흐름 제어 노드는 노드 플로우 내에서 흐름을 제어하는 역할을 합니다. 예를 들어, 조건문을 실행하는 switch 노드, 반복 작업을 수행하는 loop 노드, 딜레이를 생성하는 delay 노드 등이 있습니다.
데이터처리 노드(Data Processing Nodes): 데이터 처리 노드는 데이터를 가공하거나 조작하는데 사용됩니다. 예를 들어, JSON 데이터를 파싱하거나 생성하는 JSON 노드, 데이터를 필터링하는 filter 노드, 데이터베이스 쿼리를 실행하는 database 노드 등이 있습니다.
시각화 노드(Visualization Nodes): 시각화 노드는 데이터를 시각적으로 표현하거나 대시보드에 표시하는 역할을 합니다. 예를 들어, 그래프를 생성하는 chart 노드, 테이블을 표시하는 table 노드, 대시보드에 값을 표시하는 gauge 노드 등이 있습니다.
이 외에도 다양한 유용한 노드들이 존재하며, 노드 레드의 팔레트에서 더 많은 노드를 찾아볼 수 있습니다
https://chanzu.tistory.com/category/NodeRed
'NodeRed' 카테고리의 글 목록
[朴] 빛날 찬 [燦] 기둥 주 [柱]
chanzu.tistory.com
라즈베리파이&브레드보드
하드웨어 구성
(1)라즈베리파이의 구성요소와 활용방향
라즈베리파이는 영국에서 개발된 개발 보드로 CPU, RAM, GPU, BLUETOOTH, WI-FI 까지도 가능한 초소형 컴퓨터라고 부를수 있다. 구성은 이렇다. 위의 제품 사진으로 기본적인 정보를 파악할 수 있는데, 1.
inmt.tistory.com
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=tang_eom&logNo=221224537939
컴퓨터 구조 - 라즈베리파이 이해하기
2018.03.08 예습 2018년 새학기가 시작되었고, 이번 학기 컴퓨터 구조 수업은 라즈베리파이와 함께 진행된...
blog.naver.com
GPIO(General Purpose Input/Output) pin
https://fishpoint.tistory.com/6181
라즈베리파이 GPIO 핀 번호, 사용 가능한 핀 정리
라즈베리파이 GPIO 핀 번호, 사용 가능한 핀 정리 라즈베리파이에서 실제 GPIO(General Purpose Input/Output) pin 으로 사용할 수 있는 핀을 계산해보자. GPIO 핀은 모든 마이크로 프로세서나 MCU, 온보드 컴퓨
fishpoint.tistory.com
https://fishpoint.tistory.com/7687
Raspberry Pi4 GPIO Pinout 완벽 정리
Raspberry Pi4 GPIO Pinout Raspberry Pi 4는 이전 Raspberry Pi 모델보다 더 많은 고급 기능을 제공합니다. 2019년 6월에 출시되었으며 4GB 및 8GB RAM 메모리를 포함하여 이전 버전에 비해 처리 속도가 약 90% 향상
fishpoint.tistory.com
브레드보드
https://namu.wiki/w/%EB%B8%8C%EB%A0%88%EB%93%9C%EB%B3%B4%EB%93%9C
브레드보드 - 나무위키
이 저작물은 CC BY-NC-SA 2.0 KR에 따라 이용할 수 있습니다. (단, 라이선스가 명시된 일부 문서 및 삽화 제외) 기여하신 문서의 저작권은 각 기여자에게 있으며, 각 기여자는 기여하신 부분의 저작권
namu.wiki
https://ckmakers.com/80/?idx=3944732&bmode=view
[회로] 브레드보드(Bread Board) : 청강메이커스랩
전기회로 부품#01 브레드보드 (Bread Board) 빵판, 빵틀이라고도 불리는 브레드보드는 전자 회로의 시제품을 만드는 데 사용하고 재사용할 수 있는 무땜납 장치이다. 일반적으로 내부연결 전기단
ckmakers.com
https://dev-agit.tistory.com/7
[전자회로] 브레드보드 사용법
브레드보드 (Bread board) 브레드보드는 주로 전기, 전자회로를 구성하는데에 쓰이는 도구로 빵판이라고 불리기도 합니다.여러 모양의 브레드보드가 있지만 그 사용법과 사용목적은 모두 같다고
dev-agit.tistory.com
node-red 사용
우측 상단 메뉴-> 팔렛트관리 -> node-red-contrib-dht-sensor 설치
https://www.youtube.com/watch?v=rEGMUkhFhpQ&list=PLVMlEEC4qUxHHOPIH5CiFeCPMl5JIU5V7&index=5
[참고] MongoDB 연동
#MongoDB Compass 설치되어있는지 확인.
#MongoDB Atlas 에서 설정 진행. [https://www.mongodb.com/atlas/database]
[1] project -> security탭 -> quickstart -> id&password 생성및 Add entries to your IP Access List 등록
[2] connect 설정
# Database Deployments 에서 connect 선택및 url 복사.
# Replace <password> with the password for the <username> user.
[3] MongoDB Compass 에서 connection 설정.
[4] MQTT 실습을 위해 DB와 Collection 생성
[참고]
sudo systemctl enable nodered
// 부팅시 노드레드 자동시작
진행내용
데이터 수집 : Analog to Digital
데이터 전송 : MQTT
데이터 처리 : Message(String) to JSON(Object)
데이터 저장 : MongoDB v2.7
모니터링 : Node-Red Dashboard(그래프로)
접점 릴레이방식 제어 : Pin Digit(high / Low)