rechercher les 3 premier caracteres d'une chaine de caractère

Bonjour a tous,

Je suis un peu empetré dans la semoule, :frowning:

Je voudrais recherche 3 caractères dans une chaine de caractères, et que si ils sont présents je déclenche une action...

Pour le contexte, j'u tilise un petit ESP8266 qui fait tourner un serveur Web pour déclencher des codes sur un emetteur 433mhz qui est connecté dessus.

Je lui envoie le code à émettre en utilisant l'URL demandée.

Dans le setup () j'ai ca: server.onNotFound(handleNotFound);   

et j'ai cette fonction.

void handleNotFound() {
  Interrupteur = server.uri();
  Interrupteur.replace("/","");
  String message = "OK transmis \n\n";
  message += Interrupteur;
  Serial.println(server.uri());
  server.send(200, "text/plain", message);
  Serial.println(Interrupteur);
  declanchement();
}

Ca me premet de déclencher Emission du code que je désire.

J'appelle la page http://192.168.1.102/5565565856655 (la page n'existe pas mais ce code est récupéré dans l'URI) et du coup je l'utilise pour emettre le code en 433mhz.

Le problème c'est que j'ai des nouveaux recepteur 433mhz et que je dois utiliser une autre fonction pour emettre un code différent.

Je voudrai passer en l'URL http://192.168.1.102/XXX5665655556

et que j'arrive à trouver une facon d'identifier si XXX est présent en début de l'URI. et dans ce cas déclencher une autre action...

vous sauriez comment je peux mener à bien cette action?

(je suis très débutant, je fais beaucoup de copié collé des codes de ci-de là pour arriver à mes fins.... :confused: )

Voilà le code complet...prenez pas trop peur :-X

#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
#include <ESP8266WebServer.h>
#include <NewRemoteReceiver.h>
#include <DiOremote.h>
#include <ESP8266HTTPClient.h>


void handleNotFound();

const char* ssid = "Freebox";
const char* password = "MON-CODE-WIFI";
ESP8266WebServer server(80); // on instancie un serveur ecoutant sur le port 80
//démarrage du client HTTP (pour acceder a des pages URL sur le Jeedom afin de lui passer des arguments dans l'URL)

HTTPClient http;
const char* host     = "192.168.1.22";
const int   port     = 80;
const char* apiKey="MON API KEY";
//identifiant de l'action d'information à mettre à jour
long unsigned IDactionInfo= 534;
boolean EtatInter;
String url, Interrupteur, BoutonName, BoutonHistory;
int nbIdent;
boolean SendState = 0;
unsigned long BoutonID, InterrupteurID;



////////////////////////////////////////////////////////////////////////////////////////////////////////////
const int TX_PIN = 16;

DiOremote myRemote = DiOremote(TX_PIN);


void setup() {
  Serial.begin(115200);
  //Lancement de la fonction qui récupère les codes
  NewRemoteReceiver::init(5, 2, showCode);
  Serial.println("Receiver initialized");    
  
  Serial.println("Booting");
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    Serial.println("Connection Failed! Rebooting...");
    delay(5000);
    ESP.restart();
  }

  // Port defaults to 8266
  // ArduinoOTA.setPort(8266);

  // Hostname defaults to esp8266-[ChipID]
  ArduinoOTA.setHostname("ESP8266-ONLINE");

  // No authentication by default
  ArduinoOTA.setPassword((const char *)"123");

  ArduinoOTA.onStart([]() {
    Serial.println("Start");
  });
  ArduinoOTA.onEnd([]() {
    Serial.println("\nEnd");
  });
  ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
    Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
  });
  ArduinoOTA.onError([](ota_error_t error) {
    Serial.printf("Error[%u]: ", error);
    if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
    else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
    else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
    else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
    else if (error == OTA_END_ERROR) Serial.println("End Failed");
  });
  ArduinoOTA.begin();
  Serial.println("Ready");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  server.onNotFound(handleNotFound);    
 // on definit ce qui doit etre fait lorsque la route /bonjour est appelee
  // ici on va juste repondre avec un "hello !"
  server.on("/bonjour", [](){
    server.send(200, "text/plain", "hello !");
  });

 // on definit des action
    server.on("/ouverture", []() {
    
    Serial.println("Bouton ON Presse");
    //myRemote.send(ON_CODE);
    server.send(200, "text/plain", "relay is ON");
  });
  
      server.on("/fermeture", [](){
        Serial.println("Bouton OFF Presse");
        //myRemote.send(OFF_CODE);  
        server.send(200, "text/plain", "relay is OFF");
      });  

      server.on("/identification", [](){
        Serial.println("Demande d'indentification");
        BoutonName = BoutonID;
        server.send(200, "text/plain", BoutonHistory);
      });  
    // on commence a ecouter les requetes venant de l'exterieur
    server.begin();
      
}

void loop() {
  ArduinoOTA.handle();
  // a chaque iteration, on appelle handleClient pour que les requetes soient traitees
  server.handleClient();

  if (SendState == 0){
    String baseurl = "/core/api/jeeApi.php?apikey="; 
    baseurl += apiKey;
    baseurl += "&type=virtual&id="; 
    String url = baseurl + IDactionInfo;
    url += "&value=";
    url += InterrupteurID; 
    Serial.print("InterrupteurID: ");
    Serial.println(InterrupteurID);
    sendToJeedom(url); 
  }
}

void showCode(unsigned int period, unsigned long address, unsigned long groupBit, unsigned long unit, unsigned long switchType) {
      BoutonID = address;
      BoutonID *= 2;
      if (groupBit) BoutonID += 1;
      BoutonID *= 2;
      if (switchType) BoutonID += 1;
      BoutonID *= 16;
      BoutonID += unit;
      Serial.print("Bouton ID: ");
      Serial.println(BoutonID);
      Serial.println(BoutonID, BIN);
      InterrupteurID = BoutonID;
      if (nbIdent >=100){
        BoutonHistory = "";
        nbIdent=0;
      }
      BoutonHistory += "\n";
      BoutonHistory += BoutonID;
      nbIdent = nbIdent + 1;
      SendState = 0;
}

void declanchement(){
    Serial.print("Interrupteur: ");
    Serial.println(Interrupteur);
    InterrupteurID = Interrupteur.toInt();
    Serial.print("Interrupteur INT: ");
    Serial.println(InterrupteurID);
    myRemote.send(InterrupteurID);
    Serial.println("Code Transmis");
}

boolean sendToJeedom(String url){
  Serial.print("connecting to ");
  Serial.println(host);
  Serial.print("Requesting URL: ");
  Serial.println(url);
  http.begin(host,port,url);
  int httpCode = http.GET();
  //delay(2000);
  Serial.println("closing connection");
  http.end();
  SendState = 1;
}

void handleNotFound() {
  Interrupteur = server.uri();
  Interrupteur.replace("/","");
  String message = "OK transmis \n\n";
  message += Interrupteur;
  Serial.println(server.uri());
  server.send(200, "text/plain", message);
  Serial.println(Interrupteur);
  declanchement();
}

Merci de votre aide !

La classe String contient plusieurs méthodes dont indexOf et startWith qui pourraient t'aider

Super! j'ai réusit ! Merci pour ton aide!

Bravo !

Et si vous voulez vous passer de cette classe et utiliser des cStrngs alors il y a la fonction [url=http://www.cplusplus.com/reference/cstring/strstr/]strstr()[/url]