Bonjour à tous,
je suis (toujours) bien débutant dans le code Arduino, mais cela me passionne beaucoup.
J'ai découvert la puissante carte ESP8266 il y a 3 mois et depuis je l'utilise beaucoup dans mon travail pour gérer des leds à distance, et en temps réel, pour du spectacle vivant. Cela en passant par le protocole UDP. J'avais réussi à mettre en oeuvre mon code grâce aux aides de ce Forum !
A ce jour je voudrais passer à l'étape supérieur et pouvoir intéragir dans les deux sens. Donc équiper mes microcontrolleurs avec des capteurs et recevoir les données toujours par UDP.
J'ai passé pas mal de temps à regarder ce code:
/*
UDPSendReceive.pde:
This sketch receives UDP message strings, prints them to the serial port
and sends an "acknowledge" string back to the sender
A Processing sketch is included at the end of file that can be used to send
and received messages for testing with a computer.
created 21 Aug 2010
by Michael Margolis
This code is in the public domain.
adapted from Ethernet library examples
*/
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#ifndef STASSID
#define STASSID "your-ssid"
#define STAPSK "your-password"
#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
int n = Udp.read(packetBuffer, UDP_TX_PACKET_MAX_SIZE);
packetBuffer[n] = 0;
Serial.println("Contents:");
Serial.println(packetBuffer);
// send a reply, to the IP address and port that sent us the packet we received
Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
Udp.write(ReplyBuffer);
Udp.endPacket();
}
}
/*
test (shell/netcat):
--------------------
nc -u 192.168.esp.address 8888
*/
mais ce que je voudrais c'est de lui dire exactement sur quel adresse IP et quel port il doit envoyer mes données, et pas forcement recevoir le packet envoyé.
Par exemple j'ai essayé de rajouter ce code:
Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
Udp.write("hello");
Udp.endPacket();
et déclaré au début
unsigned int remotePort = 7777;
IPAddress remote = Udp.remoteIP();
et enfin dans le setup:
IPAddress remote(192, 168, 1, 136);
Mais cela ne marche pas. Le port de retour est un port toujours différent et en plus à 5 chiffres ...
Bref, j'ai essayé de chercher un peu partout avant de poster ce message, mais j'ai rien trouvé.
Merci d'avance de votre aide.
Claudio