Bonjour,
Je viens vers vous après avoir galéré un max
J'ai une arduino uno avec un shield wifi de la marque Cytron.
J'essaie de communiquer avec via une socket réseau.
Coté Recepteur (arduino) voici le code
#include <CytronWiFiShield.h>
#include <CytronWiFiServer.h>
#include <Servo.h>
//Wifi settings
#define ssid "ssid"
#define password "passwd"
#define port 1234
//Hardware settings
#define pinServo 9
Servo servoMoteur;
ESP8266Server server(port);
String angle;
int angleInt;
void setup()
{
Serial.begin(9600);
if (!wifi.begin(2, 3))
{
Serial.println("WiFi shield not present");
while (true)
{
// don't continue. Here we can put a reset function.
// The good way is to connect a wire output<->resetPin and set High/Low
}
}
Serial.println("trying to connect");
while (!wifi.connectAP(ssid, password))
{
Serial.print(".");
}
Serial.print("Connected with ip : ");
Serial.println(wifi.localIP());
server.begin(); //Start listening
servoMoteur.attach(pinServo);
servoMoteur.write(0);
}
void loop() {
ESP8266Client client = server.available(); //Get a connection
if(client)
{
while(client.connected())
{
Serial.println(client.read());
}
Serial.println("disconnected");
}
//client.stop();
}
Pour le moment j'affiche juste ce que je recoit sur la socket.
Et coté emetteur j'ai fait un petit bout de code python (je l'ai aussi fait en C mais meme probleme)
import socket
import time
import asyncio
SERVER_IP = "192.168.0.107"
SERVER_PORT = 1234
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((SERVER_IP, SERVER_PORT))
values = [45, 90, 180]
for value in values:
client_socket.send(value.to_bytes(1, byteorder='big'))
time.sleep(1)
client_socket.close()
Dans la theorie parfaite j'aimerais recevoir sur l'output de l'arduino 45, 90, 180
Mais, tel quel je recoit 45, 13, 10, -1, -1 puis disconnected
13 et 10 sont visiblement \r et \n.
Si je ne met pas de time.sleep() du tout,
je recoit
45 90 180 13 10 48 44 67 76 79 83 69 68 13 10
Ce qui peut se traduire par 45 90 180 \r \n 0,CLOSED \r \n
J'ai tester pas mal de choses differente mais je ne trouve rien de fonctionnel.
J'aimerais simplement émettre plusieurs valeurs, avec un delais entre chaque, et les recevoir proprement (pour les envoyer sur un servo)
Quelqu'un saurait ce qu'il se passe ?
Merci beaucoup