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

Несколько вопросов новичка

Denis Karasiov

New member
Добрый день.

Наконец-то удалось выделить время и начать погружаться в тему...
Собрал макетку для прошивки и удалось успешно прошить контроллер примером из ArduinoIDE. Схему собирал по рекомендациям с этого сайта. И тут вопрос...

На плате (ESP-12E) 9 контактов GPIO (не учитывая контакты на нижней стороне) + UART+контакты на нижней стороне (SPI + 2xGPIO).

На рекомендуемой схеме подключения (с учетом текстовых комментариев под схемой) GPIO0 GMIP2 - притянуты к питанию, GPIO15 - притянут к земле, GPIO16 - к RESET. Итого остается 5 контактов (без учета нижних). Или остальные после прошивки тоже можно использовать? Есть ли рекомендуемая схема включения контроллера после прошивки (в автономном варианте)?

И еще где-то прочитал, что нижние контакты нельзя (или не рекомендуется) использовать, т.к. они как-то завязаны на внутреннее взаимодействие с памятью и их использование приведет не предсказуемым последствиям. Это так или я что-то путаю? Если нет, то не очень понятно почему на плате для распайки контроллера не выводят эти ноги... И можно ли использовать SPI? Он тоже на нижней грани.

И, заодно, пара вопросов, которые возникли после прочтения SSP8266 SDK Programming Guide (исключительно на теоретическом уровне). Есть функция system_get_chip_id. Возвращает ID чипа. Он уникальный или нет? Очень уж много одинаковых букв в этом ID...

И там же увидел, что модуль (WiFi) может работать в режиме STATION+AP, то есть одновременно выступать как точка доступа и клиент. В свое время мне рассказывали (сам не пробовал), что ZigBee умеет выступать репитером для удаленных модулей (помимо основной функциональности), чтобы "добросить" сигнал нужного узла. Можно ли тут сделать что-то подобное, или на это не стоит рассчитывать? Есть ли такой опыт?

Спасибо.
 

Юрий Ботов

Moderator
Команда форума
Чем могу:

Можно ли тут сделать что-то подобное, или на это не стоит рассчитывать? Есть ли такой опыт?
Делюсь опытом - WiFi репитер на ESP-12F

Если нет, то не очень понятно почему на плате для распайки контроллера не выводят эти ноги...
Когда разводили платы (например NodeMcu) еще не было модулей с нижней гребенкой.

И можно ли использовать SPI? Он тоже на нижней грани.
На здоровье. Просто не забудьте принудительно управлять с ESP входом CS второго устройства. Пока происходит перезагрузка модуля на нем не должно быть 1. А потом когда будете общаться с этим устройством выставьте эту 1. (см документацию на второе устройство, CS может быть и инвертированным).

Или остальные после прошивки тоже можно использовать?
Ответ неоднозначен и зависит от задач. В целом - ДА. Но с кучей оговариваемых условий. Например: если не нужно вгонять ESP в сон и особенно выводить из него, то GPIO16 не надо цеплять на RESET и он в вашем распоряжении, потратьте время поройте документацию, там все написано. Некоторые ноги могут быть только входами, некоторые только выходами и т.п.
 

Denis Karasiov

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

Тут нашел, вроде, неплохой мануал по библиотеке WiFi: ESP8266WiFi Library · GitBook, в котором написано значимо больше функций и параметров библиотеки. В том числе у меня получилось прописать статический IP при подключении к точке.

Там же написано, что функция WiFi.begin(ssid, password, channel, bssid, connect) может иметь больше параметров, в т.ч. bssid - MAC-адрес точки доступа, к которой я подключаюсь.

Я сделал так:
Код:
uint8_t mac[6] = {0x91, 0xe6, 0xba, 0x91, 0x1b, 0x85};
WiFi.begin(EepromConfig.WIFI_STA_SESSID, EepromConfig.WIFI_STA_PASSWORD, 0, mac);
При этом изменяя значение МАК-адреса - она все равно подключается.

Вопрос: Я то-то не правильно делаю? Может ли быть такое (на сколько это вероятно), что это просто пока не реализованная функция или неправильно работающая функция? Стоит ли доверять этой статье (ссылка выше)?

И еще независимо созрел отдельный вопрос. Есть функции Serial.*, для работы с терминалом, который подключен физически кабелем через соответствующие пины на контроллере. А можно ли к этому терминалу подключаться со стороны сети (через putty и т.п.)? Или, возможно, есть другая библиотека для этого?

Спасибо.
 

Сергей_Ф

Moderator
Команда форума
При этом изменяя значение МАК-адреса - она все равно подключается.
а почему не должно подключаться по Вашему? Вы задаете значение MAC адреса для ESP - посмотрите его на Вашем роутере, оно должно быть как Вы указали. Если нет, то это рудименты от библиотеки от Ардуино, там нет MAC-адреса на сетевых платах.
 

Denis Karasiov

New member
а почему не должно подключаться по Вашему? Вы задаете значение MAC адреса для ESP - посмотрите его на Вашем роутере, оно должно быть как Вы указали. Если нет, то это рудименты от библиотеки от Ардуино, там нет MAC-адреса на сетевых платах.
Из документа:
  • bssid - mac address of AP, this parameter is also optional
Это не адрес ESP, а адрес точки, к которой происходит подключение. У Ubiquti это называется типа "Look to AP", чтобы нельзя было подменить родительский узел сети.

Код:
uint8_t mac[6] = {0x91, 0xe6, 0xba, 0x91, 0x1b, 0x85};
WiFi.begin(EepromConfig.WIFI_STA_SESSID, EepromConfig.WIFI_STA_PASSWORD, 0, mac);
...
Serial.print("\t\tWiFi IP address: ");
        Serial.println(WiFi.localIP());
uint8_t macAddr[6];
  WiFi.macAddress(macAddr);
  Serial.printf("\t\tWiFi MAC address: %02x:%02x:%02x:%02x:%02x:%02x\n",
             macAddr[0], macAddr[1], macAddr[2], macAddr[3], macAddr[4], macAddr[5]);
     
Возващает в терминал так:
        WiFi IP address: 192.168.1.212
        WiFi MAC address: 5c:cf:7f:81:73:c4
То есть она и не пытается присвоить этот МАК себе. И еще обратил внимание - если я указываю неверный МАК - подключение происходит на 7-8 точке попыток, а если вообще не указываю этот параметр - на 2-3 точке (стандартного цикла while != WL_CONNECTED)
 

nikolz

Well-known member
Тут нашел, вроде, неплохой мануал по библиотеке WiFi: ESP8266WiFi Library · GitBook, в котором написано значимо больше функций и параметров библиотеки. В том числе у меня получилось прописать статический IP при подключении к точке.
Там же написано, что функция WiFi.begin(ssid, password, channel, bssid, connect) может иметь больше параметров, в т.ч. bssid - MAC-адрес точки доступа, к которой я подключаюсь.
Рекомендую читать
2c-esp8266_non_os_sdk_api_reference_en.pdf
т е описание функций SDK, там все написано.
Библиотека дурины построена на функциях SDK.
-------------------------
Про использование выводов в ESP-12F читайте здесь
esp8266-technical_reference_en.pdf
-------------------------
про создание сети и репитеров читайте здесь:
30a-esp8266_nonos_mesh_api_reference_v1.0.0_20160203.pdf
30C_ESP-NOW__User_Guide_EN.pdf

---------------------------
про режим сна читайте здесь:
9b-esp8266_low_power_solutions_en.pdf
9B-ESP8266-Sleep_Mode_Low_Power_Solutions__EN_V1.1_20160415.pdf
 

Сергей_Ф

Moderator
Команда форума
@Denis Karasiov а дальше в документации есть
Код:
uint8 bssid_set – Flag to indicate whether or not to use the bssid property. A value
of 1 means to use and a value of 0 means to not use.
• uint8 bssid[6] – If several access points have the same SSID, BSSID can contain a
MAC address to indicate which of the access points to connect to.
Если уж разговор про bssid пошел. Как я понял, пытается подключиться к указанной точке доступа, если их несколько с одним именем. А если одна? Тогда, наверное, подключается к той что есть. Потому и дольше.

Но если разговор о Ардуино ИДЕ, то как сделано там надо смотреть. Может вообще рудимент от AVR остался для совместимости, который реально в работе не участвует.
 

Alexgulin

New member
подскажите, PZEM питается 5 вольтами. на rx померял мультиметром выдаёт 4.25. гарантированная смерть 8266. конвертеры уровней жопорукие на почте потеряли. сколько надо ограничить 5 вольт сопротивлением(смотрим уже 4.25 на выходе) чтобы получилось 3.3вольта
 

Сергей_Ф

Moderator
Команда форума
@Alexgulin в принципе, поставьте один резистор на 1-2кОм и всё. А на практике, может и так работать.
Если очень хочется, поставьте делитель на резисторах 1 (вход) и 2 (на землю) кОм.
 

Alexgulin

New member
@Alexgulin в принципе, поставьте один резистор на 1-2кОм и всё. А на практике, может и так работать.
Если очень хочется, поставьте делитель на резисторах 1 (вход) и 2 (на землю) кОм.
что? то есть подать на пин TX ESP8266 напряжение 4.25 и он не сгорит?
 

Сергей_Ф

Moderator
Команда форума
@Alexgulin "Губит людей не пиво, губит людей вода . "
Так и тут, не важно какое напряжение, главное какой ток. Поставив резистор, Вы ограничиваете ток до безопасного уровня - так что не сгорит.
А по даташиту, на входе защита стоит до 6 с лишним вольт, кажется. Так что многие китайские производители не заморачиваются и вообще ничего не ставят.
 
Сверху Снизу