Aller au contenu


Gamepigeek

Inscrit(e) (le) 16 déc. 2017
Déconnecté Dernière activité août 05 2021 06:55
-----

Sujets que j'ai initiés

Erreur dans mon code pour mon robot à base d'ESP8266

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


Comment piloter ses appareils ESPEASY ?

03 septembre 2020 - 09:46

Hey  :thank_you:  salut a tous, aujourd'hui un mini tutoriel si vous avez des esp32 genre sonoff sous ESPEASY qui traînent et que vous voulez les commandés avec Vigibot.com x)

 

Etape 1 :

(vous pouvez prendre la dernière version en espeasymega ca ne change pas grand chose !)

 

Etape 2 : 

 

* Connectez vous en SSH au robot qui pilotera votre ESPEASY

 

* Faites : sudo nano /boot/robot.json enlevez la ligne CMDTTS et mettre :  "CMDTTS": "cat /tmp/tts.txt | /usr/bin/php /usr/local/sonoff.php"

Enregistrez et fermez avec CTRL + X

 

* sudo nano /usr/local/sonoff.php et mettez ceci dans le fichier

 

<?php
$ttschat = file_get_contents("/tmp/tts.txt");
 
if ($ttschat == 'motpourallumer'){
echo exec('sudo wget http://IPESPEASY/control?cmd=event,T1-O /dev/null');
}
//IPESPEASY étant l'ip de votre appareil et /control?cmd=event,T1 ou T0 les rules présent dans la vidéo.
elseif($ttschat == 'motpoureteindre'){
echo exec('sudo wget http://IPESPEASY/control?cmd=event,T0-O /dev/null');
}
 
?>
 
voila il y a d'autres manières de le faire meme en BASH mais j'ai chosis PHP x)
 
donc si vous tapez motpourallumer sur vigibot (après redémarrage de vigiclient.service) il va faire un WGET de http://IPESPEASY/control?cmd=event,T1-O /dev/null 
 
A+ pour de nouveaux tutoriels x)
 
 
 
 

 


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

02 février 2020 - 09:05

Salut les Makers  :ignat_02:

 

Bon, ça va faire 2 années que je n'ai pas posté de nouveau sujet j'espère que je ne vous ai pas manqué.  :zsmoke:

 

J'ai pour projet de faire un gros robot du genre le machin qui passe dans les champs et tout un truc bien off road.

 

j'ai eu l'idée de prendre une plaque d'alu en 350x300 pour faire un robot assez gros avec des grosses roues.

 

Je vais donc prendre ces moteurs  (oui c'est du lourd) et avec 4 pneus ci-dessous.

 

 

Les idées sont les bienvenues car une plaque d'aluminium agrémenter avec du PET-G c'est bien mais vous avez certainement de meilleurs idées que moi  :king: .

 

Le but étant d'avoir une bonne garde au sol évidemment.

 

Il sera contrôlable depuis Vigibot avec Une clé 4G enfin un truc bien amusant  :yahoo: .

 

C'est tout pour aujourd'hui, post a suivre !  :thank_you:


Création de Loungebot ! Mon robot connecté à Vigibot

28 novembre 2018 - 06:18

Bonjour a tous  :zsmoke:

 

Cela fais plusieurs mois que je me tâte a faire un robot, et comme par miracle Pascal (de Serveurperso.com) et Mike118 créent l'entreprise Vigirobotics ! N'hésite pas à y aller faire un tour ;)

 

Donc je me lance :

 

L'idée est de faire un robot capable de se déplacer indépendamment avec une Raspberry.

 

Liste du Matériel pour mon robot :

 

Un châssis 

Une Raspberry 3B +

Un Kit minimal Vigibot Minus

Kit Batterie Lipo 3S Complet (Pour faire un robot économique et simple je vous le déconseille) prenez plutôt Une Lipo 1s

Connecteur XT60

Convertisseur 5V (Pour alimenter mon raspberry par les GPIO)

Un pack de Batteries 18650

Un UPS RPI Power Pack v1.1 (bientôt disponible dans la boutique) avec un cable micro-USB

Une roue Folle

Un microphone avec une carte son USB (Pour avoir le son sur Vigibot)

Un Pan Tilt  (Pour bouger la caméra)

Une Raspicam (Par pitier ne prenez pas les raspicam de base ! Prenez une grand angle minimum 165° ! Ça ne coûte pas plus cher et c'est vachement mieux  :yahoo:)

 

Ah et si vous n'en n'avez pas n'oubliez pas les fils ça peut vous sauvez la vie  :ignat_02:

 

et avec tout ça on peut déjà se faire un robot sympa !

 

A suivre prochainement  :ok:


Création d'un robot pilotable par internet

16 décembre 2017 - 12:17

Bonjour a tous chers roboticiens  :clapping:

 

Aujourd'hui je vais vous parlez de mon projet de robot directement accessible et pilotable par internet.

 

Sachez que j'ai 14 ans et une très grande envie de réaliser mon rêve .

 

Tout a débuté lorsque que j'ai découvert le magnifique site web à Pascal ( énorme merci à lui et également à Mike118

 

Revenons au sujet principal celui de faire mon propre robot  :thank_you:

 

Explication :

 

je voudrais donc construire mon robot personnel et pilotable directement via le protocole http (via mon site web).

 

Pour cela il faudrait donc que je possède : 

 

Moteurs x4

Roue mécanum x1
Driver pour 4 moteur x1
Pic 32 ubw x1 

Batterie Lipo x1

Raspberry Pi x1 
Pi Cam x1

                                                                                                                                                                                                                                                        

Je voudrais donc :

 

1) Afficher la vidéo et le son avec le moins de latence possible. 

 

2) Récupérer les cliques et les déplacement de la souris sur la vidéo.

 

3) Crée des restrictions pour que tout le monde n'ai pas accès a certaines fonctionnalités du robot , et donc bien évidement que moi je puisse gérer ces droits . 

 

4) Je souhaiterai également pouvoir délimiter des espaces ou le robot ne peut pas aller il faut donc que le robot puisse se repérer dans la pièce (aucune idée de comment faire ceci).

 

En résumé il faudrait que mon robot ai les mêmes fonctionnalités que celui de ServeurPerso (Pascal) mais sans le Lidar ou de Laser.

 

Je possède un serveur j'ai un peu de connaissance en web mais par contre en robot j'ai pour l'instant le minimum (Il faut bien apprendre un jour :blind:).

 

Voila pour l'instant mon imagination s’arrête ici mais ne vous inquiétez pas un jour il y aura certainement un robot ami avec celui ci  :) .

 

Je vous remercie par avance de votre aide et sachez encore une fois que je suis a fond motivé dans le projet et si il faut que j'apprenne beaucoup de choses alors je le ferais sans aucune hésitation.

 

Pierre (Gamepigeek) 

 

"Votre temps est compté, alors ne le gâchez pas à vivre une vie qui ne serait pas la vôtre. Ne vous laissez pas enfermer dans le dogme, ne laissez pas les idées d'autrui diriger votre vie. Ne laissez pas les cris des autres couvrir votre voix intérieure. Et surtout, surtout : ayez le courage de suivre votre cœur, ayez le courage de suivre votre intuition" "Steve jobs"