Вопросы RemoteXY - ESP8266

tretyakov_sa

Moderator
Команда форума
Как использовать библиотеку со сторонним кодом для подключения к WiFi?
 

krepton85

New member
Как использовать библиотеку со сторонним кодом для подключения к WiFi?
Хороший вопрос, но я пока даже не понял как подключится к роутеру этим модулем, тут только как точка доступа используется, хотя в последней версии обещали что и к роутеру можно.
 

tretyakov_sa

Moderator
Команда форума
Хороший вопрос, но я пока даже не понял как подключится к роутеру этим модулем, тут только как точка доступа используется, хотя в последней версии обещали что и к роутеру можно.
Вот ответ на этот вопрос:
 
  • Like
Реакции: pet

krepton85

New member
Что то ни как ни могу преобразовать диапазоны значений от слайдеров с 0 до 100 в с 0 до 255 для ШИМ.
Код:
//////////////////////////////////////////////
//        RemoteXY include library          //
//     use  library  version 2.2.2 or up    //
//   use ANDROID app version 3.4.1 or up    //
//////////////////////////////////////////////

/* определение режима соединения и подключение библиотеки RemoteXY */
#define REMOTEXY_MODE__ESP8266_SOFTSERIAL
#include <SoftwareSerial.h>

#include <RemoteXY.h>

/* настройки соединения */
#define REMOTEXY_SERIAL_RX 2
#define REMOTEXY_SERIAL_TX 3
#define REMOTEXY_SERIAL_SPEED 115200
#define REMOTEXY_WIFI_SSID "мой ссид"
#define REMOTEXY_WIFI_PASSWORD "мой пароль"
#define REMOTEXY_SERVER_PORT 6377


/* конфигурация интерфейса  */
unsigned char RemoteXY_CONF[] =
  { 7,5,144,0,4,0,4,128,5,7
  ,52,5,4,4,128,5,17,52,5,1
  ,4,128,5,27,52,5,6,1,0,10
  ,47,7,7,4,208,146,208,186,208,187
  ,32,49,0,1,0,26,47,7,7,1
  ,208,146,209,139,208,186,208,187,32,49
  ,0,1,0,58,47,7,7,4,208,146
  ,208,186,208,187,32,50,0,1,0,74
  ,47,7,7,1,208,146,209,139,208,186
  ,208,187,32,50,0,65,2,19,40,5
  ,5,2,65,1,67,39,5,5,2,66
  ,131,66,3,18,8,4,66,131,67,14
  ,16,7,1,66,131,67,24,16,7,6
  ,130,1,3,36,86,20,9,129,0,21
  ,2,9,4,9,82,71,66,0 };

/* структура определяет все переменные вашего интерфейса управления */
struct {

    /* input variable */
  signed char slider_1; /* =0..100 положение слайдера */

  signed char slider_2; /* =0..100 положение слайдера */
  signed char slider_3; /* =0..100 положение слайдера */
  unsigned char button_1; /* =1 если кнопка нажата, иначе =0 */
  unsigned char button_2; /* =1 если кнопка нажата, иначе =0 */
  unsigned char button_3; /* =1 если кнопка нажата, иначе =0 */
  unsigned char button_4; /* =1 если кнопка нажата, иначе =0 */

    /* output variable */
  unsigned char led_1_g; /* =0..255 яркость зеленого цвета индикатора */
  unsigned char led_2_b; /* =0..255 яркость синего цвета индикатора */
  signed char level_1; /* =0..100 положение уровня */
  signed char level_2; /* =0..100 положение уровня */
  signed char level_3; /* =0..100 положение уровня */

    /* other variable */
  unsigned char connect_flag;  /* =1 if wire connected, else =0 */

} RemoteXY;

/////////////////////////////////////////////
//           END RemoteXY include          //
/////////////////////////////////////////////

#define PIN_BUTTON_1 8
#define PIN_BUTTON_2 8
#define PIN_BUTTON_3 9
#define PIN_BUTTON_4 9

int Led_R = 10;
int Led_G = 5;
int Led_B = 6;
int val_1;
int val_2;
int val_3;

int val_4;
int val_5;
int val_6;

void setup()
{

  RemoteXY_Init ();

  pinMode (PIN_BUTTON_1, OUTPUT);
  pinMode (PIN_BUTTON_2, OUTPUT);
  pinMode (PIN_BUTTON_3, OUTPUT);
  pinMode (PIN_BUTTON_4, OUTPUT);

pinMode (Led_R, OUTPUT);
pinMode (Led_G, OUTPUT);
pinMode (Led_B, OUTPUT);
  // TODO you setup code

}

void loop()
{

val_1 = map(1)(RemoteXY.slaider_1, 0, 100, 0, 255);
analogWrite(Led_R,val_1 );
val_2 = map(2)(RemoteXY.slaider_2, 0, 100, 0, 255);
analogWrite(Led_G,val_2 );
val_3 = map(3)(RemoteXY.slaider_3, 0, 100, 0, 255);
analogWrite(Led_B,val_3 );
val_4 = map(4)(analogRead(Led_R), 0, 255, 0, 100);
RemoteXY.level_1 = val_4;
val_5 = map(5)(analogRead(Led_G), 0, 255, 0, 100);
RemoteXY.level_2 = val_5;
val_6 = map(6)(analogRead(Led_B), 0, 255, 0, 100);
RemoteXY.level_3 = val_6;

  RemoteXY_Handler ();

  digitalWrite(PIN_BUTTON_1, (RemoteXY.button_1==0)?LOW:HIGH);
  digitalWrite(PIN_BUTTON_2, (RemoteXY.button_2==0)?LOW:HIGH);
  digitalWrite(PIN_BUTTON_3, (RemoteXY.button_3==0)?LOW:HIGH);
  digitalWrite(PIN_BUTTON_4, (RemoteXY.button_4==0)?LOW:HIGH);


  // TODO you loop code
  // используйте структуру RemoteXY для передачи данных


}


Я новичок в ардуино, впервые использую функцию map для переноса значений из одного диапазона в др, может что то ни так делаю.
Компилятор сыпит каким то не понятными ошибками.
Походу функция map не может напрямую обращаться к данным из библиотеки remoteXY.
Может нужно создать еще 6 переменных и уровнять их с переменными из библиотеки?
 

Вложения

Последнее редактирование:

tretyakov_sa

Moderator
Команда форума
Что то ни как ни могу преобразовать диапазоны значений от слайдеров с 0 до 100 в с 0 до 255 для ШИМ.
Код:
val_1 = map(1)(RemoteXY.slaider_1, 0, 100, 0, 255);
analogWrite(Led_R,val_1 );
val_2 = map(2)(RemoteXY.slaider_2, 0, 100, 0, 255);
analogWrite(Led_G,val_2 );
val_3 = map(3)(RemoteXY.slaider_3, 0, 100, 0, 255);
analogWrite(Led_B,val_3 );
val_4 = map(4)(analogRead(Led_R), 0, 255, 0, 100);
RemoteXY.level_1 = val_4;
val_5 = map(5)(analogRead(Led_G), 0, 255, 0, 100);
RemoteXY.level_2 = val_5;
val_6 = map(6)(analogRead(Led_B), 0, 255, 0, 100);
RemoteXY.level_3 = val_6;
Ошибка в имени переменной: RemoteXY.slaider_1
Должно быть: RemoteXY.slider_1
откуда map(1) и т.д.
Получится так:
Код:
val_1 = map(RemoteXY.slider_1, 0, 100, 0, 255);
analogWrite(Led_R,val_1 );
val_2 = map(RemoteXY.slider_2, 0, 100, 0, 255);
analogWrite(Led_G,val_2 );
val_3 = map(RemoteXY.slider_3, 0, 100, 0, 255);
analogWrite(Led_B,val_3 );
val_4 = map(analogRead(Led_R), 0, 255, 0, 100);
RemoteXY.level_1 = val_4;
val_5 = map(analogRead(Led_G), 0, 255, 0, 100);
RemoteXY.level_2 = val_5;
val_6 = map(analogRead(Led_B), 0, 255, 0, 100);
RemoteXY.level_3 = val_6;
 

krepton85

New member
Ошибка в имени переменной: RemoteXY.slaider_1
Должно быть: RemoteXY.slider_1
откуда map(1) и т.д.
Получится так:
Код:
val_1 = map(RemoteXY.slider_1, 0, 100, 0, 255);
analogWrite(Led_R,val_1 );
val_2 = map(RemoteXY.slider_2, 0, 100, 0, 255);
analogWrite(Led_G,val_2 );
val_3 = map(RemoteXY.slider_3, 0, 100, 0, 255);
analogWrite(Led_B,val_3 );
val_4 = map(analogRead(Led_R), 0, 255, 0, 100);
RemoteXY.level_1 = val_4;
val_5 = map(analogRead(Led_G), 0, 255, 0, 100);
RemoteXY.level_2 = val_5;
val_6 = map(analogRead(Led_B), 0, 255, 0, 100);
RemoteXY.level_3 = val_6;
Да, спасибо, я уже заметил эту ошибку, все равно не компилит. Сделал проще:

Код:
slider_1 = RemoteXY.slider_1 * 255 / 100 ;
analogWrite(Led_R, slider_1);
slider_2 = RemoteXY.slider_2 * 255 / 100 ;
analogWrite(Led_R, slider_2);
slider_3 = RemoteXY.slider_3 * 255 / 100 ;
analogWrite(Led_R, slider_3);

RemoteXY.level_1 = analogRead(Led_R) * 100 / 255 ;
RemoteXY.level_2 = analogRead(Led_G) * 100 / 255 ;
RemoteXY.level_3 = analogRead(Led_B) * 100 / 255 ;
 

krepton85

New member
Да, спасибо, я уже заметил эту ошибку, все равно не компилит. Сделал проще:

Код:
slider_1 = RemoteXY.slider_1 * 255 / 100 ;
analogWrite(Led_R, slider_1);
slider_2 = RemoteXY.slider_2 * 255 / 100 ;
analogWrite(Led_R, slider_2);
slider_3 = RemoteXY.slider_3 * 255 / 100 ;
analogWrite(Led_R, slider_3);

RemoteXY.level_1 = analogRead(Led_R) * 100 / 255 ;
RemoteXY.level_2 = analogRead(Led_G) * 100 / 255 ;
RemoteXY.level_3 = analogRead(Led_B) * 100 / 255 ;
И как то с кнопками не понятно.
Код:
digitalWrite(PIN_BUTTON_1, (RemoteXY.button_1==0)?LOW:HIGH);
  digitalWrite(PIN_BUTTON_2, (RemoteXY.button_2==0)?LOW:HIGH);
  digitalWrite(PIN_BUTTON_3, (RemoteXY.button_3==0)?LOW:HIGH);
  digitalWrite(PIN_BUTTON_4, (RemoteXY.button_4==0)?LOW:HIGH);
как то не по Ардуински это написано, не понятно как они работают? Нажал - состояние пина инвертировалось, нажал еще раз опять инвертировалось или же нажал - появился High уровень на пине, отпустил кнопку - low уровень.
 

Евгений Шемануев

Moderator
Команда форума
И как то с кнопками не понятно.
Код:
digitalWrite(PIN_BUTTON_1, (RemoteXY.button_1==0)?LOW:HIGH);
  digitalWrite(PIN_BUTTON_2, (RemoteXY.button_2==0)?LOW:HIGH);
  digitalWrite(PIN_BUTTON_3, (RemoteXY.button_3==0)?LOW:HIGH);
  digitalWrite(PIN_BUTTON_4, (RemoteXY.button_4==0)?LOW:HIGH);
как то не по Ардуински это написано, не понятно как они работают? Нажал - состояние пина инвертировалось, нажал еще раз опять инвертировалось или же нажал - появился High уровень на пине, отпустил кнопку - low уровень.
Выражение со знаком ? возвращает значение до знака ":" если условие до знака "?" выполняется, если условие не выполняется, будет возвращено значение после знака ":". Это написано по "С++ ински"))) .
Т.е. если кнопка не нажата, то на пин подается LOW, иначе HIGHT.
Можете переписать так (что в принципе то же самое):
if (RemoteXY.button_1==0) digitalWrite (PIN_BUTTON_1,LOW) else digitalWrite (PIN_BUTTON_1,HIGH);
 

tretyakov_sa

Moderator
Команда форума
Евгений, спасибо за разработку!
Мой вопрос остался без ответа:
Как использовать библиотеку со сторонним кодом для подключения к WiFi?
 

Евгений Шемануев

Moderator
Команда форума
Евгений, спасибо за разработку!
Мой вопрос остался без ответа:
Как использовать библиотеку со сторонним кодом для подключения к WiFi?
Не совсем понял вопроса. Отвечу как понял.
Получите заготовку кода из RemoteXY и вставьте нужные части заготовки в ваш код. Нужные части:
1. код между тегами "RemoteXY include library" и "END RemoteXY include".
2. Обязательно добавить RemoteXY_Init (); в функцию setup(),
3. Обязательно добавить RemoteXY_Handler (); в функцию loop(),
Далее в вашем коде используйте структуру RemoteXY что бы взаимодействовать с контролами.
Еще одно важное требование - время цикла loop не должно быть более 1 секунды.
 

tretyakov_sa

Moderator
Команда форума
Не совсем понял вопроса. Отвечу как понял.
.
Я имею в виду когда в скетче уже есть код для подключения к WiFi. Нужно просто вставить сам интерфейс. Но библиотека требует наличия
[HASHTAG]#define[/HASHTAG] REMOTEXY_MODE__ESP8266WIFI_LIB.
 

Евгений Шемануев

Moderator
Команда форума
Я имею в виду когда в скетче уже есть код для подключения к WiFi. Нужно просто вставить сам интерфейс. Но библиотека требует наличия
[HASHTAG]#define[/HASHTAG] REMOTEXY_MODE__ESP8266WIFI_LIB.
В этом случае уберите код подключения к WiFi, который уже есть в скетче. Библиотека RemoteXY сама все подключит.
 

tretyakov_sa

Moderator
Команда форума
В этом случае уберите код подключения к WiFi, который уже есть в скетче. Библиотека RemoteXY сама все подключит.
Так этого мне как раз и не нужно. Мне нужно гибко настраивать подключение в разных режимах без пере компиляции скетча.
 

Евгений Шемануев

Moderator
Команда форума
Так этого мне как раз и не нужно. Мне нужно гибко настраивать подключение в разных режимах без пере компиляции скетча.
Нет, такую штуку не получится реализовать, используя тот функционал, который имеется. Т.к. библиотека RemoteXY сама поднимает WiFi. В теории это возможно, вам потребуются изменения в библиотеке RemoteXY.
 

krepton85

New member
Все круто, сегодня все проверил, все работает и ШИМ и управление через интернет, на роутаре настроил праброс портов и назначение статического ip по mac адресу.
Но пока огромным минусом этого сервиса является, то что он только для Андроид предназначен.
 

krepton85

New member
Код:
#include <RemoteReceiver.h>



//////////////////////////////////////////////
//        RemoteXY include library          //
//     use  library  version 2.2.2 or up    //
//   use ANDROID app version 3.5.1 or up    //
//////////////////////////////////////////////

/* определение режима соединения и подключение библиотеки RemoteXY */
#define REMOTEXY_MODE__ESP8266_HARDSERIAL

#include <RemoteXY.h>

/* настройки соединения */
#define REMOTEXY_SERIAL Serial
#define REMOTEXY_SERIAL_SPEED 115200
#define REMOTEXY_WIFI_SSID "мой ссид"
#define REMOTEXY_WIFI_PASSWORD "мой пароль"
#define REMOTEXY_SERVER_PORT 6377


/* конфигурация интерфейса  */
unsigned char RemoteXY_CONF[] =
  { 7,5,185,0,5,3,1,4,128,6
  ,49,52,5,6,4,128,6,56,52,5
  ,4,4,128,6,63,52,5,1,1,0
  ,7,86,7,7,4,208,146,208,186,208
  ,187,32,49,0,1,0,17,86,7,7
  ,1,208,146,209,139,208,186,208,187,32
  ,49,0,1,0,37,86,7,7,4,208
  ,146,208,186,208,187,32,50,0,1,0
  ,47,86,7,7,1,208,146,209,139,208
  ,186,208,187,32,50,0,65,2,13,76
  ,5,5,2,65,1,43,76,5,5,2
  ,66,129,9,9,16,6,6,66,129,9
  ,19,16,7,4,66,129,9,29,16,7
  ,1,130,1,4,74,56,22,9,129,0
  ,5,2,22,4,0,82,71,66,32,76
  ,101,118,101,108,115,0,130,2,3,1
  ,26,38,8,130,2,3,42,57,29,5
  ,129,0,22,44,18,3,0,82,71,66
  ,32,67,111,110,116,114,111,108,0 };

/* структура определяет все переменные вашего интерфейса управления */
struct {

    /* input variable */
  signed char slider_1; /* =0..100 положение слайдера */
  signed char slider_2; /* =0..100 положение слайдера */
  signed char slider_3; /* =0..100 положение слайдера */
  unsigned char button_1; /* =1 если кнопка нажата, иначе =0 */
  unsigned char button_2; /* =1 если кнопка нажата, иначе =0 */
  unsigned char button_3; /* =1 если кнопка нажата, иначе =0 */
  unsigned char button_4; /* =1 если кнопка нажата, иначе =0 */

    /* output variable */
  unsigned char led_1_g; /* =0..255 яркость зеленого цвета индикатора */
  unsigned char led_2_b; /* =0..255 яркость синего цвета индикатора */
  signed char level_1; /* =0..100 положение уровня */
  signed char level_2; /* =0..100 положение уровня */
  signed char level_3; /* =0..100 положение уровня */

    /* other variable */
  unsigned char connect_flag;  /* =1 if wire connected, else =0 */

} RemoteXY;

/////////////////////////////////////////////
//           END RemoteXY include          //
/////////////////////////////////////////////

#define PIN_BUTTON_1 8
#define PIN_BUTTON_2 8
#define PIN_BUTTON_3 9
#define PIN_BUTTON_4 9

int Led_R = 10;
int Led_G = 5;
int Led_B = 6;
long slider_1; //переменные для преоброзования показаний слайдера в ШИМ
long slider_2;
long slider_3;
long count_showCode_1;
long count_showCode_2;
unsigned long eventTime=0;
void setup()
{
  RemoteXY_Init ();

  pinMode (PIN_BUTTON_1, OUTPUT);
  pinMode (PIN_BUTTON_2, OUTPUT);
  pinMode (PIN_BUTTON_3, OUTPUT);
  pinMode (PIN_BUTTON_4, OUTPUT);

pinMode (Led_R, OUTPUT);
pinMode (Led_G, OUTPUT);
pinMode (Led_B, OUTPUT);
  // TODO you setup code
RemoteReceiver::init(0, 0, showCode);
count_showCode_1 = 0;
count_showCode_2 = 0;
}

void loop()
{
  RemoteXY_Handler ();

  if(RemoteXY.button_1==1)digitalWrite(PIN_BUTTON_1, HIGH);
if(RemoteXY.button_2==1)digitalWrite(PIN_BUTTON_1, LOW);

if(RemoteXY.button_3==1)digitalWrite(PIN_BUTTON_3, HIGH);
if(RemoteXY.button_4==1)digitalWrite(PIN_BUTTON_3, LOW);

if(digitalRead(8) == HIGH) RemoteXY.led_1_g = 255;
if(digitalRead(8) == LOW) RemoteXY.led_1_g = 0;
if(digitalRead(9) == HIGH) RemoteXY.led_2_b = 255;
if(digitalRead(9) == LOW) RemoteXY.led_2_b = 0;

slider_1 = RemoteXY.slider_1 * 255 / 100 ;
analogWrite(Led_R, slider_1);
slider_2 = RemoteXY.slider_2 * 255 / 100 ;
analogWrite(Led_G, slider_2);
slider_3 = RemoteXY.slider_3 * 255 / 100 ;
analogWrite(Led_B, slider_3);

RemoteXY.level_1 = RemoteXY.slider_1 ;
RemoteXY.level_2 = RemoteXY.slider_2 ;
RemoteXY.level_3 = RemoteXY.slider_3 ;

}

void showCode(unsigned long receivedCode, unsigned int period){

if(receivedCode == 272242) {
  count_showCode_1 = count_showCode_1 + 1;
  RemoteReceiver::disable();
  if(count_showCode_1 == 1){
    digitalWrite(PIN_BUTTON_1, HIGH);
    RemoteXY.slider_1 = 25;
    eventTime=millis();
}
  if(count_showCode_1 == 2){
    RemoteXY.slider_1 = 50;
    eventTime=millis();
  }
  if(count_showCode_1 == 3){
    RemoteXY.slider_1 = 75;
    eventTime=millis();
  }
  if(count_showCode_1 == 4){
    RemoteXY.slider_1 = 100;
    eventTime=millis();
  }
  if(count_showCode_1 == 5){
    RemoteXY.slider_1 = 0;
    digitalWrite(PIN_BUTTON_1, LOW);
    count_showCode_1 = 0;
    eventTime=millis();
  }
}
if(receivedCode == 272268){
  count_showCode_2 = count_showCode_2 + 1;
  RemoteReceiver::disable();
  if(count_showCode_2 == 1){
    eventTime=millis();
    digitalWrite(PIN_BUTTON_3, HIGH);
    RemoteXY.slider_2 = 25;
  }
  if(count_showCode_2 == 2)
  {
    RemoteXY.slider_2 = 50;
    eventTime=millis();
  }

  if(count_showCode_2 == 3){
    RemoteXY.slider_2 = 75;
    eventTime=millis();
  }
  if(count_showCode_2 == 4){
    RemoteXY.slider_2 = 100;
    eventTime=millis();
  }
  if(count_showCode_2 == 5){
    RemoteXY.slider_2 = 0;
    digitalWrite(PIN_BUTTON_3, LOW);
    count_showCode_2 = 0;
    eventTime=millis();
  }
//if(millis()-eventTime > 500) RemoteReceiver::enable();
//eventTime = millis();
}
//if(count_showCode_1 >= 0 && count_showCode_1 < 7 || count_showCode_2 >= 0 && count_showCode_2 < 7)eventTime=millis();

if(millis()-eventTime>500) RemoteReceiver::enable(); // это условие не выполняется почему то

}
Подскажите что не так делаю, почему то условие if(millis()-eventTime>500) RemoteReceiver::enable(); ни когда не выполняется и радио приемник на 315 мГц сразу же выключен после первого нажатия на кнопку радио-пульта на 315мГц. Нужно что бы через 500 милисек снова включался и без delay.
 
Последнее редактирование:

gmu

New member
@Евгений Шемануев
Добрый день,
Я так понимаю, вы разработчик данного приложения?
В сгенерированном коде для WeMos D1 R2 имеют место константы:
Код:
#define PIN_BUTTON_RED D2
#define PIN_BUTTON_YELLOW D1
#define PIN_BUTTON_BLUE D0
Компилятор ругается, что не знает, что такое D2, D1, D0.
Исправить бы, а то вдруг кто-то не догадается, что надо поправить в коде.
 

krepton85

New member
Вообще не стабильно работает если использовать delay и даже если задержки делать с помощью millis() по 20 милисикунд, то не возможно подключится к плате по wi fi хотя модуль и подключился к роутару. Что за фигня, ну ладно Delay() нельзя использовать, но как таймер millis() может мешать этой библиотеке?
Сдается мне что весь этот сервис построен на базе MIT app invertor 2, от сюда вывод - приложение есть только для Андроид ОС, я угадал?
 
Сверху Снизу