2024-07-26 -
This commit is contained in:
		| @@ -87,7 +87,7 @@ print("Starting continuous GPS tracking. Press Ctrl+C to stop.") | ||||
|  | ||||
| while running: | ||||
|     get_gps_position() | ||||
|     time.sleep(15)  # Wait for 10 seconds before the next reading | ||||
|     time.sleep(14)  # Wait for 10 seconds before the next reading | ||||
|  | ||||
| ser.close() | ||||
| GPIO.cleanup() | ||||
|   | ||||
							
								
								
									
										88
									
								
								gps008.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								gps008.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,88 @@ | ||||
| import RPi.GPIO as GPIO | ||||
| import serial | ||||
| import time | ||||
| from datetime import datetime | ||||
| import os | ||||
| import csv | ||||
| import signal | ||||
|  | ||||
| # GPIO configuration | ||||
| GPIO.setmode(GPIO.BCM) | ||||
| GPIO.setwarnings(False) | ||||
|  | ||||
| # Initialize serial port | ||||
| try: | ||||
|     ser = serial.Serial('/dev/ttyUSB3', 115200) | ||||
|     ser.flushInput() | ||||
| except serial.SerialException as e: | ||||
|     print(f"Error initializing serial port: {e}") | ||||
|     exit(1) | ||||
|  | ||||
| myhost = os.uname()[1] | ||||
|  | ||||
| # CSV file settings | ||||
| csv_filename = f"gps_data_{myhost}.csv" | ||||
| csv_headers = ["Timestamp", "Latitude", "Longitude"] | ||||
|  | ||||
| # Global flag for graceful exit | ||||
| running = True | ||||
|  | ||||
| # List to store pending data | ||||
| pending_data = [] | ||||
|  | ||||
| def signal_handler(sig, frame): | ||||
|     global running | ||||
|     print('You pressed Ctrl+C! Stopping GPS tracking...') | ||||
|     running = False | ||||
|  | ||||
| signal.signal(signal.SIGINT, signal_handler) | ||||
|  | ||||
| def parse_gps_data(gps_string): | ||||
|     # Implement GPS data parsing logic here | ||||
|     pass | ||||
|  | ||||
| def write_to_csv(data): | ||||
|     file_exists = os.path.isfile(csv_filename) | ||||
|     with open(csv_filename, mode='a', newline='') as file: | ||||
|         writer = csv.writer(file) | ||||
|         if not file_exists: | ||||
|             writer.writerow(csv_headers) | ||||
|         writer.writerow(data) | ||||
|  | ||||
| def send_data(data): | ||||
|     # Implement data sending logic here | ||||
|     pass | ||||
|  | ||||
| def main(): | ||||
|     while running: | ||||
|         try: | ||||
|             if ser.in_waiting > 0: | ||||
|                 gps_data = ser.readline().decode('utf-8').strip() | ||||
|                 parsed_data = parse_gps_data(gps_data) | ||||
|                 if parsed_data: | ||||
|                     timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S') | ||||
|                     latitude, longitude = parsed_data | ||||
|                     data = [timestamp, latitude, longitude] | ||||
|                     write_to_csv(data) | ||||
|                     pending_data.append(data) | ||||
|                     print(f"Logged data: {timestamp}, {latitude}, {longitude}") | ||||
|  | ||||
|             # Try to send pending data | ||||
|             for data in pending_data: | ||||
|                 try: | ||||
|                     send_data(data) | ||||
|                     pending_data.remove(data) | ||||
|                 except Exception as e: | ||||
|                     print(f"Error sending data: {e}") | ||||
|                     break  # Exit loop if sending fails | ||||
|  | ||||
|             time.sleep(1) | ||||
|         except Exception as e: | ||||
|             print(f"Error during GPS tracking: {e}") | ||||
|  | ||||
|     ser.close() | ||||
|     GPIO.cleanup() | ||||
|     print("Program terminated gracefully") | ||||
|  | ||||
| if __name__ == "__main__": | ||||
|     main() | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										108
									
								
								modbus_door.py
									
									
									
									
									
								
							
							
						
						
									
										108
									
								
								modbus_door.py
									
									
									
									
									
								
							| @@ -1,13 +1,15 @@ | ||||
| import minimalmodbus | ||||
| import time, os | ||||
| import serial | ||||
| import RPi.GPIO as GPIO | ||||
| import subprocess | ||||
| import paho.mqtt.client as mqtt | ||||
| import os | ||||
| import minimalmodbus | ||||
| import time | ||||
|  | ||||
| # Limpiar configuración previa de GPIO | ||||
| GPIO.setmode(GPIO.BCM) | ||||
| GPIO.cleanup() | ||||
|  | ||||
| # MQTT Broker settings | ||||
|  | ||||
| mqttBroker ="65.108.199.212" | ||||
| mqttBroker = "65.108.199.212" | ||||
| myhost = os.uname()[1] | ||||
| client = mqtt.Client(myhost) | ||||
| client.connect(mqttBroker, 1883) | ||||
| @@ -20,9 +22,7 @@ modbus_device = '/dev/modbus' | ||||
|  | ||||
| # Modbus configuration | ||||
| mb_address = 1  # Modbus address | ||||
| #sensy_boi = minimalmodbus.Instrument(device_path, mb_address) | ||||
| sensy_boi = minimalmodbus.Instrument(modbus_device, mb_address) | ||||
| #sensy_boi = minimalmodbus.Instrument(preferred_device, mb_address) | ||||
| sensy_boi.serial.baudrate = 9600 | ||||
| sensy_boi.serial.bytesize = 8 | ||||
| sensy_boi.serial.parity = minimalmodbus.serial.PARITY_NONE | ||||
| @@ -35,59 +35,73 @@ sensy_boi.clear_buffers_before_each_transaction = True | ||||
| sensy_boi.close_port_after_each_call = True | ||||
|  | ||||
| # GPIO configuration | ||||
| GPIO.setmode(GPIO.BCM) | ||||
| GPIO.setwarnings(False) | ||||
|  | ||||
| # Define pin numbers | ||||
| PIN_17 = 17 | ||||
| PIN_23 = 23 | ||||
| LuzPuerta = 18 | ||||
| LuzEncendido = 25 | ||||
|  | ||||
| # Set GPIO | ||||
| GPIO.setup(PIN_17, GPIO.IN) | ||||
| GPIO.setup(PIN_23, GPIO.IN) | ||||
| LuzEncendido = 23 | ||||
| GPIO.setup(PIN_17, GPIO.IN, pull_up_down=GPIO.PUD_UP) | ||||
| GPIO.setup(LuzPuerta, GPIO.OUT) | ||||
| GPIO.setup(LuzEncendido, GPIO.OUT) | ||||
|  | ||||
| # Mantener LuzEncendido en HIGH mientras el programa esté corriendo | ||||
| GPIO.output(LuzEncendido, GPIO.HIGH) | ||||
|  | ||||
| try:       | ||||
| # Lista para almacenar los datos pendientes | ||||
| pending_data = [] | ||||
|  | ||||
| def control_gpio(): | ||||
|     status_17 = GPIO.input(PIN_17) | ||||
|     if status_17 == GPIO.LOW: | ||||
|         GPIO.output(LuzPuerta, GPIO.HIGH)  # Luz Roja encendida | ||||
|     else: | ||||
|         GPIO.output(LuzPuerta, GPIO.LOW) | ||||
|     return status_17 | ||||
|  | ||||
| try: | ||||
|     while True: | ||||
|             status_17 = GPIO.input(PIN_17) | ||||
|             if GPIO.input(23) == GPIO.HIGH: | ||||
|                 print("Adquiriendo datos...") | ||||
|                 # Read data from multiple registers | ||||
|                 data = sensy_boi.read_registers(0, 2, 3) | ||||
|         # Controlar GPIO sin retraso | ||||
|         status_17 = control_gpio() | ||||
|  | ||||
|                 print("") | ||||
|                 print(f"Datos crudos {data}") | ||||
|         # Leer datos del sensor Modbus | ||||
|         data = sensy_boi.read_registers(0, 2) | ||||
|         hum = data[0] / 10 | ||||
|         temp = data[1] / 10 | ||||
|  | ||||
|                 # Process the raw data | ||||
|                 hum = data[0] / 10 | ||||
|                 temp = data[1] / 10 | ||||
|         # Datos a publicar | ||||
|         payload = { | ||||
|             "temperature": temp, | ||||
|             "humidity": hum, | ||||
|             "door_status": str(status_17) | ||||
|         } | ||||
|  | ||||
|                 client.publish("iiot/"+ myhost +"/temperature", temp) | ||||
|                 client.publish("iiot/"+ myhost +"/humidity", hum) | ||||
|                 client.publish(f"iiot/{myhost}/door/pin17", str(status_17)) | ||||
|         try: | ||||
|             # Intentar publicar los datos actuales | ||||
|             client.publish(f"iiot/{myhost}/temperature", temp) | ||||
|             client.publish(f"iiot/{myhost}/humidity", hum) | ||||
|             client.publish(f"iiot/{myhost}/door/pin17", str(status_17)) | ||||
|  | ||||
|                 # Print the processed data | ||||
|                 print("-------------------------------------") | ||||
|                 print(f"Temperatura = {temp}\u00B0C") | ||||
|                 print(f"Humedad relativa = {hum}%") | ||||
|                 print("-------------------------------------") | ||||
|                 print("") | ||||
|             # Intentar publicar los datos pendientes | ||||
|             for item in pending_data: | ||||
|                 client.publish(f"iiot/{myhost}/temperature", item["temperature"]) | ||||
|                 client.publish(f"iiot/{myhost}/humidity", item["humidity"]) | ||||
|                 client.publish(f"iiot/{myhost}/door/pin17", item["door_status"]) | ||||
|             pending_data.clear()  # Limpiar la lista si se publicaron todos los datos | ||||
|  | ||||
|             time.sleep(15) | ||||
|         except Exception as e: | ||||
|             print(f"Error al publicar datos: {str(e)}") | ||||
|             pending_data.append(payload)  # Guardar los datos en memoria | ||||
|  | ||||
|         # Imprimir los datos procesados | ||||
|         print("-------------------------------------") | ||||
|         print(f"Temperatura = {temp}\u00B0C") | ||||
|         print(f"Humedad relativa = {hum}%") | ||||
|         print(f"Estado de la puerta (PIN 17) = {status_17}") | ||||
|         print("-------------------------------------\n") | ||||
|  | ||||
|         time.sleep(30) | ||||
|  | ||||
|             if GPIO.input(PIN_17) == GPIO.LOW: | ||||
|                 GPIO.output(LuzPuerta, GPIO.HIGH) # Luz Roja encendida | ||||
|             else: | ||||
|                 GPIO.output(LuzPuerta, GPIO.LOW) | ||||
|                 GPIO.output(LuzEncendido, GPIO.HIGH) | ||||
|                  | ||||
| except Exception as e: | ||||
|     print(f"Error: {str(e)}") | ||||
|      | ||||
|  | ||||
| finally: | ||||
|     GPIO.cleanup() | ||||
|     print("Programa finalizado") | ||||
|     print("Programa finalizado") | ||||
		Reference in New Issue
	
	Block a user