본문 바로가기

전체 글

(291)
[라즈베리 파이] opencv 카메라 버퍼 어제 라즈베리파이로 카메라 찍기 기능을 실습했었다. 그런데 해당 기능을 이용하다 보니, 마치 랙 걸린 것처럼 예전에 가리키던 화면을 저장하고 있다는 것을 알게 되었다.이 현상이 발생하는 이유는 opencv가 내부적으로 화면에 대한 버퍼를 가지고 있기 때문이다. imread 메서드가 현재 카메라가 보고 있는 화면을 반환하는 것이 아니라, 과거에 버퍼에 저장해뒀던 화면을 반환하기 때문에 내가 원하는 사진이 나오지 않았다.따라서, "사진 찍기" 처럼 버퍼가 의미 없는 기능을 opencv로 구현하기 위해서는 버퍼 사이즈를 작게 유지해야 한다. 공식 문서에 따르면 CAP_PROP_BUFFERSIZE 옵션을 통해 버퍼 사이즈를 지정할 수 있다.https://docs.opencv.org/3.4/d4/d15/group..
[라즈베리파이] 카메라 찍기 예제에서는 picamera2를 사용했지만, 해당 라이브러리를 사용하면 이미지가 완전히 깨진 형태로 변환됬다. 따라서, 대신 opencv 라이브러리를 이용해서 카메라 찍기 기능을 구현해봤다.동작은 매우 간단한데, 버튼을 누르면 사진을 찍는 것으로 구성되어 있다.import cv2from datetime import datetimefrom gpiozero import Buttonfrom signal import pause# 카메라 초기화cap = cv2.VideoCapture(-1)cap.set(3, 640)cap.set(4, 480)def take(): ret, frame = cap.read() filename = datetime.now().strftime("%Y-%m-%d|%H:%M:%S") + "...
[라즈베리파이] DS18B20을 이용한 온도 측정 DS18B20은 9비트 ~ 12비트 수준의 해상도로 온도 데이터를 제공할 수 있는 온도 측정 센서로, 다음과 같은 특징이 있다.1 - Wire 기반으로 데이터 전송, 데이터 + 전원 공급을 단일 선으로 가능측정 가능 온도 범위: - 55 ℃ ~ +125 ℃정확도: - 10 ℃ ~ +85 ℃ 범위에서 ± 0.5 ℃상온 수준에서 꽤 높은 정밀도로 온도를 측정할 수 있는 센서로 볼 수 있다.1-Wire ProtocolDS18B20은 1-Wire 프로토콜로 동작한다. 1-Wire 프로토콜은 하나의 핀(그림에서는 DQ)으로 전원 공급 + 데이터 전송이 가능한 시리얼 버스 시스템으로, 구조가 단순하고 비용이 저렴해 센서 - 디바이스 간 통신에 사용된다고 한다.master - slave 프로토콜1-Wire 프로토콜에..
라즈베리 파이를 구매했다. PLC의 꿈스마트팩토리 직무에 관심을 가지게 된 후, 유튜브 강의를 보면서 LS 일렉트릭 사의 XG5000을 기반으로 XGK 모델에 대한 PLC의 래더 문법을 배우고  신호등 / 컨베이어 로직 같은 것을 가볍게 다뤄봤고, 시뮬레이터의 정보를 PC와 연동하여 유니티 환경의 객체와 연동하는데까지 진행해봤다.배우고 있는 입장에서는 왜 XIMUTIL 이라는 라이브러리를 이용해서 시뮬레이터와 서버 프로그램이 통신해야 하는지에 대해 의문이 있었고, Modbus 프로토콜을 배워 둘을 연동해보겠다는 야심찬 꿈을 꾸기도 했다.그런데 공식 매뉴얼을 보다 보니, 내가 생각했던 이상적인 프로젝트는 처음부터 불가능한 상황이었다. 시뮬레이터는 기본적으로 통신 모듈과 관련된 기능을 지원하지 않기 때문이다. 왜 유튜버들은 실제 제품..
Modbus Modbus란?산업용 전기 장비에서 데이터를 전송하기 위해 사용되는 통신 프로토콜로, 최초에는 Modicon 사 ( 현재 슈나이더 일렉트릭에 인수 )의 PLC 간 통신을 위해 개발되었다. 국제 표준으로 지정된 적은 없지만, 산업계에서 워낙 많이 사용되기 때문에 사실상 표준(de-facto)에 해당한다. HMI와 같은 PLC 관련 장치들은 대부분 Modbus를 지원한다.RS232, RS422, RS485 등 시리얼 통신 방식 또는 이더넷 - TCP/IP 기반으로 동작할 수 있다.특징마스터 - 슬레이브 구조: 하나의 마스터 디바이스(PC 등)가 여러 슬레이브 디바이스와 요청 - 응답프로토콜이 공개되어 있음 => 무료로 사용 가능(시리얼)네트워크 상에서 최대 247개 장치를 운용할 수 있으며, broadcas..
[spring] thymleaf 배포 시 template might not be accessible 문제 IDE에서는 아무 문제가 없지만, jar 파일로 만들어 배포하니 타임리프 템플릿을 찾지 못하는 문제가 발생했다.spring.thymeleaf.prefix=classpath:/templates/spring.thymeleaf.suffix=.html타임리프 리졸버는 classpath:/templates/을 기본 prefix로 사용한다. 만약 th:replace 또는 th:insert로 템플릿을 참조할 때 경로 앞에 "/"을 붙이면 "//"으로 처리되어 경로 인식에 실패한다고 한다.모든 템플릿 경로 앞에 "/"을 빼면 문제가 해결된다.푸터푸터
[spring] 메일 송신 기능 테스트(GreenMail) 진행 중인 토이 프로젝트는 아이디 / 비밀번호 찾기 기능에서 메일 송신 기능을 이용한다. 스프링부트를 이용하는 경우  springboot-starter-mail 패키지를 통해 메일 송신 기능과 관련된 기능을 이용할 수 있다.package com.blaxsior.board.domain.mail;import jakarta.mail.MessagingException;import jakarta.mail.internet.MimeMessage;import lombok.RequiredArgsConstructor;import org.springframework.beans.factory.annotation.Value;import org.springframework.mail.SimpleMailMessage;import o..
[spring] 외부 설정 사용 스프링 부트와 관련된 각종 설정은 일반적으로 application.properties 파일에 저장한다. 이 파일은 각종 설정을 담고 있기 때문에 git에 직접 커밋하는 경우도 많다.그런데, 모든 정보를 git 또는 github 환경에 공개할 수는 없다. 메일 API나 데이터베이스 연결 등 스프링을 다른 시스템과 연동하기 위해서는 해당 시스템에 대한 username과 password가 필요한데, 이러한 정보를 외부에 노출하는 순간 해커의 공격으로 데이터를 잃어버리거나, 디도스 공격 등을 통해 엄청난 금액의 손실을 맛볼 수 있다.따라서, 여러 계정과 관련된 정보의 경우 스프링 설정이라고 하더라도 커밋되지 않는 별도의 파일에 저장해두는 것이 적합하다고 생각했다. node.js 진영의 .env 파일처럼, 비밀 ..