• Система автоматизации с открытым исходным кодом на базе 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 с лишним вольт, кажется. Так что многие китайские производители не заморачиваются и вообще ничего не ставят.
 
Сверху Снизу