Liebe Forenmitglieder,
meine Vorgabe, die ich erhalten habe ist es, eine serielle Datenuebrtragung zwischen esp32-Modulen und einem Raspberry Pi herzustellen. Hierfuer wollte ich zunaechst als Einstieg eine UART-Kommunikation zwischen zwei Raspberry Pi's erzeugen. Leider gelingt mir dies nicht so ganz.
Als Anleitung verwende ich folgenden Link:
http://www.netzmafia.de/skripten/hardw…sPi_Serial.html
Der Code ist leicht modifiziert, damit er mit Python3 kompatibel ist.
Der Empfaenger fuehrt folgenden Code aus:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import time
import serial
ser = serial.Serial(port='/dev/ttyAMA0', baudrate = 19200, timeout=1)
if (ser.isOpen() == True):
ser.close()
ser.open()
try:
while 1:
x = ser.readline().rstrip() # LF am Ende entfernen
print(x)
# Keyboard Interrupt abfangen, zum beenden mit [STRG]+[C].
except(KeyboardInterrupt, SystemExit):
print("Abbruch")
ser.close()
Alles anzeigen
Fuehr den Sender liegt folgendes Program vor:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import time
import serial
counter = 0
ser = serial.Serial(port='/dev/ttyAMA0', baudrate = 19200, timeout = 1)
if (ser.isOpen() == True):
ser.close()
ser.open()
try:
while 1:
ser.write(b"H")
time.sleep(1)
counter += 1
# Keyboard Interrupt abfangen, zum beenden mit [STRG]+[C].
except(KeyboardInterrupt, SystemExit):
print("Abbruch")
ser.close()
Alles anzeigen
Im Grunde soll nur der Buchstabe H uebertragen werden.
In dem Link ist ebenfalls beschrieben, dass gewisse Konfigurationen vorgenommen werden muessen, damit die Bluetooth-Schnittstelle die Kommunikation nicht stoert.
ZitatBearbeiten /boot/cmdline.txt
Die Datei /boot/cmdline.txt regelt den Bootvorgang des Pi. Dort werden diverse Boot-Optionen eingestellt, so auch die serielle Konsole. Per Default steht relativ wenig in der Datei, wobei es bei kommenden Versionen schon wieder anders aussehen kann (für die Darstellung hier wurde die Zeile umbrochen!
Codedwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
Aus diesen Optionen müssen Sie nun die Angaben zur Konsole "ttyAMA0" löschen, aber alles andere unbedingt unverändert lassen. Am Besten machen Sie zuerst
ein Backup der Datei (cp /boot/cmdline.txt /boot/cmdline.bak). Dann ändern Sie in der Originaldatei die Zeile:Codedwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
in die folgende Zeile (oben sind die zu löschenden Teile farbig hervorgehoben):
Meine cmdline.txt-Datei beinhaltet folgendes:
Zitat
Ich wuerde sagen, hier liegt kein problem vor oder?
Weiterhin soll folgendes durchgefuehrt werden:
ZitatAlles anzeigenBearbeiten /etc/inittab
Nun wird die Datei /etc/inittab bearbeitet. In ihr ist die serielle Schnittstelle als Login-Schnittstelle definiert. Dazu Öffnen Sie die Datei und bearbeiten den folgenden Eintrag:
Ändern Sie die Zeile durch ein davor gestelltes Kommentarzeichen in
Damit ist die Login-Funktion abgeschaltet. Wenn Sie den Pi nun neu starten, können Sie die serielle Schnittstelle beliebig nutzen.
Damit der User pi auch auf die Schnittstelle zugreifen darf, muss er zusätzlich in die Gruppe "dialout" aufgenommen werden. Das erreichet man mit dem Kommando
Bei neueren Versionen des Raspian-Betriebssystems kann die Aktivierung/Deaktivierung der
Schnittstelle auch über raspi-config erfolgen. Damit läßt sich die Schnittstelle aber nur komplett aktivieren oder deaktivieren (nach dem Deaktivieren ist /dev/ttyAMA0 dann nicht mehr vorhanden und steht auch fürdie Programmierung nicht mehr zur Verfügung.Fehlt also bei Ihrem System die Datei /etc/inittab, kann die Deaktivierung des Login-Terminals auf der seriellen Schnittstelle über systemctl mit den beiden folgenden Befehlen vorgenommen werden. Die Schnittstelle bleibt dann für die Programmierung aktiv:
Codesudo systemctl stop serial-getty@ttyAMA0.service sudo systemctl disable serial-getty@ttyAMA0.service
Beim Raspberry Pi, Model 3, existieren zwei serielle Schnittstellen (siehe folgenden Abschnitt),
weshalb bei diesem Board die Befehle geändert werden müssen:Codesudo systemctl stop serial-getty@ttyS0.service sudo systemctl disable serial-getty@ttyS0.service
Mit der aktuellen Raspbian-Version müssen Sie sich nicht mehr mit den beiden Dateien
herumschlagen. Im Konfigurationstool raspi-config gibt es einen Menüpunkt
zum Ein- und Ausschalten der seriellen Konsole. Sie rufen raspi-config auf
und wählen dann die Menüoptionen "Advanced Options" → "Serial" → "Nein"
(bzw. "No" in der englischen Sprachvariante) zum Deaktivieren der seriellen Konsole.
Solch eine inittab Datei besitzt mein Raspberry aber garnicht...
Vielleicht ist der Link zu alt fuer die neue Raspbian-Version. RX und TX sind vertauscht und GND ist jeweils miteinander. Ich wuerde mich sehr freuen, wenn einer von euch vielleicht den Fehler sieht...
Viele Gruesse und einen schoenen ersten Advent wuenscht Salzforscher