Embedded/RaspberryPI 30

자원을 공유하는 다중 쓰레드 실습 소스코드 (뮤텍스-mutex 적용)

안녕하세요.  "[도서]임베디드 소프트웨어 베이직, 13.1 자원을 공유하는 다중 쓰레드 실습" 중 마지막 내용에 전체 소스코드 내용이 없어서  공유합니다.  거의 마지막 실습이고 소스코드 내용을 요약하자면 이전 내용에서 다루었던 pthread를 이용을 하는데 있어 공유하는 변수 2~4개의 다른 쓰레드에서 접근했을 때 어떻게 처리해야 하는지 간략하게 알려줍니다.  세마포어, 뮤텍스 등 방법이 있지만 여기서는 뮤텍스(Mutex)를 활용해서 1씩 증가하고 감소하는 쓰레드와 값이 정상적으로 동작하는지 확인하는 코드입니다.   1. 뮤텍스 활성화 및 쓰레드 4개 테스트 소스코드  100,000번 1씩 증가, 감소하는 쓰레드 함수와 300,000번 1씩 증가, 감소하는 쓰레드를 실행하고, 공유자원으로 사용할 변수..

라즈베리파이(Raspberry Pi)에서 스레드(pthread) 테스트

안녕하세요.  읽고 있는 책(하단 참고 도서 참고)에 내용 중 pthread 내용  조금 수정이 필요한 코드 부분이 있어 수정과 확인을 위해서 공유합니다.  1. POSIX Threads (pthread)란?POSIX Threads(pthreads)는 POSIX (Portable Operating System Interface) 표준을 따르는 멀티스레딩 API입니다.멀티스레딩(multi-threading)을 지원하여 하나의 프로세스 내에서 여러 스레드가 동시에 실행될 수 있도록 설계되었습니다.Unix 계열 시스템(Linux, macOS 등)에서 널리 사용되며, C 및 C++에서 멀티스레드를 구현하는 표준 방법입니다.2. 주요 특징경량 프로세스: 스레드는 동일한 프로세스 내에서 실행되므로 메모리 공간과 리..

라즈베리파이(Raspberry Pi) 리눅스 커널 구성 확인 및 빌드(build) 해보기

안녕하세요.   Rasbperry Pi를 사용하지만, 실질적으로 커널을 빌드해 볼 일을 많이 없을 것이라 생각됩니다. Device Driver 개발을 위해 커널 소스 혹은 해더를 다운로드하는 정도일 것입니다. 간단하게 커널 구성 내용과 빌드하는 방법 정도는 알아 두면 좋을 듯합니다.  언제 시점에서 테스트하느냐에 따라서 디렉터리 경로가 변경될 수 있으니 참고해서 따라 하시면 도움일 될 것입니다.  1. 커널 빌드를 위한 패키지 설치 git : 버전 관리 시스템으로, 소스 코드를 효율적으로 관리하고 공동 작업을 지원합니다. Git은 로컬과 원격 저장소 간의 코드 동기화를 가능하게 합니다. bc : 고급 계산기 언어로, 명령줄에서 수학적 계산을 수행할 수 있습니다. 특히, 스크립트에서 복잡한 계산을 처리할 ..

리눅스(Raspberry Pi)에서 램 디스크(RAMdisk) 장단점 확인 및 램 디스크 테스트 하기

안녕하세요. 기존 HDD에서 처리하다 보면 시간이 오래 걸리기 때문에 RAM에 필요한 코드 부분을 올려놓고 사용하는데요. 원하는 임의의 디스크를 만들어서 HDD에서 하는 것처럼 작동시켜 얼마나 빨리 처리되는지 확인해 보겠습니다.  1. Ramdisk란  시스템의 RAM(주기억장치)을 디스크 드라이브처럼 사용하는 가상 저장 장치를 의미합니다. 쉽게 말해, 메모리(RAM)를 파일 시스템처럼 활용하는 기술입니다. 이 디스크는 실제 물리적 디스크(HDD, SSD)가 아닌 메모리의 일부를 할당해 동작합니다.  운영 체제에서는 이를 임시 파일 시스템으로 다루며, Linux에서는 tmpfs나 ramfs 명령어로  파일 시스템이 RAMDisk로 구현하는 데 사용합니다.  2. 작동 방식   할당 : 시스템 메모리(RA..

Raspberry Pi CM4에 ModbusTCP Server 실행해 보기 - 4편(ModbusTCP server와 유량센서와 연동)

안녕하세요.  실제로 연동하는 프로그램을 만들어 보려고 합니다.  이전 ModbusTCP내용과 PulseCount를 잘 조합하면 될 것으로 생각했습니다.그런데 가상환경에서 RPi.GPIO의 add_event_detect() 함수를 사용하면 이벤트를 받아서 처리할 수가 없었습니다.    이전 내용을 참고하시면 pigpio 라이브러리 사용하는 방법을 다시 찾아서 확인하였습니다.최종적로 ModbusTCP와 pigpio를 이용해서 작업을 마무리할 수 있었습니다.  1. 코드 구성 확인 소스코드를 보기 전게 간단하게 맥락을 설명하면 아래와 같습니다.  1) 필요한 라이브러리 및 모듈 pyModbusTCP: ModbusTCP 서버를 구현하기 위한 라이브러리pigpio: GPIO 핀에서 센서 데이터를 안정적으로 읽어..

pyinstaller로 실행파일을 만들고 강제종료(ctrl + c) 시 PYI-3170:ERROR 에러 발생 메시지 해결 방법(?)

안녕하세요.  pyinstaller로 실행파일을 만들고 ctrl + c 눌러 종료할 때 보통 아래와 같은 메시지가 나타납니다. 종료할 때 깔끔하게 끝나지 않고 조금 애매하게 종료되는 것 같아서 조금 찾아보았습니다.  1. 테스트 환경   - HW : Raspberry Pi CM4   - OS : bookworm 64bit  - SW :     pip install pyinstaller로 인스톨러를 설치  2. 에러(?) 현상  Python 파일로 실행할 경우 문제없이 종료됩니다. 메모리 혹은 특정 리소스를 점유하고 해제가 필요한 코드에서 에러가 발생하는 것으로 생각됩니다. 현재 시점에서 [PYI-3170:ERROR]로 구글링해도 많이 나오지 않았습니다.  pyinstaller python 프로그램으로 만..

Raspberry Pi 가상환경(-m venv)에서 add_event_detect 에러 발생 시 차선책(?)

안녕하세요.   ModbusTCP는 가상환경에서 동작하는 것을 이전 글에서 확인했습니다. 그러나 가상환경에서 GPIO 엣지 검출(Pulse)을 하려고 하는데 생각과 달리 잘 되지 않아서 차선책으로 찾은 방법을 남겨두려고 합니다.   그냥 폴링(Polling)으로 하기에는 정확도와 비효율적이라는 생각이 들어서 해결방법은 없을지 찾아보았습니다.  1. 기본 가상환경 생성 및 설정  Python 표준 라이브러리의 venv 모듈을 사용하여 가상 환경(virtual environment)을 생성합니다. 가상 환경은 Python 프로젝트마다 독립적인 패키지와 Python 인터프리터를 사용할 수 있게 해 줍니다.  아래와 같이 가상환경을 생성 후 RPi 라이브러리 설치 (이전 ModbusTCP 확인 때문에, 설치했다..

Raspberry Pi CM4에 ModbusTCP Server 실행해 보기 - 3편(ModbusTCP server 수정된 함수사용)

안녕하세요.  이전 글에서 deprecated 된 get_words() 함수 관한 부분을 완료하지 못하고 마무리했습니다.이 부분을 다시 확인하고 정리해보려고 합니다. 기본 자료형과 구조는 동일합니다.  1. DataBank Class 최신 함수  최신 버전에서는 DataBank를 직접 호출하는 대신, ModbusServer 객체의 data_bank 속성을 통해 접근합니다 1) DataBank의 메모리 구조 DataBank는 Modbus 표준 메모리 구조를 관리하며, 아래 4가지 메모리 타입을 제공합니다: Coils (1-bit): 읽기/쓰기 가능한 디지털 값Discrete Inputs (1-bit): 읽기 전용 디지털 값Holding Registers (16-bit): 읽기/쓰기 가능한 16비트 값Inp..

Raspberry Pi CM4에 ModbusTCP Server 실행해 보기 - 2편(pyModbusTCP 설치)

안녕하세요.   1편에 이어 ModbusTCP에 대해서 확인해 보겠습니다.테스트 환경은 라즈베리파이 CM4에서 진행했습니다. 이번 글의 목표는 간단하게  pyModbusTCP를 설치해 보고 작동하는 되는 것을 확인하는 것입니다.   1. pymodbusTCP 설치      # install the last available release (stable)$ pip install pyModbusTCP    설치하려고 하면 아래와 같이 에러가 발생할 수 있습니다. 그래서 가상의 환경을 만들어 진행합니다.    가상 환경을 만들더라도 네트워크 환경은 동일하게 유지되며, 가상 환경은 Python 패키지와 종속성만을 격리할 뿐, 네트워크 설정이나 시스템 자원에는 영향을 주지 않습니다. 1) 가상 환경 생성 $ py..

Raspberry Pi CM4에 ModbusTCP Server 설치해 보기 - 1편(ModbusTCP 기본지식)

안녕하세요.   ModbusTCP Server 샘플을 만들어 보기 전에 간단하게 ModbusTCP 이해가 필요할 것 같아서 자료를 찾아보았습니다. 다음 시간에 실제적으로 설치하고 프로그래밍하는 내용을 남겨보려고 합니다.  1. Modbus 프로토콜 개요  Modbus는 산업용 통신 프로토콜로, 공정 자동화에서 주로 사용되며 특히 장비 간의 간단하고 신뢰성 있는 데이터 교환을 위해 설계되었습니다. Modbus는 Master-Slave 방식으로 동작하며, 주로 센서, PLC(Programmable Logic Controller), SCADA(Supervisory Control and Data Acquisition) 시스템과 같은 장치들이 Modbus를 통해 서로 데이터를 주고받습니다.     통신 구조: M..

Raspberry Pi에서 유량센서(YF-B10-S)로 유량계산하기

안녕하세요.   이전 글에서 유량센서(YF-B10-S) 제품에 대해서 확인해 보았습니다. 이번 글에서는 실제로 어떻게 값을 구할 수 있는지, Raspberry Pi를 이용해서 확인해 보겠습니다.     YF-B10-S(유량센서) 확인해 보기안녕하세요.  사이드 프로젝트로 유량파악해서 ModbusTCP로 전달이 필요하다는 요청을 받았습니다. 우선 유량을 확인할 수 있는 센서를 확인해 보겠습니다.  파이프 규격과 재질에 따라 가격과remnant24c1.tistory.com  1. 유량센서 테스트 환경  - 라즈베리 파이 CM4 - YF-B10-S 유량 센서 (하네스 SM 3핀 Female 커넥터 장착) - 10kΩ 풀업 저항 (NPN 출력 신호 안정화용) - 점퍼 와이어 혹은 연결 커넥터 하네스 커넥터(SM..

Raspberry pi CM4에 OpenCV 4.6.0과 Contrib 모듈 설치해보기

안녕하세요.   에지 컴퓨팅이라고 해서 단말 장치에서 가까운 위치에서 컴퓨팅을 하는 것을 말합니다. 그래서 라즈베리 파이가 단말장치가 되고 여기서 컴퓨팅, 분석까지 하는 것으로 생각해서 OpenCV를 설치해서 분석을 해보려고 합니다.  OpenCV 설치는 하단 을 따라 진행하였으며, OpenCV 4.5.4에서 에러가 났다고 글이 쓰여 있어서 그 상위 버전으로 테스트해 보았습니다. 그리고 Raspberry Pi OS는 Bullseye 32bit에서 초기화한 상태에서 내용 조금 수정하여 진행하였습니다. 만약 기존 버전이 설치되어 있다면  하단 을 참고해서 삭제 후 진행하시길 추천드립니다.  1. OpenCV 컴파일 전 필요한 패키지 설치 pi@raspberrypi:~ $ sudo apt updatepi@ra..

Raspberry PI 4(CM4 Module)과 IO보드(MCUZONE Tiny, waveshare CM4-IO-BASE-B)에서 파이캠(OV5647) 카메라 동작 시키기

안녕하세요.   라즈베리 파이 4 Micro SD Card 버전보다는 CM4 eMMC 모듈 버전이 좀 더 안정적이고 빠르다고 생각되어 CM4 I/O 보드로 카메라 동작 테스트를 하였습니다. 그런데, 현재 라즈베리 파이 OS와 보드에 따라서 차이가 있었습니다.  1. 테스트한 H/W 제품  CM4 eMMC 16GB 모듈, 210406CM4_TinyHDMI I/O 보드, CM4-IO-BASE-B(waveshare) 보드, 파이캠(OV5647)   2. 테스트한 OS   - 2022-04-04-raspios-buster 32bit ,  2022-04-04-raspios-bullseys 32bit   (이전 테스트한 내용으로, 64bit 버전을 사용할 경우 라이브러리가 달라, 아래 내용이 작동하지 않을 수 있습..

Raspberry Pi 4 CM4 EDA 방열판(heatsink, Cooler) 확인하기

안녕하세요.  예전에 CM4 테스트하면서 같이 판매하는 중국산 방열판을 구매해서 후기를 올렸는데요. 이번에 다른 프로젝트로 WiFi 없는 CM4 제품을 확인하게 되었습니다. 프로세서를 많이 사용하지 않고 WiFi도 사용하지 않아 방열판만으로 가능하다 생각되어 CM4용 방열판을 구매해서 확인해 보았습니다.   1. 부품확인   CM4와 CM4 Cooler박스와 제품의 윗면이며, 특별한 것이 없이 본체와 플라스틱 서포트(spacer), 볼트로 구성되어 있습니다.    뒷면은 예전 제품과 차이점가 있었습니다. 방열판에 Spacer와 실리콘 써멀 패드(Thermal Pad)가 방열판에 붙어 있습니다. 별도로 붙이기 귀찮은 일인데 이미 그 일을 줄여 놓았습니다.    CM4와 하단 보드의 제품에 맞는 것을 선택할..

Raspberry Pi4를 이용한 멀티캐스트 송신 코드 및 테스트 (Multicast Sender)

안녕하세요.  IPTV나 네트워크 쪽으로 통신 프로그램할 경우가 아니면 주로 사용하는 방식은 아니지만 이번에 확인할 일이 있어서 찾아본 내용 공유드립니다. 송신부는 C 프로그램으로 테스트하였고, 다음 내용에 올릴 수신부는 Qt 소스 공개된 것이 있어서 PC에서 수정해서 테스트해 보았습니다. 1. 멀티캐스트 간단한 개념   컴퓨터 네트워크에서 멀티캐스트(multicast)란 한 번의 송신으로 메시지나 정보를 목표한 여러 컴퓨터에 동시에 전송하는 것을 말한다. 이때 망 접속 형태가 요구할 경우에 한해, 자동으로 라우터와 같은 다른 네트워크 요소들에 메시지의 복사본이 생성된다.   멀티캐스트는 보통 IP 멀티캐스트 형태로 구현되는데, 이는 스트리밍을 위한 인터넷 프로토콜 응용 프로그램(Internet Prot..

Raspberry pi CM4(Bullseye)에서 Tesseract 4.1.3 설치 및 OCR 테스트

안녕하세요.    Windows 상에서 Tesseract, OpenCV, Qt를 조합해서 하려고 하니 이런저런 라이브러리를 설치하기가 어려워서 리눅스 기반인 라즈베리 파이 상에서 테스트해 보았습니다.라즈베리 파이에서 현재 시점에서 최신 버전인 Tesseract 5.1.0을 설치 시도하였으나 아래와 같이 발생하였습니다.   에러로 검색해 보면 FreeBSD 빌드 상에 문제가 있다고 리포팅된 것으로 보였습니다. 향후에 수정된 버전에서 5.x도 사용 가능할 것으로 보입니다. 그래서 현재 4.1.3 버전을 사용하였습니다.[package - 130releng-armv6-quarterly][graphics/tesseract] Failed for tesseract-5.1.0 in buildhttps://www.mai..

W5100S-EVB-Pico를 이용해서 MQTT 발행(Publish) 해보기

안녕하세요. IoT 관련해서 Raspberry Pi의 유선기반 보드를 찾다가 W5100S를 가지고 테스트해 보기로 하였습니다. 예전에 MicroPython 컴파일해서 올리는 작업은 했지만, MQTT 샘플소스로 테스트해보지 않아서 확인 겸 작업해 보았습니다. 1. W5100S-EVB-Pico 스펙 - 간단하게 홈페이지에 나와 있는 정보를 가져왔습니다. 2. MQTT 동작을 위한 초기 설정 및 패키지 설치 - 간단한 설치 등은 할 수 있다고 생각하고 적어보겠습니다. 1) W5100S에 MicroPython 설치 - MicroPython으로 코드 작업을 하기 위해서 github에서 release의 최신 rp2_w5100s_20221111_v2.0.0.uf2 파일을 다운로드한 후 EVB 보드의 BOOT_SEL ..

Raspberry Pi 4(Bookworm)에서 WiringPi 설치해서 사용하기

안녕하세요. Raspberry Pi에서 GPIO를 쉽게 사용하기 위해서 WiringPi 라이브러리를 이용했습니다. 그런데 이제는 메인 개발자분이 지원(support) 않고, 홈페이지도 중단시켜 놓았습니다. 최신 bookworm 64bit OS에서 사용할 수는 없는 건가 찾아보다가 아직은 github에 남겨놓은 자료가 있어 참조해서 설치해 보았습니다. 소스 전체를 받아 다시 컴파일해서 사용하는 방법도 있지만, 패키지화 버전을 다운로드 바다 쉽게 설치할 수도 있어 이 방법을 이용해서 작업해 보았습니다. 1. WiringPi 64bit 버전 다운로드 및 설치 - github로 들어가면 비공식 mirror라고 되어 있습니다. - WiringPi 저장소로 들어가면 운영자가 보관하고 있다고 하면 읽기 전용으로 변경..

Raspberry Pi 4에 Pi pigpio 설치해서 GPIO로 LED Blink 해보기 (signal 함수 추가)

안녕하세요. 1. pigpio 테스트 이유 Raspberry Pi 4(Bookworm 64bit)에서 작은 프로젝트로 진행하기 위해서 WiringPi를 설치하려고 했는데 apt로 설치가 되지 않았습니다. - 이유인 즉 개발자가 더 이상 지원하지 않고, 사이트까지 접속되지 않게 내려버렸기 때문입니다. 그러나 기존에 사용했던 github에 소스가 남아 있었고, fork 해서 다른 개발자들이 사용하고 있었습니다. - 대안으로 검색하다가 pigpio library가 있다는 것을 알게 되어 테스트하였습니다. 2. 간단한 pigpio 설명 - 라이브러리 사이트 내용을 가져왔습니다. pi 모든 버전이 된다고 했지만, pi 5는 아직 지원되지 않는다고 합니다. pigpio is a library for the Rasp..

[MQTT] Raspberry Pi에서 Grafana Dashboard 생성해 보기

안녕하세요. 이제 MQTT 전달로 전달한 데이터를 InfluxDB로 저장까지 했다면 결과 값을 멋있게 보이게 하는 것이 남아있습니다. 그것을 하기 위해서는 이전 내용에서 Grafana를 이미 설치하였습니다. [MQTT] CM4 RaspberryPi 에 Grafana 설치 안녕하세요. MQTT 연동을 위해서 InfluxDB를 설치할 때처럼 공식적인 저장소에서 설치패키지를 다운로드하여서 설치를 진행하도록 해보겠습니다. 1. Grafana 다운로드 - RaspberryPi에 GPG key를 추가합니 remnant24c1.tistory.com 그리고 값을 확인하기 위해서 mosquitto, influxdb, Node-RED가 작동하고 있어야 합니다. 1. Grafana 연결 - Grafana를 설치한 Raspb..