Уважаемые посетители сайта esp8266.ru!
Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram
Первый положительный тест работы с флешем и конфигурации ESP8266 с перезагрузкой.
Для тех, кому интересно - помогло окружение вызова программ записи и стирания сектора запретом на прерывания UART:
А вот это уже не очень понятно, что именно он должен делать. Он как-то сохраняет адреса, где уже есть данные и при следующей записи выбирает пустое место куда могут влезти данные?
Вопрос с записью настроек решён положительно, всё работает как задумывалось.
Менеджер памяти читает блок и находит последнюю действительную запись. Сверяет контрольную сумму и загружает настройки. При изменении настроек эта запись делается недействительной, и записывается кусок данных в следующую запись. Стирание блока только после его заполнения.
Теперь у меня есть задача сконфигурировать модуль согласно настройкам.
В user_unit вначале читаются настройки из флеш, затем заполняются данными служебные структуры.
После этого в зависимости от режима (Access Point или Station) вызываются различные программы конфигурации.
В программе wifi_config_ap вроде бы всё нормально.
Задаётся режим, имя и пароль сети, MAC адрес и IP адрес, он сам себя устанавливает гейтвеем, назначается маска IP. Все эти данные при проверке вручную AT командами соответствуют настройкам. WiFi видит эту точку за заданном канале с нужным именем и MAC адресом.
Вот немного упрощённая программа:
Код:
/*******************************************************************************
* конфигурация ESP8266 в режиме Access point
* вызывается в user_init ()
*******************************************************************************/
bool ICACHE_FLASH_ATTR wifi_config_ap (void)
{
// режим точки доступа
if (wifi_get_opmode () != SOFTAP_MODE)
{
wifi_set_opmode (SOFTAP_MODE);
}
// Установка имени сети и пароля
wifi_softap_set_config (&user_softap_config);
// установка MAC адреса
wifi_set_macaddr (SOFTAP_IF, g.mac_main);
// остановить DHCPS, IP жёстко заданы
wifi_softap_dhcps_stop ();
// задать ip адреса и маски
wifi_set_ip_info (SOFTAP_IF, &g.ip_main);
// регистрация обработчика событий WiFi
wifi_set_event_handler_cb (wifi_user_ap_event_cb);
espconn_create (&g.user_udp_struct); // create udp
return (true);
}
А второй режим - Station настраивается с ошибками.
Режим сети, имя и MAC адрес задаются верно, но статический IP назначаться не хочет, хоть тресни. Примеры в сети смотрел, но везде получается динамический IP, а я хочу статику. Вот код, который у меня сейчас:
Код:
/*******************************************************************************
* конфигурация ESP8266 в режиме Station
*******************************************************************************/
bool ICACHE_FLASH_ATTR wifi_config_sta (void)
{
if (wifi_get_opmode () != STATION_MODE)
{
wifi_set_opmode (STATION_MODE);
}
// отключение службы назначения IP адресов
wifi_station_dhcpc_stop ();
wifi_softap_dhcps_stop ();
// установка текущей конфигурации
wifi_station_set_config (&user_sta_config); //
wifi_set_macaddr (STATION_IF, g.mac_main);
// задать ip адреса и маски
wifi_set_ip_info (STATION_IF, &g.ip_main);
wifi_set_ip_info (SOFTAP_IF, &g.ip_main);
// запись коллбэка по событиям WiFi
wifi_set_event_handler_cb (wifi_user_sta_event_cb);
wifi_station_set_hostname ("TEST1");
espconn_create (&g.user_udp_struct); // create udp return (true);
}
При проверке этого кода AT командами параметры wifi соответствуют заданным, а IP, GW, MASK все нули. И для SOFT_AP, и для STATION, хотя они явно заданы в программе.
Версия SDK 1.5.0
Может кто-нибудь подсказать, ЧЯДНТ?
Преамбула.
Есть функции SDK [inline]wifi_get_ip_info[/inline] и [inline]wifi_set_ip_info[/inline].
Также есть АТ команды [inline]AT+CIPAP?[/inline] и [inline]AT+CIPSTA?[/inline].
Амбула.
Если я устанавливаю режим Soft AP и записываю адрес командой [inline]wifi_set_ip_info (SOFTAP_IF, &g.ip_main)[/inline]
То при чтении изнутри программы функцией [inline]wifi_get_ip_info (SOFTAP_IF, &get_ip)[/inline] и проверке по терминалу [inline]AT+CIPAP?[/inline] результаты совпадают
А в режиме Station я также записываю адрес командой [inline]wifi_set_ip_info (STATION_IF, &g.ip_main)[/inline]
То чтение изнутри программы функцией [inline]wifi_get_ip_info (STATION_IF, &get_ip)[/inline] выдаёт правильный результат
А проверка по терминалу [inline]AT+CIPSTA?[/inline] выдаёт нули.
Да, почитал немного, после конфигурации модуля в режиме Soft AP добавил включение dhcps.
После этого второй блок в режиме Station подключился к первому, получил свои же назначенные адреса, и связь установилась.
Зачем они так программы пишут?
Потеряны четыре дня...