라즈베리 파이 기초와 응용, 원리를 익히자!
이 책은 라즈베리 파이를 실생활에 활용하려는 혁신가를 위한 안내서다. 이 책은 무작정 따라하기 식이 아니라 공학적 원리를 바탕으로 자신만의 프로젝트를 구상하고 완성하는 데 필요한 기술을 가르친다. 초보자에서 전문가에 이르기까지 각종 전자회로, 모듈, 주변 장치에 공통적으로 적용할 수 있는 기본 원리를 배울 수 있다. 기본적인 리눅스 프로그래밍 기술을 다루는 한편 부품의 선택에 도움이 되는 정보를 제공한다. 또한 다양한 부품을 조합함으로써 프로젝트의 목표를 달성할 수 있는 방법을 소개한다. 이 책의 웹사이트에서 모든 코드와 스크립트 저장소, 강의 영상 링크, 추가 자료를 확인할 수 있다.
라즈베리 파이는 확장성이 뛰어나기로 유명하다. 수천 가지 전자 공작에 사용할 수 있을 뿐 아니라, 리눅스 운영체제를 통해 기능을 더욱 확장할 수 있다. 이 책은 라즈베리 파이를 최대한 활용할 수 있도록 도울뿐더러 다양한 프로젝트에 적용할 수 있는 전자회로를 구성할 수 있게 기초적인 공학 지식을 제공한다.
★ 이 책에서 다루는 내용 ★
- 기본적인 애플리케이션을 구축하는 데 필요한 리눅스 및 프로그래밍 기술
- 전자회로를 제작하는 데 필요한 부품 선택
- 각종 모듈의 인터페이스, 제어, 통신의 이해
- 비디오, 오디오, 실시간 상호작용 등의 고급 애플리케이션 구현
데릭 몰로이(Derek Molloy)
데릭 몰로이 박사는 아일랜드 더블린 시립대학교의 엔지니어링 및 컴퓨팅 학부 전자 공학과 수석 강사다. 그는 학부와 대학원에서 임베디드 시스템, 디지털/아날로그 전자 장치 및 사물 인터넷을 사용하는 객체 지향 프로그래밍을 가르친다. 그의 주 연구 분야는 컴퓨터 및 머신 비전, 3D 그래픽/시각화 및 이러닝이다.
데릭은 수백만 명의 사람들에게 임베디드 리눅스와 디지털 전자 장치를 소개하는 유명한 유튜브 영상 시리즈를 제작한다. 2013년에 개설한 개인 웹/블로그 사이트는 유튜브 동영상과 참고 자료, 소스 코드, 사용자 토론을 제공해 매일 수천 명이 방문한다.
데릭은 교수 및 학습과 관련한 여러 가지 상을 받기도 했으며, 그의 개인 웹 사이트인 http://derekmolloy.ie/에서 그의 저작 및 기타 출판물에 대해 더 자세히 알 수 있다.
최용
한국방송통신대학교에서 컴퓨터과학을 전공하고, 은행 전산실 운영과 배치 작업 자동화(Workload Automation)를 지원하는 기술자로 일했다.
- [1부] 라즈베리 파이 기초
- ▣ 01장: 라즈베리 파이 하드웨어
- 플랫폼 소개
- RPi는 누구를 위한 것인가
- RPi에 적합한 분야
- RPi에 부적합한 분야
- RPi 문서
- RPi 하드웨어
- 라즈베리 파이 버전
- 라즈베리 파이 하드웨어
- 라즈베리 파이 액세서리
- 주요 액세서리
- 권장 액세서리
- 선택적인 액세서리
- HAT
- RPi를 망가뜨리는 방법
- 요약
- 지원
- 플랫폼 소개
- ▣ 02장: 라즈베리 파이 소프트웨어
- 라즈베리 파이에 리눅스 올리기
- RPi를 위한 리눅스 배포판
- RPi를 위한 SD 카드 이미지 생성하기
- 네트워크에 연결
- 이더넷
- 이더넷 크로스오버 케이블
- RPi와 통신하기
- USB-to-TTL 3.3V 케이블을 사용한 직렬 연결
- 보안 셸(SSH)을 통한 연결
- SSH 상에서 PuTTY/psftp를 사용해 파일 전송
- 라즈베리 파이 제어하기
- 기본적인 리눅스 명령
- 파일 편집 기초
- 현재 시각
- 패키지 관리
- 라즈베리 파이 설정
- 라즈베리 파이 구성 도구
- RPi 소프트웨어 갱신하기
- 비디오 출력
- 온보드 LED 다루기
- 종료와 재시작
- 요약
- 라즈베리 파이에 리눅스 올리기
- ▣ 03장: 임베디드 리눅스 시스템
- 임베디드 리눅스 개요
- 임베디드 리눅스의 장단점
- 리눅스는 오픈소스고 공짜인가?
- 라즈베리 파이 부팅
- 리눅스 시스템 관리
- 슈퍼유저
- 시스템 관리
- 리눅스 명령
- 리눅스 프로세스
- 그 외의 리눅스 관련 주제
- Git을 사용해 버전 컨트롤하기
- 실습 위주의 소개
- Git 브랜칭
- 일반적인 Git 명령
- 데스크톱 가상화
- 이 책의 코드
- 요약
- 더 읽을거리
- 참고 문헌
- 임베디드 리눅스 개요
- ▣ 04장: 전자회로 인터페이스하기
- 회로 분석하기
- 디지털 멀티미터
- 오실로스코프
- 회로의 기본 원리
- 전압, 전류, 저항, 옴의 법칙
- 전압 분배
- 전류 분배
- 브레드보드에 RPi 회로 구현하기
- 디지털 멀티미터(DMM)와 브레드보드
- 회로 예제: 전압 레귤레이터
- 이산 소자
- 다이오드
- 발광 다이오드(LED)
- 평활 커패시터와 디커플링 커패시터
- 트랜지스터
- 포토커플러·광분리기
- 스위치와 버튼
- 논리 게이트
- 아날로그를 디지털로 변환
- 표본추출률
- 양자화
- 연산 증폭기
- 결론
- 요약
- 더 읽을거리
- 회로 분석하기
- ▣ 05장: 라즈베리 파이 프로그래밍
- 도입
- RPi에서의 언어별 성능
- RPi CPU 주파수 설정
- 첫 번째 물리적 컴퓨팅 회로
- 스크립팅 언어
- 스크립팅 언어 고르기
- 배시
- 루아
- 펄
- 파이썬
- 동적 컴파일 언어
- RPi에서의 자바스크립트와 Node.js
- RPi에서의 자바
- RPi에서의 C와 C++
- C 및 C++ 언어 개요
- C로 LED 제어하기
- C++
- 객체 지향 프로그래밍 개요
- 클래스와 객체
- C++로 객체지향 LED 제어
- 리눅스 OS에 인터페이스하기
- Glibc와 Syscall
- 파이썬 성능 끌어올리기
- 싸이썬
- C/C++로 파이썬 확장하기
- 요약
- 더 읽을거리
- 참고 문헌
- 도입
- ▣ 01장: 라즈베리 파이 하드웨어
- [2부] 인터페이스, 제어, 통신
- ▣ 06장: 라즈베리 파이 입출력 활용
- 도입
- GPIO(범용 입출력)
- GPIO 디지털 출력
- GPIO 디지털 입력
- 내부 풀업/풀다운 저항
- 전원이 공급되는 DC 회로와 인터페이스하기
- sysfs와 C++를 통한 GPIO 제어
- C++ 프로그래밍 고급
- 개선된 GPIO 클래스
- 메모리 기반 GPIO 제어
- Devmem2를 사용해 GPIO 제어하기
- C와 /dev/mem을 사용한 GPIO 제어
- 내부 저항 설정 변경하기
- WiringPi
- wiringPi 설치
- gpio 명령
- wiringPi 프로그래밍
- wiringPi를 사용해 LED 켜고 끄기
- 버튼을 누르면 LED로 반응하기
- 단선 센서와 통신하기
- PWM과 범용 클럭
- GPIO와 권한
- udev 규칙 작성하기
- 권한과 wiringPi
- 요약
- ▣ 07장: 크로스 컴파일과 이클립스 IDE
- 크로스 컴파일 툴체인 셋업하기
- 라즈비안을 위한 Linaro 툴체인
- 데비안 크로스 툴체인
- 이클립스를 사용해 크로스 컴파일하기
- 데스크톱 리눅스에 이클립스 설치하기
- 크로스 컴파일을 위해 이클립스 설정하기
- Remote System Explorer
- 이클립스에 깃허브 통합하기
- 원격 디버깅
- 문서 자동 생성(Doxygen)
- 리눅스 빌드하기
- 커널 소스 내려받기
- 리눅스 커널 빌드하기
- 리눅스 커널 디플로이하기
- 리눅스 배포판을 빌드하기(고급)
- 요약
- 더 읽을거리
- 크로스 컴파일 툴체인 셋업하기
- ▣ 08장: 라즈베리 파이의 다양한 버스
- 버스 통신 개요
- I2C
- I2C 하드웨어
- I2C 테스트 회로
- 리눅스 I2C-Tools 사용하기
- C언어에서의 I2C 통신
- I2C 장치를 C++ 클래스로 감싸기
- SPI
- SPI 하드웨어
- RPi에서의 SPI
- 첫 번째 SPI 애플리케이션(74HC595)
- C/C++에서의 양방향 SPI 통신
- RPi에서 여러 개의 SPI 슬레이브 사용하기
- UART
- RPi의 UART
- C언어 UART 예제
- RPi LED 직렬 서버
- UART 응용 - GPS
- 논리 레벨 변환
- 요약
- 더 읽을거리
- ▣ 09장: 라즈베리 파이의 입출력 인터페이스 개선하기
- 도입
- 아날로그-디지털 변환기
- SPI 아날로그 디지털 컨버터(ADC)
- ADC 애플리케이션: 아날로그 광도계
- SPI ADC 성능 테스트
- BCM2835를 위한 C 라이브러리(고급)
- 디지털-아날로그 변환기
- I2C 디지털-아날로그 변환기
- SPI 디지털-아날로그 변환기
- PWM 출력을 RPi에 추가하기
- RPi GPIO 확장하기
- MCP23017과 I2C 버스
- MCP23S17과 SPI 버스
- MCP23x17 장치를 위한 C++ 클래스
- RPi에 UART 추가하기
- 요약
- ▣ 10장: 물리적 환경에 인터페이스하기
- 액추에이터 연결하기
- DC 모터
- 스테핑 모터
- 릴레이
- 아날로그 센서에 인터페이스하기
- 선형 아날로그 센서
- 비선형 아날로그 센서
- 아날로그 센서 신호 조절
- 아날로그 가속도계에 인터페이스하기
- 로컬 디스플레이에 인터페이스하기
- MAX7219 디스플레이 모듈
- 문자 LCD 모듈
- OLED 도트 매트릭스 디스플레이
- C/C++ 라이브러리 빌드하기
- 메이크파일
- CMake
- 요약
- 액추에이터 연결하기
- ▣ 11장: 아두이노를 사용한 실시간 인터페이스
- 아두이노
- 아두이노 직렬 슬레이브
- UART 에코 테스트 예제
- UART를 통해 명령으로 아두이노 제어하기
- 아두이노 I2C 슬레이브
- I2C 테스트 회로
- I2C 레지스터 에코 예제
- I2C 온도 센서 예제
- I2C 온도 센서와 경고 LED
- C/C++를 사용한 아두이노 슬레이브 통신
- I2C 초음파 센서 애플리케이션
- 아두이노 SPI 슬레이브
- RPi 명령행에서 아두이노 프로그래밍
- 요약
- 아두이노
- ▣ 06장: 라즈베리 파이 입출력 활용
- [3부] 고급 인터페이스 및 상호작용
- ▣ 12장: 사물 인터넷 (IoT)
- 사물 인터넷 개요
- IoT 센서로서의 RPi
- 센서 웹 서버로서의 RPi
- 엔진엑스(Nginx)
- GNU Cgicc 애플리케이션(고급)
- C/C++ 웹 클라이언트
- 네트워크 통신 기초
- C/C++ 웹 클라이언트
- OpenSSL을 사용한 보안 통신
- “사물(Thing)”로서의 RPi
- 씽스피크(ThingSpeak)
- 리눅스 cron 스케줄러
- RPi에서 이메일 보내기
- IFTTT
- 대규모 IoT 프레임워크
- MQ Telemetry Transport(MQTT)
- IBM 블루믹스 IoT
- IBM IoT MQTT Node.js 게시 예제
- IBM IoT MQTT C++ 게시 예제
- IBM Quickstart를 사용한 데이터 시각화
- C 클라이언트/서버
- IoT 디바이스 관리
- RPi 원격 모니터링
- RPi 워치독 타이머
- 정적 IP 주소
- PoE
- 요약
- ▣ 13장: 무선 통신 및 제어
- 무선 통신 개요
- 블루투스 통신
- 블루투스 어댑터 설치
- 블루투스 안드로이드 앱 개발
- Wi-Fi 통신
- Wi-Fi 어댑터 설치
- NodeMCU Wi-Fi 슬레이브 프로세서
- 지그비 통신
- XBee 장치 소개
- XBee 구성
- XBee AT 모드 예제
- XBee API 모드 예제
- 근거리 무선 통신(NFC)
- 요약
- ▣ 14장: 라즈베리 파이 GUI 개발
- 풍부한 UI의 RPi 아키텍처
- 범용 컴퓨터로서의 RPi
- LCD 터치스크린 사용하기
- 가상 네트워크 컴퓨팅(VNC)
- 팻 클라이언트 애플리케이션
- GUI 애플리케이션 개발
- GTK+ 소개
- Qt 소개
- Qt 기초
- Qt 개요
- Qt 개발 도구
- 첫 Qt Creator 예제
- Qt 날씨 GUI 애플리케이션
- 원격 UI 애플리케이션 개발
- 팻 클라이언트 Qt GUI 애플리케이션
- 멀티스레드 서버 애플리케이션
- 멀티스레드 날씨 서버
- 요약
- 더 읽을거리
- 풍부한 UI의 RPi 아키텍처
- ▣ 15장: 이미지, 비디오, 오디오
- 이미지와 비디오 캡처하기
- RPi 카메라
- USB 웹캠
- Video4Linux2(V4L2)
- 비디오 스트리밍
- 이미지 프로세싱과 컴퓨터 비전
- OpenCV를 이용한 이미지 프로세싱
- OpenCV를 이용한 컴퓨터 비전
- Boost
- 라즈베리 파이 오디오
- 핵심적인 오디오 소프트웨어 도구
- RPi를 위한 오디오 장치
- TTS(텍스트 음성 변환)
- 요약
- 더 읽을거리
- 이미지와 비디오 캡처하기
- ▣ 16장: 커널 프로그래밍
- 개요
- 커널 모듈을 작성하는 이유
- 로드 가능 커널 모듈(LKM) 기초
- 첫 번째 LKM 예제
- LKM Makefile
- 리눅스 데스크톱 머신에서 LKM 빌드하기
- RPi에서 LKM 빌드하기
- 첫 번째 LKM 예제 테스트
- 임베디드 LKM 예제
- 인터럽트 서비스 루틴(ISR)
- 성능
- 개선된 버튼 GPIO 드라이버 LKM
- kobject 인터페이스
- 개선된 LED GPIO 드라이버 LKM
- 커널 스레드
- 결론
- 요약
- 개요
- ▣ 12장: 사물 인터넷 (IoT)
- GitHub 저장소: https://github.com/wikibook/exploringrpi
- ZIP 형식으로 다운로드: https://github.com/wikibook/exploringrpi/archive/master.zip