Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Board-to-Board-Kommunikation

In diesem Lab richten Sie UART-basierte Kommunikationskanäle zwischen dem Pi 4 und den HiFive 1-Boards ein.

Teil 0:Einrichten der UART-Verbindungen (für TAs)

In diesem Teil werden wir die HiFive1- und die Raspberry Pi 4-Platinen über zwei UART-Kanäle verbinden.

(Beachten Sie, dass dieser Schritt von den Reiseberatern durchgeführt wird.)

Der Pi 4 hat 4 UARTs und wir werden zwei davon verwenden (uart2 und uart3). Fügen Sie die folgende Zeile am Ende der Datei /boot/config.txt hinzu, um uart2 und uart3 zu aktivieren.

dtoverlay=uart2,115200 dtoverlay=uart3,115200

Nach dem Neustart des Systems werden /dev/ttyAMA1 und /dev/ttyAMA2 erstellt.

Verbinden Sie den UART1 RX von HiFive (Pin7) mit dem UART2 TX von Raspberry Pi 4 (Pin 27). Dies ist die Hauptkommunikationsleitung zwischen dem Pi 4 und dem HiFive1. Vom Pi 4 aus kannst du über /dev/ttyAMA1 auf den Kanal zugreifen.

Zum Debuggen von HiFive 1 verbinden Sie den UART0 TX (Pin1) von HiFive1 mit dem UART3 RX von Pi 4 (Pin 29). Vom Pi 4 kann über /dev/ttyAMA2 darauf zugegriffen werden.

Zusammenfassend können Sie vom Pi 4 aus auf die folgenden beiden Dateien zugreifen.

/dev/ttyAMA1             Pi 4 → HiFive1:Lenkwinkel an HiFive1 (uart1) senden.

/dev/ttyAMA2             HiFive1 → Pi 4:Empfangen von HiFive1-Konsolenausgabe (uart0)

Teil 1:Programmierung der HiFive1

In diesem Teil des Labors programmieren Sie den HiFive1 so, dass er Daten vom Pi 4 empfängt.

Auf Ihrem PC (nicht Pi 4), laden Sie das Projektgerüst wie folgt herunter.

$  cd  ~/Documents/PlatformIO

$  wget  https://ittc.ku.edu/~heechul/courses/eecs388/l10-comm.tar.gz

$  tar  zxvf  l10-comm.tar.gz

Fügen Sie den l10-interrupt-Ordner zum VSCode-Arbeitsbereich hinzu.

Ihre Aufgabe besteht darin, die Daten vom UART1-Kanal von HiFive1 zu empfangen und die empfangenen Daten an den UART0-Kanal zu senden. Das Folgende ist ein grober Pseudo-Code der Aufgabe.

während  (1)  {

if  (ist  UART1  bereit?)  { data  = read  from  UART1. Daten  auf  UART0 drucken.

}

} Um die Aufgabe zu implementieren, müssen Sie möglicherweise die bereitgestellte serielle API verwenden, die im Folgenden gezeigt wird. Beachten Sie, dass devid 0 ist, um auf UART0 zuzugreifen, während es 1 ist, um auf UART1 zuzugreifen.

void ser_setup(int devid); int          ser_isready(int devid);

void ser_write(int devid, char c);

void ser_printline(int devid, char *str); char ser_read(int devid);

int  ser_readline(int  devid,  int  n,  char  *str);

Insbesondere müssen Sie möglicherweise die Funktion ser_isready() verwenden, um zu überprüfen, ob ein bestimmter UART-Kanal ausstehende Daten zum Lesen hat. Um besser zu verstehen, was die Funktionen tun, überprüfen Sie die Dateien eecs388_lib.h und eecs388_lib.c.

int     ser_isready(int devid)

{

uint32_t regval =*(flüchtige uint32_t *)(UART_ADDR(devid) + UART_IP); regval zurückgeben;

}

Sobald Sie mit der Programmierung des HiFive1 fertig sind, wechseln Sie zum Raspberry Pi 4 und öffnen Sie zwei Terminals:eines zum Senden von Daten an die HiFive1 und eines zum Anzeigen der Debug-Nachrichtenausgabe von der HiFive1.

Endgerät des Absenders (term1)

$  screen  /dev/ttyAMA1  115200

Debug-Terminal (term2)

$  screen  /dev/ttyAMA2  115200

Geben Sie nun beliebige Zeichenfolgen auf dem ‚term1‘ ein.

Wenn Sie Ihre HiFive 1 richtig programmiert haben, sollten Sie die Meldung vom Terminal „term2“ sehen.

Teil 2:Programmierung des Raspberry Pi 4.

Anstatt Terminals zu verwenden, führt ihr jetzt ein Python-Programm auf dem Pi 4 aus, um mit dem HiFive1 zu kommunizieren. Ihre Aufgabe besteht darin, dnn.py aus dem vorherigen Lab zu erweitern, um die Steuerungsausgabe an den seriellen Kanal  /dev/ttyAMA1 senden zu können. Der folgende Pseudo-Code bietet einen allgemeinen Überblick über die Änderungen, die Sie an dnn.py vornehmen müssen:

 Serielle  Verbindungen zu  /dev/ttyAMA1  und  /dev/ttyAMA2 öffnen, während  Wahr:

image  = camera.read()

angle  = dnn_inference(image) Schreibe  ‘angle‘ an  /dev/ttyAMA1 Wait_till_next_period()

 Serielle  Verbindungen schließen

Um die oben genannte Funktionalität zu erreichen, müssen Sie Pythons pySerial-API verwenden, die durch Importieren des seriellen Pakets verwendet werden kann:

 Serie importieren

Damit sollten Sie zwei separate serielle Kanäle erstellen, einen zum Schreiben auf die HiFive1 über

/dev/ttyAMA1 und ein weiteres zum Debuggen über /dev/ttyAMA2. Beachten Sie, dass beide Kanäle mit der Baudrate 115200 bps geöffnet werden sollten.

ser1  = serial.Serial(…) ser2  = serial.Serial(…)

Die vom DNN bei der Verarbeitung von Frames empfangenen Winkel können dann mit der seriellen write()-Funktion an das HiFive1 gesendet werden:

ser1.write(…)

write() erfordert jedoch einen Byte-Wert, während der vom DNN erzeugte Winkel ein float32-Wert ist, sodass Sie die Winkeldaten konvertieren müssen, um sie an HiFive1 zu senden. Nachdem alle Frames verarbeitet wurden, können die seriellen Verbindungen schließlich durch Aufrufen der Funktion serial close() geschlossen werden:

ser1.close() ser2.close()

Anhang


GPIO-Mapping von Pi 4.

Raspberry Pi 4 Pinbelegung

Der Raspberry Pi 4 strotzt nicht nur vor neuen Hardware-Features, sondern unter der Haube gibt es einige zusätzliche GPIO-Funktionen, die das Leben ein wenig erleichtern und es Benutzern ermöglichen, ihre Peripheriegeräte für ihre Projekte zu erweitern, ohne zusätzliche Hardware zu benötigen. Insbesondere gibt es eine Reihe von Extras I2C-, UART- und SPI-Schnittstellen, die auf dem Raspberry Pi 4 verwendet werden können.

GPIO-Pinbelegungen

Sie finden eine vollständige Liste der GPIO-Pinbelegungen auf dem Raspberry PI 4 selbst, gehen Sie einfach zur Befehlszeile und geben Sie Pinbelegung . ein .

Nachfolgend finden Sie eine Liste aller neuen Raspberry Pi 4 zusätzlichen Pinbelegungsfunktionen:

GPIO – Allzweck-Eingangs-Ausgangs-Pins

Diese digitalen Pins können so programmiert werden, dass sie digitale Eingänge empfangen oder ein digitales Signal ausgeben. Der Raspberry Pi verwendet eine 3V3-Logik an jedem GPIO-Pin, was bedeutet, dass 3V3 eine digitale 1 (ON) und 0V eine digitale 0 (OFF) ist. Daher können Sie eine digitale Komponente an den Raspberry Pi anschließen und entweder ein 3V3-Signal (ON) an ihn senden oder ein 3V3-Digitalsignal empfangen, sofern der Strom nicht mehr als 16 mA beträgt.

I2C – Interintegrierte Schaltung

Dies ist eine ziemlich häufige Art der Kommunikation zwischen Geräten, sie funktioniert mit einem Master und einem Slave. Der Master ist in diesem Fall der Raspberry Pi selbst und die Slave-Geräte sind Hardware-Peripheriegeräte, die normalerweise die Funktionalität Ihrer Projekte erweitern würden. Das Tolle an I2C ist, dass Sie Hunderte von Geräten über dieselbe Zweidrahtschnittstelle an denselben Master anschließen können, vorausgesetzt, jedes Gerät hat eine andere I2C-Adresse. Sie können auf die Schnittstelle zugreifen und sehen, welche Geräte verbunden sind, indem Sie den folgenden Linux-Befehl verwenden:

sudo i2cdetect -y 1

Wobei „1“ die Masterschnittstelle ist. Der Raspberry Pi 4 hat insgesamt 6 Stück.

SPI – Serielle Peripherieschnittstelle

SPI ist eine andere Art von Kommunikationsprotokoll für die Kommunikation zwischen Geräten. Es verwendet ebenfalls ein Master/Slave-Setup, wird jedoch hauptsächlich bei kurzen Entfernungen zwischen einer Hauptsteuerung (Master) und Peripheriegeräten (Slaves) wie Sensoren verwendet. SPI verwendet normalerweise 3-Draht, um mit dem Raspberry Pi zu kommunizieren; SCLK, MOSI und MISO. Bevor Sie SPI verwenden können, müssen Sie es im Konfigurationsmenü des Raspberry Pi aktivieren:

UART – Universeller asynchroner Empfänger/Sender

Im Gegensatz zu I2c und SPI ist UART kein Protokoll. UART (Serial) ist eine physikalische Schaltung zum Senden und Empfangen von seriellen Daten. UART benötigt kein Taktsignal, daher ist es asynchron. Dies minimiert die erforderlichen Kabel zum Senden und Empfangen von Daten, erfordert jedoch auch das Senden einiger zusätzlicher Daten mit den Paketen zur Fehlerprüfung, wie z. B. ein Startbit und ein Stoppbit. In Bezug auf den Raspberry Pi wird UART typischerweise in einem Headless-Setup verwendet, was bedeutet, dass keine GUI oder andere Schnittstelle vorhanden ist. Stattdessen können Sie den Raspberry Pi mit Ihrem Desktop/Laptop oder einem anderen Gerät verbinden und mit ihm über UART über die Befehlszeilenschnittstelle kommunizieren. Diese Methode ist für fortgeschrittene Benutzer, da sie etwas mehr Know-how bei der Einrichtung erfordert.

Eine andere Anwendung, die für Raspberry-Pi-Benutzer typisch ist, ist der Anschluss eines Arduino UNO-Boards an den Raspberry Pi, da der Pi über eine begrenzte analoge Funktionalität verfügt.


Herstellungsprozess

  1. Einführung in die digitale Kommunikation
  2. Datenfluss
  3. Optische Datenkommunikation
  4. Praktische Überlegungen – Digitale Kommunikation
  5. Drahtlose Kommunikationsreichweite
  6. MQTT-Kommunikation zwischen NodeMCU und Raspberry Pi 3 B+
  7. Integration von Sensordaten mit Raspberry Pi-Mikroprozessor
  8. Arduino I2C-Kommunikation mit Raspi 2 WIOT
  9. M2M oder Machine-to-Machine-Kommunikation, was ist das?
  10. Ein einzigartiger Verstärker könnte die optische Kommunikation verändern