• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Прием данных по UART

Это то .
В файле я дописал пару строк и создал массив . А в главном файле я этот массив обрабатываю . Если данные появились , то значит по юарт пришло что то.
Файл прикрепляю: Screenshot_2017-08-25-10-44-46-183_com.google.android.apps.docs.png
в uart.c дописал строки?
 
upd:
открыл файл. нормально так.
по сути у тебя свой командный инрепретатор на If'ах тоже хорошо.
Я его с avr перенес в есп когда 2 дня не получалось принять данные.
Я на авр всегда так использовал , работает четко . И на есп практика показала что работает четко .
 
@Артемий хорошая работа! сейчас попробую скопипастить к себе. что нужно
в blinky.c мне надо добавить
char string_search(char *str1,char *str2)
void AT_cmd()
(что ещё?)
а в uart.c
uart0_rx_intr_handler(void *para) твоей версии
uart_config(uint8 uart_no) взять у тебя
и
uart1_tx_one_char(uint8 TxChar) тоже взять у тебя.

что-то ещё надо?
плюс я вывожу инфорация стандатным для SDK os_printf() на uart0
это допустимо с твоом кодом?
 
@Артемий хорошая работа! сейчас попробую скопипастить к себе. что нужно
в blinky.c мне надо добавить
char string_search(char *str1,char *str2)
void AT_cmd()
(что ещё?)
а в uart.c
uart0_rx_intr_handler(void *para) твоей версии
uart_config(uint8 uart_no) взять у тебя
и
uart1_tx_one_char(uint8 TxChar) тоже взять у тебя.

что-то ещё надо?
плюс я вывожу инфорация стандатным для SDK os_printf() на uart0
это допустимо с твоом кодом?
Спасибо :)
"uart1_tx_one_char" - этого вроде не надо.
Возьми свой файл uart.c переименуй на время . А мой подставь .
А в главном файле добавь функции и т.д.

string_search() - хитрая функция , сам когда то ее написал . Она может в большом массиве найти совпадение строк по словам . Не обязательно чтобы это слово было в начале . Оно может быть и в середине .
Это я делал для работы с есп в режиме ат команд , чтобы другой мк мог взаимодействовать нормально с есп. А то в есп дурнуватые ат команды , которые трудно обрабатывать .
 
"uart1_tx_one_char" - этого вроде не надо.
Возьми свой файл uart.c переименуй на время . А мой подставь .
А в главном файле добавь функции и т.д.
коль так то я могу просто тупо взять твой))
в главно какие строки отвечают за прописку прерываний?
 
коль так то я могу просто тупо взять твой))
в главно какие строки отвечают за прописку прерываний?
Прием строк на прерываниях работает . В файле uart.c как раз объявлено это прерывание . uart.c должны быть по идее одинаковы , и можно просто заменить файл моим. Но лучше сохранить и оригинальный на всяк случай.
 
Прием строк на прерываниях работает . В файле uart.c как раз объявлено это прерывание . uart.c должны быть по идее одинаковы , и можно просто заменить файл моим. Но лучше сохранить и оригинальный на всяк случай.
что я и сделал.
можешь сказать что написано тут:

// ��������� ���� � ������
cmdBuffer [ cmdBufferWriteIdx ++ ] = RcvChar;
// ��������������
 
что я и сделал.
можешь сказать что написано тут:

// ��������� ���� � ������
cmdBuffer [ cmdBufferWriteIdx ++ ] = RcvChar;
// ��������������
Записывается прилетевший символ в буфер и нарастает счетчик , для записи следующего символа уже в новую ячейку .
 
странно
ругается

Код:
$ make
xtensa-lx106-elf-gcc -I/d/Teko_projects/sechub_esp_modem -I/home/sam/esp-open-sdk/sdk/driver_lib/include/driver -I/home/sam/esp-open-sdk/sdk/include -mlongcalls -Os -ffunction-sections -fdata-sections -DICACHE_FLASH   -c -o blinky.o blinky.c
blinky.c: In function 'AT_cmd':
blinky.c:51:32: error: 'cmdBuffer' undeclared (first use in this function)
     if(string_search("AT+REV?",cmdBuffer))
                                ^
blinky.c:51:32: note: each undeclared identifier is reported only once for each function it appears in
blinky.c:67:25: error: 'ssid_str' undeclared (first use in this function)
      for(x=11; x<y; x++)ssid_str[x-11] = cmdBuffer[x];
                         ^
blinky.c: At top level:
blinky.c:136:6: error: conflicting types for 'string_search'
char string_search(char *str1,char *str2)
      ^
blinky.c:51:8: note: previous implicit declaration of 'string_search' was here
     if(string_search("AT+REV?",cmdBuffer))
        ^
<встроенное>: ошибка выполнения рецепта для цели «blinky.o»

в каких хидерах должна быть прописаны функции?
разобрался с переменными - взял у тебя
а со стринг_сеарчем - я его функцию вставил выше приёмника АТ команд.

теперь - где мне выполнить void AT_cmd()? чтобы он выполнил мою строку?
 
Последнее редактирование:
@Артемий
вот что у меня в итоге получилось. пока не запускал.
Код:
#include "ets_sys.h"
#include "osapi.h"
#include "gpio.h"
#include "os_type.h"
#include "user_interface.h"
#include "espconn.h"
#include "key.h"
#include "c_types.h"
#include "time.h"
#include "mem.h"
#include "uart.h"


#define user_procTaskPrio        0
#define user_procTaskQueueLen    1
os_event_t    user_procTaskQueue[user_procTaskQueueLen];
// static void loop(os_event_t *events);
LOCAL os_timer_t network_timer;

static volatile os_timer_t some_timer;


extern char cmdBuffer[];

char ssid_str[32] = "CO2";
char pass_str[64] = "co2passwd";
char id_send0_str[8] = "012EF412";
char id_send1_str[8] = "012EF419";

// static void ICACHE_FLASH_ATTR loop(os_event_t *events)
// {
//   int c = uart0_rx_one_char();
//   if(c == 0x30)
//   {
//    uart0_tx_buffer("0123456789", 10);
//   }
//   if(c == 0x31)
//   {
//    uart0_tx_buffer("9876543210", 10);
//   }
//   system_os_post(user_procTaskPrio, 0, 0 );
// }

void some_timerfunc(void *arg)
{
  //debag i am alive
  os_printf("On working! \r\n");
}


char string_search(char *str1,char *str2)
{
  unsigned int addr=0,x=0,y=0;
  str1+=0;
  str2+=0;

  while(str1[addr]!=0)
  {
    addr++;
  }

  while(str1[y]!=0 && str2[x]!=0)
  {
    if(str1[y] == str2[x])
  {
    y++;
    x++;
  }
  else
  {
    if(y<addr)y=0;
    x++;  // ��������� ���������� ������� ������� ������
  }
  //printf("Y=%d,X=%d,ADDR=%d, str1=%c , str2=%c \r\n" , y,x,addr,str1[y] , str2[x]);
}

//printf("Y=%d,X=%d,ADDR=%d\r\n" , y,x,addr);

if(y && (addr==y))return x; // ��������� ���! ���������� ��������� ����� ��������� ������
return 0;
}
void AT_cmd()
{
    static char buff_at[64], x=0, timer_at=0;
    static char y=0;
////////////////////////
if(string_search("AT+REV?",cmdBuffer))
{
#ifdef PLATFORM_DEBUG
     ets_uart_printf("REV1.0 , Autor: Ugrimov A.O. ,\r\nOK\r\n");
     clear_buf();
#endif
}
else if(string_search("AT+AP_NSET=",cmdBuffer))
{

    x=0;
    while(cmdBuffer[x++]!=0)
    {
         y++;
    }

    for(x=11; x<y; x++)ssid_str[x-11] = cmdBuffer[x];
    //os_memcpy(wifiApConf.ssid, &buff_at, sizeof (buff_at));

    data_write();
y=0;
    data_read();
#ifdef PLATFORM_DEBUG
     ets_uart_printf("wifiApConf=%s \r\n", ssidAp.ssid);
     ets_uart_printf("%s \r\n", ssid_str);
     ets_uart_printf("NSET OK\r\n");
     clear_buf();
#endif
}
else if(string_search("AT+AP_NSET?",cmdBuffer))
{
    data_read();
#ifdef PLATFORM_DEBUG
    ets_uart_printf("result ssid: %s\n", ssidAp);
#endif
    clear_buf();
}
else if(string_search("AT+AP_PSET=",cmdBuffer))
{
#ifdef PLATFORM_DEBUG
     ets_uart_printf("PSET OK\r\n");
     clear_buf();
#endif
}
else if(string_search("AT+ID0_SET=",cmdBuffer))
{
#ifdef PLATFORM_DEBUG
     ets_uart_printf("ID0_SET OK\r\n");
     clear_buf();
#endif
}
else if(string_search("AT+ID1_SET=",cmdBuffer))
{
#ifdef PLATFORM_DEBUG
     ets_uart_printf("ID1_SET OK\r\n");
     clear_buf();
#endif
}
else if(string_search("AT+SDK_VER?",cmdBuffer))
{
#ifdef PLATFORM_DEBUG
    ets_uart_printf("SDK version:%s\n OK\r\n", system_get_sdk_version());
#endif
    clear_buf();
}
else if(cmdBuffer[0]!=0)// ������� �� �������
{
  if(++timer_at>10)
  {
     #ifdef PLATFORM_DEBUG
     ets_uart_printf("ERR_CMD!\r\n");
     clear_buf();
     #endif
     timer_at=0;
  }

}
else if(cmdBuffer[0]==0)
{
      timer_at=0;
}
}


void ICACHE_FLASH_ATTR user_init()
{
  // init gpio subsytem
  gpio_init();

  //uart_init
  uart_init(74400, 74400);
  os_printf("\r\n ESP8266 started!\r\n");
  wifi_set_opmode(0x00);
  os_printf("\r\n Wi-Fi off!\r\n");

  // setup timer (500ms, repeating)
  os_timer_setfn(&some_timer, (os_timer_func_t *)some_timerfunc, NULL);
  os_timer_arm(&some_timer, 1000, 1);

  // system_os_task(loop, user_procTaskPrio, user_procTaskQueue, user_procTaskQueueLen);
  // system_os_post(user_procTaskPrio, 0, 0 );


}
мне куда void AT_cmd() сунуть чтобы строка проверялась?
 
@Артемий
вот что у меня в итоге получилось. пока не запускал.
Код:
#include "ets_sys.h"
#include "osapi.h"
#include "gpio.h"
#include "os_type.h"
#include "user_interface.h"
#include "espconn.h"
#include "key.h"
#include "c_types.h"
#include "time.h"
#include "mem.h"
#include "uart.h"


#define user_procTaskPrio        0
#define user_procTaskQueueLen    1
os_event_t    user_procTaskQueue[user_procTaskQueueLen];
// static void loop(os_event_t *events);
LOCAL os_timer_t network_timer;

static volatile os_timer_t some_timer;


extern char cmdBuffer[];

char ssid_str[32] = "CO2";
char pass_str[64] = "co2passwd";
char id_send0_str[8] = "012EF412";
char id_send1_str[8] = "012EF419";

// static void ICACHE_FLASH_ATTR loop(os_event_t *events)
// {
//   int c = uart0_rx_one_char();
//   if(c == 0x30)
//   {
//    uart0_tx_buffer("0123456789", 10);
//   }
//   if(c == 0x31)
//   {
//    uart0_tx_buffer("9876543210", 10);
//   }
//   system_os_post(user_procTaskPrio, 0, 0 );
// }

void some_timerfunc(void *arg)
{
  //debag i am alive
  os_printf("On working! \r\n");
}


char string_search(char *str1,char *str2)
{
  unsigned int addr=0,x=0,y=0;
  str1+=0;
  str2+=0;

  while(str1[addr]!=0)
  {
    addr++;
  }

  while(str1[y]!=0 && str2[x]!=0)
  {
    if(str1[y] == str2[x])
  {
    y++;
    x++;
  }
  else
  {
    if(y<addr)y=0;
    x++;  // ��������� ���������� ������� ������� ������
  }
  //printf("Y=%d,X=%d,ADDR=%d, str1=%c , str2=%c \r\n" , y,x,addr,str1[y] , str2[x]);
}

//printf("Y=%d,X=%d,ADDR=%d\r\n" , y,x,addr);

if(y && (addr==y))return x; // ��������� ���! ���������� ��������� ����� ��������� ������
return 0;
}
void AT_cmd()
{
    static char buff_at[64], x=0, timer_at=0;
    static char y=0;
////////////////////////
if(string_search("AT+REV?",cmdBuffer))
{
#ifdef PLATFORM_DEBUG
     ets_uart_printf("REV1.0 , Autor: Ugrimov A.O. ,\r\nOK\r\n");
     clear_buf();
#endif
}
else if(string_search("AT+AP_NSET=",cmdBuffer))
{

    x=0;
    while(cmdBuffer[x++]!=0)
    {
         y++;
    }

    for(x=11; x<y; x++)ssid_str[x-11] = cmdBuffer[x];
    //os_memcpy(wifiApConf.ssid, &buff_at, sizeof (buff_at));

    data_write();
y=0;
    data_read();
#ifdef PLATFORM_DEBUG
     ets_uart_printf("wifiApConf=%s \r\n", ssidAp.ssid);
     ets_uart_printf("%s \r\n", ssid_str);
     ets_uart_printf("NSET OK\r\n");
     clear_buf();
#endif
}
else if(string_search("AT+AP_NSET?",cmdBuffer))
{
    data_read();
#ifdef PLATFORM_DEBUG
    ets_uart_printf("result ssid: %s\n", ssidAp);
#endif
    clear_buf();
}
else if(string_search("AT+AP_PSET=",cmdBuffer))
{
#ifdef PLATFORM_DEBUG
     ets_uart_printf("PSET OK\r\n");
     clear_buf();
#endif
}
else if(string_search("AT+ID0_SET=",cmdBuffer))
{
#ifdef PLATFORM_DEBUG
     ets_uart_printf("ID0_SET OK\r\n");
     clear_buf();
#endif
}
else if(string_search("AT+ID1_SET=",cmdBuffer))
{
#ifdef PLATFORM_DEBUG
     ets_uart_printf("ID1_SET OK\r\n");
     clear_buf();
#endif
}
else if(string_search("AT+SDK_VER?",cmdBuffer))
{
#ifdef PLATFORM_DEBUG
    ets_uart_printf("SDK version:%s\n OK\r\n", system_get_sdk_version());
#endif
    clear_buf();
}
else if(cmdBuffer[0]!=0)// ������� �� �������
{
  if(++timer_at>10)
  {
     #ifdef PLATFORM_DEBUG
     ets_uart_printf("ERR_CMD!\r\n");
     clear_buf();
     #endif
     timer_at=0;
  }

}
else if(cmdBuffer[0]==0)
{
      timer_at=0;
}
}


void ICACHE_FLASH_ATTR user_init()
{
  // init gpio subsytem
  gpio_init();

  //uart_init
  uart_init(74400, 74400);
  os_printf("\r\n ESP8266 started!\r\n");
  wifi_set_opmode(0x00);
  os_printf("\r\n Wi-Fi off!\r\n");

  // setup timer (500ms, repeating)
  os_timer_setfn(&some_timer, (os_timer_func_t *)some_timerfunc, NULL);
  os_timer_arm(&some_timer, 1000, 1);

  // system_os_task(loop, user_procTaskPrio, user_procTaskQueue, user_procTaskQueueLen);
  // system_os_post(user_procTaskPrio, 0, 0 );


}
мне куда void AT_cmd() сунуть чтобы строка проверялась?
В mail.c !
 
сделал так:

void some_timerfunc(void *arg)
{
//debag i am alive
os_printf("On working! \r\n");
AT_cmd();
}
и увидел что байты у меня принимаются и эхом отвечаются. уже хорошо! но теперь надо получить заранее спрограммированный ответ.
 
Сверху Снизу