인기글
-
2024-01-09 기준 WiFi HaLow 정리
Wi-Fi HaLow는 IoT(Internet of Things)의 특별한 요구 사항을 지원하기 위해 개발된 Wi-Fi 기술의 한 형태입니다. 이 기술은 IEEE 802.11ah 표준에 기반하며, 다음과 같은 주요 특징을 가지고 있습니다 장거리 저전력 연결 Wi-Fi HaLow는 기존 Wi-Fi 네트워크보다 훨씬 더 넓은 범위를 제공합니다. 이를 통해 사용자는 더 넓은 영역에서 연결을 유지할 수 있으며, 특히 농업, 도시 인프라, 산업 자동화와 같이 넓은 지역을 커버해야 하는 애플리케이션에 이상적입니다. 낮은 전력 소모 IoT 기기는 종종 배터리로 작동하며, 배터리 수명은 매우 중요합니다. Wi-Fi HaLow는 낮은 전력 소모를 특징으로 하여 배터리 수명을 연장할 수 있도록 설계되었습니다. 높은 벽 투..
-
[SAE J1939] DM1 ( Diagnostic Message 1)
DM1(Diagnostic Message 1) - Active Diagnostics Trouble Code DM1은 PGN 65226(0xFECA)를 사용하며, 활성 DTC가 있거나 요청의 응답이 있는 경우에만 주기적으로 전송 된다. 활성화 된 DTC가 1개 이상일 경우, DM 1 메시지는 전송 프로토콜을 사용 하여 전송되며, 이 메시지의 전송 주기는 1초이다. 전송 프로토콜 장치에서 DM1 메시지를 보내기 위해서는 아래와 같은 전송 프로토콜을 사용한다. 처음 J1939 Transport Protocol BAM( Connection Management ) 메시지를 보내서 앞으로 보낼 DM1 메시지의 메시지 Size, Packet의 갯수, DM1의 PGN을 Receiving Node에게 알려 준다. 이후,..
-
IAP와 ISP의 차이
MCU 프로그램을 하다 보면, IAP(In-Application Programming)과 ISP(In-System Programming) 용어를 많이 접할 수 있다.간단하게 생각하면, IAP와 ISP 모두 MCU에 프로그램을 업로드 하기 위한 방식인데, 둘 사이의 정확한 차이를 조사 해서 정리 한다. ARM에서는 IAP와 ISP를 아래와 같이 설명 했다. In-System Programming means that the device can be programmed in the circuit by using an utility such as the ULINK USB-JTAG Adapter.In-Application Programming means that the application itself can r..
-
[Steve 서버 구축 #2] VM 설정
1. Putty로 Lightsail VM에 연결 SSH 연결이 정상적으로 수행되면 아래와 같은 화면을 볼 수 있습니다. 2. Update $ sudo apt update && sudo apt -y upgrade 3. Steve 서버를 구동하기 위한 필요한 패키지 설치 Steve를 구동하기 위한 maven과 mysql 패키지를 설치 합니다. $ sudo apt install maven mysql-client-core-5.7 4. DB 연결 후 데이터베이스 생성 앞에서 생성한 DB 인스턴스에서 username과 password를 이용하여 아래 명령을 수행 합니다. 명령에 대한 의미는 아래와 같습니다. mysql -u -h -p $ mysql -u dbmasteruser -h 생성한 DB end point -..
-
[testXJIG QR 코드 인식 고도화 #3-3] 구현 부분
본 포스팅에서는 testXJIG가 카메라에서 영상을 추출하여 QR 코드를 검출하는 과정을 위한 SW 로직과 코드들을 공유 한다. SW 로직 testXJIG가 카메라에서 영상을 추출하고, 이를 채널 별(QR 코드 갯수 별) 이미지를 잘라 전처리하는 절차는 아래 다이어그램과 같다. testXJIG에서는 카메라 제어를 통해 영상을 추출하는 Video Thread와 이미지를 받아 채널별 이미지를 자르고 QR 코드를 검출하는 QR Detect Thread 두개의 Thread로 동작 한다. ( 처음에는 Video Thread에서 Loop를 돌려 QR Detect Thread 동작을 해 보았는데 속도 문제가 있어 Video Thread와 QR Detect Thread를 분리 하였다. ) Video Thread와 QR..
-
[testXJIG QR 코드 인식 고도화 #2-2] uEye XC(U3-36L0XC) 카메라 환경 구축
U3-36L0XC를 사용하기 위한 드라이버와 Python 코드와 연동해서 사용하기 위한 Python Biniding 설치 방법을 설명 한다. Windows와 Linux-PC, Linux-Embedded 보드에서 각각 설정 가능 하도록 Windows 버전과 Linux 버전 설치 방법을 설명한다. U3-36L0XC 드라이버 및 툴 다운로드 아래 다운로드 링크에서 IDS peak 소프트웨어를 다운로드 한다. IDS peak 소프트웨어는 U3-36L0XC의 설정 및 카메라 영상을 확인 할 수 있는 IDS 소프트웨어 이며, 해당 소프트웨어를 설치 하면 Python Binding까지 포함하고 있다. 다운로드 링크 https://en.ids-imaging.com/download-details/AB03281.html?..
-
[UART] Parity Bit
Parity를 사용하지 않을 때, UART 패킷 아래 그림과 같이 START, STOP bit를 제외하고 8bit를 데이터로 사용 합니다. Parity Bit는 옵션 Bit None으로 설정 시 아래와 같은 패킷 구조로 송신 Scope에서 출력 된 파형 Parity를 사용할 때, UART 패킷 아래 그림과 같이 START, STOP bit를 제외하고 9bit를 송/수신 하며 PB bit는 Parity 값을 의미 합니다. Even, Odd 설정에 따라 PB 값이 정해 짐 Parity 설정 별 PB 값 Even(짝수)로 패리티 설정 시, Data Bit에 1의 갯수가 짝수면 Parity Bits 0, 홀수면 1로 설정 Odd(홀수)로 패리티 설정 시, Data Bit에 1의 갯수가 홀수면 Parity Bit..
-
[Python] 구조체 형식으로 Serialize Deserialize 하기
프로토콜 기반으로 데이터를 송/수신 하다 보면, 정해진 패킷을 만들거나 수신해서 분석(Parsing) 해야 하는 경우가 많습니다. 이럴 때 마다, Byte 단위로 접근 하여 패킷을 만들거나 분석하는 방식으로는 유지보수가 쉽지 않아 C언어의 구조체를 사용하듯이 데이터를 구조화 할 수 있도록 파이썬 코드를 변경 하였습니다. python 라이브러리의 ctypes.Structre를 사용 하였으며, 아래와 같은 구조의 패킷을 만들거나 분석 하기 위한 클래스를 만들어서 사용하는 방법을 설명 합니다. 아래 코드는 위 그림과 같은 포맷의 데이터를 만들기 위한 클래스 입니다. serialize() 구조체를 byteArray 형태로 변경 deserialize() byte 형태의 데이터를 구조체 형태로 변경 __setatt..
최근 작성된 글
-
리눅스 usb-serial latency 값 줄이기
JIG에서 UART 메시지를 이용하여 Target MCU의 펌웨어 업데이트 하는 기능이 있습니다. Target MCU에 펌웨어 업데이트 시간을 줄이기 위해 MCU에서 지원하는 최대 baud_rate로 설정하고 리눅스에 설정되어 있는 usb-serial 장치의 latency_timer 값을 1로 설정 하였다. usb-serial/devices/latency_timer란 usb-serial 장치에서 데이터 전송을 얼마나 자주 할 것인지를 결정하는 설정 입니다. 이 값은 USB 버스에서 장치가 데이터 패킷을 보내는 빈도를 조절 합니다. 예를 들어, 'latency_timer'가 낮은 값으로 설정되어 있다면, 시스템은 더 자주 데이터를 보내게 되어 실시간성이 좋아 지지만 전체 처리량은 감소 할 수 있습니다. 반..
-
[OCPP Gateway] TW_OCPP
TW_OCPP란 전기차 충전소 관리 시스템(EV Charging Station Management System, 이하 Central System)과 충전소(Charge Point)간의 통신을 중계하는 장치 입니다. OCPP는 전 세계적으로 널리 사용되는 개방형 프로토콜로, 다양한 제조업체의 충전소와 관리 시스템 간에 호환성을 제공 합니다. 용어 정리 Central System Charge Point를 관리하고, 사용자가 해당 Charge Point를 사용할 수 있는지 여부를 인증하는 정보를 가지고 있는 중앙 시스템(Central System) Charge Point Charge Point는 전기차를 충전할 수 있는 물리적 시스템이다. Charge Point는 하나 이상의 충전 커넥터를 가짐 CSMS(Ch..
-
[django] 마이그레이션 롤백 하는 방법
기존 데이터를 유지하면서 django migrate로 마이그레이션 문제를 해결하기 위한 방법을 정리 합니다. 마이그레이션이 충돌되거나 문제가 발생 했을 때, 아래와 같은 명령으로 롤백 할 수 있습니다. 특정 migration_name에 지정된 스키마 형태로 마이그레이션 수행 $ python manage.py migrate [app_name] [migration_name] 만약 모든 마이그레이션을 롤백 하려면 아래 명령 수행 $ python manage.py migrate [app_name] zero
-
라즈베리파이, 오렌지파이 SD 카드 깨짐 문제
제품 개발을 하던 중, 보드의 전원이 갑자기 차단하면 보드의 SD 카드의 파일이 깨지는 현상이 있었습니다. 아마 보드 입장에서 프로그램이 동작하면서 파일 시스템의 파일들을 Write 하는 도중에 전원이 차단되어 파일이 깨지는 것으로 보입니다. 해결 방법 임시 해결 방법일 수 있으나, 아래와 같이 fstab 파일에 sync 옵션을 추가 하는 방법이 있습니다. $ sudo vi /etc/fstab UUID=73379811-91e8-4483-8aff-7d4bc3cca9f6 / ext4 defaults,sync,noatime,commit=600,errors=remount-ro 0 1 UUID=5BC1-359C /boot vfat defaults 0 2 tmpfs /tmp tmpfs defaults,nosuid ..
-
[쿠버네티스] CPU 점유율 메모리 사용량 확인, HPA 설정
쿠버네티스에서 사용하는 POD들의 CPU 점유율과 메모리 사용량을 확인 하는 방법과 Autoscaling을 위한 HPA 설정 방법을 정리 하였습니다. POD CPU 점유율과 메모리 사용량 확인 현재 사용 중인 pod의 CPU 점유율과 메모리 사용량을 확인하는 명령은 아래와 같습니다. CPU의 100m는 0.1 core를 의미 합니다. 메모리의 116Mi는 116Mbytes를 의미 합니다. kubectl top pods -n C:\>kubectl top pods -n testx-dev NAME CPU(cores) MEMORY(bytes) tx-msa-device-service-dev-8496684c75-bzph2 208m 116Mi tx-msa-fe-backend-service-dev-666555767d-..
-
[쿠버네티스] Helm 차트의 Resource와 Autoscaling
쿠버네티스에 Deployment를 위한 설정 중 Resource와 Autoscaling에 대해 정리 합니다. Resources 파드에 할당할 CPU와 메모리 리소스의 최소, 최대 한계를 정의 파드가 사용 할 수 있는 리소스의 양을 제한하여, 리소스의 과도한 사용을 방지하고, 다른 파드와의 리소스 경쟁을 최소화 하는데 도움을 줌 Resources 설정 예제는 아래와 같습니다. resources: requests: memory: "64Mi" cpu: "250m" limits: memory: "128Mi" cpu: "500m" requests 파드가 시작될 때 요청하는 리소스의 양 이 값을 기반으로 쿠버네티스 스케줄러는 파드를 적절한 노드에 배치 limits 파드가 사용할 수 있는 리소스의 최대 한계 이 한계..
-
[pyinstaller] 바이러스, 트로이 목마 문제 해결
pyinstaller를 사용하여 패키징 할 때, 멀웨어로 인식되는 문제를 해결한 방법을 정리 하였습니다. 문제 pyinstaller를 사용하여 python 프로그램을 패키징 할 때 아래와 같은 에러가 발생 하고 Windows Depender에서는 트로이목마 파일이 있다면서 에러를 출력 하였다. File "c:\Workspace\venv_phoenixon\lib\site-packages\PyInstaller\building\build_main.py", line 1071, in main build(specfile, distpath, workpath, clean_build) File "c:\Workspace\venv_phoenixon\lib\site-packages\PyInstaller\building\bui..
-
[PySide2] TextEdit의 textChanged 이벤트를 받아 개행 문자 삭제
Example Code TextEdit에서 입력된 값이 변경될 때 마다 이벤트를 받아 개행문자가 있는지 확인하고 삭제하는 예제입니다. TextEdit에 수정된 문자열을 입력하면서도 이벤트가 발생 할 수 있기 때문에 아래와 같이 무한루프를 방지하기 위한 코드를 추가 하였습니다. from PySide2.QtWidgets import QApplication, QTextEdit, QVBoxLayout, QWidget class MyWidget(QWidget): def __init__(self): super().__init__() # 레이아웃 설정 self.layout = QVBoxLayout(self) # QTextEdit 위젯 생성 및 레이아웃에 추가 self.text_edit = QTextEdit() sel..