Bonjour à tou(te)s !
Situation
Depuis deux semaines, je travaille sur un projet artistique qui intègre un arduino mega reliée à plusieurs potentiomètres (une dizaine) et des ponts H pour piloter quelques moteurs. Le programme interne, simplifié, à le role de lire les valeurs des potards et de les envoyer en série via le port USB. Tout fonctionne jusque la.
Problème
Le dispositif, fonctionnel, est relié à une UC cachée dans un local sous clé. Du coup, un fil traverse 4m de l'arduino au PC. Pas ouf pour de l'USB, pas ouf pour un ERP car cela fait un fil qui traverse l'issue de secours...
Solution envisagée
Dans cette salle, le dispositif qui contient l'arduino est alimenté d'une manière invisible (prise au sol masquée). C'est donc uniquement l'usb qui nous embête. La solution miracle serait d'ajouter du WIFI ! Le concepteur de circuits AI Thinker à créé une série de petits modules comportant une antenne wifi, un soc ESP8266, deux gpio, un port série et une alim qui accepte du 3.3. Un firmware est préchargé dessus, similaire aux cartes LTE. Il recoit des commandes AT. Ce module (ESP01S) peut aussi être programmé comme tout soc ESP par un prog Cpp. Ce truc à 10 ans, mais ne coûte rien du tout en quantité de 10. Pour faire court, le truc serait de relier les ports RX TX à l'arduino, et de relier l'autre bout à ce petit module, qui lirait le port série comme un pc en usb, avec la lib Serial1 et qui l'encapsulerait dans du TCP. L'idéal serait de pouvoir récupérer la data pour l'interpréter comme une liaison série. J'ai essayé un programme simple pour le faire, et le module ne répond tout simplement pas aux commandes AT via l'arduino. Ce que j'ai aussi essayé, c'est de brancher le module à un FTDI, et là, il répond et fait sont job.
Le seul problème doit être moi, ou bien le wiring entre les deux.
J'arrête d'écrire, je suis pas écrivain non plus, et pour votre patience :))))
[Pinouts]
[Code Arduino]
void setup() {
Serial.begin(9600); // Pour la communication avec le moniteur série
Serial1.begin(115200); // Pour la communication avec l'ESP-01S
delay(2000); // Attendre 2 secondes pour s'assurer que tout est initialisé
// Configuration initiale
if (sendATCommand("AT", "OK", 1000)) {
Serial.println("ESP-01S répond à AT");
} else {
Serial.println("Pas de réponse à AT");
}
if (sendATCommand("AT+CWMODE=1", "OK", 1000)) {
Serial.println("Mode client configuré");
} else {
Serial.println("Echec de la configuration du mode client");
}
if (sendATCommand("AT+CWJAP=\"id wifi\",\"vousaurezpaslepwd\"", "OK", 5000)) {
Serial.println("Connecté au réseau Wi-Fi");
} else {
Serial.println("Echec de la connexion Wi-Fi");
}
}
void loop() {
// Vérifier les messages de l'ESP-01S
if (Serial1.available()) {
while (Serial1.available()) {
char c = Serial1.read();
Serial.write(c);
}
}
// Envoyer les commandes depuis le moniteur série
if (Serial.available()) {
String command = Serial.readString();
Serial1.println(command);
}
}
bool sendATCommand(String command, String response, int timeout) {
Serial1.println(command);
long int time = millis();
while ((time + timeout) > millis()) {
while (Serial1.available()) {
String res = Serial1.readString();
Serial.println("Réponse: " + res);
if (res.indexOf(response) != -1) {
return true;
}
}
}
Serial.println("Commande échouée : " + command);
return false;
}
un très grand merci en minuscules pour ne pas passer à la trappe ! hésitez pas à me demander des renseignements supplémentaires.