Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

UART-communicatie tot stand brengen tussen Raspberry Pi 4 en HiFive1-boards

In deze lab zet je betrouwbare UART-links op tussen een Raspberry Pi 4 en een HiFive1, programmeer de HiFive1 om ontvangen data te echoën, en maak een Python-script op de Pi om stuurhoeken door te sturen naar het bord.

Deel 0: UART Inschakelen op de Raspberry Pi 4

De Pi 4 wordt geleverd met vier UART-controllers. Voor deze oefening gebruiken we uart2 en uart3. Voeg de volgende regel toe aan /boot/config.txt en herstart:

dtoverlay=uart2,115200 dtoverlay=uart3,115200

Na herstarten, zullen de device-nodes /dev/ttyAMA1 (uart2) en /dev/ttyAMA2 (uart3) beschikbaar zijn.

Verbind de borden als volgt:

  • HiFive1 UART1 RX (pin 7) ↔ Pi 4 UART2 TX (pin 27) – datapad voor stuurcommando's.
  • HiFive1 UART0 TX (pin 1) ↔ Pi 4 UART3 RX (pin 29) – debug-kanaal voor console-uitvoer.

Vanaf de Pi kun je deze kanalen benaderen via /dev/ttyAMA1 (sturen naar HiFive1) en /dev/ttyAMA2 (HiFive1-console ontvangen).

Deel 1: De HiFive1 Programmeren

Op je PC (niet de Pi), download het skeletproject:

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

Voeg de l10-interrupt-map toe aan je VSCode-werkruimte. Het doel is data te lezen van UART1, het te echoën op UART0, en het resultaat naar de console te printen.

Hier is een beknopt algoritme:

while (1) { if (ser_isready(1)) { char data = ser_read(1); ser_write(0, data); ser_printline(0, "Received: "); /* formatting aanpassen indien nodig */ } } 

De seriële API is gedefinieerd in eecs388_lib.h/c:

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); 

Onthoud dat devid = 0 UART0 selecteert en devid = 1 UART1 selecteert. De ser_isready-functie checkt de UART IP-register voor pending data:

int ser_isready(int devid) { uint32_t regval = *(volatile uint32_t *)(UART_ADDR(devid) + UART_IP); return regval; } 

Na compileren en flashen, schakel naar de Pi en open twee terminalvensters:

  • Data-zender: screen /dev/ttyAMA1 115200
  • Debug-viewer: screen /dev/ttyAMA2 115200

Typ een willekeurige string in de zender-terminal; dezelfde string zou in de debug-terminal moeten verschijnen, wat correcte werking bevestigt.

Deel 2: Python-script op de Raspberry Pi 4

In plaats van handmatige terminals, schrijf een Python-programma dat:

  • /dev/ttyAMA1 opent voor het schrijven van stuurhoeken.
  • /dev/ttyAMA2 opent voor debugging.
  • Camera-frames capturet, DNN-inferentie draait, en de resulterende hoek naar de HiFive1 stuurt.

Voorbeeld-skelet met pySerial:

import serial import time import cv2 # of je camera-interface # Seriële poorten openen ser1 = serial.Serial('/dev/ttyAMA1', 115200, timeout=1) ser2 = serial.Serial('/dev/ttyAMA2', 115200, timeout=1) while True: # Frame capture frame = cv2.imread('frame.jpg') # vervangen met echte camera-read # DNN-inferentie draaien angle = dnn_inference(frame) # float32 # Float converteren naar 4-byte representatie angle_bytes = angle.to_bytes(4, byteorder='little', signed=True) ser1.write(angle_bytes) # Optioneel: debug-uitvoer lezen debug = ser2.readline().decode().strip() if debug: print('HiFive1:', debug) # Timing-controle (bijv. 30 fps) time.sleep(1/30) # Opruimen ser1.close() ser2.close() 

Let op: Converteer de float naar bytes voordat je stuurt, en gebruik dezelfde byte-order op de HiFive1 bij het interpreteren van de waarde.

Bijlage: Raspberry Pi 4 GPIO en Perifere Overzicht

De Pi 4 biedt uitgebreide I²C, SPI en UART-interfaces bovenop de originele Pi-modellen. Gebruik het pinout-commando om alle pins te bekijken:

pinout

Belangrijke randapparatuur:

  • I²C – tot 6 bussen, apparaten ontdekken met sudo i2cdetect -y 1.
  • SPI – inschakelen via raspi-config, standaard SCLK/MOSI/MISO lijnen gebruiken.
  • UART – asynchrone seriële, ideaal voor headless communicatie of verbinden met microcontrollers zoals de HiFive1.

Voor gedetailleerde configuratie, raadpleeg de officiële Raspberry Pi-documentatie: Config-txt Gids.

Productieproces

  1. Naadloze MQTT Integratie: NodeMCU DHT22 Sensoren Met Raspberry Pi 3 B+ Als Broker
  2. Sensordata integreren in een Raspberry Pi: Een praktische gids
  3. Naadloze Arduino‑Raspberry Pi 2 I2C-integratie voor IoT-sensorprojecten
  4. M2M (Machine-naar-Machine) Communicatie: Wat Het Is & Waarom Het Belangrijk Is
  5. Fundamenten van digitale communicatie: van theorie naar praktische implementatie
  6. Datastroom begrijpen: van simplex naar full-duplex communicatie
  7. Optische data communicatie: licht benutten voor hoge-bandbreedte, storingvrije transmissie
  8. Determinisme en fouttolerantie: essentiële ontwerprincipes voor industriële controle netwerken
  9. UART onder de knie krijgen: De Universal Asynchronous Receiver/Transmitter uitgelegd
  10. Revolutionaire Compacte Optische Versterker Belooft Ruisonvrije Ruimte- en Vezelcommunicatie
  11. Draadloze communicatiebereik meesteren: Hoe vermogen, datasnelheid en interferentie connectiviteit vormen