• Система автоматизации с открытым исходным кодом на базе 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. На плате присутствует делитель напряжения, если вы к этому.
 
Сверху Снизу