2016년 11월 28일 월요일

전지

자동차 배터리


자동차(그랜저 XG)의 시동을 걸기 위해 리모콘 버튼을 눌렀는데 아무 반응이 없길래, 처음엔 리모콘의 배터리가 방전되었을 것이라고 생각했다. 다른 리모콘에도 반응이 없어, 열쇠로 문을 열어보니 도난방지기가 작동하지 않고, 계기판에도 불이 들어오지 않았다. 리모콘이 아니라 자동차의 배터리가 방전된 것이었다.

손해보험사의 긴급출동 서비스를 불러서 시동을 걸고 보니, 실내등의 스위치가 ON에 가 있다.

그랜저 XG 용 GB80L 배터리


자동차 리모콘 배터리


차를 물려받을 때 리모콘을 두 개 받았다. 시동 기능이 있는 것과 없는 것. 몇 년이 지나서야, 두 리모콘에 들어가는 전지가 다르다는 것을 깨닫게 되었다.


  • OKA-NO10
    LOCK, UNLOCK, TRK(트렁크 개폐) 버튼이 있다. CR2032 한 개가 들어간다.
  • OKA-NO11
    세 개의 버튼 외에 ENG 버튼이 있어 원격 시동이 가능. CR2016이 두 개 들어간다.


CR2016과 CR2032는 전압이 3 V로 같고, 두께가 각각 1.6 mm와 3.2 mm로 차이가 있다. CR2016을 두 개 겹치면 CR2032와 두께가 같아지지만, 직렬이 되므로 전압은 6 V가 된다. 그렇다면 내 차의 리모콘(OKA-NO11)에 CR2016 두 개 대신에 CR2032 한 개를 넣어도 리모콘이 동작할 지 궁금해졌다. 실험해보았더니 동작하지 않는다.

현대차 용 OKA-NO10 리모콘과 CR2032 배터리

현대차 용 OKA-NO11 리모콘과 CR2016 배터리

배터리 체커


배터리 여러 개를 사용하는 장치가 전원 부족으로 인해 작동하지 않으면 배터리를 전부 교체하는 것이 보통이다. 그런데, 버려지는 여러 개의 배터리 중에 아직 수명이 많이 남은 것도 있지 않을까하는 생각이 들었다. 자동차 리모콘에 들어있던 CR2016 전지 두 개를 일전에 구입한 배터리 체커(BT-168)로 확인해보니 한 개는 정상, 한 개는 다 된 것으로 나왔기 때문이다.

리모콘 실험하러 주차장에 다녀오는 길에, 폐 배터리를 수거하는 주머니에서 건전지를 한 움큼 쥐어와서 확인해보았다. 그 중에 1/3은 GOOD으로 나왔다.

BT-168 배터리 체커

참고



2016년 11월 13일 일요일

TV 리모콘으로 OpenELEC 조작

IR(적외선) 센서를 라즈베리 파이에 연결하여 TV 리모콘으로 OpenELEC을 조작하도록 해보았다.

RPi와 IR 센서(늘솜 NS-GPIO-04)는 지인에게 얻은 것이고, 리모콘은 VHS/DVD 콤보를 중고로 구입할 때 딸려온 것인데 짝이 맞지 않아서인지 작동이 되지 않아 못쓰고 있었다.

IR 센서 연결


센서 모듈은 조립이 된 상태로 받은 것인데, 센서가 기판의 앞면에 붙어있어서 RPi 2에 꽂는데에 문제가 없다. IR 센서는 RPi의 GPIO18에 연결된다(데이터시트).


디바이스 트리 오버레이 추가


RPi에 IR 센서를 연결하였으면 config.txt 파일을 편집해야 한다. OpenELEC에서는 /flash 디렉터리에 있는데, 파일시스템이 읽기 전용으로 마운트되어 있기 때문에 편집하기 위해서는 쓰기가 가능하도록 마운트해야 한다. SSH로 접속하여 다음의 명령을 실행한다.

openelec:/flash # mount | grep flash
/dev/mmcblk0p6 on /flash type vfat (ro,noatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro)
openelec:/flash # mount -o remount,rw /flash
openelec:/flash # mount | grep flash
/dev/mmcblk0p6 on /flash type vfat (rw,noatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro)

config.txt에 한 줄을 추가하고 리부트한다.

openelec:/flash # tail -1 config.txt
dtoverlay=lirc-rpi


리모콘 테스트


modprobe를 실행하고,

openelec:~ # modprobe lirc_rpi

lircd 프로세스를 종료한 다음,

openelec:~ # killall lircd

다음의 명령을 실행하고 리모콘을 눌러본다.

openelec:~ # mode2 -d /dev/lirc0
space 16777215
pulse 4528
space 4428
pulse 598
...

리모콘의 버튼을 눌렀을 때 출력이 발생하는 것으로 보아, 리모콘이 작동한다는 것을 알 수 있다.


리모콘 기록


irrecord를 실행하여 리모콘의 버튼 하나하나에 이름을 붙인다.

openelec:~ # irrecord --device=/dev/lirc0 /storage/.config/lircd.conf


irrecord의 지시를 따라 키보드와 리모콘을 누르다보면 다음과 같은 파일이 만들어진다.  /etc/lirc/lircd.conf.rpi 파일과 http://lirc.sourceforge.net/remotes/lg/6710CDAL01G 를 참고했다.

openelec:~/.config # more lircd.conf

# Please make this file available to others
# by sending it to 
#
# this config file was automatically generated
# using lirc-0.9.1-git(default) on Sun Nov 13 02:57:53 2016
#
# contributed by
#
# brand:                       LG
# model no. of remote control: 6710CMAM03C
# devices being controlled by this remote:
#

begin remote

  name  LG_6710CMAM03C2
  bits           16
  flags SPACE_ENC|CONST_LENGTH|REPEAT_HEADER
  eps            30
  aeps          100

  header       4518  4441
  one           580  1653
  zero          580   535
  ptrail        579
  repeat        580  1652
  pre_data_bits   16
  pre_data       0x808
  gap          107643
  toggle_bit_mask 0x0

      begin codes
          KEY_POWER                0x7887
          KEY_MUTE                 0xF807
          KEY_VOLUMEUP             0xE817
          KEY_VOLUMEDOWN           0x6897
          KEY_SLEEP                0x43BC
          KEY_1                    0x827D
          KEY_2                    0x42BD
          KEY_3                    0xC23D
          KEY_4                    0x22DD
          KEY_5                    0xA25D
          KEY_6                    0x629D
          KEY_7                    0xE21D
          KEY_8                    0x12ED
          KEY_9                    0x926D
          KEY_0                    0xD22D
          KEY_UP                   0x20DF
          KEY_DOWN                 0x728D
          KEY_LEFT                 0x609F
          KEY_RIGHT                0xE01F
          KEY_ENTER                0xA05F
          KEY_MENU                 0xB24D
          KEY_STOP                 0x708F
          KEY_CHANNELUP            0xC837
          KEY_CHANNELDOWN          0x48B7
          KEY_RECORD               0xA857
          KEY_STOP                 0x708F
          KEY_FASTFORWARD          0x8877
          KEY_REWIND               0x08F7
          KEY_PLAY                 0xB04F
          KEY_BACK                 0x30CF
      end codes

end remote

리부트하면 OpenELEC에서 리모콘을 사용할 수 있다. 키보드나 스마트폰 앱으로 조작하는 것보다 훨씬 편하다.



참고



2016년 11월 7일 월요일

데비안 8.6 설치

HP tx1000 노트북에 Debian 8.6을 설치했다. 기존에 사용하던 Lubuntu 14.04 LTS에 불만은 없었지만, 번역 중인 라즈베리 파이 책에 소개된 데비안 크로스 툴체인을 테스트하기 위해 Debian을 처음으로 설치해본 것이다.

준비


설치 이미지 다운로드


https://www.debian.org/distrib/에서 small installation image(64-bit PC netinst iso)를 다운로드.

USB 메모리에 복사


다운로드한 이미지를 USB 메모리에 복사.

$ sudo cp debian-8.6.0-amd64-netinst.iso /dev/sda


Debian 설치


리부트 후 CMOS에서 <ESC> 키를 누르고 5. Boot Menu에서 USB Hard Drive 선택.


랜 선을 꽂은 상태로 설치를 했다. 파티션 분할을 자동으로 해줘서 편리했다.


무선랜 활성화


펌웨어 설치


tx1000 노트북의 WiFi 장치인 BCM4311을 사용하기 위해 펌웨어 설치.

$ su -
# apt install firmware-b43-installer


wpa_supplicant

wpa_passphrase 명령에 SSID와 암호를 인자로 주면 wpa_supplicant.conf 파일에 넣을 내용이 출력된다.

# wpa_passphrase myssid my_very_secret_passphrase > /etc/wpa_supplicant/wpa_supplicant.conf

/etc/network/interfaces


/etc/network/interfaces에 다음의 내용을 추가.

auto wlan0
iface wlan0 inet dhcp
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf


한국어 설정


지역 및 언어


언어는 한국어, 형식은 대한민국 선택.

한글 입력 설정


fcitx-hangul 설치.

apt install fcitx-hangul

입력기 설정(im-config) 실행하여 fcitx 선택.


참고




2016년 11월 5일 토요일

랜 선으로 두 대의 RPi 연결

랜 선 하나만으로 두 대의 라즈베리 파이를 연결할 수 있는지 실험해보았다. 결과는 성공이다.



랜 케이블로 연결된 두 대의 라즈베리 파이의 호스트명은 각각 rpi1과 rpi3이다. rpi1에는 HDMI와 키보드, 마우스를 연결하고 micro USB 전원을 연결했다. rpi3은 헤드레스로, USB-TTL 케이블을 통해 노트북의 USB 포트에서 전원을 공급받으며, 노트북에서 콘솔을 띄웠다.

rpi3에서 ifconfig로 IP 주소를 확인한 후,
pi@rpi3:~$ ifconfig eth0
eth0      Link encap:Ethernet  HWaddr b8:27:eb:74:7d:c9
          inet addr:169.254.218.16  Bcast:169.254.255.255  Mask:255.255.0.0
          inet6 addr: fe80::bbe0:b9f7:d1f3:1222/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:88 errors:0 dropped:0 overruns:0 frame:0
          TX packets:133 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:21761 (21.2 KiB)  TX bytes:34334 (33.5 KiB)

rpi1에서 rpi3으로 ping 테스트를 해보니 잘 된다.
pi@rpi1 ~ $ ping -c 3 169.254.218.16
PING 169.254.218.16 (169.254.218.16) 56(84) bytes of data.
64 bytes from 169.254.218.16: icmp_req=1 ttl=64 time=0.578 ms
64 bytes from 169.254.218.16: icmp_req=2 ttl=64 time=0.483 ms
64 bytes from 169.254.218.16: icmp_req=3 ttl=64 time=0.544 ms

--- 169.254.218.16 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.483/0.535/0.578/0.039 ms

SSH 접속도 잘 된다.
pi@rpi1:~$ ssh pi@169.254.218.16
The authenticity of host '169.254.218.16 (169.254.218.16)' can't be established.
ECDSA key fingerprint is 78:7a:83:49:ae:18:91:45:91:37:03:ca:fa:d3:14:f5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '169.254.218.16' (ECDSA) to the list of known hosts.
pi@169.254.218.16's password:

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sat Nov  5 13:10:27 2016 from rpi1.local
pi@rpi3:~$

IP 주소를 입력하는 대신 호스트명을 사용하기 위해, rpi1에 있는 /etc/hosts 파일의 끝에 rpi3의 IP 주소를 추가했다.
pi@rpi1 ~ $ tail -1 /etc/hosts
169.254.218.16  rpi3

그리고, SSH 접속을 할 때마다 패스워드를 입력하지 않기 위해 다음과 같이 키를 생성 및 복사했다.
$ ssh-keygen
$ ssh-copy-id pi@rpi3
$ ssh-add

지금까지 한 일은 아래의 영상과 같은 것을 만들어 보기 위한 준비 과정이었다. 소스 코드는 여기에 있다.