코딩두의 포트폴리오

임베디드 시스템 중간 정리 본문

Embedded System

임베디드 시스템 중간 정리

코딩두 2024. 10. 16. 17:51

1장. 라즈베리 파이 + 파이썬 + 전자 회로 공작으로 컴퓨터와 친해지기

파이썬, 라즈베리 파이의 가장 큰 특징: 자유롭게 사용할 수 있는 포트 'GIPO' 확장 커넥터를 사용 -> 전자 회로 제어

라즈베리 파이 구성(앞)
라즈베리 파이 구성(뒤)

 

마이크로 SD 카드 - PC에서 하드디스크에 해당 / 라즈베리 파이가 인식할 수 있는 SD 카드의 최대 용량은 32GB

라즈베리 파이에서 사용 가능한 최대 전류: 2.5A / 2.5A보다 센 전류 흐르면 기판의 퓨즈가 끊겨 일시적으로 사용 불가

라즈베리 파이 본체(모두 연결)

배포판: OS의 기능을 간단히 설치할 수 있는 형태로 모아 둔 SW

라즈비안: 라즈베리 파이 표준 배포판, 프로그래밍 언어 학습용 SW

 

 

2장. 운영체제(라즈비안) 설치와 사용 방법

라즈비안 업데이트

sudo apt-get update -> OS 업데이트 조사
sudo apt-get upgrade -> 업데이트 정보를 바탕으로 OS가 업데이트됨

 

한글 입력기 설치 / 활성화

sudo apt-get install ibus-hangul fonts-unfonts-core
ibus engine hangul

 

관리자 root의 암호 설정

sudo passwd root

 

라즈비안에서 사용하는 명령어

명령어 설명
ls 디렉터리 내부에 있는 파일 목룍 표시
cd 디렉터리명 현재 디렉터리로 이동
mv 파일명1 파일명2 파일명1 -> 파일명2로 파일을 옮기거나 파일명 변경
cp 파일명1 파일명2 파일명1 -> 파일명2로 파일을 복사
cat 파일명 파일 내용 표시
chown 옵션 파일명 파일 소유자 변경
chgrp 옵션 파일명 파일 그룹 변경
chmod 옵션 파일명 파일 접근 권한 변경
sudo 명령어 지정한 명령어를 관리자 권한으로 실행
apt-get update 소프트웨어 패키지의 갱신 정보 취득
apt-get upgrade 소프트웨어 패키지의 갱신 정보를 바탕으로 업데이트 실행
apt-get install 패키지명 지정한 패키지를 설치
apt-get remove 패키지명 지정한 패키지를 제거
apt-get autoclean 이미 제거한 패키지의 캐시 삭제
ifconfig 네트워크 인터페이스의 참조 및 설정
man 명령어 명령어 사용법을 표시 (메뉴얼)

root에는 os를 구성하는 각종 디렉터리가 들어 있음

상위 디렉터리에 파일 관련 작업을 하기 위해선 관리자 권한 필요 -> 명령어 앞에 sudo

 

3장. 파이썬 기본 지식

파이썬의 특징

가상 머신으로 실행 - 바이트 코드

풍부한 라이브러리 - 내장 자료형, 내장 함수, 내장 상수, 내장 예외

객체 지향 언어 But, 절차형으로도 사용 가능

들여쓰기로 블록 구조 표현

 

EOL(End Of Line) - 코드 작성 시 문법적으로 문제 발생

EOF(End Of File) - 필요한 코드가 빠져있는 경우에 발생

 

문자열 한 개는 서로 다른 따옴표로 감쌀 수 X

 

파이썬 프로그램 작성 규칙

파이썬 작성 규칙

파일명은 영문 숫자, 기호만 사용 / 특수문자 입력 시 오류 발생

공백이 있으면 안 된다

프로그램의 빈 줄

주석 처리

긴 줄 하나를 여러 줄로 작성

 

파이썬 문법 오류 (대화형 세션의 오류 메시지)

함수의 괄호가 빠졌을 때

줄이 시작되는 부분에 공백이 있을 때

특수문자가 있을 때

 

파이썬 문법 오류 (프로그램 실행 시 오류)

print 문에 괄호가 없음

줄이 시작되는 부분에 공백이 있음

특수문자가 있을 때

 

비트 연산

문자 정보 처리

아스키 - 표준 문자 / 128개의 코드 / 1바이트 문자

한글 - 2바이트 이상인 수를 사용

유니코드 - 모든 언어에서 사용하는 문자를 같은 문자 코드 체계로 표시 (UTF-8은 유니코드 한 문자를 0비트 단위로 끊음)

 

함수, 메서드, 모듈 사용 방법

함수 - 나눌 수 있는 처리를 하나의 블록으로 만든 것

내장 함수 - 라이브러리 필요 없이 바로 함수 형태로 이용 가능

메서드 - 객체 지향 프로그래밍에서 객쳉에 실행하는 어떤 조직 / 프로그램에서 다루는 대상별로 관리

파이썬에서 다루는 모든 것을 '객체'로 보여줌

자주 쓰는 객체, 메서드를 각각 내장 객체, 내장 메서드로 준비

내장 메서드 사용 시 사용할 객체와 메서드명 사이에 마침표(.)를 씀

객체.메서드()

 

변수 - 데이터를 저장하는 메모리

지정한 문자가 객체 문자열에 없을 때는 오류 반환

모듈( > 함수, 메서드) - 시스템을 구성하는 독립성 높은 요소 1개

모듈은 시작 부분에서 임포트

import 모듈명

 

함수 사용 시 메서드 사용과 마찬가지

모듈.함수()

 

자료형

내장 자료형 - 미리 준비된 자료형 -> string 형식

내장 자료형과 작성법

변수

변수 - 데이터를 저장하는 영역 또는 데이터 그 자체

변수에 할당하기

할당

동적 자료형 변수 - 할당한 데이터에 맞게 자료형이 유연하게 변하는 변수

 

변수 이름 규칙

  • 변수명에는 영문, 숫자 밑줄(_)만 사용
  • 대문자, 소문자 구별
  • 변수명은 숫자로 인식 X
  • 파이썬 예약어는 사용 X

정수형, 부동소수형, 불형

정수형 - 소수점 이하를 포함하지 않는 숫자

숫자 표기

부동소수점 - 소수점 이하를 포함하는 숫자 (가수부 + 지수부)

 

내장 함수 round() -> 부동소수의 소수점 이하를 반올림

round(반올림할 숫자[, 자릿수])

 

불형 - 불 대수로 다루는 참과 거짓 상태를 가진 자료형

 

숫자 값 계산

산술 연산자 (+, -, *, /, %, **)

복합 할당 연산자 - 연산과 할당을 하나로 합친 것

복합 할당 연산자 사용 시 그 변수에 값이 미리 할당되어 있어야 오류가 발생하지 않음

 

비트 연산자 - 정수형 값을 일반적인 숫자가 아닌 2진수 숫자로 보고 연산

비트 반전과 bin() 함수의 연산 1
비트 반전과 bin() 함수의 연산 2 무

문자열

문자열 - 하나 이상의 문자가 나열된 데이터

변수에 문자열 할당하기

>>> a = 'Python'
>>> prinT(a)
Python

 

문자열을 인덱스로 지정하기 (시퀀스형: 요소들이 일정한 순서대로 나열된 데이터형)

시퀀스형의 인덱스

 

인덱스로 데이터 지정 시 인덱스 번호를 대괄호([])로 감싸고 변수명 뒤에 붙이기

ex) 변수 a에 문자열 Python을 할당하고 0번째와 마지막 문자 지정하기

>>> a = 'Python'
>>> a[0]
'p'
>>> a[-1]
'n'

 

ex) 정수형에 인덱스를 지정하면 오류 발생

>>> a = 1234
>>> a[1]

 

여러 문자를 인덱스로 지정 - [x:y] : 인덱스 x부터 y-1까지 범위에 있는 요소들을 한 번에 지정 --> 슬라이스

ex) 문자열 요소 0번째부터 1번째까지 지정하기

>>> a = '1234'
>>> a[0:2]
'12'

 

ex) 시작 위치를 생략하면 0번째부터 지정한 것이 됨

>>> a[:2]
'12'

 

ex) 종료 위치를 생략하면 마지막까지 지정한 것이 됨

>>> a[:2]
'34'

 

따옴표와 백슬래시를 문자열로 만들기

이스케이프 시퀀스 사용하기 - 백슬래시를 사용

ex) 작은따옴표로 감싼 문자열에 작은따옴표가 포함되면 오류 발생

>>> a = 'Happy 'Python'
SyntaxError: Invalid systax -> 오류 발생

 

ex) 이스케이프 시퀀스로 문자열 안에 작은따옴표 작성하기

>>> a = 'Happy \'Python/''
>>> print(a)
Happy 'Python'

 

ex) 문자열에 이스케이프 시퀀스로 줄 바꿈 코드를 넣기

>>> a = 'Happy \n Python'
>>> print(a)
Happy
 Python

 

3중 따옴표로 감싸기 - 도중에 줄 바꿈이나 따옴표가 포함되더라도 모두 그대로 문자열로 다룰 수 있음

ex) 따옴표와 줄 바꿈이 포함된 문자열을 3중 따옴표로 감싸기

>>> a = ''' Happy
'Python' '''
>>> print(a)
 Happy
'Python'

 

문자열 일부를 교체하기 - replace()

replace('교체하기 전의 문자열', '새롭게 넣을 문자열')

 

ex) 변수 a에 문자열 'Python'을 할당하고 P를 p로 교체한 다음 다시 할당하기

>>> a = 'Python'
a = a.replace('P', 'p')
>>> a
'python'

 

연산자로 문자열 연결 / 반복하기

+ 연산자 - 연결 / * 연산자 - 반복

ex) 문자열 연결하기

>>> a = 'Python'
>>> b = ' in Raspberry Pi'
>>> a + b
'Python in Raspberry Pi'

 

ex) 문자열 반복하기

>>> a = 'Python'
>>> a = 3
'PythonPythonPython'

 

글자 수 세기

내장 함수 len()을 사용

len(문자열)

 

ex) 문자열의 글자 수 알아내기

>>> a = 'Python'
>>> len(a)
6

 

특정 문자열이 포함되어 있는지 조사하기

in 연산자 사용하기

찾고 싶은 문자열 in 문자열 전체

 

ex) 문자열 'Python'에 'Py' 또는 'pi'가 포함되어 있는지 확인하기

>>> a = 'Python'
>>> 'Py' in a
True
>>> 'pi' in a
False

 

find() 메서드 사용하기

문자열 전체.find(찾고 싶은 문자열[, 시작 인덱스][, 종료 인덱스]

찾으면 인덱스를 반환, 못 찾으면 숫자 -1을 반환

 

ex)문자열 안에 'Py'가 있는지 확인하기

>>> a = 'Python in Raspberry Pi'
>>> a.find('Py', 0, 3)    -> 0번째와 3번째 사이에 'Py'가 있는지 확인
0
>>> a.find('Py', 2)    -> 2번째와 마지막 사이에 'Py'가 있는지 확인
-1

 

리스트

리스트 - 여러 숫자나 문자열 등의 요소를 일정한 순서로 나열한 구조의 자료형 (문자열과 동일한 시퀀스형)

변수에 리스트를 할당해서 인덱스로 지정하기

[요소1, 요소2, 요소3, 요소4, 요소5, ...]

 

ex) 변수 a에 리스트 1, 2, 3, 4를 할당하고 0번째와 마지막 문자를 지정하기

>>> a = [1, 2, 3, 4]
>>> a[0]
1
>>> a[-1]
4

 

ex) 문자열, 정수, 부동소수가 담긴 리스트

>>> a = ['Python', 1234, 1.234]
>>> a[0]
'Python'
>>> a[1]
12324
>>> a[2]
1.234

 

리스트에 들어 있는 또 다른 리스트의 요소를 인덱스로 지정

리스트[부모 리스트의 인덱스][자식 리스트의 인덱스]]

 

ex) 리스트의 3번째 요소인 자식 리스트의 첫(0번째) 요소를 지정하기

>>> a = [1, 2, 3, [4, 5, 6]
>>> a[3]a[0]
4

 

ex) 인덱스로 지정한 리스트의 요소 교체하기

a = [1, 2, 3, 4]
a[0] = 0
a
[0, 2, 3, 4]

 

여러 요소를 인덱스로 지정하기

[x:y]로 인덱스 지정 -> x부터 y-1까지 범위에 있는 요소를 리스트로 추출

ex) 리스트의 요소 0번째부터 1번째까지 지정하기

>>> a = [1, 2, 3, 4]
>>> a[0:2]
[1, 2]

 

ex) 시작 위치를 생략하면 0번째부터 지정한 것이 됨

>>> a[:2]
[1, 2]

 

ex) 종료 위치를 생략하면 마지막까지 지정한 것이 됨

>>> a[:2]
[3, 4]

 

슬라이스로 리스트의 여러 요소 한 번에 교체 (리스트 형식과 동일)

ex) 0번째부터 1번째까지 요소를 다른 요소로 교체하기

>>> a =[1, 2, 3, 4]
>>> a[0:2] = [0:0]
>>> a
[0, 0, 3, 4]

 

ex) 0번째 요소부터 1번째 요소까지를 다른 요소로 교체하면서 요소 추가하기

>>> a = [1, 2, 3, 4]
>>> a[0:2] = [0, 0, 0]
>>> a
[0, 0, 0, 3, 4]

슬라이스로 지정한 요소 개수 < 할당한 리스트의 요소 개수 --> 원래 리스트에 들어 있는 요소 개수가 증가

 

연산자로 리스트 연결 / 반복하기

문자열과 동일

 

리스트에 요소 추가하기

append() 메서드로 리스트 끝에 요소 추가하기

ex) 리스트 끝에 요소 추가하기

>>> a = [1, 2, 3, 4]
>>> a.append(5)
>>> a
[1, 2, 3, 4, 5]

 

extend() 메서드로 리스트 끝에 여러 요소 추가하기

-> 문자열이나 숫자를 리스트 끝에 추가

- 요소를 여러 개 추가할 수 있는 점이 append()와의 차이점

- 리스트로 작성해야 함

ex) 리스트 끝에 요소 3개 추가하기

>>> a = [1, 2, 3, 4]
>>> a.extend([5, 6, 7])
>>> a
[1, 2, 3, 4, 5, 6, 7]

 

리스트의 요소 제거하기

del 문을 사용하여 제거

del 제거할 요소

 

ex) del 문으로 리스트에 있는 요소 제거하기

>>> a = [1, 2, 3, 4]
>>> del a[0]
>>> a
[2, 3, 4]

 

pop() 메서드로 리스트의 마지막 요소 제거하기

- 괄호 생략 가능

ex) 리스트의 마지막 요소 제거하기

>>> a = [1, 2, 3, 4]
>>> a.pop()
4
>>> a
[1, 2, 3]

 

리스트의 요소를 역순으로 재배치하기

reverse() 메서드를 사용 / 리스트 내용 자체가 변함

>>> a = ['(>_<)', '(+0+)', '(*_*)']
>>> a.reverse()
>>> a
['(*_*)', '(+0+)', '(>_<)']

 

리스트의 요소를 지정한 순서로 재배치하기

sort() 메서드 사용

요소가 숫자 -> 작은 숫자부터 나열

요소가 문자열 -> 숫자, 대문자, 소문자 순

 

ex) 리스트 요소 재배치하기(오름차순)

>>> a = ['3', '2', 'B', '1', 'a']
>>> a.sort()
>>> a
['1', '2', '3', 'B', 'a']

 

ex) 반대로 재배치하기

>>> a.sort(reverse = True)
>>> a
['a', 'B', '3', '2', '1']

 

튜플

튜플은 리스트와 비슷한 자료형이지만 불변 -> 일부 요소만 변경하거나 제거 X

변수에 튜플을 할당하고 인덱스 지정하기

(요소1, 요소2, 요소3, 요소4, 요소5, ...)

 

ex) 변수 a에 튜플을 할당하고 0번째와 마지막 요소 지정하기

>>> a = ('P', 'y', 't', 'h', 'o', 'n')
>>> a[0]
'P'
>>> a[-1]
'n'

 

ex) 문자열, 정수, 부동소수가 담긴 튜플

>>> a = ('Python', 1234, 1.234)
>> a[0]
'Python'
>>> a[1]
1234
>>> a[2]
1.234

 

ex) 튜플에 튜플 저장하기

>>> a = (1, 2, 3, (4, 5, 6))
>>> a[3][0]
4

 

ex) 요소가 3개인 튜플을 세 변수에 할당하기

>>> a = (1, 2, 3)
>>> x, y, z = a
>>> x
1
>>> y
2
>>> z
3

 

여러 요소를 인덱스로 지정하기

튜플도 슬라이스로 여러 요소 지정할 수 있음 (=문자열=리스트)

ex) 튜플의 0번째부터 1번째까지 요소 지정하기

>>> a = (1, 2, 3, 4)
>>> a[0:2]
(1, 2)

 

ex) 시작 위치를 생략하면 0번째부터 지정한 것이 됨

>>> a[:2]
(1, 2)

 

ex) 종료 위치를 생략하면 0번째부터 지정한 것이 됨

>>> a[:2]
(3, 4)

 

연산자로 튜플 연결 / 반복하기

 

딕셔너리

문자열, 리스트, 튜플처럼 순서대로 나열한 시퀀스형이 X

키(변하지 않는 자료형)와 값(각종 객체)으로 이루어진 자료형

 

변수에 딕셔너리를 할당해서 인덱스 지정하기

{키1:값1, 키2:값2, 키3:값3, ...}

 

ex) 변수 a에 딕셔너리를 할당하고 키로 값을 지정하기

>>> a = {'happy':'(^-^)', 'sad':'(ToT)'}
>>> a['happy']
'(^-^)'
>>> a['sad']
'(ToT)'

 

ex) 키: 숫자, 값: 문자열

>>> a = {1:'(^-^)', 2:'(ToT)'}
>>> a[1]
'(^-^)'

 

딕셔너리에는 또 다른 딕셔너리 저장할 수 있음

딕셔너리명[부모 딕셔너리의 키][딕셔너리의 키]

 

ex) 자식 딕셔너리의 값 지정하기

>>> a = {'happy':(1:'(^-^)', 2:'(^o^)'}, 'sad':{1:'(ToT)', 2:'(T-T)'}}
>>> a['sad'][1]
'(ToT)'

 

ex) 인덱스로 지정한 값 바꾸기 -> 가변 데이터라서 정의 후에 변경 가능

>>> a = {'happy':'(^-^)', 'sad':'(ToT)'}
>>> a['happy'] = '(^o^)'
>>> a['happy']
'(^o^)'

 

딕셔너리에 요소 추가하기

시퀀스형이 아니므로 요소는 무작위로 나열

새로 추가된 요소가 딕셔너리 끝에 들어가는 것은 X

>>> a = {'happy':'(^-^)', 'sad':'(ToT)'}
>>> a['sleepy'] = '(-_-)'
>>> a
{'happy': '(^-^)', 'sad': '(ToT)', 'sleepy': '(-_-)'}

 

딕셔너리의 요소 제거하기

del 문으로 지정한 키와 값 제거

>>> a = {'happy':'(^-^)', 'sad':'(ToT)'}
>>> del a['sad']
>>> a
{'happy':'(^-^)'}

 

pop() 메서드로 키와 값 제거하기

제거할 값의 키를 인수로 지정

>>> a = {'happy':'(^-^)', 'sad':'(ToT)'}
>>> a.pop('happy')
'(^-^)'
>>> a
{'sad':'(ToT)'}

 

다른 자료형으로 변환하기

내장 함수 내용 인수로 지정 가능한 자료형
float() 부동소수형으로 변환 정수, 문자열
int() 정수형으로 변환 부동소수, 문자열
str() 문자열로 변환 숫자, 리스트, 튜플 등의 객체
list() 리스트로 변환 문자열, 튜플 등
tuple() 튜플로 변환 문자열, 리스트 등

 

ex) float()으로 정수형 -> 부동소수형

>>> a = 1
>>> b = float(a)
>>> b
1.0

 

ex) int()로 부동소수형 -> 정수형

>>> a = 1.0
>>> b = int(a)
>>> b
1

 

ex) str()로 정수형 -> 문자열

>>> a = 1.234
>>> str(a)
'1.234'

 

ex) int()로 문자열 -> 정수형

>>> a = '1234'
>>> int(a)
1234

 

ex) 문자열을 숫자 값으로 변환하여 계산하고, 숫자 값을 다시 문자열로 되돌려서 변수 c에 할당하기

>>> a = '3'
>>> b = 5
>>> c = str(int(a) + b)
>>> c
'8'

 

ex) 튜플을 리스트로 변환해 요소를 변경하고, 리스트를 다시 튜플로 되돌리기

>>> a = (1, 2, 3)
>>> b = list(a)
>>> b[0] = 0
>>> a = tuple(b)
>>> a
(0, 2, 3)

 

내장 함수인 isinstance() -> 변수나 데이터가 특정 자료형인지 확인

isinstance(객체, 자료형의 명칭)

 

isinstance()의 두 번째 인수로 지정할 수 있는 자료형

자료형 명칭
정수형 int
부동소수형 float
문자열 str
리스트 list
튜플 tuple
딕셔너리 dict

 

ex) 변수가 float형인지 int형인지 확인하기

>>> a = 1.0
>>> isinstance(a, float)
True
>>> isinstance(a, int)
False

 

문자열 서식 지정

데이터를 지정한 형식에 따라 문자열로 변경

%연산자 or format() 메서드 사용

% 연산자 사용

키 - 서식 지정 대상이 딕셔너리일 때 (키)처럼 작성하면 해당 값을 지정

플래그 - 플래그 지정 시 옵션 지정

플래그 내용
0 대상이 숫자면 빈 자리를 0으로 채움
- 왼쪽 정렬
(공백) 양수 앞에 공백 넣기
+ 양수 앞에 + 넣기
# 서식 코드 옵션

자릿수 - 전체 자릿수 지정

 

정확도 - .정수로 소수점 이하의 자릿수 지정

 

서식 코드 - 서식 코드로 데이터 어떻게 표시할지 지정

   
   
   
   
   
   
   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'Embedded System' 카테고리의 다른 글

라즈베리파이 오류 해결  (2) 2024.11.19