본문 바로가기

오탈자 정보

[사물인터넷을 품은 라즈베리 파이]_오탈자

현재까지 발견된 위 책의 오탈자 정보와 오류, 그리고 보다 매끄러운 문장을 위해 수정한 내용을 알려드리며, 아울러 집필과 편집 시에 미처 확인하지 못하고 불편을 끼쳐 죄송하다는 말씀을 드립니다. 아래의 오탈자 사항은 추후 재쇄 시에 반영하도록 하겠습니다. 


이외의 오탈자 정보를 발견하시면 저자 운영 카페(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


472페이지 마지막 코드 부분 박스를 지우고 아래 내용으로 변경(저자 제보)
$ cd nodemcu-firmware/pre-build/latest
$ esptool.py --port=/dev/ttyUSB0 write_flash 0x00000 nodemcu_latest.bin
==>
Nodemcu 펌웨어는 이제 웹브라우저를 열어서 https://github.com/nodemcu/nodemcu-firmware로 접속한 후에 releases 링크를 클릭하면 최근에 업로드된 펌웨어를 다운로드할 수 있다. 또 다른 새로운 방법은 http://nodemcu-build.com으로부터 온라인으로 커스터마이징된 펌웨어를 빌드하여 다운로드할 수 있다.

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 라이브러리를 다운로드하고 설치한다.