Bonjour,
j'ai commencé à travailler avec un module ESP8266. Le but c'est d'envoyer par un logiciel en temps réel (Max Msp) des valeurs qui seront envoyés par le Module à des Leds (ou autre).
Je suis novice et habitué à travailler avec le Serial en utilisant simplement l'objet Serial.ParseInt pour trier une liste de données (que des chiffres de 0 à 255). Par Wifi j'utilise le protocole UDP (j'ai essayé la librairie OSC ici GitHub - hideakitai/ArduinoOSC: OSC subscriber / publisher for Arduino mais trop compliqué pour un débutant comme moi).
Si je n'envoie qu'une valeur je n'ai pas de souci à bien la recevoir (entre 0 et 255). Voici le code:
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#ifndef STASSID
#define STASSID "Chez_Boulez"
#define STAPSK "F4idm42130"
#endif
unsigned int localPort = 8888; // local port to listen on
// buffers for receiving and sending data
char packetBuffer[UDP_TX_PACKET_MAX_SIZE + 1]; // buffer to hold incoming packet,
char ReplyBuffer[] = "acknowledged\r\n"; // a string to send back
WiFiUDP Udp;
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(STASSID, STAPSK);
while (WiFi.status() != WL_CONNECTED) {
Serial.print('.');
delay(500);
}
Serial.print("Connected! IP address: ");
Serial.println(WiFi.localIP());
Serial.printf("UDP server on port %d\n", localPort);
Udp.begin(localPort);
}
void loop() {
// if there's data available, read a packet
int packetSize = Udp.parsePacket();
if (packetSize) {
Serial.printf("Received packet of size %d from %s:%d\n (to %s:%d, free heap = %d B)\n", packetSize, Udp.remoteIP().toString().c_str(), Udp.remotePort(), Udp.destinationIP().toString().c_str(), Udp.localPort(), ESP.getFreeHeap());
// read the packet into packetBufffer
byte packetBuffer = Udp.read();
//packetBuffer[n] = 0;
Serial.println("Contents:");
Serial.println(packetBuffer);
}
}
Par contre si j'envoie plusieurs valeurs seulement la première est prise en compte.
Après plusieurs recherche je suis tombé sur un vieux code qu'utilise des String mais je n'ai toujours pas de valeurs en sorties, à part le premier (si c'est du texte).
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#ifndef STASSID
#define STASSID "Chez_Boulez"
#define STAPSK "F4idm42130"
#endif
unsigned int localPort = 8888; // local port to listen on
// buffers for receiving and sending data
char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; // buffer to hold incoming packet,
WiFiUDP Udp;
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(STASSID, STAPSK);
while (WiFi.status() != WL_CONNECTED) {
Serial.print('.');
delay(500);
}
Serial.print("Connected! IP address: ");
Serial.println(WiFi.localIP());
Serial.printf("UDP server on port %d\n", localPort);
Udp.begin(localPort);
}
void loop() {
// if there's data available, read a packet
int packetSize = Udp.parsePacket();
if (packetSize) {
// read the packet into packetBufffer
Udp.read(packetBuffer, UDP_TX_PACKET_MAX_SIZE);
// Serial.println("Contents:");
// Serial.println(packetBuffer);
// Create a new String object to be split
char *p = (packetBuffer);
char *str;
int index = 0;
String values[3];
while ((str = strtok_r(p, " ", &p)) != NULL)
{
values[index] = str;
index++;
}
String V1 = values[0];
String V2 = values[1];
String V3 = values[2];
// Sending the parts to Serial Monitor
Serial.println ("V1 ");
Serial.println(V1);
Serial.println ("V2 ");
Serial.println(V2);
Serial.println ("V3 ");
Serial.println(V3);
}
delay(10);
}
Désolé d'avance de mon incompetence et merci de votre aide.
Claudio