리눅스를 이용해서 라즈베리파이에 웹서버 올리는 소스가 있을까요?

라즈베리파이에 LED연결해서 불들어오게 하려고 하는데...



답변 드립니다.



리눅스를 이용해서 라즈베리파이에 웹서버를 올리는 소스는 따로 없습니다.
직접 만든 웹서버 소스(또는 오픈 소스)를 가지고 있으시다면, ssh 통신이나 아니면 직접 시리얼을 통해 라즈베리 파이에 접근하여 서버를 구성하셔야 합니다.

php나 jsp를 사용하실 거라면 tomcat과 같은 서버를 설치하여 올리시면 되고
nodejs와 같은 경우엔 서버이기 때문에 그대로 사용 하시면 됩니다.

개인적으로 간단한 LED 불들어 오게 하는 정도로 구상 중이시라면 nodejs를 추천드립니다.
nodejs에서 제공하는 수많은 library중에 라즈베리파이의 gpio를 컨트롤(LED켜기) 하는 기능도 포함되어있기 때문에 쉽게 작업하실 수 있으실 거에요(검색해보시면 자료도 많고요)

또한 서버 구성을 하여 웹으로 LED제어 하도록 만드신 후 해야 할 일은 라즈베리파이가 재부팅 되었을 경우에 다시 웹서버가 실행 되어야 겠죠.
이를 위해선 리눅스의 기본 개념을 이해하셔야 하며, 간단히 방법만 알려 드리면 init.rd에 부팅 시 호출하고자 하는 시스템을 추가하시면 됩니다.


첫번째 알아볼 모듈은 어항의 물 온도를 측정하기 위한 방수형 온도센서이다.


필자가 구매한 센서는 DS18B20이다.


이 모듈을 사용하기 위해서는 DS18B20센서, 10k 저항, 빵판(브레드보드), 라즈베리파이가 필요하다.



구성은 다음과 같이 하면 된다.



(검정 빵판을 준비 했지만 사진빨을 잘 받지 못하여 노란 빵판으로 교체 하였다.)

빨간선은 DC선이며 3.3v에 연결해 주고,

노란선은 센서로부터 데이터를 받는 선이며 GPIO4번에 연결해 주면된다.

검정선은 ground이기 때문에 아무 GND에 연결해 줘도 상관없다.


주의할 점은 노란선과 빨간선 사이를 10k저항으로 연결해 줘야 한다.

보통 3.3v에는 4.7k~10k 옴의 저항을 사용하는데 집에 10k밖에 없었다.


회로 구성이 완료 되었으면 이제 라즈베리파이에 전원을 연결하도록 한다.

부팅이 완료 되고 /sys/bus/w1/devices/ 경로를 확인해 보면 28-xxxxxxxx로 시작하는 device가 하나 잡힌 것이 보인다.(원래는 없다. 믿을 수 없다면 센서를 뽑고 확인해 보도록 한다.)


이 방수형 온도센서는 device처럼 인식되기 때문에 연결만 하면 usb처럼 자동으로 인식이 된다.

그리고 이 센서는 디지털 신호로 데이터를 보내기 때문에 라즈베리파이에서 바로 사용가능하다.

아날로그로 신호를 보내는 온도센서를 구매했다면 별도의 ADC(analog to digital conversion) 장치가 필요하다.

라즈베리파이엔 analog신호를 받아서 digital로 변환해 줄 칩이 없기 때문이다.


다시 본론으로 들어가서 만약 /sys/bus/w1/devices 밑에 28-xxxxxx로 시작하는 device가 인식되지 않았다면

/boot/config.txt 파일을 열어 dtoverlay=w1-gpio 정보를 추가해 주자.


pi@raspberrypi ~ $ sudo vi /boot/config.txt


dtoverlay 항목을 찾아 보고 없으면 맨 아래쪽에 다음 정보를 추가.

dtoverlay=w1-gpio


재부팅을 한다.

pi@raspberrypi ~ $ sudo reboot


온도가 잘 나타나는지 확인해 보자. 

확인 방법은 /sys/bus/w1/devices 밑에 28-xxxxxxx 폴더로 들어가서 w1_slave 정보를 읽어 보면된다. 

(필자는 28-0215529be4ff라는 이름의 device가 잡혔다.)

pi@raspberrypi ~ $ cat /sys/bus/w1/devices/28-0215529be4ff/w1_slave
 50 01 80 80 1f ff 80 80 d2 : crc=d2 YES
 50 01 80 80 1f ff 80 80 d2 t=21000


아래 정보 중 t=21000이란 정보가 온도이다. 

실제로 사용하기 위해서는 1000으로 나눠서 사용하면 되겠다.


이제 온도 센서를 물에 담가서 온도 변화를 측정해 보면 온도가 변하는 것을 볼 수 있을 것이다.

근데 필자는 센서가 0.5도 단위로 변한다. (21000 => 21500)

원래 이런건가(?) 모르겠지만 변화는 잘 나타나니 우선은 넘어 가도록 하자.


다음 시간에는 nodejs에서 이 온도 센서를 가지고 실제 물의 온도를 측정 해 보도록 하겠다.



이제 어느 정도 세팅이 끝난 것 같으니 모듈을 하나하나 테스트 하며 라즈베리 파이에 붙여 보자.


그 전에! 

모듈을 테스트 하며 하나하나 구현 할지, 

아니면 서버를 먼저 구성 후 하나하나 살을 붙여 나갈지 고민에 고민을 거듭 하다가 서버를 먼저 구성해 놓고 모듈이 하나하나 완성되면 붙여 나가면서 진행하기로 결정했다.


1일차에 잠시 언급했던 대로 서버는 nodejs를 사용하도록 한다!

(머.. 중간에 한계점이 있다면 파이썬이나 C/C++로 변경 될 수 있으나, 그렇지 않길 바란다.)


라즈베리파이에 Node.js를 설치해 보자. 간단하다.


 login as : pi
 pi@192.168.0.10's password:
 pi@raspberrypi ~ $ sudo apt-get update
 pi@raspberrypi ~ $ sudo apt-get upgrade
 pi@raspberrypi ~ $ sudo apt-get install nodejs
 pi@raspberrypi ~ $ sudo apt-get install nodejs-legacy
 pi@raspberrypi ~ $ node -v
 v0.6.19


설치가 끝났다.아마 kernel 버전이 높으면 nodejs만 설치해도 될 것이다.(기억이 가물가물...)

필자의 kernel 버전은 3.18.5-v7+ 이며, uname -a 명령어를 통해 확인할 수 있다.


필자가 설치한 node 버전은 v0.6.19 !! (원하는 버전이 있으면 공식 홈페이지에서 직접 받아서 설치하여도 무방!)



---------------- 2015.11.27일 추가 내용 ----------------


10일차 작업 중에 nodejs package를 설치하는 과정에서 nodejs 버전이 너무 낮음에 일부 package를 설치할 수 없었다. 때문에 nodejs버전을 올리는 작업을 진행했다.

10일차에 다시 지우고 새로 설치하는 부분을 적으려 했지만 애초에 높은 버전으로 설치하는게 좋을 것 같아 이쪽 글을 수정하기로 하였다. (이미 설치했던 사람은 sudo apt-get purge nodejs npm후 진행하도록 하자)


아래와 같이 설치 한다.


 pi@raspberrypi ~ $ sudo apt-get update
 pi@raspberrypi ~ $ sudo apt-get upgrade
 pi@raspberrypi ~ $ curl -sL https://deb.nodesource.com/setup | sudo bash -
 pi@raspberrypi ~ $ sudo apt-get install nodejs
 pi@raspberrypi ~ $ node -v
 v0.10.40


0.6버전에서 0.10버전으로 올라갔다!!


-------------------------------------------------------



먼가 허무하지만 이제부터가 진짜다. 간단한 프로그래밍을 해보자.


pi@raspberrypi ~ $ mkdir -p server/was
pi@raspberrypi ~ $ cd server/was
pi@raspberrypi ~/server/was $ vi index.js


프로그래밍을 할 폴더를 만들고 index.js파일을 하나 만들어 아래와 같이 코딩한다.


console.log('Hello World!');


저장하고 나와서 실행해 보자.(vim, nano 등 본인이 편한 편집기를 사용하자, vi 사용법에 대한 자세한 내용은 생략한다.)


pi@raspberrypi ~ $ node index.js
 Hello World!


시작이 반이라고 했던가, Hello world를 찍었으니 반은 개발에 성공한 것이다!!



기본적이 세팅이 끝났다면 본격적으로 라즈베리파이를 가지고 이래 저래 요리해야 할텐데 매번 모니터를 연결하고 키보드/마우스를 연결하며 개발하기는 다소 불편할 수도 있다.


불편하지 않다면 그렇게 해도 되지만, 그렇지 않은 필자와 같은 사람을 위해 집에 있는 노트북이나 데스크톱으로 원격 접속하여 사용할 수 있는 환경을 만들어 보자.


시작 전 꼭 알아야 할 것은 6일차에서 진행한 wifi 연결을 하거나, 직접 LAN선을 꽂아 원격 접속하려고 하는 PC와 동일한 로컬 환경에 있어야 한다는 것이다. (같은 공유기에 접속 되어 있으면 된다.)


이제 라즈베리 파이에 ssh를 사용할 수 있도록 설정해 보자


5일차에서 보았던 raspi-config를 통해 간단히 설정할 수 있다.

번거롭지만 라즈베리파이와 모니터를 연결하여 아래와 같이 진행 해 보자



이제 라즈베리 파이에서 ssh server를 사용할 수 있도록 설정이 완료 되었다.

잠시 키보드와 모니터를 빼기 전에 아래와 같이 접속할 아이피를 알아두자!



필자와 같이 wifi로 접속한 경우는 "ifconfig wlan0" 명령어를 통해 조회하고,

LAN를 연결한 사람들은 "ifconfig eth0"로 조회할 수 있다.


앞으로는 별 문제가 없는 한 라즈베리파이에 키보드/마우스/모니터를 연결 할 필요가 없어졌다!


이제 PC로 와서 원격 접속을 해보자.

원격 접속을 위해 사용하는 대표적인 프로그램으로 putty가 있다. 이걸 사용해 보도록 한다.


putty는 http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html 에서 받을 수 있다.

그것도 귀찮은 사람은 아래 링크를 클릭하여 받도록 하자.


Window 64bit용 putty 설치 프로그램 받기


설치 후 실행하여 아래와 같이 접속해 보자.



이제 라즈베리파이에 전원만 연결하고 간편하게 프로그램을 즐기면 된다!


라즈베리파이에는 LAN port가 있어서 간단히 LAN선을 연결하여 인터넷을 사용할 수 있다.

하지만 차후 어항관리 시스템에 사용하기 위해 인터넷 통신도 무선을 채택하였다.


어차피 필요하기에 와이파이 설정부터 진행해 본다.

와이파이가 구지 필요 없다면 유선으로 진행해도 무관하다.


필자가 구매한 Wifi device는 ipTIME N100 mini wifi이다.


크기도 작고 가격도 저렴해서 선택하게 되었다.

라즈베리파이에 사용 전 당부 사항은 집에 무선 와이파이가 없는 사람은 따라하지 않기를 바란다.


이제 라즈베리파이에 사용해보자.

우선 wifi모듈은 라즈베리 USB에 꽂은 후 아래와 같이 명령어를 입력해 보자


$ lsusb


연결된 device 중 

ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter 

이러한 장치가 보일 것이다.

그렇다면 우선 인식은 잘 된 것이다.


무선랜 카드가 인식되었는지 확인하는 다른 방법은


$ ifconfig


를 입력하여 wlan0가 나타나면 문제없이 무선랜 연결 준비가 된 것이다.

무선랜이 인식이 안될 경우 재부팅을 하던 USB위치를 바꾸든.. 좀 더 노력해 보자..



마지막으로(벌써?) 와이파이를 잡기만 하면된다.


와이파이를 잡기 전에 잡을 와이파이를 검색해야 하는데 아래 명령어로 주변 와이파이 정보를 볼 수 있다.


$ sudo iwlist wlan0 scan


하지만 주변에 와이파이가 상당할 경우 보기가 힘들 수 있다.

이때는 핸드폰이나 다른 기기로 내가 사용할 와이파이 이름을 확인한 후 아래와 같이 검색해 보자.(대소문자 구분함)


$ sudo iwlist wlan0 scan | grep "사용할 와이파이 이름 일부분 ex)mygome"


검색한 정보의 ESSID를 사용하여 아래와 같이 입력해 준다.(관리자로 접속 후 진행)

라즈비안 설치 후 관리자 비밀번호를 설정 하지 않았다면 우선 관리자 비밀번호를 설정 후 진행하도록 하자.

관리자 비밀번호 설정 방법 : sudo passwd


$ su - 
(비밀번호 입력)
$ sudo wpa_passphrase "사용할 ESSID" wifi비밀번호 >> /etc/wpa_supplicant/wpa_supplicant.conf


잘 입력 되었는지 확인해 보자.


$ cat /etc/wpa_supplicant/wpa_supplicant.conf


입력한 값이 잘 등록 되었다면 아래 명령어를 통해 재부팅을 한다.


$ sudo reboot


재부팅 후 아래 명령어를 입력하여 인터넷 연결이 잘 되었나 확인한다.


$ ifconfig


wlan0에 ip가 할당 되었다면 정상적으로 인터넷이 연결된 것이다.



라즈베리파이 display는 3.5 inch LCD로 결정하였다.

사이즈도 딱 라이즈베리파이 사이즈 이고, 가격도 나쁘지 않은 것 같아 결정하게 되었다.




LCD를 연결하기 위해 아래 사이트를 참고하였다.

http://www.waveshare.com/wiki/3.5inch_RPi_LCD_(A)


실행 파일 하나로 3.2인치부터 5인치 Rpi용 LCD를 간편하게 설치할 수 있다.

우선 해당 사이트에서 driver를 받아 보려고 노력했지만 몇 십분동안에 걸쳐 결국 실패...


그래서 Github에 검색하여 다운로드 하였다.

필자와 같이 다운로드에 실패할 경우 https://github.com/Br3nda/LCD-Show 에서 받도록 하자.


압축을 해제 한 후 라즈베리파이로 옮겨 해당 폴더에서 아래 명령어만 입력해 주면 설치가 완료된다.


  $ sudo ./LCD35-show


설치 후 자동으로 재부팅이 되며 LCD에 화면이 나타남을 볼 수 있다.





라즈베리 파이를 처음 부팅하게 되면 다음과 같은 화면이 나타난다.

(혹 exit를 했을 경우 sudo raspi-config를 입력하면 다시 나타나게 된다.)




라즈베리 파이를 탈 없이 사용하기 위해 간단한 설정을 해야 한다.


1. Expand Filesystem

해당 메뉴는 말 그대로 파일시스템을 확장하는 메뉴이다. 라즈비안 설치 후 Expand Filesystem를 해야 micro SDcard의 용량을 온전히 사용할 수 있다. 필수! (재부팅 시부터 적용 됨은 알아두자.)


2. Change User Password

처음 라즈비안을 설치하면 pi라는 유저가 생성되며, 해당 비밀번호는 raspberry 이다. 해당 메뉴를 통해 비밀번호를 변경 해 줄 수 있다.


3. Enable Boot to Desktop/Scratch

부팅(검정화면에 흰글씨) 후 GUI(그래픽 화면)로 실행할지 콘솔(DOS형태)로 실행할지 선택하는 메뉴이다.

콘솔형태로 실행하더라도 startx 명령어를 통해 그래픽 화면으로 전환할 수 있다.


4. Internationalisation Options

언어, 지역, 키보드 설정을 할 수 있는 메뉴이다. 나의 생각엔 이 부분이 제일중요하다!

중요하기 때문에 이 부분은 자세히 설명하도록 하겠다.


해당 메뉴를 선택하면 아래와 같이 3가지 메뉴가 나타난다.



4-1. Change Locale

언어를 설정하는 메뉴이다. 원하는 언어를 선택해 주면 되는데 UTF-8형식으로 선택해 주면 된다.

필자는 en_US.UTF-8 UTF-8, ko_KR.UTF-8 UTF-8 두가지를 선택하였으며, 기본 언어는 en_US.UTF-8 UTF-8로 설정하였다.


4-2. Change Timezone

지역을 선택하여 해당 지역의 시간을 로컬 시간 정보로 사용하는 메뉴이다. 

Asia 선택 후 Seoul를 선택해 주면된다.


4-3. Change Keyboard Layout

키보드 설정을 하는 메뉴이다. 

일반적인 키보드라면 아래 순으로 선택하면 된다.

  Generic 105 key (Intl) PC 

  Other

  Korean

  Korean - Korean (101/104 key compatibale)

  The default for the keyboard layout

  No compose key

순으로 선택하면 마지막에 컨트롤+알트+백스페이스 키로 x-server를 사용할꺼냐는 질문을 하는데 이는 GUI(그래픽)화면에서 컨트롤+알트+백스페이스키를 통해 다시 콘솔 화면으로 넘어오는 기능이다.

필자는 이 기능을 사용하기 위해 Yes를 눌렀다.


이렇게 Internationalisation Options에 대해 알아 보았다.


그 외 나머지 기능에 대해서도 간단히 알아보면,


5. Enable Camera

카메라 모듈 연결 후 이걸 Enable해야 사용할 수 있다.


6. Add to Rastrack

사용해 보지는 않았지만 rastrack.co.uk 사이트를 통해 라즈베리파이 사용자의 분포를 볼수 있는 설정이라고 한다.

사용자명이나 메일정보를 입력하여 설정할 수 있다.


7. Overclock

CPU에 오버클럭을 설정하는 메뉴이다. 처리속도 향상을 위해 사용할 수는 있지만 CPU에 무리가 갈 수 있기 때문에 특별한 경우가 아니라면 기본설정으로 하는게 좋다.


8. Advanced Options

그 밖의 옵션들이며, 해당 메뉴에서는 SSH 사용설정 SPI설정 등을 할 수 있다.


Raspi-Config 설정에 대해 알아 보았다.

이 다음부터는 라즈베리파이에 모듈을 하나씩 연결해 보려고 한다.



어항관리 시스템으로 사용할 보드는 라즈베리파이2 B model이다.




OS부터 설치해보자.

OS설치를 위해 필요한 것들은,

  -. Raspberry pi 2 B

  -. 8기가 이상의 micro SDcard (micro SDcard USB리더기)

  -. 보드 전원(5V 1A이상)

  -. USB 키보드

  -. HDMI 모니터

정도가 필요하겠다.


OS는 https://www.raspberrypi.org/downloads/raspbian/ 에 접속하여 RASPBIAN WHEEZY로 다운 받는다.

NOOBS를 받아서 설치해도 되지만 난 간편한게 좋으니까...


RASPBIAN 이미지를 다운 받는 동안 micro SDcard를 포멧해본다.

본인은 SD Formatter 4.0라는 프로그램을 사용하였고, 

https://www.sdcard.org/downloads/formatter_4/eula_windows/index.html에서 다운 받아서 사용하였다.


사용방법은,

  -. 프로그램 설치 후 실행

  -. 컴퓨터에 Micro SD card 꽂고 프로그램에서 device를 잡기 

  -. refresh 버튼을 눌러 정보를 확인하고 맞으면 Volume Label를 입력 

  -. Format Option은 FORMAT TYPE : FULL(Erase) / FORMAT SIZE ADJUSTMENT : OFF 

  -. 설정 후 Format 진행

정도로 하면 되겠다.


이제 RASPBIAN 이미지가 거의 다 받아 졌을테니 부팅용 micro SDcard로 만들어 보자.

이미지 파일을 micro SDcard에 쓰기위해 본인은 Win32 Disk Imager라는 프로그램을 사용하였고,

http://sourceforge.net/projects/win32diskimager/에서 다운 받아서 사용하였다.


사용방법은,

  -. 프로그램 설치 후 관리자 권한으로 프로그램 실행

  -. 컴퓨터에 Micro SD card를 꽂고 프로그램에서 device를 잡기

  -. Image File에 아까 받은 RASPBIAN 이미지를 선택

  -. 이미지 Write 진행

정도로 하면 되겠다.


이제 완성된 부팅 SDcard를 라즈베리파이 보드에 꽂고 모니터, 키보드를 연결 후 5V 아답터를 꽂아 부팅해 보자.

부팅 시 검정 화면 상단에 라즈베리파이 로고가 뜨고, 흰 글씨가 쏟아 지면 정상적으로 부팅 SDcard가 만들어 진 것이다.


부팅이 끝나면 파란색 바탕의 설정 화면이 나오게 된다.

기본 설정은 4일차에서 알아보자.


어항이라는게 세팅만 한다고 바로 생물을 넣을 수 없다.

왜냐하면 어항이 실제 자연과 같은 환경으로 자리 잡혀야 되는데 이를 여과 사이클을 맞춘다고도 하고 보통 물잡이라고 한다.

물잡이는 보통 담수는 적어도 2~3주 이상, 해수는 적어도 1~2달 이상을 해야 어느정도 잡히게 된다.

(물잡이 기간은 나의 지극히 주관적인 생각이며, 나의 물생활 경험에서 나온 것이기 때문에 태클은 거부한다.)


어항 세팅은 위에도 잠깐 말했지만 크게 2가지로 나뉘는데, 담수와 해수.. 그중 내가 세팅 할 어항은 해수 어항이다.

물잡는대 한달이상 걸리기 때문에 미리 세팅을 해 놓고 다른 개발 작업을 진행하는게 좋겠다고 생각하여 바로 어항 세팅을 해본다.


테스트 어항이기 떄문에 어항 크기는 소박하게 1자 큐브(300x300x300) 수조로 한다.

해수는 보통 외부 여과 방식을 많이 선택하지만 비용 절감과 깔끔한 수조 세팅을 위해 저면으로 결정했다.


어항 세팅을 위한 구매 목록을 알아 보자.(젤 중요해서 크게 써본다)

켈란 디아망 30큐브(35000원)

산호사 2~3mm(4500원*3개)

세라 시포락스 1L벌크포장(10000원)

라이브락 1kg(13000원)

펜플렉스 저면판 CFU-10(8000원)

다이맥스 미니스키머(28000원)

역류방지기(1000원*2개)

에어호스 1M(200*2개)

협신 히터 75w(11000원)

아마존 2구 에어펌프 기포기(10000원)

필그린 수중 펌프 AT-005(6000원)

나노 보충수통 2L(25000원)

블루 트레슈어 해수염 1.1kg(6000원)

멀티탭 5구(4500원)



구매 목록의 자세한 사진은 생략한다. 

(각 항목별 가격은 사이트별 시기별로 다소 차이가 있을 수 있으니 태클은 거부한다. 알아서 저렴한 곳에서 구매하길)

해수는 작은데도 초기 비용이 많이 든다. 그리고 해수는 경험이 없다면 다소 어려울 수 있다. 

물생활 경험이 없다면 총알을 생각해서라도 담수에 먼저 도전해 보자!


세팅하기 힘들어서 중간중간 사진은 못 찍었다.. 결과 사진만 보자 (중요한건 사진도 잘 못찍는다.)



구매목록에 없던 조명이 갑자기 생겨난 것은 은 우선 집에 굴러 다니는 작은 LED조명을 세팅했기 때문이다..

하지만 조만간 자작할 것이다. 

오늘은 여기까지한다.

예전부터 하고싶었고, 하고자 했었던 어항관리 시스템을 드디어 시작한다...

바쁘다는 핑계도 있었지만 가장 큰건 귀찮아서가 아니었을까...

우선 설계 초안부터 작성한다.

말이 설계 초안이지 우선 머리속에 있는 것들을 정리해 보았다.



FBMS Workflow Rev 0.1


Raspbbery Pi 2 기반

1. Sensor

  -. 온도

  -. 수위

  -. 염도


2. Display

  -. LCD


3. Relay Module

  -. 히터

  -. LED


4. Camera

  -. Stream server


5. DB (MySQL)

  -. 계정관리

  -. 히스토리 관리(설정, 접속, 시스템 상태)

  -. 컨트롤 설정


6. Process Server (Backend)

  -. Node.js + Express.js


7. Control Server (Frontend)

  -. 웹앱 UI (HTML5 + CSS3 + Jade)




되는대로 천천히 해볼 생각이다...



+ Recent posts