2016-11-28 4 views
1

Arduino Uno을 사용하여 AT 명령을 보내는 데 문제가 있습니다. 서버를 설치하기 위해 작은 프로그램 (아래 링크)을 작성했습니다. Wi-Fi 모듈 ESP8266을 사용하여 노트북에서 Atmega로 데이터를 보내야합니다. 하나의 AT 명령 만이 하나의 컴파일로 실행되기 때문에 AT 코드의 모든 줄에 주석을 달거나 주석을 달아야하는 순간에 전체 프로그램이 한꺼번에 처리한다면 모든 것이 좋을 것입니다.오직 1 개의 AT 명령 전송 (ESP8266/Arduino Uno)

while 루프에서 어딘가에 멈추는 것처럼 보입니다 (심지어 모듈에서 파란색 다이오드가 깜박임을 멈추는 것을 볼 수 있습니다). 나는 코드에서 뭔가 잘못했다고 생각하며 어떤 도움을 주시면 감사하겠습니다.

Image

버전 :

AT Version: 0.21.0.0 
SDK Version: 0.9.5 

연결 :

ESP  
VCC -- 3,3 V (external source)  
GND -- GND -- Arduino GND  
RX -- TX (Arduino pin 3)  
TX -- RX (Arduino pin 2)  
CH_PD -- 3,3 V  
RST -- 3,3 V 

편집 :

012,351,641 여기
#include <SoftwareSerial.h> 

SoftwareSerial espmod(2, 3); 
void commands(String cmd, int waittime); 

void setup(void) { 
    Serial.begin(9600); 
    espmod.begin(9600); 
    while (!Serial) {;} 

    commands("AT+GMR\r\n", 1000); 
    commands("AT+RST\r\n", 500); 
    commands("AT+CWMODE=1\r\n", 500); 
    commands("AT+CWJAP=\"SSID\",\"PASS\"\r\n", 4000); 
    commands("AT+CIPMUX=1\r\n", 500); 
    commands("AT+CIPSERVER=1,333\r\n", 500); 
    commands("AT+CIFSR\r\n", 500); 
} 

void loop() { // run over and over 

} 

void commands(String cmd, int waittime) { 
    espmod.print(cmd); 
    delay(waittime); 
    while(espmod.available()) { 
     char val = espmod.read(); 
     Serial.write(val); 
    } 
} 

화면입니다

저는 아직 며칠 동안 해결책을 찾지 못했습니다.하지만 오늘은 마침내 효과가있었습니다.하지만 전원 공급 장치를 재설정 한 후에도 여전히 동일합니다! 나는 모든 명령이 SerialMonitor에서 수행되는 것을 볼 수 있었으므로 코드와 관련된 모든 것이 있으며 esp 모듈에 문제가 있다고 생각한다. 늘어나는만큼 하나의 AT 명령어를 보내고 컴파일 할 때 한 번만 실행하면 현재 모듈에 제공되는 전류가 충분하지 않을 수 있습니까? 모듈이 메모리에서 벗어날 수 있습니까? SoftwareSerial 모니터를 볼 수있는 방법이 있습니까?

+0

Arduino의 직렬 모니터를 통해 명령과 응답을 볼 수 없습니까? – cagdas

+0

@cagdas 명령 및 응답을 볼 수 있지만 직렬 모니터의 Arduino 만 생성했습니다. 나는 AT 명령과 ESP에 문제가있다. 왜냐하면 내가 atmega328p-pu를 새로운 것으로 변경했기 때문에 심지어 AT 명령을 루프 기능에 넣었을지라도 다른 명령이 잘 작동하면 처음에는 행에 들어간다. [link] (http://images82.fotosik.pl/202/037fbda5657d0249.png). 모듈은 UART [link] (http://images81.fotosik.pl/203/94e8e0e6b2503709.png)를 통해서만 연결됩니다. – Spritey

+0

전압 레벨을 확인하는 것이 좋습니다. esp는 3.3이고, megas는 5.0입니다. 일반적으로 불일치로 벗어날 수는 있지만, 보드 중 하나가 너무 민감하거나 강력한 머리카락이라면 작동하지 않을 정도로 충분할 수 있습니다. 귀하의 소프트웨어가 현행대로 작동했기 때문에 하드웨어가 의심 스럽습니다. 고급 레벨 시프터 또는 dioide/5kOhm 저항 대신 esp의 RX 와이어가 도움이 될 수 있습니다. – dandavis

답변

0

명령 기능에 불필요한 루프가 있습니다. arduino가 루프를 처리하도록하십시오. 또한 다른 지연 매개 변수로 시도하는 것이 좋습니다. 어쩌면 일부 지연 매개 변수를 줄일 수 있습니다. 여기 내가 제공하는 코드 :

void loop() { 
    while (espmod.available()){ 
    String result = espmod.readStringUntil('\n'); 
    Serial.println("AT result : " + result); 
    } 
} 

void commands(String cmd, int waittime) { 
    espmod.print(cmd); 
    delay(waittime); 
} 
+0

그것은 나를 위해 작동하지 않습니다. 여전히 같은 상황. 그것은 첫 번째 AT 명령 후에 붙어있는 것 같습니다. 변경 지연 값도 변경되지 않았습니다. 그리고 문자열 대신 문자를 인쇄하는 것을 선호합니다. 왜냐하면 여기 [link] (http://images81.fotosik.pl/203/b690a04181ea1042.png)와 같이 완전히 응답했기 때문입니다. – Spritey

+0

AT 후에 AT + RST를 보냈습니까? – cagdas

+0

스냅은 위의 코드를 모두 가지고 있지 않습니다. readStringUntil 함수를 사용해보십시오. – cagdas