• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Модуль выдает только эхо

qwerty

New member
Купил два модуля, оба ведут себя одинаково: в ответ на команды выдают только эхо и ничего больше. Подскажите, что сие означает?
 

Victor

Administrator
Команда форума
Скорее всего, эхо отдает ваша терминальная программа, а не модуль. Модуль, скорее всего, вообще не отвечает. Проверьте подключение и скорость соединения.
Проверить легко - перезагрузите модуль по питанию, не отключая от терминала и смотрите лог загрузки. Нормально, когда сначала идет мусор, потом вменяемый ответ от модуля.
 

qwerty

New member
Скорее всего, эхо отдает ваша терминальная программа, а не модуль. Модуль, скорее всего, вообще не отвечает. Проверьте подключение и скорость соединения.
Проверить легко - перезагрузите модуль по питанию, не отключая от терминала и смотрите лог загрузки. Нормально, когда сначала идет мусор, потом вменяемый ответ от модуля.
Victor, спасибо за ответ!
Не, эхо отдает именно модуль, на скорости 9600. Использую Putty. При перезагрузке действительно идет сначала мусор, а потом "ready" или что-то подобное, точно не помню.
Я подумал, может быть это какая-то прошивка, в которой своих AT-команд вообще нет? Или таких прошивок не бывает? Продавец на али молчит как рыба об лёд)
 

qwerty

New member
Вобщем, прошил я модуль прошивкой v0.9.2.2 AT, запустил утилиту ESP8266 Config. Утилитка с модулем соединилась, скорость порта меняет, к АР подключила, TCP послала. Но... модуль по-прежнему в ответ на команды выдают только эхо... У других модулей я вижу на этом компе команда-ответ, но не у этого... Люди, что со мной не так)?
 

Victor

Administrator
Команда форума
Попробуйте ESPlorer - он выдает в терминал то, что приходит от модуля, без всяких преобразований.
 

qwerty

New member
Виктор, спасибо за участие! Извините, что так эмоционально!!
 
Дело в PuTTY. По крайней мере версия 0.63 работать с модулем не хочет. Модулю надо в конце два байта - CR-LF, а putty дает только один байт CR. Установка "implicit LF every CR" - работает только на ПРИЕМНЫХ байтах, а не на выдачу.
Сделайте эксперимент (так будет не ТОЛЬКО ЭХО): в PuTTY дайте с клавиатуры AT и нажимаете ENTER, затем при нажатой ALT нажимайте на numpad'e 1 и 0, и отпускайте ALT. (Это дает символ LF по коду). И будет вам OK! И все ответы от модуля.
Если кто смог работать с модулем через PuTTY, буду рад глянуть на установки.
 

Alex_S

New member
Попробуй нажимать Ctrl+J вместо Enter. Должно помочь )
Понимаю, что неудобно, но лучшего решения для путти пока не нашел.
Сам пользую SecureCrt - он гораздо удобнее и функциональнее )))
 

bars_707

New member
Всем привет! У меня подобная ситуация: какую бы я команду не засылал в устройство - оно выдает мне 2 последних символа засланной мной команды, но никак не "ОК". Обмен произвожу через UART, засылая микроконтроллером (ATMEGA8L) команды в устройство. Устройство вот такое, версию прошивки не могу узнать из-за проблем с ответом на команды. Вот схема (прошу простить, рисовал как мог, paint - наше всё:D), как вставить картинку на форуме пока не разобрался. Подключил все резисторы, как советовали в соседних ветках форума подтяжкой к 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;
        }
    }
}
 

bars_707

New member
хм... в ответе на команду "AT+GMR" за мусором идут какие-то циферки, видимо версия, но все равно "OK" среди них не видно. Спасибо за подсказку, буду смотреть дальше, что не так. Интересно как решил эту проблему автор темы.
 

Victor

Administrator
Команда форума
а мусором идут какие-то циферки
мусор только при старте прошивки бывает. если у вас мусор в ответ на команду, то скорее всего, нужно сменить скорость.
Если скорость неверная, то команда не обрабатывается и ответ "ERROR", который, видимо, и отображается как мусор у вас

как решил эту проблему автор темы
у него после команды было только CR, а надо CR+LF
его ответ с матом скрыт от публичного просмотра
 

bars_707

New member
Попробовал разные скорости, как вы советовали.
  • На скорости 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' пока понять не могу. Комбинация символов перевода каретки и переноса строк на новую тоже слегка смущает.
На других скоростях добиться обмена с устройством не удалось.
Спасибо за помощь, копаю дальше...
 

Victor

Administrator
Команда форума
Комбинация символов перевода каретки и переноса строк на новую тоже слегка смущает.
Ооо, это вполне в духе китайцев! На вашем месте я бы не привязывался к этой последовательности, потому что она может изменяться от версии к версии и у разных команд может быть разной.

А про лишний символ Т... ESP его точно выдавать не может в ответе сразу после OK. По крайней мере, такого еще никто не зафиксировал.
Проверьте еще раз общую землю между ESP8266 и вашей мегой и удостоверьтесь в согласованности уровней TTL UART. Может высокий уровень на TX ESP иногда не дотягивает до высокого уровня на RX меги (или то же самое только с низким уровнем)
 
Сверху Снизу