현재까지 발견된 위 책의 오탈자 정보와 오류, 그리고 보다 매끄러운 문장을 위해 수정한 내용을 알려드리며, 아울러 집필과 편집 시에 미처 확인하지 못하고 불편을 끼쳐 죄송하다는 말씀을 드립니다. 아래의 오탈자 사항은 추후 재쇄 시에 반영하도록 하겠습니다.
이외의 오탈자 정보를 발견하시면 저자 운영 카페(http://cafe.naver.com/openiot)나 출판사(readers.jpub@gmail.com)로 연락주시면 고맙겠습니다.
최종수정일자: 2017년 9월 1일
4쇄본 오탈자
263페이지 아래에서 두 번째 코드 박스에서(저자 제공)
pi@raspberrypi ~ $ sudo apt-get install python-setuptools
pi@raspberrypi ~ $ sudo easy_install -U RPIO
==>
$ git clone https://github.com/metachris/RPIO.git --branch v2 --single-branch
$ cd RPIO
$ nano source/c_gpio/c_gpio.c
...
#define BCM2708_PERI_BASE 0x3F000000
...
$ sudo python setup.py install
289페이지 아래 두 문단 전체(저자 제공)
라즈베리 파이에서 직렬 포트를 사용하려면 먼저 현재 콘솔 화면으로 등록되어 있는 직렬 포트를 해제시켜야 한다. 리눅스의 직렬 포트(윈도우의 COM1, COM2 등 포트)는 데스크톱 PC에서는 /dev/ttyS0, ttyS1 등의 장치 파일을 사용하고, 반면 임베디드 장치에서는 ARM 사에서 개발한 AMBA(Advanced Microcontroller Bus Architecture) 직렬 장치의 이름을 따서 ttyAMA0 등의 장치 파일을 주로 사용한다.
/boot/cmdline.txt 파일을 고쳐 ttyAMA0가 설정된 옵션을 제거하여 준다. 즉, 다음과 같은 내용이 되도록 만들어 준다.
==>
라즈베리 파이에서 직렬 포트를 사용하려면 먼저 현재 콘솔 화면으로 등록되어 있는 직렬 포트를 해제시켜야 한다. 그런데 라즈베리 파이를 포함한 리눅스의 직렬 포트(윈도우의 COM 포트 등)는 장치 파일을 통해 접근하여 사용할 수 있다. 일반적으로 데스크톱 PC의 COM 포트는 /dev/ttyS0, ttyS1 등의 장치 파일, USB 직렬 포트는 ttyUSB 또는 ttyACM 등의 장치 파일, 그리고 임베디드 장치의 GPIO UART 포트는 ARM에서 개발한 AMBA(Advanced Microcontroller Bus Architecture) 직렬 장치의 이름을 따서 ttyAMA0 등의 장치 파일을 사용한다. 한편, 라즈베리 파이 3에서는 GPIO UART 포트는 /dev/ttyS0(또는 /dev/serial0)과 연결되고, 내장 블루투스 장치가 사용하는 UART 포트가 기존의 /dev/ttyAMA0(또는 /dev/serial1)과 연결되어 있다.
SD 카드의 boot 파티션에 있는 /boot/cmdline.txt 파일을 고쳐 serial0 또는 ttyAMA0 가 설정된 옵션을 제거하여 준다. 즉, 다음과 같은 내용이 되도록 만들어준다.
290페이지의 첫 번째 문단 및 두 번째 코드 박스(저자 제공)
다음으로, 루트 파일 시스템의 /etc/inittab 파일을 고쳐 다음 줄의 맨 앞에 ‘#’ 기호를 넣어 주석문으로 처리한다.
#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
==>
다음은 부트 파티션에 있는 /boot/config.txt 파일에 다음 줄을 추가해 준다.
$ sudo nano /boot/config.txt
…
enable_uart=1
319페이지 표 7-3에서(저자 제공)
webcam-localhost
==>
stream_localhost
320페이지 첫 번째 코드 박스에서(저자 제공)
webcam-localhost off
==>
stream_localhost off
416페이지 표 10-1의 4번째 'AT+CWMODE=<모드>'의 기능 설명에서(저자 제공)
모드=0(스테이션), 1(AP), 2(둘 다) OK
==>
모드=1(스테이션), 2(AP), 3(둘 다) OK
416페이지 표 10-1의 6번째 명령에서(저자 제공)
AT+CWJAP=<SSID>,<PWD>
==>
AT+CWJAP_CUR=<SSID>,<PWD>
417페이지 두 번째 코드 박스의 두 번째 코드에서(저자 제공)
$ esptool.py ...... 0x7e0q00 blank.bin
==>
$ esptool.py ...... 0x7e000 blank.bin
429 페이지 첫 번째 코드 박스(저자 제공)
$ wget https://github.com/adafruit/DHT-sensor-library/archive/master.zip
$ unzip master.zip -d ~/Arduino/libraries
==>
$ cd ~/Arduino/libraries
$ git clone https://github.com/adafruit/Adafruit_Sensor
$ git clone https://github.com/adafruit/DHT-sensor-library
최종수정일자: 2016년 6월 14일
2쇄본 오탈자
19페이지 아래에서 두 번째 코드 박스와 그 아래 문장(저자 제공)
$ sudo rpi-update
$ sudo apt-get install pi-bluetooth
라즈베리 파이 3은 블루투스 모듈이 내장되어 있는데, 동작을 위해 펌웨어를 갱신하고 pibluetooth
패키지를 설치해야 한다. 그런 다음 재부팅한다.
==>
$ sudo apt-get update
$ sudo apt-get upgrade
라즈베리 파이 3은 블루투스 모듈이 내장되어 있는데, 동작을 위해 펌웨어를 갱신하고 pibluetooth
패키지를 설치해야 한다. 그런 다음 재부팅한다.
$ sudo rpi-update
$ sudo apt-get install pi-bluetooth
최종수정일자: 2016년 5월 11일
1쇄본 오탈자
120페이지 코드 4-5 제목에서(Khan 님 제공)
/etc/apache2/site-available/default 설정 파일 수정
==>
/etc/apache2/sites-available/default 설정 파일 수정
301페이지 첫 번째 코드에서(저자 제공)
$ sudo REPO_URI=https://github.com/notro/rpi-firmware rpi-update
$ sudo reboot
===>
$ sudo rpi-update
$ sudo reboot
292페이지 두 번째 문단 3번째 줄(저자 제공)
GPIO 포트의 3.3V, GND, 18번(GPIO24) 핀에 연결하면 된다.
==>
GPIO 포트의 3.3V, GND, 18번(GPIO24) 핀에 연결하고, VCC와 OUT 핀 사이에 풀업 저항(1K 옴)을 연결하면 된다.
298페이지 아래 코드 상자에서(저자 제공)
$ git clone https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git
$ cd Adafruit-Raspberry-Pi-Python-Code/Adafruit_CharLCD
==>
$ sudo apt-get install git build-essential python-dev python-smbus python-pip
$ git clone https://github.com/adafruit/Adafruit_Python_CharLCD.git
$ cd Adafruit_Python_CharLCD
299페이지 제일 첫 번째 문단 전체와 첫 번째 코드(저자 제공)
DVK512 보드의 LCD1602 포트에 대한 호환성을 고려하여 Adafruit_CharLCD.py 파일을 편집하여 다음 라인을 수정한다.
def __init__(self, pin_rs=22, pin_e=11, pins_db=[23, 10, 9, 25], GPIO = None):
===>
Adafruit_CharLCD 모듈을 설치한다.
$ sudo python setup.py install
299페이지 코드 6-15의 4-5행(빈 행 포함)(저자 제공)
lcd = Adafruit_CharLCD(pin_rs=22, pin_e=11, pins_db=[23, 10, 9, 25])
lcd.begin(16,2)
===>
lcd = Adafruit_CharLCD(rs=22, en=11, d4=23, d5=10, d6=9, d7=25, cols=16, lines=2)
190페이지 네 번째 행(저자 제공)
먼저 의존 패키지들을 설치한다.
===>
먼저 앞서 PySide 정식 버전을 설치하였다면 다음 명령으로 제거해야 한다.
$ sudo apt-get remove python-pyside pyside-tools
다음은 PySide를 설치하기 위한 의존 패키지들을 설치한다.
19페이지 마지막 문단 바로 위에 아래의 내용 추가(라즈베리 파이 3 출시로 인한 내용 보강)(저자 제공)
라즈베리 파이 3은 블루투스 모듈이 내장되어 있는데, 동작을 위해 펌웨어를 갱신하고 pi-bluetooth 패키지를 설치해야 한다. 그런 다음 재부팅한다.
$ sudo rpi-update
$ sudo apt-get install pi-bluetooth
85페이지 마지막 코드 박스의 중간 부분에 1줄 추가(저자 제보)
... global n
... m += 1
==>
... global n
... m = 0
... m += 1
121페이지 첫 번째 줄(저자 제보)
Apache 웹 서버를 재실행하고,
==>
Apache 웹 서버에서 CGI 모듈을 활성화하고 재실행한 후에
121페이지 첫 번째 코드 박스의 1행(저자 제보)
$ sudo service apache2 restart
==>
$ sudo a2enmod cgi
$ sudo service apache2 restart
140페이지 코드 4-17(저자 제보)
#character-set-client-handshake = false --> 주석처리
default-character-set=utf8
bind-address = <IP 주소>
==>
[mysqld]
...
#character-set-client-handshake = false --> 주석처리
init_connect = 'SET collation_connection = utf8_general_ci'
init_connect = 'SET NAMES utf8'
character-set-server = utf8
collation-server = utf8_general_ci
bind-address = <IP 주소>
...
[mysql]
default-character-set = utf8
...
156페이지 코드 4-18의 3행(빈 행 포함)(저자 제보)
db = connect ("localhost", "pi", "raspberry", "test")
==>
db = MySQLdb.connect ("localhost", "pi", "raspberry", "test")
156페이지 코드 4-18의 7행(빈 행 포함)(저자 제보)
student = cur.fetchone():
===>
student = cur.fetchone()
157페이지 코드 4-19의 3행(빈 행 포함)(저자 제보)
db = connect ("localhost", "pi", "raspberry", "test")
==>
db = MySQLdb.connect ("localhost", "pi", "raspberry", "test")
157페이지 코드 4-19의 11행(빈 행 포함)(저자 제보)
student = cur.fetchone():
==>
student = cur.fetchone()
158페이지 코드 4-20의 3행(빈 행 포함)(저자 제보)
db = connect ("localhost", "pi", "raspberry", "test")
==>
db = MySQLdb.connect ("localhost", "pi", "raspberry", "test")
158페이지 코드 4-20의 13행(빈 행 포함)(저자 제보)
student = cur.fetchone():
===>
student = cur.fetchone()
159페이지 코드 4-21의 10행(빈 행 포함)(저자 제보)
db = connect ("localhost", "pi", "raspberry", "test")
===>
db = MySQLdb.connect ("localhost", "pi", "raspberry", "test")
321페이지 세 번째 코드 박스에서 두 줄 추가 및 마지막 명령 줄 수정(저자 제보)
$ cd code/mjpg-streamer
$ make USE_LIBV4L2=true clean all
$ make DESTDIR=/usr install
==>
$ cd code/mjpg-streamer
$ wget https://github.com/swkim01/RaspberryPiWithIOT/raw/master/ch7/input_uvc_patch
$ patch -p0 < input_uvc_patch
$ make USE_LIBV4L2=true clean all
$ sudo make DESTDIR=/usr install
321페이지 마지막 코드 박스에서(저자 제보)
$ mjpg_streamer -i "./input_uvc.so -d /dev/video0 -n -f 30 -r 1280x720" -o "./output_http.so -n -w ./www"
==>
$ mjpg_streamer -i "input_uvc.so -d /dev/video0 -n -f 30 -r 1280x720" -o "output_http.so -n -w /usr/www"
65페이지 두 번째 코드 박스의 첫 번째 행(저자 제보)
pi@raspberrypi pi $ set ==> pi@raspberrypi ~ $ set
104페이지 세 번째 코드 박스에서(저자 제보)
$ sudo apt-get install git $ git clone https://github.com/swkim01/blastpy.git
==>
$ sudo apt-get install git
$ git clone https://github.com/swkim01/blastpy.git
111페이지 두 번째 문단 첫 번째 행(저자 제보)
/var/www.html ==> /var/www/html
218페이지 네 번째 문단 세 번째 행(저자 제보)
textEdit 위젯 ==> label 위젯
301페이지 아래에서 두 번째 코드 다음에 아래의 두 줄 추가(저자 제보, 리눅스 커널 업데이트로 인한 수정)
또는 리눅스 4.4 버전 이상인 경우
$ sudo cp waveshare-dtoverlays/waveshare32b-overlay.dtb /boot/overlays/waveshare32b.dtbo
301페이지 아래에서 첫 번째 코드 다음에 아래의 두 줄 추가(저자 제보, 리눅스 커널 업데이트로 인한 수정)
또는 리눅스 4.4 버전 이상인 경우
$ sudo cp waveshare-dtoverlays/waveshare35a-overlay.dtb /boot/overlays/waveshare35a.dtbo
302페이지 위에서 첫 번째 코드에서 두 번째 줄 삭제(저자 제보, 리눅스 커널 업데이트로 인한 수정)
$ sudo nano /boot/config.txt
dtparam=spi=on
dtoverlay=waveshare32b
==>
$ sudo nano /boot/config.txt
dtoverlay=waveshare32b
302페이지 위에서 두 번째 코드 중 두 번째 줄 삭제(저자 제보, 리눅스 커널 업데이트로 인한 수정)
$ sudo nano /boot/config.txt
dtparam=spi=on
dtoverlay=waveshare35a
==>
$ sudo nano /boot/config.txt
dtoverlay=waveshare35a
330페이지 코드 7-8의 5-6행(빈 행 포함)(저자 제보)
diff0 = cv2.absdiff(i[0], I[1])
diff0 = cv2.absdiff(i[0], I[1])
==>
diff0 = cv2.absdiff(i[0], i[1])
diff0 = cv2.absdiff(i[0], i[1])
369페이지 세 번째 코드 박스(저자 제보)
$ git clone https://github.com/swkim01/weather.git
==>
$ git clone https://github.com/swkim01/weather.git
$ cd weather
378페이지 세 번째 코드 박스(저자 제보)
$ apt-get remove libportaudio0
$ apt-get install portaudio19-dev
$ apt-get install libportaudio2
==>
$ sudo apt-get remove libportaudio0
$ sudo apt-get install portaudio19-dev
$ sudo apt-get install libportaudio2
381페이지 두 번째 코드 박스의 2행(저자 제보)
$ cd wavesahre-7inch-touchscreen-driver
==>
$ cd waveshare-7inch-touchscreen-driver
383 페이지 두 번째 코드 박스(저자 제보)
$ git clone https://github.com/swkim01/imu.git
==>
$ git clone https://github.com/swkim01/imu.git
$ cd imu
404페이지 본문 첫 번째 행(저자 제보)
/dev/ACM0 ==> /dev/ttyACM0
409페이지 10.6절 제목 다음에 다음의 내용 추가(저자 제공)(참고로, 이 부분은 재쇄 시에도 반영되지 않습니다)
이제 라즈베리파이에서 다음과 같은 프로그램을 작성한다.
$ vi xbeetest.py
import serial
con = serial.Serial('/dev/ttyAMA0', 9600, timeout=3)
while True:
msg = con.read(5)
print msg
if msg[:3] == 'REQ':
print "Requested by Arduino"
con.write("ACK"+'\r\n')
아두이노를 재부팅하고 다음과 같이 프로그램을 실행하면 아두이노로부터 XBEE 모듈을 통해 전송한 ‘REQ’ 요청 메시지를 수신하고 ‘ACK’ 확인 메시지를 송신하여 아두이노 LED를 켰다가 끄게 된다.
$ python xbeetest.py
REQ
Requested by Arduino
513페이지 첫 번째 코드 박스(저자 제보)
$ cd /usr/share/openhab
==>
$ cd <openhab 설치 디렉터리>
566페이지 첫 번째 코드 박스(저자 제보)
$ sudo tools/hciconfig hci0 up
$ sudo tools/hciconfig hci0 leadv
$ sudo tools/hciconfig hci0 noscan
==>
$ sudo hciconfig hci0 up
$ sudo hciconfig hci0 leadv
$ sudo hciconfig hci0 noscan
566페이지 두 번째 코드 박스(저자 제보)
$ sudo tools/hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 1A 1A FF 4C 00 02 15 E2 0A 39
F4 73 F5 4B C4 A1 2F 17 D1 AD 07 A9 61 00 01 00 01 C8 00
==>
$ sudo hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 1A 1A FF 4C 00 02 15 E2 0A 39
F4 73 F5 4B C4 A1 2F 17 D1 AD 07 A9 61 00 01 00 01 C8 00
577페이지 본문 네 번째 문단(저자 제보)
빌드 디렉터리를 만들고, 빌드한 다음, 설치한다.
==>
빌드한 다음, 설치한다.
577페이지 두 번째 코드 박스(저자 제보)
$ wget http://mosquitto.org/files/source/mosquitto-1.4.2.tar.gz
$ cd mosquitto-1.4.2
==>
$ wget http://mosquitto.org/files/source/mosquitto-1.4.2.tar.gz
$ tar xvfz mosquitto-1.4.2.tar.gz
$ cd mosquitto-1.4.2
591페이지 세 번째 문단 삭제(저자 제보)
MQTT 메시지 전송을 위해 PubsubClient 라이브러리를 설치해야 한다. 다음 명령을 실행하여 PUbsubClient 라이브러리를 다운로드하고 설치한다.
'오탈자 정보' 카테고리의 다른 글
[실무에 바로 적용하는 Node.js]_오탈자 (0) | 2016.03.30 |
---|---|
[아트멜 스튜디오와 아두이노로 배우는 ATmega328 프로그래밍]_오탈자 (0) | 2016.03.14 |
[스프링 인 액션(제4판)]_오탈자 (0) | 2016.02.04 |
[전문가를 위한 오라클 PL/SQL(제3판)]_오탈자 (0) | 2016.01.06 |
[그림으로 공부하는 오라클 구조]_오탈자 (0) | 2015.12.29 |