Aller au contenu


Gamepigeek

Inscrit(e) (le) 16 déc. 2017
Déconnecté Dernière activité avril 06 2021 09:59
-----

Messages que j'ai postés

Dans le sujet : Vigibot Pi to multiple ESP32 WLAN Communications Example

06 avril 2021 - 09:30

Bonjour a toutes et tous,

 

Je cherche a connecter un NodeMCU a base d'ESP8266 pour "vigiboter" un train lego.

 

J'ai utilisé l'exemple de @Mike118 modifié par @Firened sans succès car j'obtiens l'erreur : 

void writePiSerial()':
sketch_apr06a:237:34: error: 'struct TrameRx' has no member named 'choixCameras'
   trameTx.choixCameras = trameRx.choixCameras;
                                  ^
exit status 1
'struct TrameRx' has no member named 'choixCameras'

le code est : 

#include <WiFi.h>
#include <ESP8266WiFi.h>
 
//ici c'est simplement en tant que serveur :P
const char* ssid = "your_ssid";
const char* pass = "your_pass";
// Set your Static IP address
IPAddress local_IP(192, 168, 1, 61);
// Set your Gateway IP address
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);
 
 
// Meta Type :
 
typedef struct {
  union {
    struct {
      int16_t x;
      int16_t y;
    };
    int16_t coordonnees[2];
    uint8_t bytes[4];
  };
} Point;
 
typedef struct {
  union {
    struct {
      int8_t x;
      int8_t y;
      int8_t z;
    };
    uint8_t bytes[3];
  };
} Vitesses;
 
 
// CONFIG
 
//#define PISERIAL Serial
#define NBPOSITIONS 2
#define FAILSAFE 250 // ms
 
 
// TTS
 
#define TTSBUFFERSIZE 255
uint8_t ttsBuffer[TTSBUFFERSIZE];
uint8_t ttsCurseur = 0;
 
 
// TX
 
#define TXFRAMESIZE (NBPOSITIONS * 4 + 17)
 
typedef struct {
  union {
    struct {
      uint8_t sync[4];               // 4
      Point positions[NBPOSITIONS];  // NBPOSITIONS * 4
      uint16_t val16[2];             // 2 * 2
      uint8_t choixCameras;          // 1
      Vitesses vitesses;             // 3
      uint8_t interrupteurs;         // 1
      uint8_t val8[4];               // 4
    };
 
    uint8_t bytes[TXFRAMESIZE];
  };
} TrameTx;
 
 
// RX
 
#define RXFRAMESIZE (NBPOSITIONS * 4 + 9)
 
typedef struct {
  union {
    struct {                       // Sizes
      uint8_t sync[4];              // 4
      Point positions[NBPOSITIONS]; // NBPOSITIONS * 4      uint8_t choixCameras;         // 1
      Vitesses vitesses;            // 3
      uint8_t interrupteurs;        // 1
    };
 
    uint8_t bytes[RXFRAMESIZE];
  };
} TrameRx;
 
 
TrameTx trameTx;
TrameRx trameRx;
 
uint32_t lastTrameTimestamp = millis();
uint32_t lastSleepBeacon;
 
WiFiServer server(7070);  //ESP server port
WiFiClient client;
 
void setup()
{
  Serial.begin(115200);
  Serial.println();
 
  WiFi.begin("SSID", "PASS");
 
  Serial.print("Connecting");
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println();
 
  Serial.print("Connected, IP address: ");
  Serial.println(WiFi.localIP());
}
 
void loop() {
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
 
  if (readPiSerial()) {
    // each time we receive a full trame run repeatedly:
    // use values inside trameRx to tell your robot how to move ...
    // trameRx.vitesses.x , trameRx.vitesses.y, trameRx.vitesses.z
    // trameRx.positions[i].x trameRx.positions[i].y  etc....
 
    
 
    writePiSerial();
    lastTrameTimestamp = millis();
  }
  if ( millis() - lastTrameTimestamp > FAILSAFE ) {
    if ((millis() - lastSleepBeacon > 10000) ) { // every 10 seconds
      writePiSerial();                        // Beacon to say that the robot is alive
      lastSleepBeacon = millis();
    }
    // Stop the robot in case the robot lost connection with the Pi
    
  } else {
    // put your main code here, to run repeatedly:
    // avoid abstacle, run speed ...
    
  }
  
}
 
 
bool readPiSerial() {
  uint8_t current;
  static uint8_t lastType = 0;
  static uint8_t n = 0;
  static uint8_t frame[RXFRAMESIZE];
  static byte lastClientState = 0;
  if (client.connected()) {
    if (!lastClientState) {
      lastClientState = 1;
      Serial.println("New Client.");
    }
    while (client.available()) {
      current = client.read();
      //Serial.write(current); //debug
 
      switch (n) {
 
        case 0:
          if (current == '$')
            n = 1;
          break;
 
        case 1:
          if (current != 'T' && lastType == 'T')
            writeTtsBuffer('\n');
 
          if (current == 'S' || current == 'T') {
            lastType = current;
            n = 2;
          } else
            n = 0;
          break;
 
        default:
          frame[n++] = current;
 
          if (n == RXFRAMESIZE) {
 
            if (lastType == 'T') {
 
              for (uint8_t i = 4; i < RXFRAMESIZE; i++) // Do not send the 4 sync data in tts
                writeTtsBuffer(frame[i]);
 
            } else if (lastType == 'S') {
 
              for (uint8_t p = 0; p < RXFRAMESIZE; p++)
                trameRx.bytes[p] = frame[p];
 
            }
            n = 0;
            return true;
          }
          //break;
      }
    }
  } else { //if current client is not actively connected anymore, disconnect and wait for new client
    if (lastClientState) {
      lastClientState = 0;
      // close the connection:
      client.stop();
      Serial.println("Client Disconnected.");
    }
    client = server.available();   // listen for incoming clients
  }
  return false;
}
 
void writePiSerial() {
  // Header, do not modify
  trameTx.sync[0] = '$';
  trameTx.sync[1] = 'R';
  trameTx.sync[2] = ' ';
  trameTx.sync[3] = ' ';
 
  // modify the feedback according your need. By default we copy the trameRx content ...
  for (uint8_t i = 0; i < NBPOSITIONS; i++) {
    trameTx.positions[i].x = trameRx.positions[i].x;
    trameTx.positions[i].y = trameRx.positions[i].y;
  }
  trameTx.val16[0] = 0;   // Voltage (will be updated by Raspberry pi)
  trameTx.val16[1] = 0;   // Percent (will be updated by Raspberry pi)
  trameTx.choixCameras = trameRx.choixCameras;
  trameTx.vitesses.x = trameRx.vitesses.x;
  trameTx.vitesses.y = trameRx.vitesses.y;
  trameTx.vitesses.z = trameRx.vitesses.z;
  trameTx.interrupteurs = trameRx.interrupteurs;
  trameTx.val8[0] = 0;   // CPU load (will be updated by Raspberry pi)
  trameTx.val8[1] = 0;   // Soc temp (will be updated by Raspberry pi)
  trameTx.val8[2] = 0;   // link (will be updated by Raspberry pi)
  trameTx.val8[3] = 0;   // RSSI (will be updated by Raspberry pi)
 
  for ( uint8_t i = 0; i < TXFRAMESIZE; i++)
    client.write(trameTx.bytes[i]);
}
 
void displayTtsBuffer (uint8_t * ttsBuffer, uint8_t bufferSize) {
  // you can modify this function to display text on a screen depending on your hardware...
  for ( uint8_t i = 0; i < bufferSize; i++) {
    Serial.write(ttsBuffer[i]);
  }
  Serial.println("");
}
 
void writeTtsBuffer( uint8_t ttsChar) {
  static uint8_t ttsCurseur = 0;
  if ( ttsCurseur < TTSBUFFERSIZE && ttsChar != '\n') {
    ttsBuffer[ttsCurseur] = ttsChar;
    ttsCurseur ++;
  }
  if ( ttsCurseur == TTSBUFFERSIZE || ttsChar == '\n') {
    displayTtsBuffer (ttsBuffer, ttsCurseur);
    ttsCurseur = 0;
  }
}

Merci de votre aide !

 

Pierre


Dans le sujet : Photos

30 juillet 2020 - 09:03

KanCoyote sous toutes les coutures !

 

Super ! Je te fais un copié collé de ce que je t'ai envoyé en message privée au cas ou que tu ne l'es pas vu :

 

Salut Jparbel ! :)
 
 
 
Bon j'ai eu l'occasion de tester ton robot ça avance bien !
 
 
 
2 3 trucs a faire si tu veux un robot parfait (ou presque).
 
 
 
Déjà je te conseil de prendre pour les Servomoteurs des 9G de chez DiyMore. Tu peux en prendre ici  et demander a Mike118 des DiymMore a la place des TowerPro x). Ils ont l'avantage de se mettre totalement en veille et être mou quand ton robot est en veille.
 
 
 
Une autre chose : évite de plier les fils des servomoteurs sinon il  y a des signaux flottants et ton servomoteur a "Parkinson" ;)
 
Dernière chose : tu peux mettre du double face a chaques extrémités de la batterie dessous pour qu'elle reste droite et qu'elle ne puisse pas tomber x)
Tu pourrais nous poster des photos de ton robot actuellement ?
 
 
 
Tu peux regarder dans le topic "Photos" que tu as crée pour ton robot j'ai posté des photos des miens (Lardon et BigWheels).
 
 
 
Tu peux éventuellement prendre exemple sur les photos de lardon qui est monté assez proprement x)
 
 
 
Bonne continuation Jparbel et n'oublis pas les photos !

Dans le sujet : BigWheels, le robot tout terrain piloté par Vigibot.com

29 juillet 2020 - 11:18

Hello les makers x)

 

 

Un petit message pour vous dire que le sujet est toujours d'actualité ! J'attend le pack de batterie 18650 je vais faire un 4S3P  :Koshechka_08:

 

Dessus normalement il y aura une synthèse vocal ainsi qu'un GPS (tout visible sur https://www.vigibot.com!)

 

Voila  :thank_you:

 

 


Dans le sujet : Photos

20 juillet 2020 - 11:33

Lardon :  


Dans le sujet : Photos

20 juillet 2020 - 11:28

Bigwheels :