1

Topic: Два проекта в одном скетче

В доме произведен монтаж системы из девяти датчиков температуры типа Ds18b20.
Все эти девять датчики используется в проекте для контроля системы отопления выполненном на Arduino pro mini.
Оптимальным решением является проект с подключением по USB.
Вторым проектом является мониторинг температуры окружающего воздуха. В этом проекте желательно использовать уже смонтированные четыре датчика Ds18b20 из имеющейся системы контроля.
Оптимальным решением для этих датчиков является проект с подключением по WI-FI Ethernet.
Возникает вопрос, каким способом можно объединить два этих проекта в один.

Итак для первого проекта имеем:

#define REMOTEXY_MODE__HARDSERIAL
   #include <RemoteXY.h>

// настройки соединения 
#define REMOTEXY_SERIAL Serial
#define REMOTEXY_SERIAL_SPEED 19200

// конфигурация интерфейса  
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] ={ // Для каждого проекта своя конфигурация
..................
}
struct {
.......
char text_3; //одни и те же датчики для обоих проектов
} RemoteXY;
#pragma pack(pop)
............

Для второго проекта имеем:

#define REMOTEXY_MODE__ESP8266_SOFTSERIAL
#include <SoftwareSerial.h>
#include <RemoteXY.h>

// настройки соединения 
#define REMOTEXY_SERIAL_RX 5
#define REMOTEXY_SERIAL_TX 4
#define REMOTEXY_SERIAL_SPEED 19200
#define REMOTEXY_WIFI_SSID "XXXXXX"
#define REMOTEXY_WIFI_PASSWORD "password"
#define REMOTEXY_SERVER_PORT 6377

// конфигурация интерфейса  
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] ={// Для каждого проекта своя конфигурация
..................
..................
}
struct {
.......
char text_3; //одни и те же датчики для обоих проектов
} RemoteXY;
#pragma pack(pop)

Переменная

char text_3; //одни и те же  для обоих проектов

Подскажите каким образом можно объединить два этих проекта в один.

2

Re: Два проекта в одном скетче

Не совсем понял как вы хотите объединить. Что вы хотите получить после объединения? Вы хотите что бы в одном контроллере были оба проекта?

3 (edited by bukinay1 2021-04-16 14:24:11)

Re: Два проекта в одном скетче

Программа одна - это контроллер газового котла. В нем участвую все девять датчиков температуры. Причем четыре из них контролируют температуру окружающей среды. В программе две страницы, присутствует графика. Цикл опроса 5 сек.
    Добавляю еще одну страницу третью. Это мониторинг окружающей среды (назвал некорректно - второй проект).
В этой части программы цикл опроса равный 5 сек. совершенно излишен. Можно сделать раз в минуту или реже
   Весь проект постоянно подключен по USB к мультимедийной андроид приставке. Пишется графика
С другой стороны, к части этой большой программы, именно к третьей странице, я хочу иметь отдельный доступ через смартфон  по  WI-FI Ethernet.
    Почему так - слишком много переменных, что бы все выводить по двум потокам USB/Bluetooth и WI-FI Ethernet.
Конфигурация третьей станицы - это есть

uint8_t RemoteXY_CONF[]{...}
.....

для второго проекта

Если коротко, то программа одна, а конфигураций RemoteXY две (RemoteXY_CONF_1 и RemoteXY_CONF_2) и каждая со своим подключением.
Вот как то так...

4

Re: Два проекта в одном скетче

Хотелось бы понять, будет ли мне ответ, на мой вопрос?!

5

Re: Два проекта в одном скетче

Понятно.
Думаю что вам не нужно делать два проекта в одном скетче.
Вам необходимо реализовать один проект с возможностью одновременного подключения по разным каналам.
Это возможно с новой библиотекой 3.x.x
Пример есть тут http://forum.remotexy.com/viewtopic.php?id=1284

6

Re: Два проекта в одном скетче

remotexy wrote:

Понятно.
Думаю что вам не нужно делать два проекта в одном скетче.
Вам необходимо реализовать один проект с возможностью одновременного подключения по разным каналам.
Это возможно с новой библиотекой 3.x.x
Пример есть тут http://forum.remotexy.com/viewtopic.php?id=1284

Мне представляться, что для Arduino + ESP-01  это решение не имеет перспективы.
Причина в том, что:
- объём передаваемых данных  возрастает в два раза;
-  в то же время скорость передачи данных уменьшиться (определяться наименьшей скоростью из двух потоков)
Собственно так и произошло с моим проектом выполненным по вышеприведенной ссылке.

7

Re: Два проекта в одном скетче

Привожу пример кода двух разных интерфейсов на двух разных каналах передачи данных реализованных в одном контроллере. Код компилируется только под новую библиотеку 3.x.x

#include <SoftwareSerial.h>
#include <RemoteXY.h>

//////////////////////////////////////////
// RemoteXY configurate PROJ 1  
#pragma pack(push, 1)
uint8_t const PROGMEM RemoteXY_CONF_PROGMEM_PROJ1[] =
  { 255,1,0,1,0,27,0,10,13,2,
  1,0,9,9,46,46,6,7,50,50,
  2,31,88,0,65,4,62,16,31,31,
  14,62,35,35 };
  
// this structure defines all the variables and events of your control interface 
struct {

    // input variables
  uint8_t button_1; // =1 if button pressed, else =0 

    // output variables
  uint8_t led_1_r; // =0..255 LED Red brightness 

    // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0 

} RemoteXY_PROJ1;
#pragma pack(pop)
CRemoteXY *remotexy_PROJ1;

//////////////////////////////////////////
// RemoteXY configurate PROJ 2 
#pragma pack(push, 1)
uint8_t const PROGMEM RemoteXY_CONF_PROGMEM_PROJ2[] =
  { 255,1,0,1,0,27,0,10,13,2,
  1,0,9,9,46,46,6,7,50,50,
  2,31,88,0,65,4,62,16,31,31,
  14,62,35,35 };
  
// this structure defines all the variables and events of your control interface 
struct {

    // input variables
  uint8_t button_1; // =1 if button pressed, else =0 

    // output variables
  uint8_t led_1_r; // =0..255 LED Red brightness 

    // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0 

} RemoteXY_PROJ2;
#pragma pack(pop)
CRemoteXY *remotexy_PROJ2;

void setup() {

  // external ESP8266 ethernet (not access point)
  remotexy_PROJ1 = new CRemoteXY (
    RemoteXY_CONF_PROGMEM_PROJ1, 
    &RemoteXY_PROJ1, 
    "", 
    new CRemoteXYConnectionServer (
      new CRemoteXYComm_ESP8266 (
        new CRemoteXYStream_HardSerial (
          &Serial,
          115200
        ),
        "myHomeFiFi",       // REMOTEXY_WIFI_SSID
        "12345678"),        // REMOTEXY_WIFI_PASSWORD
      6377                  // REMOTEXY_SERVER_PORT
    )
  ); 

  /*
  // if ESP8266 connected to softserial
  remotexy_PROJ1 = new CRemoteXY (
    RemoteXY_CONF_PROGMEM_PROJ1, 
    &RemoteXY_PROJ1, 
    "", 
    new CRemoteXYConnectionServer (
      new CRemoteXYComm_ESP8266 (
        new CRemoteXYStream_SoftSerial (
          2,       // REMOTEXY_SERIAL_RX
          3,       // REMOTEXY_SERIAL_TX, 
          9600
        ),
        "myHomeFiFi",       // REMOTEXY_WIFI_SSID
        "12345678"),        // REMOTEXY_WIFI_PASSWORD
      6377                  // REMOTEXY_SERVER_PORT
    )
  ); 
  */

  // Serial (USB or Bluetooth)
  remotexy_PROJ2 = new CRemoteXY (
    RemoteXY_CONF_PROGMEM_PROJ2, 
    &RemoteXY_PROJ2, 
    "", 
    new CRemoteXYStream_SoftSerial (
      2,       // REMOTEXY_SERIAL_RX
      3,       // REMOTEXY_SERIAL_TX, 
      9600     // REMOTEXY_SERIAL_SPEED
    )
  ); 

  /*
  // for Hard serial
  remotexy_PROJ2 = new CRemoteXY (
    RemoteXY_CONF_PROGMEM_PROJ2, 
    &RemoteXY_PROJ2, 
    "", 
    new CRemoteXYStream_HardSerial (
      &Serial1,       
      9600     
    )
  );  
  */
}


void loop() {
  remotexy_PROJ1->handler ();
  remotexy_PROJ2->handler ();

  if (RemoteXY_PROJ1.button_1 != 0) RemoteXY_PROJ1.led_1_r = 255;
  else RemoteXY_PROJ1.led_1_r = 0;

  if (RemoteXY_PROJ2.button_1 != 0) RemoteXY_PROJ2.led_1_r = 255;
  else RemoteXY_PROJ2.led_1_r = 0;
  

}

8

Re: Два проекта в одном скетче

ОК! Буду пробовать.