Étape 3: Code de Python
Le code Python lit les données sérielles entrantes et sépare chaque ligne dans les onglets, vous donnant des valeurs distinctes pour les données de X, Y et Z. Un traitement est fait pour placer les valeurs dans leurs propres variables.Pour tracer les variables, la bibliothèque « matplotlib » est utilisée pour créer un animation graphique. Il en résulte un raisonnablement précise « live feed », mais beaucoup d’activité de capteur provoqueront le graphique à la traîne un peu.
Enfin, les données sont enregistrées dans un fichier .txt dans un emplacement spécifié. Les données peuvent ensuite être lus en arrière quand nécessaire en utilisant la numpy.loadtxt() la fonction (voir la prochaine étape pour le code). Toutefois, ce type de fichier est plus facile à lire en Python, donc si vous voulez ouvrir les données dans un programme différent, vous devrez utiliser une fonction d’écriture différents. (ex. utilisation .csv format de fichier pour ouvrir les données dans Excel) N’oubliez pas de changer l’emplacement du fichier pour faire correspondre le répertoire de votre ordinateur.
Voir le code pour des observations plus détaillées (ou Google ou demander et je vais faire de mon mieux pour expliquer ou vous pointez sur une explication)
{{{
'''
Lit dans les données via une connexion série et les complots, que les résultats en direct. Avant de conclure, les données sont enregistrées dans un fichier .txt.
'''
importation de série
importation matplotlib.pyplot comme plt
Import numpy as np
Import win32com.client
connecté = False
#finds COM port c'est-à-dire sur l’Arduino (ne suppose qu’un Arduino est connecté)
WMI = win32com.client.GetObject("winmgmts:")
pour le port dans wmi. InstancesOf("Win32_SerialPort") :
port de #print. Nom #port. ID de périphérique, port. Nom
Si « Arduino » dans le port. Nom :
comPort = port. DeviceID
impression comPort, « est l’Arduino »
SER = serial. Serial(comPort, 9600) #sets connexion série (faire assurer en bauds est correct - matches Arduino)
Lorsque vous êtes ne pas connecté :
Serin = ser.read()
connecté = True
terrain de PLT.ion() #sets en mode animation
longueur = 500 #determines longueur des données en session (points de données)
x = [0] * variable vide longueur #create de longueur de test
y = [0] * longueur
z = [0] * longueur
demi-droite, = plt.plot(x) #sets futures lignes à modifier
yline, = plt.plot(y)
zline, = plt.plot(z)
PLT.ylim(400,700) #sets l’y axe limites
car moi en range(length) : #while vous prenez des données
données = ser.readline() #reads jusqu'à ce qu’il obtienne un transport retour. ASSUREZ-VOUS QU’IL Y A UN RETOUR CHARIOT OU IL LIT POUR TOUJOURS
Sep = data.split() #splits chaîne dans une liste à onglets
#print sep
x.Append(int(Sep[0])) #add nouvelle valeur en tant qu’int à liste actuelle
y.Append(int(Sep[1]))
z.Append(int(Sep[2]))
del x [0]
y del [0]
del z [0]
xdata xline.set_xdata(NP.arange(Len(x))) #sets à la nouvelle longueur de la liste
yline.set_xdata(NP.arange(Len(y)))
zline.set_xdata(NP.arange(Len(z)))
xline.set_ydata(x) #sets ydata à la nouvelle liste
yline.set_ydata(y)
zline.set_ydata(z)
PLT.pause(0.001) #in secondes
PLT.Draw() #draws nouveau tracé
lignes = zip (x, y, z) #combines listes ensemble
row_arr = np.array(rows) #creates tableau de liste
NP.savetxt ("C:\\Users\\mel\\Documents\\Instructables\\test_radio2.txt", row_arr) #save données dans fichier (charge w/np.loadtxt())
SER.Close() #closes connexion série (très important de le faire! si vous avez une erreur dans le code, tapez ceci dans la ligne de cmd pour fermer la connexion)
}}}