글
9. 시리얼통신-라즈베리 통신하기-후에 블루투스로 통신
참고1 .http://embejide.tistory.com/40 (http://cafe.naver.com/pipc/2169)
http://blog.naver.com/kimyosep0331/140194362360
참고2. http://cafe.naver.com/openrt/484
1. 일단 /boot/cmdline.txt 파일 백업하고 sudo cp cmdline.txt cmdline_backup.txt 를 입력 해서 원본을 복사한다.
~로 시작하는건 일종의 C드라이브 개념이고. "cd /"를 해야 더 상위인 root에 갈 수 있다.
2. 참고1 블로그에 있는 것처럼 cmdline.txt 내용을 지우면...
이상하게 에러가 난다.
원인은 read only이기 때문! 설정을 바꿔주기 위해 모드를 변경한다.
ls -al로 전체 파일 조건을 보고
sudo chmod 777 로 모든 권한을 조정한다.
그리고 텍스트파일 켜서
삭제. (출처 참고1).
3. 이제 cd .. -> etc경로 -> inittab파일을 수정한다.
맨 아래줄에 T0:23raspawn:/sbin/getty -L ttyAMA0 115200 vt100 이라고 적혀있는놈을 주석처리해준다.
저장하고 sudo reboot 명령어를 사용해서 라즈베리파이를 재부팅해준다.
#이 주석... (출처 참고1).
4. 자 이제 wiringPi/examples 폴더로 이동해서 make serialTest를 입력하고 serialTest를 컴파일한다. 컴파일을 완료하고 GPIO핀을 아래 그림처럼 연결하면 하드웨어도 준비 끝이다. 일단 루프백테스트를 하기위함이다. 루프백테스트는 rx핀과 tx핀을 연결하고 데이터를 보내고 읽는 테스트다. 즉 자기자신한테 데이터를 보내고 받는것이다.
(출처 참고1).
sudo ./serialTest 를 입력해서 확인해본다.
serialTest.c 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | #include <stdio.h> #include <string.h> #include <errno.h> #include <wiringPi.h> #include <wiringSerial.h> int main () { int fd ; //시리얼 통신 확인 변수 int count ; unsigned int nextTime ; if ((fd = serialOpen ("/dev/ttyAMA0", 115200)) < 0) // 두번째 인자값이 보레이트 설정 { // fd가 -1이면 아래 처럼 unable 나온다. fprintf (stderr, "Unable to open serial device: %s\n", strerror (errno)) ; return 1 ; } if (wiringPiSetup () == -1) { fprintf (stdout, "Unable to start wiringPi: %s\n", strerror (errno)) ; return 1 ; } nextTime = millis () + 300 ; // millis() 함수는 값이 일정하게 증가하는 함수 for (count = 0 ; count < 256 ; ) // { if (millis () > nextTime) { printf ("\nOut: %d: ", count) ; fflush (stdout) ; //뭐하는 변수인지... fflush serialPutchar (fd, count) ; // 데이터 전송해주는 함수, count 값이 TX로 가나보다. nextTime += 300 ; //delay 역할? ++count ; } delay (3) ; while (serialDataAvail (fd)) // DataAvail은 Rx에 신호가 있을 때 실행됨. { printf (" -> %3d", serialGetchar (fd)) ; // 데이터 받는 함수 fflush (stdout) ; } } printf ("\n") ; return 0 ; } |
코드를 분석해보자!
26번줄의 millis() 함수는 어느 값에서 부터 일정하게 조금씩 증가하는 함수로 판명되었다.
30~37번의 if문을 보면 millis()가 netxTime보다 커야 하는데 이것은 처음부터 불가능하므로 millis()함수가 일정하게 증가하는 것으로 볼 수 있고 이것이 +next값을 넘을 때마다 if문이 실행되는 것을 알 수있다. 또 +next가 되고 그것이 또 커지면 if문 실행.
41~46번줄의 serialDataAvail 함수는 RX에 입력이 있을 때 1을 출력하는 함수로 판명되었다. 그래서 while문이 실행된거지. 확인을 위해 int a=0;을 선언하고 아래와 같이 코드를 작성.
결과는 아래처럼 나온다.
5. 이제 실행해보면! TX -> RX 출력이 보인다.
'●프로젝트와 세미나 > Raspberry pi' 카테고리의 다른 글
8-2. PWM 서보모터 DC등을 제어 위해 여러개 핀에 PWM 줘서 제대로 나오는지 확인하기. (0) | 2013.08.23 |
---|---|
10. 시리얼 통신 헤더파일(wiringSerial.h) 분석. 인터럽트처럼 동작할 수 있게 코드변환. (2) | 2013.08.22 |
8. PWM 이용한 서보모터 제어. (1) | 2013.08.17 |
7.wiringPi를 이용한 PWM 실험. (2) | 2013.08.17 |
6. 지갑잃어버림, 노트북 무선랜카드 망가진듯... (0) | 2013.08.16 |