정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

아두이노 시리얼 통신에 문제가 있습니다
군기시 | 2019-03-08

1. 프로젝트 사용한 보드 종류

    아두이노 UNO

 

 

2. 사용한 개발 프로그램명

    아두이노 IDE 

 

3. 사용한 센서 모델명

    hm-10, esp8266

 

 

4. 연결한 회로 설명 (또는 이미지)

 

 

5. 소스코드 (주석 필수)

 

 

   

#include <SoftwareSerial.h>

#define DEBUG true

SoftwareSerial hm10(4,5); //Tx, Rx

SoftwareSerial esp8266(2,3); // make RX Arduino line is pin 2, make TX Arduino line is pin 3.

                             // This means that you need to connect the TX line from the esp to the Arduino's pin 2

                             // and the RX line from the esp to the Arduino's pin 3

 

int ledGreen = 13;

int ledYellow = 12;

int ledPink = 11;

 

 

byte buffer[1024];

int bufferPosition;

 

 

 

void setup()

{

  Serial.begin(9600);

 

 

  esp8266.begin(9600); // your esp's baud rate might be different

  hm10.begin(9600);

  

  pinMode(ledPink,OUTPUT);

  digitalWrite(ledPink,LOW);

  

  pinMode(ledYellow,OUTPUT);

  digitalWrite(ledYellow,LOW);

 

  pinMode(ledGreen,OUTPUT);

  digitalWrite(ledGreen,LOW);

 

  sendData("AT+RST\r\n",2000,DEBUG); // reset module

  sendData("AT+CWMODE=1\r\n",1000,DEBUG); // configure as access point

  sendData("AT+CIFSR\r\n",1000,DEBUG); // get ip address

  sendData("AT+CIPMUX=1\r\n",1000,DEBUG); // configure for multiple connections

  sendData("AT+CIPSERVER=1,80\r\n",1000,DEBUG); // turn on server on port 80

  esp8266.end();

  

  bufferPosition = 0;

 

}

 

아두이노 우노, hm-10, esp8266 을 사용하여 블루투스와 와이파이로 LED를 제어하려는데요.

 

개별적으론 잘 동작했는데 합쳐보니 블루투스만 작동하더군요.

 

그래서 이것저것 해 보니 굵은 글씨 처리한 시리얼 통신 시작하는 .begin.(9600) 부분이 문제인 것 같습니다.

 

저 두개를 위치를 바꾸면 어느 한 쪽만 동작합니다. 

 

그래서 좀 더 알아보니 시리얼 통신은 한 번에 하나씩만 통신해서 두 개 동시에 통신하는건 안되는것 같네요.

 

시말해 esp8266.begin.(9600)을 hm10.begin.(9600)밑에다 쓰면 esp8266.begin.(9600)코드만 작동해서 

 

와이파이 부분만 정상작동하고 반대로 하면 블루투스 부분만 정상 작동 합니다.

 

 

 

어떻게 하면 블루투스와 와이파이 두 개와 동시에 통신 할 수 있나요????

 

시리얼 통신으로 가능한가요?? 아니면 다른 통신 방법으로 시도해야하면 어떻게 해야 하나요?? 

 

프로필사진

kocoafab 2019-03-20 15:25:50

SoftwareSerial을 2개 사용하실때에는 필요할때마다 listen()이라는 함수를 사용하여 SoftwareSerial을 각각 사용하셔야 합니다.

 

 

SoftwareSerial 예제 중 TwoPortReceive 예제를 참고하셔서 2개의 소프트웨어 시리얼을 사용할 때 데이터를 받는 방법을 확인해 보신 후 사용해 보세요.

 

 

이전글   |    아두이노 주파수 검출 코드인데 이해가 안됩니다 좀 알려주시기 바랍니다... 2019-03-06
다음글   |    ble advertising mode 질문 있습니다ㅜㅜ 도와주세요ㅜㅜ ... 2019-03-08