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

Помогите получить IP-адрес и МАС-адрес

Mifodij

New member
Добрый день. Так уж получилось, задали собрать конструктор МК STM32 Discovery и ESP8266 вместое и проверить как оно работает.
Решил использовать среду разработки Кейл. А за основу взял проект парсера команд для ESP8266
AT commands parser for ESP8266 - STM32F4 Discovery .
В связи с тем что у меня немного перепаяный кит то леды отсутвуют их и экран закоментировал.
и нашел функции инициализации ESP и получения мак адресма и IP адреса от платы

int main(void) {
int ip[8];
int mac [8];
TM_RCC_InitSystem(); /* Init system */
HAL_Init(); /* Init HAL layer */
//TM_DISCO_LedInit(); /* Init leds */
//TM_DISCO_ButtonInit(); /* Init button */
//TM_DELAY_Init(); /* Init delay */
TM_USART_Init(DEBUG_USART, DEBUG_USART_PP, 921600); /* Init USART for debug purpose */
espRes = ESP_Init(&ESP, 115200, ESP_Callback);
/* Initialize threads */
//ESP_Update_ThreadId = osThreadCreate(osThread(ESP_Update), NULL);
//ESP_Main_ThreadId = osThreadCreate(osThread(ESP_Main), NULL);
/* Start kernel */
// osKernelStart();
espRes = ESP_STA_GetIP(&ESP, ip, 0x2);
espRes = ESP_STA_GetMAC(&ESP, MAC, 0x2);
}

проводками соеденил соотвествующие пины на ките и на плате.к сожеланию проект зависает на этапе ESP_Init. Вопрос тако так вообще можно сделать? или как можно получить мак адрес платы через кит? Извините за нубовский вопрос.. но с таким первый раз столкнулся. Если так не работеат помогите с примером кода.
 

Andy Korg

Moderator
Команда форума
....заводских настроек и настроек проекта. или надо отдельно с платой что то делать?
Можно поступить так - подключится к uart esp и послать at команды руками, что бы посмотреть чего отвечает esp, ну или не отвечает :)
 

Mifodij

New member
Добрый день. Именно так и хотелось сделать. Суть в том что я взял за основу вышеописаный проект. в котором как раз uart и подключено. Вопрос только в том как правильно подавать команды на esp. Вся проблема в том что у меня не проходит функция ESP_Init, которая как я понимаю инициализирует как раз плату. Сейчас главная цель добиться получения ip и mac адресов платы. Проблема в том что не уверен что код правильно инициализирует все..
попрошу поправить меня на как я понял алгоритм такой.
1. Инициализация драйверов.
2. Инициализация частот и прерываний.
3. Инициализация пинов.
4. Инициализация uart.
5. Инициализация ESP.
6. Получение данных.
 
Последнее редактирование:

Andy Korg

Moderator
Команда форума
...Вся проблема в том что у меня не проходит функция ESP_Init, которая как я понимаю инициализирует как раз плату. ...
Не знаю, что делает функция, но сильно подозреваю что просто шлет команду на уарт. Что то типа AT+INIT и ждет вполне определенного ответа. Поэтому предалагаю руками через теримнальную программу напрямую послать эту же команду на esp и посмотреть что отвечает esp
 

Юрий Ботов

Moderator
Команда форума
Mifodij, тот кусок кода сверху это все что есть в main? Где заполняется структура ESP? Где собственно ESP_Callback которому будет передано управление после инициализации? И... больно жестко вы закомментировали инициализацию RTOS - вы уверены что это правильно? Смотрю цикла обработки вместо нее вы не сделали...
 

Mifodij

New member
Mifodij, тот кусок кода сверху это все что есть в main? Где заполняется структура ESP? Где собственно ESP_Callback которому будет передано управление после инициализации? И... больно жестко вы закомментировали инициализацию RTOS - вы уверены что это правильно? Смотрю цикла обработки вместо нее вы не сделали...
Доброй ночи спасибо за подсказку. К сожалению вообще ни в чем не уверен. Так как такой проект делаю впервые и не попробовал взять с ходу готовый проект. Это функция main из проекта на который я скидывал ссылку выше. Сейчас попробую разобраться в самом проекте. Где и какая инициализация были проведены. Думаю где то запутался и закоментировал не то(( ну или не правильно выставлены инициализация пинов. (Хотя соединял как описано в проекте). Если не получится, то буду с нуля писать...... ну и тут вопросы задавать)))
 

Mifodij

New member
Добрый день к сожалению окончательно запутался и понял что надо начать с нуля((. Очень прошу помощи.
Начальная подключить ESP8266 к STM32 Discovery и просто проверить как работает код. Решил идти поэтапно. Первым делом просто проверил настроен ли код для передачи по USAR1 данных или нет. Ну и попробовал DMA подтянуть. За основу взял проект из нета
Код:
/* Include core modules */
#include "stm32f4xx.h"
/* Include my libraries here */
#include "defines.h"
#include "tm_stm32f4_usart.h"
#include "tm_stm32f4_usart_dma.h"
#include "string.h"
/* Create USART working buffer */
char USART_Buffer[100] = "AT";
char USART_Buffer2[100] = {0};
int main(void) {
    /* Initialize system */
    SystemInit();
/* Init USART2 on pins TX = PB6, RX = PB7 */
TM_USART_Init(USART1, TM_USART_PinsPack_2, 115200);
/* Say string without DMA */
TM_USART_Puts(USART1, "Test DMA\n");
/* Init TX DMA for USART2 */
TM_USART_DMA_Init(USART1);
/* Send data with DMA */
TM_USART_DMA_Send(USART1, (uint8_t *)USART_Buffer, strlen(USART_Buffer));
/* Wait till DMA works */
/* You can do other stuff here instead of waiting for DMA to end */
while (TM_USART_DMA_Sending(USART1));
   
    while (1) {
        /* If any string arrived over USART */
        /* Expecting "\n" at the end of string from USART terminal or any other source */
        if (TM_USART_Gets(USART1, USART_Buffer2, sizeof(USART_Buffer2))) {
            /* Send it back over DMA */
            TM_USART_DMA_Send(USART1, (uint8_t *)USART_Buffer, strlen(USART_Buffer));
            /* Wait till DMA works */
            /* You can do other stuff here instead of waiting for DMA to end */
            while (TM_USART_DMA_Sending(USART1));
        }
    }
}
Сам код отработал. Проблема в том я так и не понял как принять данные которые передавались по DMA
Передается только строка "Test DMA\n" и она же принимается а вот USART_Buffer никак не принимается?
Но главный вопрос я полносьтю запутался как правильно инициализировать ESP точнее как правально заполнить структуру и в самой функции main отправить и получить значение мак адреса схемы и IP-адреса. Проект написан в Кейле. Использую для подключения USAR1 c пинама PB6 и PB7. Когда плата включена вместе с китом она видится как точка доступа.
Подскажите как примитивно сделать код((( и извините за нубовкский вопрос
 

Mifodij

New member
Как я понимаю необходимы структуры
evol ESP_t ESP;
ESP_Result_t espRes;
int ESP_Callback(ESP_Event_t evt, ESP_EventParams_t* params);
которые должны быть заполнены.
но КАК И ЧТО ДЕЛАТЬ я окончательно запутался.
 
Сверху Снизу