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

Общие вопросы по Arduino IDE для ESP8266

Dminriy_Donskoy

New member
Здравствуйте.
вопрос 1.
ESP8266. Прошивка только инициализации точки доступа (АР).
Команда WiFi.printDiag(Serial); выводит в СОМ порт информацию об имени и пароле домашней сети WiFi когда она выключена.
Прошивка ESP8266 также выполнялась при отключенной домашней сети WiFi. Что за чудеса?
Откуда взялась в ESP8266 информация о домашней сети WiFi когда она всё время выключена?
Похоже, что это делает софт Arduino на этапе прошивки ESP8266, извлекая необходимые данные о сети с компа.
Если я прав, то для чего это сделано?
вопрос 2.
На манеже всё тоже.
функция WiFi.softAPgetStationNum() возвращает не только количество подключенных клиентов к точке доступа,
но и количество клиентов, находящихся в процессе подключения к точке доступа!
т.е. пытаемся подключиться к точке доступа с ложным паролем, а функция выдает, что мы уже подключены.
Это бока или так было задумано?
Спасибо за ответ.
 

=AK=

New member
Команда WiFi.printDiag(Serial); выводит в СОМ порт информацию об имени и пароле домашней сети WiFi когда она выключена.
Или у вас в скетче где-то залипла эта инфа и вы про нее забыли, или, как менее вероятный вариант, вы раньше прописывали ее из скетча и она запомнилась во флэше ESP, откуда теперь читается.

т.е. пытаемся подключиться к точке доступа с ложным паролем, а функция выдает, что мы уже подключены.
У вас небось задействована функция автоподключения ESP. Один раз подключились с правильным паролем, теперь ESP автоматически подключается еще до того, как вы ему дадите неправильный. Вы сначала дайте команду отключения от точки, а уж потом подсовывайте неправильный пароль.
 

Chatlanin

New member
Команда WiFi.printDiag(Serial); выводит в СОМ порт информацию об имени и пароле домашней сети WiFi когда она выключена
Данные о сети сохраняются в флеш при попытке подключения. Чтобы стереть их нужно дать команду. WiFi.disconnect(true).
 

Dminriy_Donskoy

New member
Или у вас в скетче где-то залипла эта инфа и вы про нее забыли, или, как менее вероятный вариант, вы раньше прописывали ее из скетча и она запомнилась во флэше ESP, откуда теперь читается.
Вы правы, ESP когда-то работала в режиме станции и запомнила имя и пароль этого подключения. При записи нового скетча эта инфа не стирается из ESP-ки. Где то встречался с рекомендацией очистки флеш. В Ардуино этой возможности похоже нет.

У вас небось задействована функция автоподключения ESP. Один раз подключились с правильным паролем, теперь ESP автоматически подключается еще до того, как вы ему дадите неправильный. Вы сначала дайте команду отключения от точки, а уж потом подсовывайте неправильный пароль.
Попробовал и то (команда WiFi.disconnect(true)) и создал АР на ESP-ке с новым именем и новым паролем - результат тот же: в процессе подключения с ложным паролем функция WiFi.softAPgetStationNum() возвращает значение "1" пока не закончится процесс попытки подключения.
 

gerkimuyda

New member
Осмелюсь предположить (т.к. спецификацию не изучал), что данная команда возвращает количество подключенных (а не авторизованных) устройств.
Т.е. клиент сначала подключается к АП, а потом пытается авторизоваться, чтобы АП его пускала дальше, а если авторизация не удалась - тогда отключается от АП.
(Например, у меня на роутере разным клиентам (в зависимости от МАК адреса) можно назначить разные пароли и выдавать разные настройки. Т.е. разные клиенты к одной и той-же точке заходят под разными паролями).
 

Dminriy_Donskoy

New member
Или у вас в скетче где-то залипла эта инфа и вы про нее забыли, или, как менее вероятный вариант, вы раньше прописывали ее из скетча и она запомнилась во флэше ESP, откуда теперь читается.


У вас небось задействована функция автоподключения ESP. Один раз подключились с правильным паролем, теперь ESP автоматически подключается еще до того, как вы ему дадите неправильный. Вы сначала дайте команду отключения от точки, а уж потом подсовывайте неправильный пароль.
По первому вопросу Вы правы, ранее ESP-была прошита для работы в режиме станции и, видимо, запомнила имя и пароль подключения к домашней сети. заливка нового скетча не стирает эту инфу. где-то читал надо флеш память стирать принудительно.
 

Dminriy_Donskoy

New member
Осмелюсь предположить (т.к. спецификацию не изучал), что данная команда возвращает количество подключенных (а не авторизованных) устройств.
Т.е. клиент сначала подключается к АП, а потом пытается авторизоваться, чтобы АП его пускала дальше, а если авторизация не удалась - тогда отключается от АП.
(Например, у меня на роутере разным клиентам (в зависимости от МАК адреса) можно назначить разные пароли и выдавать разные настройки. Т.е. разные клиенты к одной и той-же точке заходят под разными паролями).
Ваше предположение скорее всего близко к истине. Тогда как определить факт авторизованного подключения при этом не учитывая пытающихся подключиться?
 

gerkimuyda

New member
Ваше предположение скорее всего близко к истине. Тогда как определить факт авторизованного подключения при этом не учитывая пытающихся подключиться?
По выданным dhcp-сервером ip-адрессам, привязав их по маку к списку подключенных клиентов (команды и такую возможность в документации к API не искал). Вторым можно пренебречь, если не столь важно, клиент еще на связи, или сейчас отвалиться по таймауту.
 

Dminriy_Donskoy

New member
Данные о сети сохраняются в флеш при попытке подключения. Чтобы стереть их нужно дать команду. WiFi.disconnect(true).
По выданным dhcp-сервером ip-адрессам, привязав их по маку к списку подключенных клиентов (команды и такую возможность в документации к API не искал). Вторым можно пренебречь, если не столь важно, клиент еще на связи, или сейчас отвалиться по таймауту.
спасибо, буду пробовать
 

Panomax

New member
Прошиваю ESP 8266 12E c помощью Flash Tool, во время загрузки bin файлов выходит ошибка.

Erasing flash...
head: 7 ;total: 7
erase size : 16384
Writing at 0x00001800... (2 %)Exception in thread Thread-1:
Traceback (most recent call last):
File "threading.pyo", line 532, in __bootstrap_inner
File "download_panel.pyo", line 348, in run
File "esptool.pyo", line 242, in flash_download_thread
File "esptool.pyo", line 175, in flash_download
File "esptool.pyo", line 504, in flash_block
Exception: Failed to write to target Flash

Подскажите в чем проблема ? куда копать ?
 

Igorka

New member
Такой вот вопрос...
Хочу на esp8266 сделать ПИД-регулятор.Смысл городить это на esp8266 конечно сомнительный, все можно вместить и в Мегу 8.Но есть хотелка, что бы текущую температуру можно было смотреть на телефоне, через приложение Blynk.Все это как бы легко реализуется, но есть одно но!
Функция ПИД-регулятора, должна вызываться с постоянным периодом времени, предположим раз в секунду.Если я правильно понимаю, когда работает Wi-Fi модуль приоритет будет за ним и ни какими таймерами я не смогу реализовать ТОЧНОЕ время вызова своей функции.
Или же как то можно решить эту проблему?
 
Последнее редактирование:

krepton85

Member
@Igorka, если нужно "раз в секунду" то для этого можно использовать библиатеку ticker.h и преривание по таймеру. Но я так понимаю ПИД вы собираетесь делать на симмисторе и с частатой 50 Гц, то здесь точно не раз в секунду, а каждых 10 милиСек (100 Гц). И использовать придется не только преривание по таймеру но так же и внешнее приривание, для синхронизации с сетевой синусоидой 220 вольт ( отслеживать переход через ноль синусоиды).
В обще ничего хорошего из этого не выйдет. Разве что взять отдельный микроконтроллер супер дешевый, для диммера симмисторного, и управлять этим МК с помощью esp8266 только так.
 

Igorka

New member
@krepton85
От внешнего прерывания можно уйти если скажем использовать оптопару с детектором нуля (moc3041).Можно и ШИМ-ить транзистором включенным в диодный мостик,Благо у меня нагрузи той до ста ватт.
Но опять же повторюсь.При работе Wi-Fi модуля приоритет отдается его работе и не будет ли пропусков в работе таймера, пусть на той же библиотеке ticker.h?
 

krepton85

Member
@Igorka, если ШИМ - ить то проблем вообще ни каких. Уже делал так, через диодный мостики и IGBT транзистор, оптопару, стабилитрон, резисторы. Тэстировал это все с нагрузкой 150 ватт, нагрев транзистора при такой нагрузке 80 градусов, резисторы 1 ваттные - нагрев 90 градусов (как никак, можно использовать как доп. нагревательный элемент :) ).
 

vworld

New member
NodeMCU v3, Arduino IDE 1.8.5 - загружаю Blink из примеров - светодиод не моргает, добавляю мониторинг порта и в код ставлю Serial.println("ON"); на включение светодиода и Serial.println("OFF"); на выключение - в мониторе порта вижу вывод.
Пробовал в настройках указывать разные платы - не помогает, сейчас шьюсь, указывая плату NodeMCU 1.0
UPD твечу сам себе, что заработало только так - #define LED_BUILTIN 2
 
Последнее редактирование:

Сергей_Ф

Moderator
Команда форума
@vworld не ту плату в настройках АрдуиноИДЕ выбрали, потому и не сработал светодиод. Ну и всегда можно подправить описание платы.
 

andrik_zp

Member
хорошо пусть не ТУ плату, а какую же тогда надо выбирать? почти все перпробовал
Да ненужно ничего пробовать, нужно просто в функции изменения состояния пина, указать пин к которому у вас на плате подключен светодиод.
 

vworld

New member
Да ненужно ничего пробовать, нужно просто в функции изменения состояния пина, указать пин к которому у вас на плате подключен светодиод.
так и делаю
#define LED_BUILTIN 2
но не очень удобно в голове всегда держать, что так объявлять надо :(
 

andrik_zp

Member
Можно и не обьявлять, можно прямо в функции писать номер порта: digitalWrite(2, HIGH);
 
Сверху Снизу