Bonjour, voila j'ai un projet ou je dois communiquer entre une arduino avec esp32 et un nodered sur une vm. Le node red envoie des infos en json à l'arduino et l'arduino est capable de lui envoyer des fichiers json aussi. Le seul problème c'est que je n'arrive pas a effectuer la connexion entre le note red et l'arduino je n'ai que des erreurs "ECONNREFUSED" sur le debug nodered ou du "ETIMEDOUT". je n'arrive vraiment pas à trouver une solution j'ai essayé plusieurs types de requêtes, une marche mais impossible de la faire marcher pour tout le code.
Donc si vous avez des infos pour la communications entre les 2 ça serai top.
le nodered communique sur des liens spécifique du type http://ip_arduino/io/{name}/config
Avec le peu d'information que tu donne, la raison la plus probable serait que les deux ne sont pas sur le même réseau.
Après beaucoup d'autre possibilité existe!
void sendJsonConfig(JsonDocument& sendconfigjsonDocument) {
// Convertir le document JSON en chaîne avec mise en forme (indentation)
String jsonString;
serializeJsonPretty(sendconfigjsonDocument, jsonString);
EthernetClient client = local_server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
String jsonString;
serializeJsonPretty(sendconfigjsonDocument, jsonString);
// Envoyer la requête POST au serveur distant
client.println("/io/" + String(name) + "/config/ HTTP/1.1 200 OK");
client.println("Host: " + String(serverAddress));
client.println("Connection: close");
client.println("Content-Type: application/json");
client.println("Content-Length: " + String(jsonString.length()));
client.println();
client.println(jsonString);
// Attendre un court instant pour laisser le temps à la réponse d'être envoyée
delay(10);
// Fermer la connexion avec le client
break;
}
}
}
// Fermer la connexion au serveur
}
j'essaye de lui envoyé la config que j'ai avec mes entrées et sorties (le nom etc) mais jai rien alors que je suis bien sur les bonnes ips jai tester avec ce code par exemple et ca marche je n'ai pas d'erreur
// Elements pour la connection ethernet (serveur web)
#include "SPI.h"
#include "Ethernet2.h"
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(172, 23, 0, 11); // Adresse IP du serveur web de l'arduino sur le réseau local
EthernetServer local_server(1880); // creation d'un serveur web sur le port standard 80
void setup()
{
Ethernet.init(ETHERNET_CS);
Ethernet.begin(mac, ip); // Initialize l'arduino comme un élément du réseau local
local_server.begin(); // Se met à l'écoute des communications client (browser web)
}
void loop()
{
respond_local_server();
}
void respond_local_server()
{
EthernetClient local_client = local_server.available();
if (local_client)
{
boolean currentLineIsBlank = true;
while (local_client.connected()) // tant qu'un client est connecté
{
if (local_client.available()) // Si un client a envoyé une requête
{
char c = local_client.read(); // lire un caractère du client
if (c == '\n' && currentLineIsBlank) // Quand la dernière ligne envoyée par le client est vide et suivi de \n on va lui répondre
{
// On envoie un entête http standard en réponse
local_client.println("HTTP/1.1 200 OK");
local_client.println("Access-Control-Allow-Origin: *");
local_client.println("Content-Type: application/json");
local_client.println("Connection: close");
local_client.println();
// On envoie la valeur des capteur en format JSON
char sPostData[150] = "";
getJSON_DataFromSensors(sPostData);
local_client.println(sPostData);
break;
}
// every line of text received from the client ends with \r\n
if (c == '\n') // Si le caractère reçu est \n on positionne la variable currentLineIsBlank à vrai
currentLineIsBlank = true;
else
if (c != '\r') // Si le caractère reçu est \r on positionne la variable currentLineIsBlank à faux
currentLineIsBlank = false;
}
}
delay(1000); // On laisse 1s au browser pour récupérer les données qu'on a envoyées
local_client.stop(); // ferme la connection
}
}
// renvoie les données des capteurs en format JSON
void getJSON_DataFromSensors(char *sDataFromSensors)
{
strcpy(sDataFromSensors, "{");
strcat(sDataFromSensors, "\"Température de l'eau\":\" ");
strcat(sDataFromSensors, "}");
}
j'essaye de lui envoyé la config que j'ai avec mes entrées et sorties (le nom etc) mais jai rien alors que je suis bien sur les bonnes ips jai tester avec ce code par exemple et ca marche je n'ai pas d'erreur
// Elements pour la connection ethernet (serveur web)
#include "SPI.h"
#include "Ethernet2.h"
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(172, 23, 0, 11); // Adresse IP du serveur web de l'arduino sur le réseau local
EthernetServer local_server(1880); // creation d'un serveur web sur le port standard 80
void setup()
{
Ethernet.init(ETHERNET_CS);
Ethernet.begin(mac, ip); // Initialize l'arduino comme un élément du réseau local
local_server.begin(); // Se met à l'écoute des communications client (browser web)
}
void loop()
{
respond_local_server();
}
void respond_local_server()
{
EthernetClient local_client = local_server.available();
if (local_client)
{
boolean currentLineIsBlank = true;
while (local_client.connected()) // tant qu'un client est connecté
{
if (local_client.available()) // Si un client a envoyé une requête
{
char c = local_client.read(); // lire un caractère du client
if (c == '\n' && currentLineIsBlank) // Quand la dernière ligne envoyée par le client est vide et suivi de \n on va lui répondre
{
// On envoie un entête http standard en réponse
local_client.println("HTTP/1.1 200 OK");
local_client.println("Access-Control-Allow-Origin: *");
local_client.println("Content-Type: application/json");
local_client.println("Connection: close");
local_client.println();
// On envoie la valeur des capteur en format JSON
char sPostData[150] = "";
getJSON_DataFromSensors(sPostData);
local_client.println(sPostData);
break;
}
// every line of text received from the client ends with \r\n
if (c == '\n') // Si le caractère reçu est \n on positionne la variable currentLineIsBlank à vrai
currentLineIsBlank = true;
else
if (c != '\r') // Si le caractère reçu est \r on positionne la variable currentLineIsBlank à faux
currentLineIsBlank = false;
}
}
delay(1000); // On laisse 1s au browser pour récupérer les données qu'on a envoyées
local_client.stop(); // ferme la connection
}
}
// renvoie les données des capteurs en format JSON
void getJSON_DataFromSensors(char *sDataFromSensors)
{
strcpy(sDataFromSensors, "{");
strcat(sDataFromSensors, "\"Température de l'eau\":\" ");
strcat(sDataFromSensors, "}");
}