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

NodeMCU v2 аналоговый вход и работа в режиме точки доступа

PANda81

New member
Уважаемые ESPводы, подскажите, пожалуйста. Наверняка кто-нибудь сталкивался и может быть даже знает способ решения проблемы. Беглый поиск по форуму результата не дал. Раньше столкнулся с тем, что на плате не подымается WiFi, если при старте на определенных цифровых входах присутствует сигнал. Теперь оказывается, что и при работе с аналоговым входом не стартует в режиме точки доступа, хотя в режиме клиента работает. Заранее благодарю за ответы.
 

Сергей_Ф

Moderator
Команда форума
на плате не подымается WiFi, если при старте на определенных цифровых входах присутствует сигнал.
что то не слышал о таком. Можно задать старт в другом режиме загрузки, это да. Но на WIFI это не влияет.
при работе с аналоговым входом не стартует в режиме точки доступа, хотя в режиме клиента работает
на аналоговом входе ВСЕГДА присутствует сигнал. При каком именно сигнале на входе у вас не работает?
Приведите схему и ваш код. Скорее всего дело не в ESP.
 

PANda81

New member
Вангую что эти входы - gpio0, gpio2.
Нет. D7 или D8 (gpio 13 и 15), не помню точно. Садил на них оптический энкодер от принтера. И чтобы esp стартовала с WiFi, подбирал положение своего механизма. После старта уже работала нормально.
 

Сергей_Ф

Moderator
Команда форума
Нет. D7 или D8 (gpio 13 и 15), не помню точно. Садил на них оптический энкодер от принтера. И чтобы esp стартовала с WiFi, подбирал положение своего механизма. После старта уже работала нормально.
15-й отвечает за загрузку с sd-карты. Его нельзя произвольно использовать при старте.
Там не wifi не будет, а не будет загрузки из внутренней флеш памяти.
 

PANda81

New member
что то не слышал о таком. Можно задать старт в другом режиме загрузки, это да. Но на WIFI это не влияет.

на аналоговом входе ВСЕГДА присутствует сигнал. При каком именно сигнале на входе у вас не работает?
Приведите схему и ваш код. Скорее всего дело не в ESP.
NodeMCU используется с моторшилдом с контролем положения механизма потенциометром. Работу потенциометра проверял через Com порт. Для отладки использую приложение RemoteXY. При выяснении причин неполадки отсоединил NodeMCU от шилда, питание через usb, и исключал из кода все строки по очереди. В приведенном коде одна закоментированная строка (считывание аналогового выхода), которая и влияет будет ли работать точка доступа или нет. В режиме клиента через роутер и приложение Blynk все работает.

#define REMOTEXY_MODE__ESP8266WIFI_LIB_POINT
#include <ESP8266WiFi.h>
#include <RemoteXY.h>

int Servo_Set, pol;

extern "C" {
#include "user_interface.h";
}
#define REMOTEXY_WIFI_SSID "Kotel2"
#define REMOTEXY_WIFI_PASSWORD "12345678"
#define REMOTEXY_SERVER_PORT 6377
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] = {255, 2, 0, 0, 0, 12, 0, 13, 13, 1, 7, 53, 21, 21, 20, 5, 2, 26, 2};
struct {
int16_t edit_1;
unsigned char connect_flag;
} RemoteXY;
#pragma pack(pop)

void setup() {
Serial.begin(115200);
RemoteXY_Init ();
pinMode(0, OUTPUT);
digitalWrite(0, 0);
}

void loop() {
RemoteXY_Handler ();
Servo_Set = (RemoteXY.edit_1);
// pol = map(analogRead(0), 0, 1023, -20, 187);
Serial.println(pol);
if ((Servo_Set - pol) > 0) {
analogWrite(5, 1023);
digitalWrite(0, 0);
} else if ((Servo_Set - pol) < 0) {
analogWrite(5, 1023);
digitalWrite(0, 1);
} else {
analogWrite(5, 0);
digitalWrite(0, 0);
}
}

bool _isTimer(unsigned long startTime, unsigned long period )
{
unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
}
 

Сергей_Ф

Moderator
Команда форума
NodeMCU используется с моторшилдом с контролем положения механизма потенциометром. Работу потенциометра проверял через Com порт. Для отладки использую приложение RemoteXY. При выяснении причин неполадки отсоединил NodeMCU от шилда, питание через usb, и исключал из кода все строки по очереди. В приведенном коде одна закоментированная строка (считывание аналогового выхода), которая и влияет будет ли работать точка доступа или нет. В режиме клиента через роутер и приложение Blynk все работает.
Для оформления кода на форуме используйте тег
Код:
[CODE]
В вашем примере вы не поднимаете точки доступа вообще. Считывание данных с аналогового входа у вас осуществляется в loop()и никак не может влиять на поднятие точки доступа. Поскольку вы тщательно скрывали использование библиотеки RemoteXY, то смею предположить, что дело в ней. Обратитесь к документации данной библиотеки.
Схему вы так и не привели. Успехов в вашей борьбе.
 

CodeNameHawk

Moderator
Команда форума
В приведенном коде одна закоментированная строка (считывание аналогового выхода), которая и влияет будет ли работать точка доступа или нет.
Проверьте другим способом, оставьте в коде считывание с аналогового входа и вывод в сериал, все остальное выкиньте.
 

PANda81

New member
Для оформления кода на форуме используйте тег
Код:
[CODE]
В вашем примере вы не поднимаете точки доступа вообще. Считывание данных с аналогового входа у вас осуществляется в loop()и никак не может влиять на поднятие точки доступа. Поскольку вы тщательно скрывали использование библиотеки RemoteXY, то смею предположить, что дело в ней. Обратитесь к документации данной библиотеки.
Схему вы так и не привели. Успехов в вашей борьбе.
Спасибо за ответы. Наверное вы правы, буду копать в этом направлении. Какая схема? Плата висит в воздухе на USB кабеле.
 

Сергей_Ф

Moderator
Команда форума
Есть такая плата - Witty Cloud
У неё вход ADC постоянно подключен к делителю с фоторезистором. См. схему по ссылке.
Никаких проблем с входом в режим точки доступа на ней нет. Если у вас потенциометр не включен на какой-либо цифровой gpio, то и влиять на это не может. А если подключен к gpio, то опять-таки смотрите таблицу выводов по ссылке.
Для проверки возьмите простой скетч из примеров с поднятием точки доступа и поставьте туда печать значения считанного с аналогового входа.
 

Сергей_Ф

Moderator
Команда форума
(currentTime >=(4294967295-startTime+period))
не поясните что это такое? Вы сами придумали или подсмотрели где?
 

PANda81

New member
Есть такая плата - Witty Cloud
У неё вход ADC постоянно подключен к делителю с фоторезистором. См. схему по ссылке.
Никаких проблем с входом в режим точки доступа на ней нет. Если у вас потенциометр не включен на какой-либо цифровой gpio, то и влиять на это не может. А если подключен к gpio, то опять-таки смотрите таблицу выводов по ссылке.
Для проверки возьмите простой скетч из примеров с поднятием точки доступа и поставьте туда печать значения считанного с аналогового входа.
Проблема с точкой доступа у меня вызвала больше спортивный интерес. Потом все равно это будет работать в другом режиме. В принципе уже работает, но ещё не смонтировал на месте.
 

Сергей_Ф

Moderator
Команда форума
Проблема с точкой доступа у меня вызвала больше спортивный интерес. Потом все равно это будет работать в другом режиме. В принципе уже работает, но ещё не смонтировал на месте.
Судя по константам, вы собрались управлять котлом? Тогда никаких нерешённых моментов быть не должно в принципе.
 

Сергей_Ф

Moderator
Команда форума
Рекомендую функцию _isTimer переписать так:

Код:
bool _isTimer(const unsigned long startTime, const unsigned long period )
{
    return millis() - startTime >= period;
}
Делать она будет то же самое, но лаконичнее и грамотнее.
Но мне ещё непонятно зачем каждый раз передавать значения startTime и period? Они каждый раз разные? Не вижу где вы вызываете эту функцию?
 
Последнее редактирование:

PANda81

New member
Куда подключен потенциометр? У него три вывода! У меня запотел гадальные шар, не вижу.
Вопросов по подключению потенциометра к esp у меня нет. На крайние ноги 3,3 В, со средней на А0. На плате присутствует делитель напряжения, если вы к этому.
 
Сверху Снизу