Bonjour,
Je travaille avec le microcontrôleur SAM3X8E et sous Atmel Studio 7.
J'aimerai réussir à envoyer des données depuis mon PC à ma carte de programmation par le biais de bus Ethernet TCP/IP.
Côté PC, j'utilise la librairie Socket de python pour la création de socket.
Côté carte j'utilise les librairies emac et ethernet_phy pour détecter les pings et détecter la présence ou non de mon câble Ethernet (ces 2 fonctionnalités fonctionnent) et la librarie lwip 1.4.0 pour la création de socket.
Mon problème est que je n'arrive pas à connecter le socket de mon PC (Client) à celui de ma carte (Serveur). J'obtiens toujours une erreur de timeout. Niveau soft je ne vois pas où se trouve l'erreur et niveau Hardware j'ai essayé de rajouter le port à mon firewall, désactiver mon firewall, ... Mais rien n'y fait j'ai toujours cette erreur de Timeout.
Voici des screens de scan nmap de mon PC et de ma carte :
Capture d’écran 2021-07-06 133420.jpg
Capture d’écran 2021-07-06 133453.jpg
Et voici mon code :
Coté carte :
Les printf pourtant semblent bons :Code:int main(void) { /* Initialize interrupts */ irq_initialize_vectors(); cpu_irq_enable(); /* Initialize the SAM system */ sysclk_init(); /* Setup of the I/Os, DAC and ADC PINs */ board_init(); /* Setup Ethernet */ init_eth(); lwip_init(); /* Wait for the Ethernet cable */ while(ethernet_phy_auto_negotiate(EMAC, BOARD_EMAC_PHY_ADDR) != EMAC_OK); while(ethernet_phy_set_link(EMAC, BOARD_EMAC_PHY_ADDR, 1) != EMAC_OK); /* Socket */ struct tcp_pcb *pcb; pcb = tcp_new(); tcp_bind(pcb, 192.168.1.40, 5050); pcb = tcp_listen(pcb); tcp_accept(pcb, connectionAccepted); // La fonction Callback connectionAccepted fait juste un print pour me dire que le socket est bien connecté, mais cela n'arrive jamais printf("state of the socket : %s \r\n", getSocketState(pcb->state)); printf("port du socket : %i \r\n", pcb->local_port); printf("Socket ready \r\n"); uint32_t ul_frm_size = 0; while(1){ /* To receive ethernet packet (ça ça marche)*/ if (emac_dev_read(&gs_emac_dev, (uint8_t *) gs_uc_eth_buffer, sizeof(gs_uc_eth_buffer), &ul_frm_size) == EMAC_OK) { emac_process_eth_packet((uint8_t *) gs_uc_eth_buffer, ul_frm_size); } } }
Capture d’écran 2021-07-06 134108.jpg
Coté PC :
Voilà l'erreur que j'obtiens :Code:IP_PORT = 5050 BAUD_RATE = int(115200) arduino_IP_address = 192.168.1.40 try if client is None: client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.settimeout(4) client.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) client.connect((arduino_IP_address, IP_PORT)) except OSError as err: print("lol", err)
Capture d’écran 2021-07-06 134423.jpg
Pourtant j'arrive bien à ping ma carte et j'ai l'impression que le socket côté carte est bien disponible donc je ne comprend pas pourquoi j'ai ce time out...
Avez vous des idées ?
-----