add sens hat

This commit is contained in:
MuedeHydra 2026-05-07 19:59:41 +02:00
parent 8d5ed7e9b8
commit b2738a2d0d
4 changed files with 111 additions and 52 deletions

View File

@ -9,7 +9,8 @@
#show: metropolis-theme.with( #show: metropolis-theme.with(
aspect-ratio: "16-9", aspect-ratio: "16-9",
config-info( config-info(
title: [Daten mit 4G], title: [GPS-Tracking und Impact-Detection mit Raspberry Pi],
// title: [Daten mit 4G],
subtitle: [Mobile Kommunikationsnetze], subtitle: [Mobile Kommunikationsnetze],
author: [NOAH BALSIGER, THOMAS ZWICKER], author: [NOAH BALSIGER, THOMAS ZWICKER],
date: datetime.today(), date: datetime.today(),
@ -107,6 +108,9 @@
== öffentliche IP == öffentliche IP
== Carrier-Grade NAT (CGNAT) == Carrier-Grade NAT (CGNAT)
=======
== Öffentliche IP & Carrier-Grade NAT (CGNAT)
>>>>>>> Stashed changes
#grid(columns: (1fr,)*1, gutter: 10pt, #grid(columns: (1fr,)*1, gutter: 10pt,
[#align(center)[#image("img/cgnat.png", width: 80%)]], [#align(center)[#image("img/cgnat.png", width: 80%)]],
) )
@ -125,7 +129,6 @@
== Security mqtt == Security mqtt
== GPS == GPS
== Aufbau == Aufbau

63
src/gps_hat.py Normal file
View File

@ -0,0 +1,63 @@
import serial
import time
class GPS_DATA:
breitengrad = ""
laengengrad = ""
datum = ""
zeit_UTC = ""
hoehe: float = 0
geschwindigkeit_km_h: float = 0
def __init__(self, port, baud = 115200):
self.port = port
self.ser = serial.Serial(port, baud, timeout=1)
self.ser.write(b'AT+CGPS=1\r\n')
time.sleep(2)
def __str__(self):
return f"N = {self.breitengrad}\t E = {self.laengengrad} \t Datum = {self.datum}\t Zeit = {self.zeit_UTC} \t höhe = {self.hoehe} \t geschwindigkeit = {self.geschwindigkeit_km_h}"
def get_gps_info(self):
self.ser.write(b'AT+CGPSINFO\r\n')
result = self.ser.read_all().decode()
if "+CGPSINFO: ,,,,,,,," in result:
print("Suche Satelliten...")
return False
if "+CGPSINFO:" in result:
raw_data = result.split("\n")[1]
raw_data_list = str(raw_data).removeprefix("+CGPSINFO: ").removesuffix(",\r").split(",")
self.breitengrad = raw_data_list[0]
self.laengengrad = raw_data_list[2]
self.datum = raw_data_list[4]
self.zeit_UTC = raw_data_list[5]
self.hoehe = float(raw_data_list[6])
self.geschwindigkeit_km_h = float(raw_data_list[7]) * 1.852 # knoten zu km/h
return True
else:
print("Suche Satelliten...")
def get_sat_count(self):
# self.ser.write(b'AT+CPSI?\r\n')
self.ser.write(b'AT+CGPSGSV\r\n')
time.sleep(0.1)
result = self.ser.read_all().decode()
print(result)
if __name__ == "__main__":
gps = GPS_DATA("/dev/ttyUSB0")
try:
while True:
if gps.get_gps_info():
print(gps)
# gps.get_sat_count()
time.sleep(2)
except KeyboardInterrupt:
gps.ser.close()

View File

@ -1,63 +1,21 @@
import serial
import time import time
class GPS_DATA: from gps_hat import GPS_DATA
breitengrad = "" from sens_hat import SENS_HAT
laengengrad = ""
datum = ""
zeit_UTC = ""
hoehe: float = 0
geschwindigkeit_km_h: float = 0
def __init__(self, port, baud = 115200):
self.port = port
self.ser = serial.Serial(port, baud, timeout=1)
self.ser.write(b'AT+CGPS=1\r\n')
time.sleep(2)
def __str__(self):
return f"N = {self.breitengrad}\t E = {self.laengengrad} \t Datum = {self.datum}\t Zeit = {self.zeit_UTC} \t höhe = {self.hoehe} \t geschwindigkeit = {self.geschwindigkeit_km_h}"
def get_gps_info(self):
self.ser.write(b'AT+CGPSINFO\r\n')
result = self.ser.read_all().decode()
if "+CGPSINFO: ,,,,,,,," in result:
print("Suche Satelliten...")
return False
if "+CGPSINFO:" in result:
raw_data = result.split("\n")[1]
raw_data_list = str(raw_data).removeprefix("+CGPSINFO: ").removesuffix(",\r").split(",")
self.breitengrad = raw_data_list[0]
self.laengengrad = raw_data_list[2]
self.datum = raw_data_list[4]
self.zeit_UTC = raw_data_list[5]
self.hoehe = float(raw_data_list[6])
self.geschwindigkeit_km_h = float(raw_data_list[7]) * 1.852 # knoten zu km/h
return True
else:
print("Suche Satelliten...")
def get_sat_count(self):
# self.ser.write(b'AT+CPSI?\r\n')
self.ser.write(b'AT+CGPSGSV\r\n')
time.sleep(0.1)
result = self.ser.read_all().decode()
print(result)
if __name__ == "__main__": if __name__ == "__main__":
gps = GPS_DATA("/dev/ttyUSB0") # gps = GPS_DATA("/dev/ttyUSB0")
gps = GPS_DATA("/dev/serial0")
sens = SENS_HAT()
try: try:
while True: while True:
if gps.get_gps_info(): if gps.get_gps_info():
print(gps) print(gps)
# gps.get_sat_count() print(sens.temp)
time.sleep(2) time.sleep(2)
except KeyboardInterrupt: except KeyboardInterrupt:
gps.ser.close() gps.ser.close()

35
src/sens_hat.py Normal file
View File

@ -0,0 +1,35 @@
from sense_hat import SenseHat
class SENS_HAT:
temp = 0
humidity = 0
pressure = 0
roll = 0
picht = 0
yaw = 0
x = 0
y = 0
z = 0
def __init__(self):
self.sense = SenseHat()
def get_sensor_data(self):
self.temp = self.sense.get_temperature()
self.humidity = self.sense.get_humidity()
self.pressure = self.sense.get_pressure()
orientation = self.sense.get_orientation() # Liefert dir pitch, roll und yaw.
acceleration = self.sense.get_accelerometer_raw()
self.roll = orientation["roll"]
self.picht = orientation["picht"]
self.yaw = orientation["yaw"]
self.x = acceleration["x"]
self.y = acceleration["y"]
self.z = acceleration["z"]