
[Projet Rover 2WD] Mon robot de surveillance mobile et télécommandé
#123
Posté 29 juin 2017 - 04:54
Pour le test de la mini API entre le Rpi3 et l'app Android pour la transmission des commands du robot ( AV AR ... ) :
- un ajout de blocks dans l'app android inventor2 pour le test de l'API ( message <TestApi> envoyé suite click du bouton "Connexion API Rpi3" et attente réception message <Test Api> par l'app android
- un script python est lancé sur le Rpi pour les échanges Rpi3 <-> App android
#!/usr/bin/python3.4 # coding: utf-8 # -*-coding:Utf-8 -* import socket host = '' port = 8481 connexion_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) connexion_server.bind((host, port)) connexion_server.listen(5) print("Le serveur écoute à présent sur le port {}".format(port)) connexion_client, infos_connexion = connexion_server.accept() print(infos_connexion) msg_recu = b"" while msg_recu != b"Stop": msg_recu = connexion_client.recv(1024) if msg_recu: # L'instruction ci-dessous peut lever une exception si le message # Réceptionné comporte des accents print(msg_recu.decode()) connexion_client.send(b"<Test Api>") print("Reponse <Test Api>") print(infos_connexion) print("Fermeture de la connexion") connexion_client.close() connexion_server.close()
Pura vida
Ma chaine youtube https://www.youtube....EQ5MTR3A/videos
Tutoriel MIT Inventor2 https://www.robot-ma...e-robot-mobile/
#124
Posté 02 juillet 2017 - 11:20
Test de l'API .... Le message de test est bien recu par le script python du Raspberry mais la réponse envoyée par le Rpi n'est pas recu par l'app android , le texte "Connexion Api Rpi3 OK" ne s'affichant pas.
Pura vida
Ma chaine youtube https://www.youtube....EQ5MTR3A/videos
Tutoriel MIT Inventor2 https://www.robot-ma...e-robot-mobile/
#126
Posté 02 juillet 2017 - 08:44
Merci pour la proposition.
La modification du script python ne résouds pas le pb.
Je vais tracer les messages RPI3 <-> Android App avec Wireshark .
Pura vida
Ma chaine youtube https://www.youtube....EQ5MTR3A/videos
Tutoriel MIT Inventor2 https://www.robot-ma...e-robot-mobile/
#128
Posté 12 juillet 2017 - 08:59
@arobasseb ,
J'ai ajouté un "print" dans le block "when web3.gottext avant le if mais pas de trace editée dans le label du bouton de l'app android , donc à priori la réponse du RPI3 n'arrive pas à l'app android
Donc il va falloir tracer les messages HTTP échangés entre le RPI3 et l'APP Android avec Wireshark ou Tcpdump , mais je ne sais pas si l'interface wifi du RPI3 peut passer en mode "promiscuous" pour "sniffer" à partir d'un PC.
Pura vida
Ma chaine youtube https://www.youtube....EQ5MTR3A/videos
Tutoriel MIT Inventor2 https://www.robot-ma...e-robot-mobile/
#130
Posté 12 juillet 2017 - 03:52
La prise de trace par Wireshark est possible en installant le client python sur un PC comme l'interface wifi du RPI3 ne supporte pas le mode "promiscuous"
Le client python sur PC attend une saisie clavier avec ">" par exemple "<Test Api>" et le serveur python sur le RPi3 va renvoyer "<Test Api>".
+++++++++++++++++++++++++++
Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 17:54:52) [MSC v.1900 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>>
=========== RESTART: D:\Personnel\Robotique\test client python.py ===========
Connexion établie avec le serveur sur le port 8481
> <Test Api>
<Test Api>
>
+++++++++++++++++++++++++++++
==> Résultat OK de l'échange ci-dessous avec la trace wireshark ( port serveur = 8481 ) mais qui montre que la réponse TCP+ Data n'est pas compatible avec l'app android qui utilise des requètes HTTP POST + DATA
=> Requette Http POST recue de l'app android coté serveur en test réel
==> Traces Wireshark du client python de test
==> Client Python
import socket host = "192.168.0.150" port = 8481 connexion_avec_serveur = socket.socket(socket.AF_INET, socket.SOCK_STREAM) connexion_avec_serveur.connect((host, port)) print("Connexion établie avec le serveur sur le port {}".format(port)) msg_a_envoyer = b"" while msg_a_envoyer != b"fin": msg_a_envoyer = input("> ") msg_a_envoyer = msg_a_envoyer.encode() # message client vers serveur RPI3 connexion_avec_serveur.send(msg_a_envoyer) msg_recu = connexion_avec_serveur.recv(1024) # message réponse serveur RPI3 vers client print(msg_recu.decode()) print("Fermeture de la connexion") connexion_avec_serveur.close()
Pura vida
Ma chaine youtube https://www.youtube....EQ5MTR3A/videos
Tutoriel MIT Inventor2 https://www.robot-ma...e-robot-mobile/
#132
Posté 13 juillet 2017 - 11:00
L'idée est de garder , au niveau du script python coté serveur , les sockets TCP mais en renvoyant une réponse HTTP/1.1 200 OK avec les headers qui vont bien et non plus le renvoi du message recu "<Test Api>".
Ca devrait marcher !
Pura vida
Ma chaine youtube https://www.youtube....EQ5MTR3A/videos
Tutoriel MIT Inventor2 https://www.robot-ma...e-robot-mobile/
#133
Posté 14 juillet 2017 - 09:08
Ca marche si le serveur réponds un HTTP/1.1 200 OK à l'app Android
La prochaine étape sera de tester la connexion app android <-> Arduino connecté en USB derrière le RPI3
Script de test python installlé sur le RPI3
#!/usr/bin/python3.4 # coding: utf-8 # -*-coding:Utf-8 -* import socket host = '' port = 8481 connexion_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) connexion_server.bind((host, port)) connexion_server.listen(5) print("Le serveur écoute à présent sur le port {}".format(port)) connexion_client, infos_connexion = connexion_server.accept() print(infos_connexion) msg_recu = b"" # header response code 200 h = 'HTTP/1.1 200 OK\n' h += 'Server: Simple-Python-HTTP-Server\n' h += 'Content-Length: 0\n' h += 'Connection: keep-alive\n\n' # Boucle while msg_recu != b"Stop": msg_recu = connexion_client.recv(1024) if msg_recu: print(msg_recu.decode()) connexion_client.send(h.encode()) print(h) # response code 200 print(infos_connexion) print("Fermeture de la connexion") connexion_client.close() connexion_server.close()
- Path aime ceci
Pura vida
Ma chaine youtube https://www.youtube....EQ5MTR3A/videos
Tutoriel MIT Inventor2 https://www.robot-ma...e-robot-mobile/
#134
Posté 10 septembre 2017 - 12:32
Il restait à tester la connexion app android <-> Arduino connecté en USB derrière le RPI3 , avant de poursuivre sur les commandes du robot .
La séquence du dialogue entre l'app android , le script python du RPI et le sketch de l'Arduino est plus ou moins bien décrite dans les traces du screenshot pris sur le PI .
- Envoi "Arduino Ready" en boucle au Rpi par le sketch Arduino dans le bloc setup
- Configuration port USB par le Rpi ( ser = serial.Serial("/dev/ttyACM0", 9600)
- Réception "Arduino Ready" par le RPi
- Envoi "RPI ready" par le Rpi à l'Arduino
- Réponse "Rpi Ready" de l'Arduino au Rpi
- Connexion du serveur socket dans le Rpi
- Connection du client socket Android dans le Rpi
- Envoi message"<Test Android Arduino<" par l'app Android ( bouton "Connexion Arduino")
- Réponde du Rpi " http 200 OK" à l'app Android
- Affichage "Connexion Arduino OK" sur l'app android
La prochaine étape sera de creer un nouvel écran sur l'app android pour les commandes du robot et le retour video
Pura vida
Ma chaine youtube https://www.youtube....EQ5MTR3A/videos
Tutoriel MIT Inventor2 https://www.robot-ma...e-robot-mobile/
#135
Posté 11 septembre 2017 - 10:17
Finalement j'ai rajouté une page d'accueil sur l'app Android afin de naviguer entre les pages :
- Page d'accueil ( screenshot ci-dessous)
- Page de test de connexions(disponible) entre l'app Android , le Rpi et son script API en python , la caméra USB du Rpi et l'Arduino et son sketch du robot
- Page de controle ( demain !) du robot à partir de l'app Android sur smartphone
- Page de controle ( futur lointain) du robot à partir du logiciel domotique
-
Pura vida
Ma chaine youtube https://www.youtube....EQ5MTR3A/videos
Tutoriel MIT Inventor2 https://www.robot-ma...e-robot-mobile/
#136
Posté 12 septembre 2017 - 05:54
Ma chaine YouTube : https://www.youtube..../oracid1/videos
#137
Posté 12 septembre 2017 - 07:29
Muchas gracias @Oracid
Voici la page de controle du robot à partir de l'app Android sur smartphone avec le retour vidéo.
En ce qui concerne l'ergonomie des boutons de controle du robor , je ne sais pas si on peut faire mieux .
- Oliver17 aime ceci
Pura vida
Ma chaine youtube https://www.youtube....EQ5MTR3A/videos
Tutoriel MIT Inventor2 https://www.robot-ma...e-robot-mobile/
#138
Posté 13 septembre 2017 - 04:47
Début des tests à partir de l'app Android :
- L'action sur le bouton "Start" doit lancer la partie "Setup" du sketch Arduino suite relai du script python du Rpi
- Le message "Start" est bien envoyé par l'app Android vers le Rpi qui l'a envoyé vers l'Arduino , selon les traces coté Rpi ci-dessus
- Ce message n'est pas arrivé coté Arduino , , va falloir regarder le code des 2 cotés (Rpi et Arduino )
Ps: Deux champs ont été rajoutés coté app Android pour visualiser le message envoyé et la réponse
Pura vida
Ma chaine youtube https://www.youtube....EQ5MTR3A/videos
Tutoriel MIT Inventor2 https://www.robot-ma...e-robot-mobile/
#139
Posté 13 septembre 2017 - 07:33
Random guess : la partie setup est lancée dès que l'arduino est mise sous tension ; donc si ton arduino est branchée, et à moins de ré-uploader son code, au moment où tu tentes de communiquer avec, elle est déjà dans la loop.
À l'inverse, si setup n'a pas encore été appelé, il est possible que le port série ne soit pas encore initialisé (réponse sans vérifier tous les détails de ton architecture, si tu utilises un shield le comportement est peut-être différent). Je ne sais pas comment se comporterait un Serial.begin() en dehors de ces fonctions (théoriquement, il serait juste appelé dans le main du programme, mais peut-être que le placer dans le setup garantit une bonne initialisation de la carte?).
Au passage, bravo pour ton projet, je fais habituellement partie de la masse silencieuse des lecteurs mais c'est l'occasion de le dire
#140
Posté 13 septembre 2017 - 11:50
Merci @R1D1 pur la contribution
Le "random guess" s'est transformé en "good catch" car effectivemen c'est bien le problème que j'avais contourné pour réaliser les premiers essais entre Rpi e Arduino , en faisant un téléversement Arduino après le lancement du script python coté Rpi pour que le Rpi puisse recevoir un message envoyé au niveau du setup du sketch Arduino. (solution palliative).
Je croyais naivement que sur ouverture du port Usb par le Rpi , la carte Arduino faisait un reset..
//------------- SETUP---------------
void setup()
{
SerialSetup(); // Init serial communication
if (DEBUG) {
Serial.print("----- Setup : start time =");
Serial.println(millis()); }
Connect_Rpi(); // Test to USB connection Rpi
LcdSetup(); // Init Lcd screen
VoltageAccuSetup(); // Init battery voltage measurement
SRF05Setup(); // Init Ultrason sensor
ServoSetup(); // Init camera servomotor
MotorsSetup(); // init 2 CC motors
if (DEBUG) {
Serial.print("----- Setup : end time =");
Serial.println(millis()); }
}
//----------------------------
1) Cette séquence "Connect_Rpi(); " est à déplacer du bloc setup au bloc loop dans le sketch Arduino.
2) Non réception du message <start> envoyé par Rpi/python par le sketch Arduino
Il faut que je relise le code de réception sur l'interface USB coté Arduino
Pura vida
Ma chaine youtube https://www.youtube....EQ5MTR3A/videos
Tutoriel MIT Inventor2 https://www.robot-ma...e-robot-mobile/
Répondre à ce sujet

Aussi étiqueté avec au moins un de ces mots-clés : Arduino, Raspberry PI3, MIT Inventor 2, Rover, UGV, Robot mobile, PID
1 utilisateur(s) li(sen)t ce sujet
0 members, 1 guests, 0 anonymous users