2015-01-12 4 views
0

ESP8266 Wifi 대 직렬 모듈을 직렬 대 USB 커넥터에 연결했습니다.ESP8266 - 터미널 연결이 작동하지 않지만 Python 스크립트

나는 다음과 ESP8266에 연결할 수 있어요 파이썬 스크립트와 설정 :

import serial 

def echoCommand(cmd,expected_return,halt_on_fail,tOut = timeoutPeriod) : 
    ser.write(cmd + '\r\n') 

    if(echo_local_command): 
     print('Sent --> '+cmd) 

    if not echoFind(expected_return,tOut) and (halt_on_fail): 
     print(cmd+" failed") 
     sys.exit() 

def echoFind(expected_return,tOut): 
    timeoutTime = datetime.datetime.now() + datetime.timedelta(0,tOut) 
    while datetime.datetime.now() < timeoutTime: 
     while ser.inWaiting(): 
      ret = ser.readline().rstrip() 
      print ret 
      time.sleep(0.1) 
      if expected_return in ret: 
       return True 
    return False 

ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=5) 

echoCommand('AT+RST', 'ready', True) 

어떤 이유로 내가 좋아하는 터미널에서 동일한 작업을 수행 할 수 있지만 마법처럼 위의 작품 전무, GTKTerm, 퍼티 (우분투 실행 중, CR과 LF가 표시되는 권장 터미널)

같은 전송 속도와 설정을 사용했지만 운이 없었습니다. 하드웨어 및 소프트웨어 흐름 제어를 전환하려고 시도했으며 추가 할 CR 및 LF를 확인했습니다.

이것이 작동하지 않는 이유는 무엇입니까?

나는 전무 열려하고있는 경우 다음 ESP8266의 출력을 표시하고 문제를 보내는 전무에 표시됩니다 파이썬 스크립트를 실행하는 것으로 나타났습니다.

답변

8

오른쪽 (스크립트 전무는 수신 메시지를 차단의 원인이 실패). ..이 문제에 대한 해결책을 찾았습니다. 문제는 ESP8266이 각 AT 명령을 응답 한 후에 CR + LF가 필요하다는 것입니다.

퍼티에서 이렇게하려면 Ctrl + M과 Ctrl + J를 눌러 수동으로 CR + LF를 삽입해야합니다. 또는 Arduino IDE - Serial 창을 사용하여 CR + LF를 자동으로 추가 할 수 있습니다. (Arduino IDE는 대부분의 OS에서도 작동합니다.)

+2

Bertus를 작동 할 수있다! 나는 그 글에 대한 평판을 당신에게 기부 할 수 있었으면 좋겠다. 저는 좋은 명령을 보내기 위해 4 시간을 노력했습니다. 나는 단순한 AT + RST를 나의 esp 's에 보내고 점점 더 "ERROR"를 되풀이했다. 내가해야만하는 것은 Termite 3.1에서 cr-lf를 추가하는 것입니다. 고맙습니다! – Roger

2

위의 CR + LF 문제 외에도 일부 보드 펌웨어를 업로드하기 위해 DTR을 ESP8266 GPIO에 연결하십시오. 따라서 ESP8266이 제대로 응답하려면 터미널 프로그램이 DTR을 낮게해서는 안됩니다.

펌웨어를 업데이트하지 않는 동안 DTR을 연결 해제하거나 DTR을 사용하지 않는 다른 터미널 프로그램을 제어 할 수 있습니다.

2

는 GUI가 정상이라면, 리눅스에서 cutecom는 CR/LF 라인 엔딩

를 사용하는 설정 터미널 picocom 필요한 경우

$ picocom --omap crcrlf /dev/ttyUSB0