Arduino’s seriele print data uitlezen
Serial
Een Arduino bord heeft een programma dat (-bv om het te debuggen-) feedback geeft met print:
In de setup:
Serial.begin();
Je moet ook de snelheid opgeven, dus bv:
void setup() {
Serial.begin(9600);
}
In de code-loop:
Serial.println(someValue);
Bv in een loop:
void loop() {
Serial.println("Hello from Arduino..");
delay(1000);
}
De developer kan in de IDE de feedback zien met de tool “serial monitor”.
Losgekoppeld
Maar ook eens het programma loopt en de Arduino niet meer aan de programmeeromgeving hangt, kan je die seriële communicatie opvangen. Hang de usb-kabel aan een usb-poort van een Linux computer (Raspberry Pi, …).
1. Rechtstreeks vanuit het systeem/commandolijn
Om de hardware te benaderen moeten we root rechten hebben, ofwel telkens met sudo, ofwel:
su root
****
Werp een blik op de usb poorten:
lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 003: ID 046d:c31c Logitech, Inc. Keyboard K120 Bus 001 Device 002: ID 046d:c077 Logitech, Inc. M105 Optical Mouse Bus 001 Device 004: ID 2341:0043 Arduino SA Uno R3 (CDC ACM) Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
tty
Seriëel in de Linux (unix) wereld is “tty”; en er zijn heel wat seriële apparaten mogelijk:
ls /dev/tty*
/dev/tty /dev/tty20 /dev/tty33 /dev/tty46 /dev/tty59 /dev/ttyS12 /dev/ttyS25 /dev/tty0 /dev/tty21 /dev/tty34 /dev/tty47 /dev/tty6 /dev/ttyS13 /dev/ttyS26 .... /dev/tty15 /dev/tty28 /dev/tty40 /dev/tty53 /dev/tty9 /dev/ttyS2 /dev/ttyS4 /dev/tty16 /dev/tty29 /dev/tty41 /dev/tty54 /dev/ttyACM0 /dev/ttyS20 /dev/ttyS5 /dev/tty17 /dev/tty3 /dev/tty42 /dev/tty55 /dev/ttyS0 /dev/ttyS21 /dev/ttyS6 ... /dev/tty2 /dev/tty32 /dev/tty45 /dev/tty58 /dev/ttyS11 /dev/ttyS24 /dev/ttyS9
stty
Het commando dat de afkorting is van “Set Teletype”:
stty – change and print terminal line settings
Gebruik:
stty [-F APPARAAT | --file=APPARAAT] [INSTELLING...]
Wat?
stty -F
-F, –file=APPARAAT te gebruiken apparaat in plaats van standaardinvoer
Speciale instellingen:
speed
de snelheid van de terminal tonen
Dus:
stty -F /dev/ttyACM0 speed
9600
(vreemd ik zou verwachten 115200 ..)
Eens proberen of ik hem kan verzetten:
stty -F /dev/ttyACM0 speed 115200
9600
Terug opvragen:
stty -F /dev/ttyACM0 speed
115200
Lees nu uit:
cat /dev/ttyACM0
SCD30 Raw Data
Carbon Dioxide Concentration is: 930.56 ppm
SCD30 Raw Data
Carbon Dioxide Concentration is: 930.51 ppm
Carbon Dioxide Concentration is: 929.86 ppm
….
Dit is dezelfde uitvoer die je krijgt in de IDE.
Je kan de Arduino aan eender welke bereikbare* Linux-bak hangen en vanop afstand met ssh inloggen en uitlezen, naar een logfile laten sturen, enz…
* bekend ip-adres
2. Serieële communicatie ontvangen met software
Vanuit eigen geschreven software in python of gambas3 kan je de serieële poort uitlezen.
2.1 Python:
Grofweg gezegd: gebruik import serial, creeer een object met eigenschappen in parameters, en maak een lus met serialobject.readline()
2.2 Gambas: gebruik SerialPort, creëer een object, zet eigenschappen, maak methode _Read(), gebruik een lus of Timer om uit te lezen.