Mon code Python est très simple, faites une requête GET sur une page Web créée sur un Arduino Yún.
import httplib
conn = httplib.HTTPConnection("yun.local")
conn.request("GET", "/arduino/read/temp/0")
r1 = conn.getresponse()
print r1.status, r1.reason, r1.read()
Lorsque j'exécute ceci du côté Linux de l'Arduino Yún, l'erreur suivante s'affiche socket.gaierror: [Errno -2] Nom ou service inconnu . Cependant, lorsque je lance le même script sur mon Mac, cela fonctionne parfaitement.
J'ai surmonté ce problème en modifiant l'argument HTTPConnection en httplib.HTTPConnection ("192.168.240.1") , qui correspond à l'adresse IP de l'Arduino Yun.
Alors, pourquoi cette erreur apparaît-elle du côté Linux d’Arduino et non de mon Mac?
Merci.
Le socket.gaierror
provient de Python ne pouvant pas exécuter getaddrinfo()
ou getnameinfo()
. Dans votre cas, c'est probablement le premier. Cette fonction prend un hôte et un port et renvoie une liste de nuplets contenant des informations sur la connexion à un hôte. Si vous attribuez un nom d'hôte à cette fonction, nous tenterons de résoudre l'adresse IP plus en profondeur ci-dessous.
Ainsi, l’erreur devrait provenir du fait que Python n’a pas pu résoudre l’adresse que vous avez écrite (yun.local
) en une adresse IP valide. Je vous suggère de regarder dans /etc/hosts
sur le périphérique pour voir s'il est défini ici. Vous pouvez également essayer avec des outils en ligne de commande tels que Host
ou telnet
, juste pour vérifier la résolution:
Par exemple:
[pugo@q-bert ~]$ telnet localhost 80
Trying ::1...
Trying 127.0.0.1...
telnet: Unable to connect to remote Host: Connection refused
Là, il a réussi à résoudre ma localhost
en ::1
(IPv6) et 127.0.0.1
(IPv4), car elle existe dans /etc/resolv.conf
. Si j'essaie plutôt avec votre hôte:
[pugo@q-bert ~]$ telnet yun.local 80
telnet: could not resolve yun.local/80: Name or service not known
Dans mon cas, j'ai changé le nom d'hôte. J'ai donc réalisé que/etc/hosts restait l'ancien nom d'hôte. Je viens de mettre à jour le nouveau nom d'hôte dans le fichier/etc/hosts et cela a fonctionné pour moi.