익스플로링 라즈베리 파이

임베디드 리눅스와 전자회로를 이용한 라즈베리 파이 완벽 활용 가이드

라즈베리 파이 기초와 응용, 원리를 익히자!

이 책은 라즈베리 파이를 실생활에 활용하려는 혁신가를 위한 안내서다. 이 책은 무작정 따라하기 식이 아니라 공학적 원리를 바탕으로 자신만의 프로젝트를 구상하고 완성하는 데 필요한 기술을 가르친다. 초보자에서 전문가에 이르기까지 각종 전자회로, 모듈, 주변 장치에 공통적으로 적용할 수 있는 기본 원리를 배울 수 있다. 기본적인 리눅스 프로그래밍 기술을 다루는 한편 부품의 선택에 도움이 되는 정보를 제공한다. 또한 다양한 부품을 조합함으로써 프로젝트의 목표를 달성할 수 있는 방법을 소개한다. 이 책의 웹사이트에서 모든 코드와 스크립트 저장소, 강의 영상 링크, 추가 자료를 확인할 수 있다.

라즈베리 파이는 확장성이 뛰어나기로 유명하다. 수천 가지 전자 공작에 사용할 수 있을 뿐 아니라, 리눅스 운영체제를 통해 기능을 더욱 확장할 수 있다. 이 책은 라즈베리 파이를 최대한 활용할 수 있도록 도울뿐더러 다양한 프로젝트에 적용할 수 있는 전자회로를 구성할 수 있게 기초적인 공학 지식을 제공한다.

★ 이 책에서 다루는 내용 ★

  • 기본적인 애플리케이션을 구축하는 데 필요한 리눅스 및 프로그래밍 기술
  • 전자회로를 제작하는 데 필요한 부품 선택
  • 각종 모듈의 인터페이스, 제어, 통신의 이해
  • 비디오, 오디오, 실시간 상호작용 등의 고급 애플리케이션 구현

데릭 몰로이(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++로 파이썬 확장하기
      • 요약
      • 더 읽을거리
      • 참고 문헌
      •  
  • [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 명령행에서 아두이노 프로그래밍
      • 요약
      •  
  • [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 애플리케이션
        • 멀티스레드 서버 애플리케이션
        • 멀티스레드 날씨 서버
      • 요약
      • 더 읽을거리
      •  
    • ▣ 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
        • 커널 스레드
      • 결론
      • 요약