Скорее всего, эхо отдает ваша терминальная программа, а не модуль. Модуль, скорее всего, вообще не отвечает. Проверьте подключение и скорость соединения.
Проверить легко - перезагрузите модуль по питанию, не отключая от терминала и смотрите лог загрузки. Нормально, когда сначала идет мусор, потом вменяемый ответ от модуля.
Скорее всего, эхо отдает ваша терминальная программа, а не модуль. Модуль, скорее всего, вообще не отвечает. Проверьте подключение и скорость соединения.
Проверить легко - перезагрузите модуль по питанию, не отключая от терминала и смотрите лог загрузки. Нормально, когда сначала идет мусор, потом вменяемый ответ от модуля.
Victor, спасибо за ответ!
Не, эхо отдает именно модуль, на скорости 9600. Использую Putty. При перезагрузке действительно идет сначала мусор, а потом "ready" или что-то подобное, точно не помню.
Я подумал, может быть это какая-то прошивка, в которой своих AT-команд вообще нет? Или таких прошивок не бывает? Продавец на али молчит как рыба об лёд)
Вобщем, прошил я модуль прошивкой v0.9.2.2 AT, запустил утилиту ESP8266 Config. Утилитка с модулем соединилась, скорость порта меняет, к АР подключила, TCP послала. Но... модуль по-прежнему в ответ на команды выдают только эхо... У других модулей я вижу на этом компе команда-ответ, но не у этого... Люди, что со мной не так)?
Дело в PuTTY. По крайней мере версия 0.63 работать с модулем не хочет. Модулю надо в конце два байта - CR-LF, а putty дает только один байт CR. Установка "implicit LF every CR" - работает только на ПРИЕМНЫХ байтах, а не на выдачу.
Сделайте эксперимент (так будет не ТОЛЬКО ЭХО): в PuTTY дайте с клавиатуры AT и нажимаете ENTER, затем при нажатой ALT нажимайте на numpad'e 1 и 0, и отпускайте ALT. (Это дает символ LF по коду). И будет вам OK! И все ответы от модуля.
Если кто смог работать с модулем через PuTTY, буду рад глянуть на установки.
Попробуй нажимать Ctrl+J вместо Enter. Должно помочь )
Понимаю, что неудобно, но лучшего решения для путти пока не нашел.
Сам пользую SecureCrt - он гораздо удобнее и функциональнее )))
Всем привет! У меня подобная ситуация: какую бы я команду не засылал в устройство - оно выдает мне 2 последних символа засланной мной команды, но никак не "ОК". Обмен произвожу через UART, засылая микроконтроллером (ATMEGA8L) команды в устройство. Устройство вот такое, версию прошивки не могу узнать из-за проблем с ответом на команды. Вот схема (прошу простить, рисовал как мог, paint - наше всё), как вставить картинку на форуме пока не разобрался. Подключил все резисторы, как советовали в соседних ветках форума подтяжкой к RST, GPIO0, GPIO2 и CH_PD. Питание единое на всей схеме - 3.3 вольта, земля тоже для всех устройств единая. На входе между питанием и землёй поставил ещё конденсатор на 10мкф, думал сгладить помеху по питанию - не помогло.
Может я где в коде косячу, не могу понять почему так происходит... (код приложил ниже).
Через комп проверить нет возможности - нет конвертера на USB, вывожу что приходит на дисплейчик от нокии на плате. Без него бы вообще ничего не понял. Перепрошить тоже из-за отсутствия конвертера не могу. Помогите кто чем может.
Код:
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include "LCD_5110/n3310.h"
#include "LCD_5110/picture.h"
#define baudrate 9600L
//#define baudrate 115200L
#define bauddivider (F_CPU/(16*baudrate)-1)
#define HI(x) ((x)>>8)
#define LO(x) ((x)& 0xFF)
char int0_cnt=0;
int init_UART(void)
{
//Init UART
UBRRL = LO(bauddivider);
UBRRH = HI(bauddivider);
UCSRA = 0;
UCSRB = 1<<RXEN|1<<TXEN|0<<RXCIE|0<<TXCIE;
UCSRC = 1<<URSEL|1<<UCSZ0|1<<UCSZ1;
}
//Отправка байта
void USART_SendByte(uint8_t u8Data)
{
// Wait until last byte has been transmitted
while((UCSRA &(1<<UDRE)) == 0);
// Transmit data
UDR = u8Data;
}
// not being used but here for completeness
// Wait until a byte has been received and return received data
uint8_t USART_ReceiveByte()
{
while((UCSRA &(1<<RXC)) == 0);
return UDR;
}
int main(void)
{
LcdInit();
init_UART(); // Initialise USART
DDRC = 2;
PORTC = 0; //если 1 подтяжка включена
_delay_ms(500); //задержка чтобы успеть ткнуть осциллографом
unsigned char print_data[20];
while(1)
{
//AT (раньше посылал AT)
//USART_SendByte('A'); // send value
//USART_SendByte('T'); // send value
//USART_SendByte(0x0D); // send value
//USART_SendByte(0x0A); // send value
//AT+CWMODE=1 (сейчас пробую с этой еомаедой)
USART_SendByte('A'); // send value
USART_SendByte('T'); // send value
USART_SendByte('+'); // send value
USART_SendByte('C'); // send value
USART_SendByte('W'); // send value
USART_SendByte('M'); // send value
USART_SendByte('O'); // send value O
USART_SendByte('D'); // send value
USART_SendByte('E'); // send value
USART_SendByte('='); // send value
USART_SendByte('1'); // send value
USART_SendByte(0x0D); // send value
USART_SendByte(0x0A); // send value
//очищаю буфер приема
memset(print_data,0,sizeof(print_data));
//принимаю данные от устройства
print_data[0] = USART_ReceiveByte();
print_data[1] = USART_ReceiveByte();
cli();
//вывод на дисплей от NOKIA 5110
LcdClear();
LcdUpdate();
LcdGotoXYFont(0,0);
LcdFStr(FONT_1X,(unsigned char*)PSTR("Прием от 8266:"));
LcdGotoXYFont(0,3);
LcdChr(FONT_1X,print_data[0]); //вывод 1го принятого байта
LcdChr(FONT_1X,print_data[1]); //вывод 2го принятого байта
LcdUpdate();
sei();
_delay_ms(300);
//лампочка для того чтобы понять,
//что в цикле все крутится и нигде ничего не висануло
int0_cnt++;
if(int0_cnt>4)
{
int0_cnt=0;
PORTC=0;
}
else if(int0_cnt>2)
{
PORTC=2;
}
}
}
А принимать не 2 байта, а побольше не пробовали? ответ esp8266 "OK" вроде 6 байт - в начале и в конце 0x0D 0x0A (то ли только 0x0D, точно уже и не помню)
хм... в ответе на команду "AT+GMR" за мусором идут какие-то циферки, видимо версия, но все равно "OK" среди них не видно. Спасибо за подсказку, буду смотреть дальше, что не так. Интересно как решил эту проблему автор темы.
мусор только при старте прошивки бывает. если у вас мусор в ответ на команду, то скорее всего, нужно сменить скорость.
Если скорость неверная, то команда не обрабатывается и ответ "ERROR", который, видимо, и отображается как мусор у вас
На скорости 115200 несколько раз приходит пара байт (0x74 0x4C), затем светодиод на устройстве отвечающий за индикацию обмена угасает (мигает все тускнее и тускнее, а затем и вовсе не мигает), я так понимаю устройство захлёбывается и привести его в чувство можно только сбросом питания или переходом на скорость 9600.
На скорости 9600 обмен стабильный.
И о чудо! На скорости 9600 после посылки AT в устройство по UART получаю 0x4F 0x45 0x54 0xd 0xd 0xa 0xd 0xa, что в ASCII коде значит "OKT CR CR LF CR LF'.
Наконец-то удалось разглядеть в принимаемых данных символы "OK", чего тут делает символ 'T' пока понять не могу. Комбинация символов перевода каретки и переноса строк на новую тоже слегка смущает.
На других скоростях добиться обмена с устройством не удалось.
Спасибо за помощь, копаю дальше...
Ооо, это вполне в духе китайцев! На вашем месте я бы не привязывался к этой последовательности, потому что она может изменяться от версии к версии и у разных команд может быть разной.
А про лишний символ Т... ESP его точно выдавать не может в ответе сразу после OK. По крайней мере, такого еще никто не зафиксировал.
Проверьте еще раз общую землю между ESP8266 и вашей мегой и удостоверьтесь в согласованности уровней TTL UART. Может высокий уровень на TX ESP иногда не дотягивает до высокого уровня на RX меги (или то же самое только с низким уровнем)