Änderungen

Aus Hackerspace Ffm
Wechseln zu: Navigation, Suche

Raspberry Pi Advanced

2.312 Byte hinzugefügt, 13:02, 19. Jul. 2017
/* GPIO Serial */
== GPIO Serial ==
Man kann über die GPIO-Pins eine serielle Verbindung zu einem PC, Arduino, ... aufbauen um Daten auszutauschen oder Steuerinformationen zu übertragen.<br>[[File:Raspi3_GPIO_Rxtx.PNG|150px]][https://pinout.xyz/pinout/]<br><br>Die Zuerst muss die serielle login shell deaktivieren deaktiviert und die serialle schnittstelle aktivierenserielle Schnittstelle aktiviert werden.
<pre> sudo raspi-config </pre>
* 5. Interfacing Options
Wenn man die beiden pins 8(TX) und 10(RX) miteinander verbindet, kann man die Schnittstelle mit sich selbst testen.
Auf dem Terminal werden die Tastatureingaben als ein lokales Echo wiedergegeben.
<pre>sudo minicom -b 115200 -D /dev/ttyS0 (Verlassen über Strg+a, z, x)</pre>
oder
<pre>cu -l /dev/ttyS0 -s 115200 (Verlassen ~.)</pre>  Da die GPIO-Pins des Raspis mit 3.3V und der PC oder Arduino mit 5V Logic Level funktionieren müssen wir die Level convertieren.<br>Da ein TX-Signal vom Raspi mit 3.3V im PC immer noch ein High ist brauchen wir hier nichts zu tuen.<br>Das 5V TX-Signal vom PC zum Raspi würde aber den Pin zerstören. Hier reicht es aber einen Spannungsteiler zwischen zu schalten.<br>[[File:SerialRaspiArduino.jpg]] '''PC'''<br>Hier ein Terminalprogramm wie Terminal von Br@y verwenden. '''Arduino'''<pre>void setup() { Serial.begin(9600);}void loop() { if(Serial.available()) { Serial.write(Serial.read()); }}</pre>Und hier ein etwas komplexerer Kommandoparser:<br>Die Kommandos sind a und b gefolgt von einem Integer wie z.B. ''a21''<pre>void receive_serial_cmd(void) { static uint8_t cmd[18]; // command buffer static uint8_t cmdcount = 0; // position in the buffer of the received byte uint8_t c; // received byte while(Serial.available()) { c = Serial.read(); if(c > ' ') cmd[cmdcount++] = c; if((c == 8) && (cmdcount > 0)) cmdcount--; // deals with backspaces, if a person on the other side types if((c == 0x0d) || (c == 0x0a) || (cmdcount > 16)) { // end of command, gets interpreted now cmd[cmdcount] = 0; // clear the last byte in cmd buffer if(cmdcount > 0) { // prevent empty cmd buffer parsing switch(cmd[0]) { case 'a': if((cmdcount > 2) && (cmdcount < 7)) { int temp = atoi((const char *)&cmd[1]); Serial.print("a:"); Serial.println(temp); } break; case 'b': if((cmdcount > 2) && (cmdcount < 7)) { int temp = atoi((const char *)&cmd[1]); Serial.print("b:"); Serial.println(temp); } break; } } cmdcount = 0; } }}</pre>
== Weitere Nutzer einrichten ==
688
Bearbeitungen