질문게시판 > PIC 블루투스 연결

TODAY109 TOTAL2,325,766
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | 질문게시판 | PIC 블루투스 연결

페이지 정보

작성자 픽공부 작성일2022-08-09 10:28 조회1,869회 댓글19건

본문

	

#include <SoftwareSerial.h>

SoftwareSerial BTSerial(3, 2); //Connect HC-06 TX,RX

void setup() 
{
  Serial.begin(9600); //PC와 연결

  BTSerial.begin(9600);//블루투스 연결
}

void loop()
{
  /*
    블루투스 신호 -> PC 시리얼모니터로
    PC 시리얼모니터 -> 블루투스로
  */
  if (BTSerial.available())
    Serial.write(BTSerial.read());
  if (Serial.available())
    BTSerial.write(Serial.read());
}  

 

아두이노 초기 블루투스 연결 코드 입니다.

// 마스터

#include <xc.h>

#include <stdio.h>

#define _XTAL_FREQ 20000000



void port_initial(void)    

{             

    TRISCbits.RC6 = 0; 

    TRISCbits.RC7 = 1; 

    

    TRISD = 0x00;

    PORTD = 0x00;

}


void UART_initial(void)    

{

    SPBRG = 129;  // 

    

    TXSTAbits.TX9 = 0; 

    TXSTAbits.TXEN = 1;  

    TXSTAbits.SYNC = 0;  

    TXSTAbits.BRGH = 1;   

    TXSTAbits.TRMT = 0; 

      

    RCSTAbits.SPEN = 1;  

    RCSTAbits.RX9 = 0;  

    RCSTAbits.CREN = 1;  

    

    PIE1bits.RCIE = 1; 

    PIE1bits.TXIE = 1;  

    PIR1bits.RCIF = 0;  

    PIR1bits.TXIF = 0;  

    

    INTCONbits.PEIE = 1;

    INTCONbits.GIE = 1;

    void uart_putch(unsigned char data) 

    {

        TXREG = 5;  

                     .

        while(!PIR1bits.TXIF); 

        while(!TXSTAbits.TRMT);  

        PORTD = 0x80;

        __delay_ms(100);

    }


    

    void main()  

    {   

     port_initial();  

     UART_initial();

            

    while(1)

    { 

       uart_putch();

       PORTD = 0x00;

         

    }    

    } 

// 슬레이브

#include <xc.h>

#include <stdio.h>

#define _XTAL_FREQ 20000000


char c;


void port_initial(void)    

{             

    TRISCbits.RC6 = 0; 

    TRISCbits.RC7 = 1; 

    

    TRISD = 0x00;

    PORTD = 0x00;

}


void UART_initial(void)    

{

    SPBRG = 129;  

    

    TXSTAbits.TX9 = 0; 

    TXSTAbits.TXEN = 1;  

    TXSTAbits.SYNC = 0;  

    TXSTAbits.BRGH = 1;   

    TXSTAbits.TRMT = 0;

      

    RCSTAbits.SPEN = 1;  

    RCSTAbits.RX9 = 0;   

    RCSTAbits.CREN = 1;  

    

    PIE1bits.RCIE = 1;  

    PIE1bits.TXIE = 1;  

    PIR1bits.RCIF = 0; 

    PIR1bits.TXIF = 0;  

    

    INTCONbits.PEIE = 1;

    INTCONbits.GIE = 1;

}


unsigned char uart_getch(void)  

    {

        while(!PIR1bits.RCIF);  

        PIR1bits.RCIF = 0;     

        c=RCREG;        

    }

void uart_puts()

{

    if(c=='5')

    {

        PORTD = 0x80;

    }

}

    

void main(void)

{

  port_initial();

  UART_initial();

  

  c=0;

  

  while(1)

  {

      uart_getch();

      uart_puts();

      __delay_ms(100);

      PORTD = 0x00;

     

  }

  

 

}

여기서 블루투스 데어터 값을 읽어와서 블루투스 모듈간의 페어링을 하려고 하는데 어려움을 느끼고 있습니다.

도움 한 번 주실 수 있을까요?

  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글 19

조회수 1,869

master님의 댓글

master 작성일

PIC 시리얼 통신 예제를 찾아서 공부하세요
PIC은 사용하지 않으므로 예제를 찾아오셔야지 도움을 드릴 수 있습니다.

픽공부님의 댓글

픽공부 작성일

저 코드 상에서 어떻게 페어링이 되는 지 알 수 있을까요 ?

master님의 댓글

master 작성일

#include <SoftwareSerial.h>
SoftwareSerial BTSerial(3, 2); //Connect HC-06 TX,RX
void setup(){
  Serial.begin(9600); //PC와 연결
  BTSerial.begin(9600);//블루투스 연결
}
void loop(){
  if (BTSerial.available())Serial.write(BTSerial.read());
  if (Serial.available())BTSerial.write(Serial.read());

이 아두이노 코드는
시리얼포트 2개를 준비하고
루프 함수에서는 두개의 시리얼에서 데이터가 수신되면 다른 시리얼포트로 전달 해주는 역할만 합니다.

블루투스를 페어링 할 수 있도록 블루투스 설정하는 역할만 합니다.
설정은 시리얼모니터에서 사람이 AT 컴맨드를 입력해서 설정합니다.

master님의 댓글

master 작성일

아두이노로 설정을 했다고 가정해보죠
블루투스 설정을 마치고나면
슬레이브 블루투스가 마스터불루투스를 찾게되고 설정이 맞으면 연결이 됩니다.(페어링)
페어링은 mcu없이 블루트스끼리 알아서 합니다.(설정이 맞지 않으면 페어링이 되지 않겠죠)

master님의 댓글

master 작성일

페어링이 된 상태에서는 유선이 연결 된 것처럼 두 개의 mcu가 시리얼 통신을 할 수 있게 됩니다.

master님의 댓글

master 작성일

PIC 코드를 보면
마스터라고 적은 코드에서는 정수 5를 전송하고 있고
슬레이브라고 적은 코드에서는 문자'5'를 체크하고 있습니다.
정수5를 보내고 문자'5'를 체크하고 있으니 제대로 동작하지 않습니다.

PIC 코드에서 마스터 슬레이브라는 표현은 맞지 않으며
송신, 수신으로 적는 것이 낫겠죠

master님의 댓글

master 작성일

//--------------------------------송신
#include <xc.h>
#include <stdio.h>
#define _XTAL_FREQ 20000000
//
void UART_initial(void){
  SPBRG=129;
  TXSTAbits.TX9=0;
  TXSTAbits.TXEN=1; 
  TXSTAbits.SYNC=0; 
  TXSTAbits.BRGH=1; 
  TXSTAbits.TRMT=0;
  RCSTAbits.SPEN=1; 
  RCSTAbits.RX9=0; 
  RCSTAbits.CREN=1; 
  PIE1bits.RCIE=1;
  PIE1bits.TXIE=1; 
  PIR1bits.RCIF=0; 
  PIR1bits.TXIF=0; 
  INTCONbits.PEIE=1;
  INTCONbits.GIE=1;
}
//
unsigned char uart_getch(void){
  while(!PIR1bits.RCIF); 
  PIR1bits.RCIF=0; 
  return RCREG;
}
//
void uart_putch(unsigned char data){
  TXREG=data; 
  while(!PIR1bits.TXIF);
  while(!TXSTAbits.TRMT); 
}
//
void main(){ 
  TRISD=0x00;      PORTD=0x00;
  TRISCbits.RC6=0; TRISCbits.RC7=1;
  UART_initial();
  while(1){
    uart_putch('5');
    PORTD=0x80; __delay_ms(100); PORTD=0x00; __delay_ms(100);
  } 
}
//--------------------------------수신
#include <xc.h>
#include <stdio.h>
#define _XTAL_FREQ 20000000
//
char c=0;
//
void UART_initial(void){
  SPBRG=129; 
  TXSTAbits.TX9=0;
  TXSTAbits.TXEN=1; 
  TXSTAbits.SYNC=0; 
  TXSTAbits.BRGH=1; 
  TXSTAbits.TRMT=0;
  RCSTAbits.SPEN=1; 
  RCSTAbits.RX9=0; 
  RCSTAbits.CREN=1; 
  PIE1bits.RCIE=1; 
  PIE1bits.TXIE=1; 
  PIR1bits.RCIF=0;
  PIR1bits.TXIF=0; 
  INTCONbits.PEIE=1;
  INTCONbits.GIE=1;
}
//
unsigned char uart_getch(void){
  while(!PIR1bits.RCIF); 
  PIR1bits.RCIF=0; 
  return RCREG;
}
//
void uart_putch(unsigned char data){
  TXREG=data; 
  while(!PIR1bits.TXIF);
  while(!TXSTAbits.TRMT); 
}
//
void main(void){
  TRISD=0x00;      PORTD=0x00;
  TRISCbits.RC6=0; TRISCbits.RC7=1;
  UART_initial();
  while(1){
    c=uart_getch();
    if(c=='5')PORTD=0x80;
    else      PORTD=0x00;
  }
}
200ms 주기로 문자'5'를 보내고 문자'5'를 체크합니다.
PIC은 사용하지 않으니 오류가 포함될 수 있으며
대충 눈에 띄는 부분만 수정 해드렸습니다.

픽공부님의 댓글

픽공부 작성일

#include <SoftwareSerial.h>
SoftwareSerial BTSerial(3, 2); //Connect HC-06 TX,RX
void setup(){
  Serial.begin(9600); //PC와 연결
  BTSerial.begin(9600);//블루투스 연결
}
void loop(){
  if (BTSerial.available())Serial.write(BTSerial.read());
  if (Serial.available())BTSerial.write(Serial.read());
}
그러면 이 아두이노 블루투스 설정 코드를 위에 PIC MCU의 언어로 바꿔서 블루투스 설정을 하려고 하면 어떻게 해야 할까요 ?(AT Command는 사용 할 수 있습니다.)

master님의 댓글

master 댓글의 댓글 작성일

아두이노는 하드웨어 시리얼 1개와 소프트웨어 시리얼 1개를 추가해서 모두 2개의 시리얼포트가 있습니다.
사용중인 PIC에는 시리얼이 2개 있나요?
현재 코드에는 한 개만 보입니다.

픽공부님의 댓글

픽공부 작성일

PIC MCU 2대를 사용해서 블루투스 모듈 간의 무선 통신을 하려고 합니다.
그렇게 하기 위해 블루투스 초기 설정을 하려고 하는데 어려움을 느끼고 있습니다.
(시리얼 프로그램은 허큘레스를 이용해서 at command 사용은 할 수 있습니다.)

master님의 댓글

master 댓글의 댓글 작성일

mcu에 시리얼이 1개만 있으면 불가능합니다.
시리얼모니터(PC)에도 연결해야 하고, 블루투스에도 연결 해야 하기 때문이죠

더 쉬운 방법을 알려드리죠
USB-to-UART 모듈을 하나 구입하세요
https://www.devicemart.co.kr/goods/view?no=1324904
저렴한 중국산 모듈입니다.
여기에 블루투스를 연결 한 후에 테라텀이나 허큘레스 같은 시리얼모니터 프로그램으로 설정하면 됩니다.

픽공부님의 댓글

픽공부 작성일

혹시 제가 위에 말씀을 제대로 이해하지 못해서 조금만 더 자세하게 알려주실 수 있을까요 ?

픽공부님의 댓글

픽공부 작성일

PIC MCU에 RS_232를 연결해서 사용하고 있습니다.

master님의 댓글

master 댓글의 댓글 작성일

mcu를 빼고 블루투스를 연결하세요

픽공부님의 댓글

픽공부 작성일

넵 답변 감사합니다 !!
도움이 많이 되었습니다. 궁금한 점 있을 시 다시 질문 드리겠습니다 !! 감사합니다 ~

픽공부님의 댓글

픽공부 작성일

USB-to-UART 모듈
https://www.devicemart.co.kr/goods/view?no=1324904

그러면 이 모듈을 사용하면 PIC이랑 블루투스 모듈간 Tx,Rx핀을 교차해서 회로 구성 후 통신(페어링)을 할 수 있는 건가요 ?

master님의 댓글

master 댓글의 댓글 작성일

마스터 및 슬레이브 설정을 제대로 하면 (블루투스무선)연결이 될테고요
이 것을 페어링이라고 부릅니다.

PIC은 5V이고 블루투스 모듈은 3.3V 인 경우
https://cafe.naver.com/circuitsmanual/176860
PIC의 TX핀이 5V라서 저항 두개 사용해서 전압분배 해주는 것이 정상적인 회로입니다.

픽공부님의 댓글

픽공부 작성일

넵 정말 감사합니다 !!

픽공부님의 댓글

픽공부 작성일

그러면 회로 구성을 PIC의 Tx,Rx핀과 블루투스 모듈의 Tx,Rx핀을  Tx - Rx, Rx - Tx  서로 교차해서 연결하고
PL2303Hx 모듈의 Tx,Rx 핀을 어느 핀에 연결해야 되는지 알 수 있을까요 ?

질문게시판HOME > 질문게시판 목록

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은 질문게시판에서만 작성 가능합니다. 스태프 19-01-15 13349
공지 사이트 이용 안내댓글[26] master 17-10-29 31751
질문 피에조 부저 일시정지 질문입니다. 새글 Tell 22-10-01 6
질문 아두이노 DC, 서보, 스텝모터 동시 제어가 가능할까요?댓글[1] 새글 jundorio8 22-10-01 18
질문 아두이노 신호등led 스위치 버튼 누를때마다 빨강-노랑-초록 변환댓글[1] 새글 고고라네 22-09-30 19
질문 이산화탄소 감지 및 창문 자동 개방 아두이노 코드 질문 새글 남폴스전 22-09-30 18
답변 답변글 답변 : 이산화탄소 감지 및 창문 자동 개방 아두이노 코드 질문 새글 master 22-09-30 10
질문 코드비전 atmega128 led 점등 질문입니다. 후뉴 22-09-30 19
질문 아두이노 수위센서의 입력신호에 따른 서보모터 제어 소스 shon 22-09-29 13
답변 답변글 답변 : 아두이노 수위센서의 입력신호에 따른 서보모터 제어 소스 새글 master 22-09-30 14
질문 아두이노 스위치 하나로 led 변화댓글[1] 제비 22-09-29 24
질문 led하나 스위치 하나로 스위치가 눌릴때마다 변화댓글[1] 돌쇠 22-09-29 37
질문 atmega128 스위치로 7세그먼트 LED 동시조작 시속90 22-09-28 50
답변 답변글 답변 : atmega128 스위치로 7세그먼트 LED 동시조작 master 22-09-29 36
질문 아두이노 led시간 늘리기 면지지 22-09-28 32
답변 답변글 답변 : 아두이노 led시간 늘리기 master 22-09-29 40
질문 액추에이터 아두이노 정,역제어 문제댓글[1] hohoje 22-09-28 41
질문 아두이노 우노와 MDP070N LCD 문의댓글[2] 이미지첨부파일 공공공도도리 22-09-28 46
질문 아두이노로 영상출력이 가능할까요??댓글[1] 김보 22-09-27 64
질문 아두이노 LCD 판넬 연결댓글[1] 이미지첨부파일 나코딩못해잘 22-09-26 80
질문 모터 선정에 관련하여 질문이 있습니다댓글[1] 이미지첨부파일 mint 22-09-24 62
질문 오류에 대한 질문입니다.댓글[1] 첨부파일 Tell 22-09-24 66
질문 스위치를 이용한 led2개의 밝기 순차적으로 조절입니다.댓글[2] Tell 22-09-24 118
질문 atmega128에서 소리감지 센서 질문드립니다.댓글[6] K유 22-09-23 202
질문 avr로 매트랩 이용하고 싶은데 도와주세요 ㅠㅠ댓글[1] 지수진 22-09-22 91
질문 matlab 과 atmega128을 연동하고 싶습니다.댓글[4] dlcldl 22-09-22 129
질문 아두이노 리미트 스위치를 이용한 모터 제어댓글[4] 오모리 22-09-22 115
질문 atmega128코드로 변환 부탁드립니다 K유 22-09-21 74
답변 답변글 답변 : atmega128코드로 변환 부탁드립니다댓글[1] master 22-09-22 80
질문 아두이노 갑자기 기능구현 안됨댓글[1] 면지지 22-09-21 57
게시물 검색

2022년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기