Synchroniseren twee ESP32's van 3D viewer

Software vragen voor ESP chip familie
Berichten: 3
Geregistreerd: 18 Dec 2016, 18:47

Synchroniseren twee ESP32's van 3D viewer

Berichtdoor perlix » 29 Mei 2020, 14:16

Ik wil twee ESP32+TFT sets samen een stereoscopisch filmpje laten tonen (een set voor elk oog).
Omdat de ESP's vlak naast elkaar in een viewer zitten en hun voeding delen dacht ik ze simpel en precies te kunnen synchroniseren met kruislings verbonden IO pinnen. Over die pinnen geven ze steeds aan elkaar hun 'state' (0 of 1) door. Telkens wanneer de eigen state gelijk is aan de ingelezen state van de ander toont een freertos task het volgende JPEG frame en verandert daarna de eigen state.

Maar als ik onderstaande sketch op beide ESP's draai blijven ze elkaars state altijd als 1 lezen, waardoor het proces niet start. Maak ik een denkfout in mijn algoritme of gebruik ik pinMode() en/of digitalRead() hier verkeerd?

Code: Alles selecteren
#define outPin    21  // verbonden met GPIO 22 van andere ESP32 
#define inPin     22  // verbonden met GPIO 21 van andere ESP32 

byte myState;     //  waarde gecommuniceerd over outPin (0 or 1);       
int n_frames = 100;
int frameID = 0;

TaskHandle_t myHandle;

void showFrame_task( void * parameter) {
  for (;;) {
    if (digitalRead(inPin) == myState) {
      /* <code voor tonen JPEG frame #frameID > */
      frameID = (frameID + 1) % n_frames;
      myState ^= 1; // toggle myState
      digitalWrite(outPin, myState);
    }
    vTaskDelay(2 / portTICK_PERIOD_MS);
  }
}

void setup() {
  pinMode(inPin, INPUT_PULLUP);
  pinMode(outPin, OUTPUT);
  myState = 0;
  digitalWrite(outPin, myState);
  xTaskCreatePinnedToCore(showFrame_task, "showFrame", 10000, NULL, 2, &myHandle, 0);
}

void loop() {
  vTaskDelay(2 / portTICK_PERIOD_MS);
}

Advertisement

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Synchroniseren twee ESP32's van 3D viewer

Berichtdoor Koepel » 30 Mei 2020, 20:29

Ik heb er een tijd naar zitten staren, maar ik zie niet waar het verkeerd gaat. Sorry :(
Is er andere code die de pinnen kan wijzigen ? Bijvoorbeeld iets met I2C ?
Hoe weet je dat de beide signalen altijd hoog zijn ? Kunnen ze misschien heel kort ook laag zijn ?

Berichten: 3
Geregistreerd: 18 Dec 2016, 18:47

Re: Synchroniseren twee ESP32's van 3D viewer

Berichtdoor perlix » 31 Mei 2020, 11:57

Bedankt dat je er naar gekeken hebt.
De signalen zouden aan het eind van setup() allebei laag moeten zijn waarna beide ESP's de task uitvoeren. Na afloop worden ze dan allebei hoog en worden de tasks opnieuw uitgevoerd enzovoorts, dus ze zijn steeds afwisselend hoog/laag, de task verzorgt de toggle van de outPin.

Ik denk nu dat het een elektronische kwestie van mijn ESP32 boards is (LOLIN D32 Pro). Op twee esp8266 boards werkt het principe namelijk wel. Ik weet te weinig van elektronica dus ga de synchronisatie nu via ESP-NOW proberen. Tussen de beeldwisselingen is er hopelijk voldoende tijd voor de ESP's om hun status op die manier uit te wisselen.

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Synchroniseren twee ESP32's van 3D viewer

Berichtdoor Koepel » 31 Mei 2020, 13:30

Dat is een heel omslachtige manier om ze te synchroniseren.
De ESP-NOW lijkt nog niet helemaal uitontwikkeld. Op de ESP32 werkt het tegelijkertijd met Wifi, maar volgens sommigen moet dan het kanaal hetzelfde zijn.

Waarom jouw sketch op de ESP32 niet werkt en op de ESP8266 wel, dat vind ik vreemd. Misschien is er toch nog iets anders aan de hand.

De website van Wemos en Lolin leek te worden opgeheven, maar op dit moment komt de site beetje bij beetje weer online: https://www.wemos.cc/.

Je kunt ook de ene de "Master" maken en de andere de "Slave".
De Master bepaalt wanneer er een nieuw plaatje komt en geeft een trigger-signaal aan de Slave. Eventueel kun je in de Master nog even wachten om de tijd die de Slave nodig heeft te compenseren. De Slave kan dan niet de delay gebruiken, maar staat vrijwel altijd te wachten op het trigger-signaal.

Als ze beiden verschillend opstarten, dan kan de Slave een ready-signaal afgeven. Maar doe dat eenmalig bij het opstarten en niet tussendoor.

Wat je hebt is geen normale handshake. Gevoelsmatig voelt het vreemd aan.

Berichten: 3
Geregistreerd: 18 Dec 2016, 18:47

Re: Synchroniseren twee ESP32's van 3D viewer

Berichtdoor perlix » 31 Mei 2020, 13:59

Bedankt voor het meedenken. Mijn methode leek me de snelste (belangrijk bij bewegende beelden), maar het is idd geen normale handshake (en werkt niet...).

Houd ik bij de master/slave oplossing die je voorstelt niet hetzelfde probleem, namelijk dat de input pin van de ene ESP32 niet reageert op wat de andere ESP32 er naar toe stuurt? Ik zal nog 's een paar andere ESP32's proberen, al kan ik die uiteindelijk niet voor mijn 3D-viewer gebruiken omdat ze geen PSRAM hebben.

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Synchroniseren twee ESP32's van 3D viewer

Berichtdoor Koepel » 31 Mei 2020, 16:20

Natuurlijk kun je op een pin reageren en natuurlijk werkt dat. Dat werkt altijd.
Het is niet zo dat een digitaal signaal niet zou werken. Dat werkt in ons universum altijd.

Okay, de chip kan stuk zijn, misschien gebruik je een breadboard (hebben slechte contacten), misschien ben je de GND vergeten, misschien heb je een enorm grote storingsbron en een grondlus, misschien heb je goedkope draden waar een draadbreuk in zit, misschien heb je een goedkoop USB kabeltje waardoor de spanning te laag is, misschien heeft je voeding storing, misschien is je voeding te zwak, misschien lekt de 230V via een slechte adapter door naar je circuit, misschien is de buurman een zendamateur, misschien... (en zo nog 100 dingen :o).

Terug naar ESP Software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 10 gasten