DU LERNST HIER... |
wie du ein Gerät über eine serielle Schnittstelle anschliessen kannst. Als wichtige Anwendung verwendest du ein GPS-Modul zur Lokalisierung des aktuellen Standorts und stellst die Daten über das Internet zur Verfügung. |
DAS RS-232-PROTOKOLL |
Beim RS232C-Protokoll werden die 0-1-Werte eines Bytes zeitlich hintereinander übermittelt, wobei die einzelnen Bits eine bestimmte zeitliche Dauer haben, die durch die Baudrate (bits/s) festgelegt ist.
|
In MicroPython wird die serielle Kommunikation durch die Klasse UART modelliert. Dabei fasst man die Schnittstelle als ein Objekt der Klasse UART auf und gibt im Konstruktor eine ID, die Baudrate sowie die verwendeten TX- und RX-Ports an (als ID muss auf der Oxocard 1 gewählt werden). Mit der Methode write(data) sendest du einen Bytearray data auf die Schnittstelle. Empfangene Daten werden in einem Receiverbuffer gespeichert. Mit any() erhältst du die Anzahl empfangener Datenbytes und mit data = read(nbBytes) holst du sie ab. Programm: from machine import UART from time import sleep from oxocard import * uart = UART(1, baudrate = 9600, tx = 18, rx = 19) txdata = 'Hello Python' uart.write(txdata) sleep(1) nbChars = uart.any() rxdata = uart.read(nbChars) # bytes rxStr = rxdata.decode('utf-8') bigTextScroll(rxStr) |
GLOBAL POSITION SYSTEM (GPS) |
Ein GPS-Modul bestimmt die Entfernungen zu mindestens 3 GPS-Satelliten und berechnet daraus die geografische Position mit Triangulation.
Programm: from machine import UART def parseGPS(data): s = data.split(",") if s[6] == '0': print("no GPS data available") return None time = s[1][0:2] + ":" + s[1][2:4] + ":" + s[1][4:6] lat = convert(s[2]) dirLat = s[3] lon = convert(s[4]) dirLon = s[5] alt = s[9] + " m" sat = s[7] return time, lat, dirLat, lon, dirLon, alt, sat def convert(coord): # DDDMM.MMMMM -> DD deg MM.MMMMM min v = coord.split(".") head = v[0] tail = v[1] deg = head[0:-2] min = head[-2:] return deg + " deg " + min + "." + tail + " min" uart = UART(1, baudrate = 9600, rx = 19) # tx not used print("starting") inLine = False while True: ch = uart.read(1) if ch == None: continue if ch == b'$': line = bytearray() inLine = True if inLine: line += ch if ch == b'\n': inLine = False line = bytes(line).decode('utf-8') #print(line) if line[0:6] == "$GPGGA": parsed = parseGPS(line) if parsed != None: time, lat, dirLat, lon, dirLon, alt, sat = parsed print("Time(UTC): %s--Latitude:%s(%s)--Longitude:%s(%s)\ -- Altitute:%s--(%s satellites)" %(time, lat, dirLat, lon, dirLon, alt, sat)) |
MERKE DIR... |
Das RS232-Protokoll verwendet eine serielle Datenübertragung, bei dem die binären Daten bitweise zeitlich hintereinander mit einer zwischen Sender- und Empfänger vereinbarten Geschwindigkeit (Baudrate) übertragen werden. Auch hier wird die objektorientierte Programmierung (OOP) erfolgreich eingesetzt und die Schnittstelle mit einem Objekt der Klasse UART modelliert. |
ZUM SELBST LÖSEN |
|