Stap 5: Seriële communicatie
Verwerking kan communiceren met andere fysieke apparaten (zoals microcontrollers) met behulp van seriële communicatie. Bij deze vorm van communicatie verzendt het apparaat (in ons geval, een Arduino) seriële data op de verwerking schets een beetje op een moment. Het aantal bits per seconde wordt verzonden, is afhankelijk van de Baud-rate. Standaard is de baud-rate voor de Arduino en Processing milieu 9600. U kan dit veranderen, maar zorg ervoor dat de baud-rate is hetzelfde voor zowel de einde-toepassingen.
Om aan te tonen dat, ik zal met behulp van een Arduino om gegevens van een DHT11 temperatuur/luchtvochtigheid sensor naar de Processing schets. De code van de Arduino is hierbij gevoegd.
Meeste van de raar functies die u op de Arduino schets ziet maken deel uit van de DHT11 bibliotheek. Controleer de voorbeeld-schets die wordt geleverd met de bibliotheek ter referentie.
Het cruciale punt om op te merken is hoe we sturen elke tekenreeks van gegevens. Ten eerste, wij drukken de waarde van de temperatuur met behulp van Serial.print(). Ten tweede, wij drukken een komma, en dan komt de waarde van de luchtvochtigheid, gevolgd door een nieuwe-lijn (de Serial.println()). Daarom zijn we genereren van tekenreeksen bestaande uit twee sensor-waardes, gescheiden door een komma en elke tekenreeks eindigt met een karakter van de nieuwe-lijn.
Nu, laten we hij hoe Processing parseert de snaren. Hier is een eenvoudige schets waarin alleen de sensor-waarde wordt weergegeven:
de seriële bibliotheek importeren
importeren van processing.serial.*;
Seriële myPort; seriële-object
PFont lettertype; PFont object
globale variabelen
int. temp = 0;
int hum = 0;
VOID Setup {}
size(400,400);
myPort = nieuwe Serial(this,"COM3",9600);
myPort.bufferUntil('\n');
lettertype = loadFont ("ARESSENCE-48.vlw"); //created lettertype
textFont(font);
}
VOID draw() {}
Background(255);
Fill(140);
tekst ("temperatuur:" + temp, 72, 120);
tekst ("vochtigheid:" + hum, 104, 220);
}
VOID serialEvent(Serial myPort) {}
Lees de seriële buffer
String myString = myPort.readStringUntil('\n');
Als (myString! = null) {}
myString = trim(myString);
int sensorData [] = int(split(myString,','));
Temp = sensorData [0];
Hum = sensorData [1];
}
}
Zie bovenstaande uitkomst
Dingen op te merken:
- De verwerking van seriële bibliotheek is geïmporteerd bovenaan
- Een seriële type object met de naam "myPort" is gemaakt.
- In het configuratiemenu extraheert de "myPort.bufferUntil('\n')" de seriële data alleen wanneer een nieuwe-lijn-teken wordt gevonden. Dit zorgt ervoor dat een seriële gebeurtenis wordt geactiveerd wanneer een gehele gegevensreeks wordt gewonnen, niet ergens in het midden.
- de serialEvent() is een verwerking ingebouwde gebeurtenisfunctie, die wordt aangeroepen telkens die een seriële gebeurtenis wordt geactiveerd. Zodra het heet, het leest de uitgepakte tekenreeks uit de seriële buffer, snijdt u het en de tekenreeks splitst in twee tekenreeks, elk wezen van de waarde van een sensor. Deze waarden worden tijdelijk opgeslagen in een matrix, en vervolgens worden toegewezen aan de globale variabelen "temp" en "hum" respectievelijk.
- De "PFont" is een ingebouwde klasse voor het opstellen van de tekst. Om dit te gebruiken, moet u een lettertype met behulp van de "Maken lettertype..." optie onder Hulpmiddelen voor. Daarna volg wat ik deed!
Seriële communicatie is enigszins een enorme onderwerp. Om het even wie willen duiken verder wordt sterk aangemoedigd om te controleren de Tom Igoe Physical Computing klasse notities.