• Система автоматизации с открытым исходным кодом на базе 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);
которые должны быть заполнены.
но КАК И ЧТО ДЕЛАТЬ я окончательно запутался.
 
Сверху Снизу