2023.11.02 TIL
특별한 용도에 맞게 다각도로 최적화된 시스템
CPU, Graphic Card, Keyboard 등 hardware를 잘 운영하는 체제 = Program = Application
영국에서 만들어진 embedded system board(computer)
https://www.raspberrypi.com/software/
진짜 이거때문에 토할뻔함 3일동안 30년늙은듯
- 모니터가 없어서 RPi IP주소 알아내려고 집 공유기에 LAN연결해서 U+ 공유기 관리자 페이지 뒤짐
- IP 찾은것같긴 한데 ssh 안돼서 한참 구글링
ssh
파일,wpa_supplicant.conf
파일 생성하고 내용 수정- 그래도 안됨 내용 구글링해서 사람들마다 설정한게 달라가지고 조금씩 다시 수정해보고 부팅 계속 다시해봐도 안됨
- 결국 HDMI로 집 TV에 연결.. 그러나 화면 안나옴 줄무늬만나옴
- 그래서 HDMI 화면 설정하는거 구글링해서
config.txt
파일 수정해보고 이것도 역시 구글링해서 나오는 설정들 다 달라서 다 해보고 부팅해보고 100번함- 그래도 안됨 이 시점에 TV는 포기함
- 근데 슬랙에 어떤 분께서 RPi Imager로 OS 설치하면서 ssh와 네트워크 설정을 할 수 있다고 알려주셔서 해봄 이때 굉장히 희망적이었음
- OS 처음부터 다시 설치함
- wlan0 무선연결이 안됨. 설치할때 wifi이름이랑 비밀번호 입력했지만 아무리 부팅하고
sudo iwlist wlan0 scan
해보고sudo wpa_passphrase
도 해보고netstat -nr
로 Gateway 확인도 해보고sudo config
해서 국가변경 시간대변경도 해보고sudo vi /etc/dhcpcd.conf
도 해보고 내용 수정해보고reboot
100번했는데 안됨.- 그냥 다때려치려했는데 마지막으로 OS 재설치 한번 더 해봄
- 공유기 관리자 페이지에 여전히 무선 DHCP는 뜨지않음
- ...! 그런데 이때! 몇분이 지나니까 연결 로그가 뜨게 된다..
이걸 본 순간은... 절대 잊을 수 없다......
wlan0도 나온다 너무 감격해서 울뻔했다
RPi Imager에서 OS 설치할때 아마 네트워크는 KR로, 지역은 Europe, London으로 했던것같다. 근데 이거때문에 안됐던거였을까 설마..
General Purpose Input/Output
Raspberry Pi에게/로부터 입력/출력이 가능한 인터페이스
Raspberry에 입력을 하거나, 입력을 받을 수 있는 pin인데, 우리가 programming 할수있는 pin!
Power : Raspberry Pi 로부터 받는 전원
Ground : 다른 전위들의 기준이 되는 전위. 0v를 가르쳐주는 pin. 땅쪽에 연결…?
GPIO
→ 파란색, 빨간색 : 전기가 가로로 흐름
→ 초록색 : 전기가 세로로 흐름
Python의 패키지 관리 툴
라즈베리파이 GPIO를 위한 Python Library
pi@raspberrypi:~workspace/python $ pip3 install RPi.GPIO
vi led.py
→ Python 코드 작성
import RPi.GPIO as rg
import time
그 다음 python3 led.py 실행해보기 → 아무 에러도 안뜬다면 성공!
import RPi.GPIO as rg
import time
rg.setmode(rg.BCM) # BCM 모드로 pin 넘버링을 하겠다
ledPlusPin = 27 # 27번 pin에 LED 긴 다리 연결했으니까
rg.setup(ledPlusPin, rg.OUT) # 27번 pin에 뭐할건지 미리 말해줌 : 출력을 하겠다
try:
while True:
rg.output(ledPlusPin, rg.LOW) # ledPlusPin 한테 rg.LOW를 출력해준다 : 끈다(LOW)
time.sleep(1) # 1초 쉰다
rg.output(ledPlusPin, rg.HIGH) # ledPlusPin 한테 rg.HIGH를 출력해준다 : 켠다(HIGH)
time.sleep(1) # 1초 쉰다
except KeyboardInterrupt: # control+C 누르면
rg.cleanup() # 종료 : pinmap 상태를 청소해주고 종료한다
라즈베리파이 GPIO를 위한 C Library
sudo apt-get install git
makedir -p /home/pi/workspace/c
cd /home/pi/workspace/c
git clone https://github.com/WiringPi/WiringPi
cd WiringPi
./build
vi led.c
→ C 코드 작성
#include <stdio.h>
#include <wiringPi.h>
int main() {
return 0;
}
gcc -o led lec.c -lwiringPi
→ 아무 에러가 없다면 성공
#include <stdio.h>
#include <wiringPi.h>
int main() {
if(wiringPiSetup() == -1) // 라이브러리와 연결이 잘 되었나 확인
return -1; // 문제가 있으면 -1 리턴
pinMode(2, OUTPUT); // 왜 27이 아닌 2인가? BCM 27은 wPi 2 이다. (Python 27, C 2)
for(;;) {
digitalWrite(2, 0); // 2번 pin에 0 출력
delay(1000); // time sleep
digitalWrite(2, 1); // 2번 pin에 1 출력
delay(1000); // time sleep
}
return 0;
}
gpio readall
→ 각 모드별로 pin번호 목록 출력
import RPi.GPIO as rg
import time
rg.setmode(rg.BCM) # BCM 모드로 pin 넘버링을 하겠다
ledPlusPin1 = 27
ledPlusPin2 = 22
rg.setup(ledPlusPin1, rg.OUT) # 27번 pin에 뭐할건지 미리 말해줌 : 출력을 하겠다
rg.setup(ledPlusPin2, rg.OUT)
try:
while True:
rg.output(ledPlusPin1, rg.LOW) # ledPlusPin 한테 rg.LOW를 출력해준다 : 끈다(LOW)
rg.output(ledPlusPin2, rg.LOW)
time.sleep(1) # 1초 쉰다
rg.output(ledPlusPin1, rg.HIGH) # ledPlusPin 한테 rg.HIGH를 출력해준다 : 켠다(HIGH)
rg.output(ledPlusPin2, rg.HIGH)
time.sleep(1) # 1초 쉰다
except KeyboardInterrupt: # control+C 누르면
rg.cleanup() # 종료 : pinmap 상태를 청소해주고 종료한다