embeded/raspberry pi2020. 4. 30. 10:05

라즈베리는 5V USB 어댑터를 통해서 전원을 공급받고

L298N은 1.6V * 4 = 6V로 알카라인 전지를 통해서 공급을 받아서 레벨이 맞지 않는지 작동이 되지 않는다.

 

라즈베리는 3.3V 나오고 있는데 L298N 데이터시트 상으로는 노이즈 대책을 위해 1.5V 넘어야 한다고 하는데

그건 넘었음에도 왜 되지 않는걸까? ㅠㅠ

 

sudo gpio mode 21 out
sudo gpio mode 22 out
sudo gpio mode 23 pwm

sudo gpio mode 27 out
sudo gpio mode 28 out
sudo gpio mode 26 pwm

sudo gpio write 21 1
sudo gpio pwm 23 4096

 

[링크 : http://wiringpi.com/the-gpio-utility/]

 

[링크 : https://blog.naver.com/chandong83/221156273595]

Posted by 구차니
embeded/raspberry pi2020. 4. 30. 09:50

gpio readall 보다 이쁜데?

 

[링크 : https://www.raspberrypi.org/documentation/usage/gpio/]

Posted by 구차니
embeded/raspberry pi2020. 4. 29. 22:42

라즈베리 2B 에서 raspivid 를 통해 1280x720@30fps 로 스트리밍을 시도함

$ raspivid -a 12 -t 0 -w 1280 -h 720 -ih -fps 30 -l -o tcp://0.0.0.0:5000
Waiting for a TCP connection on 0.0.0.0:5000...Client connected from 192.168.219.27:57804

 

라즈베리 3B 에서 omxplayer를 통해서 480x320 으로(SPI LCD 크기에 맞추어서) 스트리밍 함.

$ omxplayer --win 0,0,480,320 tcp://192.168.219.201:5000
Video codec omx-h264 width 1280 height 720 profile 100 fps 25.000000
Subtitle count: 0, state: off, index: 1, delay: 0
V:PortSettingsChanged: 1280x720@25.00 interlace:0 deinterlace:0 anaglyph:0 par:0.90 display:0 layer:0 alpha:255 aspectMode:0

 

라즈베리 2B에 카메라 달고 유선랜으로 스트리밍을 시도

 

라즈베리 3B 에서 omxplayer로 재생하니 프레임 버퍼에 바로 출력하는 것으로 보인다.

 

의외로 레이턴시가 심하진 않은 느낌?

 

+

vlc 말고 동일하게 omxplayer로 해도 되는거였나 보군..

 

direct tcp stream
Raspi with camera
raspivid -a 12 -t 0 -w 1280 -h 720 -vf -ih -fps 30 -l -o tcp://0.0.0.0:5000


Raspi with monitor
omxplayer --win 0,0,800,480 tcp://192.168.1.20:5000


vlc with monitor
tcp/h264://192.168.1.20:5000

[링크 : https://wiki.marcluerssen.de/index.php?title=Raspberry_Pi/Camera_streaming]

Posted by 구차니
embeded/raspberry pi2020. 4. 27. 21:13

gst-launch-1.0이 정상적으로 설치되지 않아서 다른방법을 찾는데 쉽진 않네?

 

서버(라즈베리 파이 2)

raspivid -t 0 -l -o tcp://0.0.0.0:3333

 

클라이언트(라즈베리 파이 3 / SPI 60Hz LCD)

vlc tcp/h264://192.168.66.154:3333

[링크 : https://raspberrypi.stackexchange.com/questions/23182/]

  [링크 : https://qastack.kr/raspberrypi/23182/how-to-stream-video-from-raspberry-pi-camera-and-watch-it-live]

 

출력에는 문제 없지만 버퍼링이 심해서 2초 정도 재생되고 5초 멈추고 그런 식으로 재생된다.

다른 옵션이나 네트워크 문제는 아닌지 조금더 봐야 할 듯

 

 

+

2015년에 했던거라 그런지 이제는 안된다.

2016/05/27 - [embeded/raspberry pi] - 라즈베리 파이 gstreamer / vlc ... 실패?

2015/09/20 - [embeded/raspberry pi] - 라즈베리 파이 gstreamer 시도

 

아래 패키지 깔아보려는데 충돌나서 안되고

그래서 다른거 해보려니 여전히 gst-launch-1.0이 없다. 도대체 머가 문제일까...

$ sudo apt-get install gstreamer1.0 gstreamer1.0-omx
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다
상태 정보를 읽는 중입니다... 완료
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-python-dbg-plugin-loader'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-plugins-ugly-amr'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-videosink'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-alsa'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-plugins-ugly-dbg'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-plugins-ugly-doc'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-plugins-base-apps'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-rtsp-dbg'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'libgstreamer1.0-dev'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-tools'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-python3-dbg-plugin-loader'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-plugins-good'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-qapt'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'libgstreamer1.0-0-dbg'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-espeak'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-omx'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-nice'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-omx-rpi-dbgsym'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-omx-rpi'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-opencv'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-omx-rpi-config'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-videosource'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-crystalhd'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-fluendo-mp3'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-rtsp'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-plugins-bad'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-plugins-base'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-audiosource'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-gnonlin-dbg'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-gnonlin-doc'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-pipewire'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-plugins-bad-videoparsers'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-plugins-really-bad'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-clutter'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-pulseaudio'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-pocketsphinx'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-plugins-bad-dbg'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-plugins-bad-doc'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-gtk3'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-visualization'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-plugins-bad-faad'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-omx-generic'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-lame'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-x'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-python-plugin-loader'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-plugins-rtp'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-omx-generic-dbgsym'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-gnonlin'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-vaapi-doc'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-omx-generic-config'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-libav'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-plugins-base-dbg'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-plugins-good-dbg'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-plugins-base-doc'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-plugins-good-doc'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-dvswitch'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-clutter-3.0'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-vaapi'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-libav-dbg'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-packagekit'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-python3-plugin-loader'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'libgstreamer1.0-0'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-omx-dbg'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-omx-bellagio-config'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-gl'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-plugins-ugly'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-doc'을(를) 선택합니다
주의, 정규식 'gstreamer1.0'에 대해 'gstreamer1.0-audiosink'을(를) 선택합니다
주의, 'gstreamer1.0-plugins-bad-faad' 대신에 'gstreamer1.0-plugins-bad' 패키지를 선택합니다
주의, 'gstreamer1.0-plugins-bad-videoparsers' 대신에 'gstreamer1.0-plugins-bad' 패키지를 선택합니다
주의, 'gstreamer1.0-plugins-ugly-amr' 대신에 'gstreamer1.0-plugins-ugly' 패키지를 선택합니다
gstreamer1.0-alsa is already the newest version (1.14.4-2).
gstreamer1.0-libav is already the newest version (1.15.0.1+git20180723+db823502-2).
gstreamer1.0-plugins-bad is already the newest version (1.14.4-1+b1).
gstreamer1.0-plugins-base is already the newest version (1.14.4-2).
gstreamer1.0-x is already the newest version (1.14.4-2).
libgstreamer1.0-0 is already the newest version (1.14.4-1).
libgstreamer1.0-0 패키지는 수동설치로 지정합니다.
gstreamer1.0-omx is already the newest version (1.14.4-1+rpt1).
gstreamer1.0-omx-rpi is already the newest version (1.14.4-1+rpt1).
gstreamer1.0-omx-rpi 패키지는 수동설치로 지정합니다.
gstreamer1.0-omx-rpi-config is already the newest version (1.14.4-1+rpt1).
gstreamer1.0-omx-rpi-config 패키지는 수동설치로 지정합니다.
gstreamer1.0-plugins-good is already the newest version (1.14.4-1+rpt1).
몇몇 패키지를 설치할 수 없습니다. 요청한 상황이 불가능할 수도 있고,
불안정 배포판을 사용해서 일부 필요한 패키지를 아직 만들지 않았거나,
아직 Incoming에서 나오지 않은 경우일 수도 있습니다.
이 상황을 해결하는데 다음 정보가 도움이 될 수도 있습니다:

다음 패키지의 의존성이 맞지 않습니다:
 gstreamer1.0-omx-dbg : 의존: gstreamer1.0-omx (= 1.0.0.1-0+rpi12+jessiepmg) 하지만 1.14.4-1+rpt1 패키지를 설치할 것입니다
 gstreamer1.0-python3-dbg-plugin-loader : 충돌: gstreamer1.0-python3-plugin-loader 하지만 1.14.4-1 패키지를 설치할 것입니다
 gstreamer1.0-python3-plugin-loader : 충돌: gstreamer1.0-python3-dbg-plugin-loader 하지만 1.14.4-1 패키지를 설치할 것입니다
E: 문제를 바로잡을 수 없습니다. 망가진 고정 패키지가 있습니다.


$ sudo apt-get install gstreamer1.0-omx-rpi
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다
상태 정보를 읽는 중입니다... 완료
gstreamer1.0-omx-rpi is already the newest version (1.14.4-1+rpt1).
gstreamer1.0-omx-rpi 패키지는 수동설치로 지정합니다.
0개 업그레이드, 0개 새로 설치, 0개 제거 및 0개 업그레이드 안 함.


$ sudo apt-cache search gst-launch
rygel-gst-launch - GNOME UPnP/DLNA services - gst-launch plugin
pi@raspberrypi:~ $ sudo apt-get install rygel-gst-launch
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다
상태 정보를 읽는 중입니다... 완료
The following additional packages will be installed:
  gstreamer1.0-plugins-ugly libgee-0.8-2 libgupnp-av-1.0-2 libgupnp-dlna-2.0-3 libmediaart-2.0-0
  libopencore-amrnb0 libopencore-amrwb0 librygel-core-2.6-2 librygel-db-2.6-2
  librygel-renderer-2.6-2 librygel-server-2.6-2 libsidplay1v5 rygel
제안하는 패키지:
  sidplay-base rygel-playbin rygel-preferences rygel-ruih rygel-tracker tumbler
다음 새 패키지를 설치할 것입니다:
  gstreamer1.0-plugins-ugly libgee-0.8-2 libgupnp-av-1.0-2 libgupnp-dlna-2.0-3 libmediaart-2.0-0
  libopencore-amrnb0 libopencore-amrwb0 librygel-core-2.6-2 librygel-db-2.6-2
  librygel-renderer-2.6-2 librygel-server-2.6-2 libsidplay1v5 rygel rygel-gst-launch
0개 업그레이드, 14개 새로 설치, 0개 제거 및 0개 업그레이드 안 함.
4,943 k바이트 아카이브를 받아야 합니다.
이 작업 후 9,770 k바이트의 디스크 공간을 더 사용하게 됩니다.
계속 하시겠습니까? [Y/n]


Posted by 구차니
embeded/raspberry pi2020. 4. 23. 20:46

크게 두개 페이지에서 정보를 획득하는데 하나는 미세먼지, 다른 하나는 날씨이다.

귀찮으니(!) 다음 기상정보를 쓰고.. 천천히 네이버와 기상청 airkorea 정보를 끌어와야겠다.

 

wget으로 날씨는 파악이 되는데


http://search.daum.net/search?nil_suggest=btn&w=tot&DA=SBC&q=서울+날씨

 

현재습도
$('.dl_weather dd').eq(1).text()

현재 온도
$('.txt_temp').eq(0).text()

 

 

미세먼지는 wget으로는 안되고 javascript를 통해서 값이 바뀌는지 html 상에서는 나타나지 않는다.

http://search.daum.net/search?nil_suggest=btn&w=tot&DA=SBC&q=서울+미세먼지

시간
$('.txt_info').eq(0).text().split(' ')[0]

수치
$('.txt_num').eq(0).text()

Posted by 구차니
embeded/raspberry pi2020. 4. 19. 20:58

다시 찾아보니 좀 비싸네?

3.3V LDO가 있으니 5V나 3.3V 아무거나 넣어줘도 될 거 같은데

업체마다 회로도를 다르게 그려놓네?

 

[링크 : http://itempage3.auction.co.kr/DetailView.aspx?itemno=B317083711] 2만원

 

[링크 : http://itempage3.auction.co.kr/DetailView.aspx?itemno=B650315349] 1만원

 

gpsd 한번 깔아볼까나

[링크 : https://learn.adafruit.com/adafruit-ultimate-gps-hat-for-raspberry-pi/use-gpsd]

 

+

배선은 아래와 같이 라즈베리 파이의  VCC(5V) / GND / TX / RX 를 연결하면 된다.

근데 원래 전원이 들어왔으면 먼가 불이 들어올줄 알았는데 아무것도 없네?

 

이런저런 서비스들이 있는데

$ sudo apt-cache search gpsd
collectd-core - statistics collection and monitoring daemon (core system)
fso-gpsd - gpsd subset compatibility daemon for the freesmarpthone.org frameworkd
gosmore - Openstreetmap.org viewer / wayfinder / search client
gpsbabel - GPS file conversion plus transfer to/from GPS units
gpsd - Global Positioning System - daemon
gpsd-clients - Global Positioning System - clients
gpsd-dbg - Global Positioning System - debugging symbols
libgps-dev - Global Positioning System - development files
libgps23 - Global Positioning System - library
libnet-gpsd3-perl - Perl interface to the gpsd server daemon protocol version 3 (JSON)
libqgpsmm-dev - Global Positioning System - Qt wrapper for libgps (development)
libqgpsmm23 - Global Positioning System - Qt wrapper for libgps
navit - Car navigation system with routing engine
navit-data - Car navigation system with routing engine - data files
navit-graphics-gtk-drawing-area - Car navigation system with routing engine - GTK+ graphic plugin
navit-gui-gtk - Car navigation system with routing engine - GTK+ GUI
navit-gui-internal - Car navigation system with routing engine - internal GUI
python-gps - Global Positioning System - Python libraries

 

설치는 아래 3개를 깔아야 하는 듯?

$ sudo apt-get install gpsd gpsd-clients python-gps

 

기본 서비스로는 정상적으로 작동하지 않아서 아래처럼 서비스 삭제 후 gpsd 데몬을 직접 이용해서 구동해야 한다.

$ sudo systemctl stop gpsd.socket 
$ sudo systemctl disable gpsd.socket
$ sudo gpsd /dev/ttyAMA0 -F /var/run/gpsd.sock

 

상태를 보려면 아래의 것을 실행해서 보면 되는데

실내에서 하다 보니 위치정보를 받지를 못한다.

$ gpsmon

Posted by 구차니
embeded/raspberry pi2020. 3. 29. 10:03

dtparam=audio=on이 되어있어도 오디오가 안나와서 검색을 해보니

auto로 되면 hdmi로 연결되는 경우도 있는 듯?

 

sudo raspi-config

를 통해서 force audio 해줘도 안되네..

 

[링크 : https://raspberrypi.stackexchange.com/questions/100759/pi-3-b-no-audio-device-found]

 

어떤게 영향을 받아서 잘되는진 모르겠지만

sudo raspi-config 에서 force 3.5 하고 (여기까진 차이가 없었던거 같은데)

sudo alsamixer로 볼륨 조절해주고

xwindow에서 우측 상단의 스피커를 우클릭하여 HDMI / Analog 에서 analog로 선택해주니 정상적으로 잘 나온다.

[링크 : https://forum.manjaro.org/t/rpi-3b-3b-sound-trouble-shooting/91077]

'embeded > raspberry pi' 카테고리의 다른 글

다음 날씨 페이지 분석  (0) 2020.04.23
GY-NEO6MV2 (ublox NEO-6M) GPS 모듈  (0) 2020.04.19
라즈베리 파이 카메라 케이블이 이상해  (0) 2020.03.15
라즈베리 프로젝트?  (0) 2020.03.14
rpi clcd / wiringpi deprecated  (0) 2020.03.12
Posted by 구차니
embeded/raspberry pi2020. 3. 15. 20:16

2015년에 샀었던 녀석인데..

케이블 접촉부가 끊어져서 오락가락 하는지라 블랙박스로 쓰긴 무리인데..

[링크 : https://minimonk.net/5693]

 

waveshare Rev 2.0 이라는데 왜... 케이블이 다르지?

반대방향이 아니라 같은 방향 케이블이라 이번에 구매한 녀석이랑 다르다.

내가 샀던 모델만 그렇게 동일 방향인건진 좀 더 찾아 봐야 할 듯

 

걍 이걸 하나 사는게 나을지도 모르겠네

[링크 : http://itempage3.auction.co.kr/DetailView.aspx?itemno=B550318528]

 

+

동일 모델인데 케이블 연결하는 부품의 top/bottom이 다른 것으로 보인다.

도대체 얘 정체가 머지?

[링크 : https://www.waveshare.com/rpi-camera-b.htm]

Posted by 구차니
embeded/raspberry pi2020. 3. 14. 16:47

이번에 게임기 만들려고 고민하다 스피커 연결하고 그런게 귀찮아서 잠시 보류중인데

자전거 꺼내다 보니 문득 드는 생각

 

1. 로드다 보니 자전거 탈때 고개 들기 귀찮음

2. 블랙박스도 있으면 좋겠음

 

두개를 합쳐서.. 일단 LCD가 50Hz 까지 된다고 하니

rpi 3b에 보조배터리 연결해서 카메라 + LCD 해서

전방 카메라 + 디스플레이 + 저장 세개 조합으로 작동할 프로그램을 작성하고

 

심심하면(!) 가속도계와 GPS를 연동해서 트래커 만들어도 괜찮을 듯?

 

 

[링크 : https://www.waveshare.com/3.5inch-RPi-LCD-C.htm]

[링크 : http://eleparts.co.kr/goods/view?no=7048556]

[링크 : https://www.raspberrypi.org/documentation/usage/camera/raspicam/raspivid.md]

 

python 예제 돌려봐야징

[링크 : https://raspberrypi.stackexchange.com/questions/27041/]

Posted by 구차니
embeded/raspberry pi2020. 3. 12. 17:51

헐.. wiringpi 프로젝트 종료? 아무튼 그럼 이걸 쓰면 안되려나..?

일단은 소스를 찾아야 하니 mirror 된 git을 발견 해당 저장소의 소스를 사용하고 복사해서 수정한다.

$ git clone https://github.com/WiringPi/WiringPi.git

$ cd WiringPi/example

$ cp lcd.c lcd2.c

$ vi lcd2.c

$ gcc lcd2.c -o lcd2 -lwiringPi -lwiringPiDev

[링크 : http://wiringpi.com/wiringpi-deprecated/]

  [링크 : https://github.com/WiringPi/WiringPi]

 

별로 도움이 안될 배선 사진. jpg

 

넣을 위치가 마땅찮아 대충 끼워넣는 동영상.avi

 

링크 블로그의 내용 그대로 사용한다.

LCD  1번핀(VSS) --- RPI3  6번핀(ground), 가변저항의 왼쪽 다리

LCD  2번핀(VDD) --- RPI3  2번핀(+5V), 가변저항의 오른쪽 다리

LCD  3번핀(VE, VO) --- 가변저항의 가운데 다리

LCD  4번핀(RS) --- RPI3 26번핀(GPIO 7)

LCD  5번핀(RW) --- RPI3 14번핀(ground)

LCD  6번핀(EN,E) --- RPI3 24번핀(GPIO 8)

 

LCD 11번핀(D4) --- RPI3 11번핀(GPIO 17)

LCD 12번핀(D5) --- RPI3 12번핀(GPIO 18)

LCD 13번핀(D6) --- RPI3 13번핀(GPIO 27)

LCD 14번핀(D7) --- RPI3 15번핀(GPIO 22)

LCD 15번핀(LED+) --- RPI3   4번핀(+5V)

LCD 16번핀(LED-)  --- RPI3 34번핀(ground)


약간(!) 수정한 소스는 아래와 같다.

크게 바뀌는 건 별로 없고, 배선상의 문제로 아래의 코드로 4,5,6,7 에서 0,1,2,3 으로 변경해야 한다.

  if (bits == 4)
    lcdHandle = lcdInit (rows, cols, 4, 11,10, 0,1,2,3,0,0,0,0) ;
//  lcdHandle = lcdInit (rows, cols, 4, 11,10, 4,5,6,7,0,0,0,0) ;

 

전체 소소는 아래와 같다.

$ cat lcd2.c
/*
 * lcd.c:
 *      Text-based LCD driver.
 *      This is designed to drive the parallel interface LCD drivers
 *      based in the Hitachi HD44780U controller and compatables.
 *
 *      This test program assumes the following:
 *
 *      8-bit displays:
 *              GPIO 0-7 is connected to display data pins 0-7.
 *              GPIO 11 is the RS pin.
 *              GPIO 10 is the Strobe/E pin.
 *
 *      For 4-bit interface:
 *              GPIO 4-7 is connected to display data pins 4-7.
 *              GPIO 11 is the RS pin.
 *              GPIO 10 is the Strobe/E pin.
 *
 * Copyright (c) 2012-2013 Gordon Henderson.
 ***********************************************************************
 * This file is part of wiringPi:
 *      https://projects.drogon.net/raspberry-pi/wiringpi/
 *
 *    wiringPi is free software: you can redistribute it and/or modify
 *    it under the terms of the GNU Lesser General Public License as published by
 *    the Free Software Foundation, either version 3 of the License, or
 *    (at your option) any later version.
 *
 *    wiringPi is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *    GNU Lesser General Public License for more details.
 *
 *    You should have received a copy of the GNU Lesser General Public License
 *    along with wiringPi.  If not, see <http://www.gnu.org/licenses/>.
 ***********************************************************************
 */

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

#include <unistd.h>
#include <string.h>
#include <time.h>

#include <wiringPi.h>
#include <lcd.h>

#ifndef TRUE
#  define       TRUE    (1==1)
#  define       FALSE   (1==2)
#endif

static unsigned char newChar [8] =
{
  0b11111,
  0b10001,
  0b10001,
  0b10101,
  0b11111,
  0b10001,
  0b10001,
  0b11111,
} ;


// Global lcd handle:

static int lcdHandle ;

/*
 * usage:
 *********************************************************************************
 */

int usage (const char *progName)
{
  fprintf (stderr, "Usage: %s bits cols rows\n", progName) ;
  return EXIT_FAILURE ;
}


/*
 * scrollMessage:
 *********************************************************************************
 */

static const char *message =
  "                    "
  "Wiring Pi by Gordon Henderson. HTTP://WIRINGPI.COM/"
  "                    " ;

void scrollMessage (int line, int width)
{
  char buf [32] ;
  static int position = 0 ;
  static int timer = 0 ;

  if (millis () < timer)
    return ;

  timer = millis () + 200 ;

  strncpy (buf, &message [position], width) ;
  buf [width] = 0 ;
  lcdPosition (lcdHandle, 0, line) ;
  lcdPuts     (lcdHandle, buf) ;

  if (++position == (strlen (message) - width))
    position = 0 ;
}


/*
 * pingPong:
 *      Bounce a character - only on 4-line displays
 *********************************************************************************
 */

static void pingPong (int lcd, int cols)
{
  static int position = 0 ;
  static int dir      = 0 ;

  if (dir == 0)         // Setup
  {
    dir = 1 ;
    lcdPosition (lcdHandle, 0, 3) ;
    lcdPutchar  (lcdHandle, '*') ;
    return ;
  }

  lcdPosition (lcdHandle, position, 3) ;
  lcdPutchar (lcdHandle, ' ') ;
  position += dir ;

  if (position == cols)
  {
    dir = -1 ;
    --position ;
  }

  if (position < 0)
  {
    dir = 1 ;
    ++position ;
  }

  lcdPosition (lcdHandle, position, 3) ;
  lcdPutchar  (lcdHandle, '#') ;
}


/*
 * waitForEnter:
 *********************************************************************************
 */

static void waitForEnter (void)
{
  printf ("Press ENTER to continue: ") ;
  (void)fgetc (stdin) ;
}


/*
 * The works
 *********************************************************************************
 */

int main (int argc, char *argv[])
{
  int i ;
  int lcd ;
  int bits, rows, cols ;

  struct tm *t ;
  time_t tim ;

  char buf [32] ;

  if (argc != 4)
    return usage (argv [0]) ;

  printf ("Raspberry Pi LCD test\n") ;
  printf ("=====================\n") ;

  bits = atoi (argv [1]) ;
  cols = atoi (argv [2]) ;
  rows = atoi (argv [3]) ;

  if (!((rows == 1) || (rows == 2) || (rows == 4)))
  {
    fprintf (stderr, "%s: rows must be 1, 2 or 4\n", argv [0]) ;
    return EXIT_FAILURE ;
  }

  if (!((cols == 16) || (cols == 20)))
  {
    fprintf (stderr, "%s: cols must be 16 or 20\n", argv [0]) ;
    return EXIT_FAILURE ;
  }

  wiringPiSetup () ;

  if (bits == 4)
    lcdHandle = lcdInit (rows, cols, 4, 11,10, 0,1,2,3,0,0,0,0) ;
//  lcdHandle = lcdInit (rows, cols, 4, 11,10, 4,5,6,7,0,0,0,0) ;
  else
    lcdHandle = lcdInit (rows, cols, 8, 11,10, 0,1,2,3,4,5,6,7) ;

  if (lcdHandle < 0)
  {
    fprintf (stderr, "%s: lcdInit failed\n", argv [0]) ;
    return -1 ;
  }

  lcdPosition (lcdHandle, 0, 0) ; lcdPuts (lcdHandle, "Gordon Henderson") ;
  lcdPosition (lcdHandle, 0, 1) ; lcdPuts (lcdHandle, "  wiringpi.com  ") ;

  waitForEnter () ;

  if (rows > 1)
  {
    lcdPosition (lcdHandle, 0, 1) ; lcdPuts (lcdHandle, "  wiringpi.com  ") ;

    if (rows == 4)
    {
      lcdPosition (lcdHandle, 0, 2) ;
      for (i = 0 ; i < ((cols - 1) / 2) ; ++i)
        lcdPuts (lcdHandle, "=-") ;
      lcdPuts (lcdHandle, "=3") ;

      lcdPosition (lcdHandle, 0, 3) ;
      for (i = 0 ; i < ((cols - 1) / 2) ; ++i)
        lcdPuts (lcdHandle, "-=") ;
      lcdPuts (lcdHandle, "-4") ;
    }
  }

  waitForEnter () ;

  lcdCharDef  (lcdHandle, 2, newChar) ;

  lcdClear    (lcdHandle) ;
  lcdPosition (lcdHandle, 0, 0) ;
  lcdPuts     (lcdHandle, "User Char: ") ;
  lcdPutchar  (lcdHandle, 2) ;

  lcdCursor      (lcdHandle, TRUE) ;
  lcdCursorBlink (lcdHandle, TRUE) ;

  waitForEnter () ;

  lcdCursor      (lcdHandle, FALSE) ;
  lcdCursorBlink (lcdHandle, FALSE) ;
  lcdClear       (lcdHandle) ;

  for (;;)
  {
    scrollMessage (0, cols) ;

    if (rows == 1)
      continue ;

    tim = time (NULL) ;
    t = localtime (&tim) ;

    sprintf (buf, "%02d:%02d:%02d", t->tm_hour, t->tm_min, t->tm_sec) ;

    lcdPosition (lcdHandle, (cols - 8) / 2, 1) ;
    lcdPuts     (lcdHandle, buf) ;

    if (rows == 2)
      continue ;

    sprintf (buf, "%02d/%02d/%04d", t->tm_mday, t->tm_mon + 1, t->tm_year+1900) ;

    lcdPosition (lcdHandle, (cols - 10) / 2, 2) ;
    lcdPuts     (lcdHandle, buf) ;

    pingPong (lcd, cols) ;
  }

  return 0 ;
}

[링크 : https://webnautes.tistory.com/1111]

'embeded > raspberry pi' 카테고리의 다른 글

라즈베리 파이 카메라 케이블이 이상해  (0) 2020.03.15
라즈베리 프로젝트?  (0) 2020.03.14
미세먼지(웹 크롤링) 표시용 장치  (0) 2020.03.11
라즈베리 node.js gpio  (0) 2020.03.10
라즈베리 python gpio  (0) 2020.03.10
Posted by 구차니