Étape 5: Communication série
Traitement peut communiquer avec d’autres périphériques physiques (par exemple, microcontrôleurs) utilisant des communications série. Au cours de cette forme de communication, l’appareil (dans notre cas, un Arduino) envoie des données série au traitement esquisser un bit à la fois. Le nombre d’octets envoyés par seconde dépend de la vitesse de transmission. Par défaut, la vitesse de transmission pour l’environnement Arduino et le traitement est 9600. Vous pourriez changer cela, mais assurez-vous que la vitesse de transmission est le même pour les deux les fin-applications.
Pour illustrer cela, je vais utiliser un Arduino pour envoyer des données d’un capteur de température/humidité DHT11 à l’esquisse de traitement. Le code de l’Arduino est ci-jointe.
La plupart des fonctions bizarres que vous voyez sur le sketch Arduino font partie de la bibliothèque DHT11. Vérifier l’esquisse de l’exemple fourni avec la bibliothèque de référence.
L’essentiel de noter, c’est comment nous envoyons chaque chaîne de données. Tout d’abord, nous imprimons la valeur de la température à l’aide de Serial.print(). Deuxièmement, nous imprimons une virgule et puis vient la valeur d’humidité, suivie d’un saut de ligne (le Serial.println()). Par conséquent, nous sommes de production comprenant des chaînes de deux valeurs de capteur, séparés par une virgule et chaque chaîne se termine par un caractère de nouvelle ligne.
Maintenant, nous allons il façon traitement analyse les chaînes. Voici un croquis simple qui se contente d’afficher la valeur de la sonde :
importez la bibliothèque de série
Import processing.serial.* ;
Serial myPort ; objet de série
PFont polices ; Objet PFont
variables globales
temp int = 0 ;
hum int = 0 ;
void setup() {}
Size(400,400) ;
myPort = new Serial(this,"COM3",9600) ;
myPort.bufferUntil('\n') ;
police = loadFont ("ARESSENCE-48.vlw"); //created police
textFont(font) ;
}
{} void draw()
Background(255) ;
Fill(140) ;
texte ("température:" + temp, 72, 120) ;
texte ("humidité:" + hum, 104, 220) ;
}
void serialEvent(Serial myPort) {}
lire la mémoire tampon de série
Dim myString As String = myPort.readStringUntil('\n') ;
Si (myString! = null) {}
myString = trim(myString) ;
int sensorData [] = int(split(myString,',')) ;
Temp = sensorData [0] ;
Hum = sensorData [1] ;
}
}
Voir les résultats ci-dessus
Choses à noter :
- La bibliothèque de traitement série est importé au sommet
- Un objet de type série nommé « myPort » est créé.
- Dans la configuration, le « myPort.bufferUntil('\n') » extrait les données séries, seulement lorsqu’il détecte un caractère de nouvelle ligne. Cela garantit qu’un série événement est déclenché uniquement lorsque toute une série de données est extraite, pas quelque part au milieu.
- le serialEvent() est une fonction d’événements intégrée de traitement, qui est appelée un série événement se déclenche à chaque fois. Une fois qu’on l’appelle, il lit la chaîne extraite de la série tampon, il ajuste et fractionne la chaîne en chaîne deux, chacune d’elles étant une valeur de la sonde. Ces valeurs sont temporairement stockés dans un tableau et puis sont assignés aux variables globales « temp » et « hum » respectivement.
- Le « PFont » est une classe intégrée pour dessiner le texte. Afin de l’utiliser, vous devez faire une police à l’aide d’option "Créer des polices..." de traitement sous outils. Par la suite, il suffit de suivre ce que j’ai fait !
Communication série est un peu un sujet vaste. Toute personne désirant plonger davantage est fortement encouragé à consulter de Physical Computing de Tom Igoe notes de la classe.