728x90
반응형

분류 전체보기 89

[라즈베리파이] OLED와 BMP280 을 이용한 온도계 제작

개요 BMP 280으로 현재 온도를 얻어오고, 현재시간을 포함하여 OLED에 실시간으로 출력한다. 회로구성 준비물 : 라즈베리파이, OLED, BMP280 API 설치 https://www.waveshare.com/wiki/0.96inch_OLED_(B) 0.96inch OLED (B) - Waveshare Wiki www.waveshare.com 공식 사이트 document의 demo code를 주소 복사해서 wget으로 다운로드 및 압축풀기로 API를 다운받는다. 코드 from bmp280 import BMP280 import time from smbus import SMBus import sys import os picdir = os.path.join(os.path.dirname(os.path.di..

임베디드 2022.04.26

[라즈베리파이] 센스햇 기초

센스햇 특징 센서란, 정보를 수집하여 수치값으로 만들어내는 장치이다. 사람의 오감 (시각 청각 후각 미각 촉각) 뿐아니라, 초음파 압력 자기 온도 가스 가속도 등을 수치로 만들어 낼 수 있다. 센스햇에는 자이로센서, 가속도센서, 기압센서, 지자기센서, 온습도센서가 있다. 센서 외 컨트롤러와 디스플레이는 8*8 LED와 5방향 조이스틱으로 활용된다. 기본 세팅 https://pythonhosted.org/sense-hat/ Home - Sense HAT Sense HAT Python module to control the Raspberry Pi Sense HAT Features The Sense HAT features an 8x8 RGB LED matrix, a mini joystick and the fo..

임베디드 2022.04.25

[라즈베리파이] 3단 선풍기 만들기

개요 버튼 1 : 선풍기 on / off 버튼 2 : 선풍기 속도 up 버튼 3 : 선풍기 속도 down FND : 현재 속도 1~3 단계까지 표시 LED : 선풍기의 on / off 여부 회로구성 준비물 : 버튼 3개, FND, LED 하나, DC모터 (본인은 DC모터가 고장나서 전동모터로 대신함) 코드 from gpiozero import PWMLED, Button,LED from time import sleep led = LED(2) btn_on = Button(17) #onoff btn_up = Button(27) #up btn_down = Button(22) #down a=LED(5) b=LED(6) c=LED(13) d=LED(19) e=LED(26) f=LED(16) g=LED(20) dp=..

임베디드 2022.04.24

[라즈베리파이] 도어락 만들기

개요 - 버튼 0과 1로 구성된 비밀번호 네자리를 누르면 잠금장치가 풀린다. - 네자리 비밀번호를 정확히 눌렀을때, 녹색 LED가 켜지고 서보모터가 동작한다. 1초후 원상복구 - 비밀전호가 틀렸을때, 빨강 LED가 켜지고 1초후 꺼진다. 회로구성 준비물 : LED 빨간색, 녹색, 버튼 2개, 서보모터 라즈베리파이 코드 from gpiozero import AngularServo,LED,Button from time import sleep red = LED(2) green = LED(3) btn0 = Button(17) #onoff btn1 = Button(27) #up def up(): global red, green,servo green.on() red.off() servo.angle = 90 def ..

임베디드 2022.04.23

[Thread] 멀티스레드와 임계영역의 mutex init/lock/unlock/destory

멀티스레드를 사용하다보면 데이터가 공유되기 때문에 의도한 대로 데이터가 변경되지 않을 수 있다. 그럴 때 mutex lock 을 이용하여 임계영역을 설정하고 데이터를 보호할 수 있다. 임계영역 (Critical Section) 스레드나 프로세스가 동시에 접근해서는 안되는 곳으로, mutex_lock으로 보호해주어야한다. 멀티스레드 버그가 발생하는 이유 개발자의 의도는 40000 이 출력되도록 만드는 것이다. 그런데 실제로 실행해보면 아니다. 순서는 보장이 안되는 걸 아니까 누가 먼저 실행될지는 모르지만 어쨌든 10000을 네번 도니까 40000이 나올것이라고 예상할 것이다. 그런데 40000은 안나오고 매번 그 이하의 숫자가 나온다. 이런 일이 발생하는 이유는 스레드와 메모리 사이의 데이터 이동 순서가 ..

임베디드 2022.04.22

[Thread] 멀티스레드 인자 값 넘기기

thread 에 인자값을 넘길 수 있다. create시 변수의 주소를 넘기는 방식을 이용한다. 구조체 변수를 이용하면 더 많은 값을 넘길 수 있다. 멀티스레드 인자값 넘길 때 문제점 예를 들어 다음과 같은 코드를 실행하면 어떤 값이 나올 것 같은지 예상해보자. 0~3로 변하는 i 값이 printf 되고, 스레드는 순차적으로 진행되지 않다는 특징을 알고있다면 0 1 2 3 3 2 1 0 3 1 0 2 뭐 이런식이겠지 싶을것이다. 그런데 실제로는 이렇게 나오지 않는다.듣도 보도 못한 4가 나온다.. 잘 보면 숫자가 중복돼서 나올 때도 있다. 스레드 동작이 이상한 이유 왜그럴까..? 힌트는 main 함수도 스레드라는 것이다. 원인은 스레드를 생성하는 것보다 main 함수가 반복문을 도는 것이 더 빠르기 때문이..

임베디드 2022.04.21

[프로그래머스] 구명보트 / C++

풀이 문제 : 프로그래머스 구명보트 풀이 언어 : C++ 알고리즘 : 그리디 문제링크 : https://programmers.co.kr/learn/courses/30/lessons/42885# 코딩테스트 연습 - 구명보트 무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 5 programmers.co.kr 문제요약 구명보트에 최대 2인이 탈수 있고, 무게제한이 있다. 사람들의 몸무게와 무게제한이 주어졌을때, 최소 몇개의 구명보트를 이용해야만 모든 사람들을 구할 수 있는지 알아내야한다. 첫번째 접근방식 (실패) sort를 해서 무게가 적게 나가는 사..

[Thread] POSIX 멀티스레드 예시 작성하기

멀티스레드를 구현하기 위해서 POSIX API를 이용해야한다. POSIX 임베디드 어플리케이션 개발자는 제품마다 사용되는 OS가 다 다르기 때문에 각 OS마다 API 각각 알아야했다. 이런 불편함을 줄여주는 POSIX API는 OS마다 제공되는 API를 하나로 통일하였다. IEEE에서 제정한 API 표준 규격으로, POSIX API만 배워두면 여러 임베디드 OS에서도 편리하게 어플리케이션 개발이 가능하다. 멀티스레드가 필요한 이유 특정 함수를 동시에 동작시키고 싶을 때 사용한다. 이전 글에서 이용한 예시를 이어서 스레드의 필요성에 대해 설명해보겠다. 위 코드는 abc 함수가 끝나지 않기 때문에 bts 함수가 시작도 못한다. 하지만 개발자의 의도는 abc 함수와 bts 함수가 동시에 동작하는 것이다. 그렇..

임베디드 2022.04.19

[Thread] 멀티프로세스와 멀티스레드

시스템 프로그래밍의 시작으로 멀티 프로세스와 멀티 스레드에 대해서 알아보고자 한다. 멀티프로세스 (Multi Process) CPU는 한번에 한가지 동작만 수행한다. (싱글 코어일 경우) 그렇기 때문에 한 프로세스를 수행하고 있다면, 다른 프로세스는 멈춰있는 상태가 될 것이다. 그런데 우리는 컴퓨터로 동시에 블로그도 하고 게임도 하고 영상통화도 할 수 있다. 이건 어떻게 가능한 것일까? CPU가 하나이기 때문에 이걸 가능하게 하는 것은, 매우 빠른 속도로 모든 프로세스를 하나씩 돌아가면서 수행하는 것이다. 그렇게 해서 우리 눈에는 동시에 수행하는것 처럼 보여지는 것이다. 멀티스레드 (Multi Thread) 멀티스레드는 한 프로세스 내에서 두개 이상의 함수를 동시에 실행시키고 싶을 때 사용한다. 예를 들..

임베디드 2022.04.18

[메모리] 메모리구조 : text data bss stack heap

시스템 프로그래밍의 꽃인 멀티 스레딩을 배우기 전 메모리 구조를 잘 알아야 임계영역과 뮤텍스를 좀 더 쉽게 이해할 수 있다..!! stack 과 heap 공간의 차이를 알면 코딩테스트를 준비할 때에도 도움이 될 수 있다. (stack / heap 의 메모리 공간 제한이 있는 경우가 있다) 메모리 0과 1로된 CPU 명령어를 저장한다. 메모리 공간을 각 프로세스마다 나누어서 사용하고, 프로세스마다 세부적인 공간을 가진다. 프로세스 구성 하나의 프로세스는 text / data / bss / stack / heap 으로 구성되어있다. text 코드 영역 data 초기화된 전역변수 bss 초기화 안된 전역변수 heap malloc으로 만든 변수 stack 지역변수 위와 같이 세그먼트가 구성되어있다. int da..

임베디드 2022.04.17
728x90
반응형