diff --git a/requirements.txt b/requirements.txt index 32e74cf..8a64406 100644 --- a/requirements.txt +++ b/requirements.txt @@ -41,4 +41,3 @@ uritemplate==4.1.1 urllib3==2.2.1 RPi.GPIO==0.7.1 RPLCD==1.3.0 -requests==2.32.3 \ No newline at end of file diff --git a/src/button/button.py b/src/button/button.py index d808586..5cb275f 100644 --- a/src/button/button.py +++ b/src/button/button.py @@ -8,7 +8,7 @@ class Button: def __init__(self, pin_in: PinIN, pin_out: PinOUT) -> None: self.pin_in = pin_in self.pin_out = pin_out - GPIO.setmode(GPIO.BCM) + GPIO.setmode(GPIO.BOARD) GPIO.setwarnings(False) GPIO.setup(self.pin_in, GPIO.IN) GPIO.setup(self.pin_out, GPIO.OUT) diff --git a/src/connection/base.py b/src/connection/base.py deleted file mode 100644 index 4d4c88d..0000000 --- a/src/connection/base.py +++ /dev/null @@ -1,37 +0,0 @@ -import requests - -class APIConnection: - def __init__(self, API_url): - self.url = API_url - - def get_item(self, item_id): - try: - response = requests.get(f"{self.url}/item/{item_id}") - response.raise_for_status() - print('success') - return response.json() - except requests.exceptions.HTTPError as err: - if response.status_code == 404: - print('id error') - else: - print(f"HTTP error occurred: {err}") - - def create_item(self, data): - try: - response = requests.post(f"{self.url}/item", json=data) - response.raise_for_status() - return response.json() - except requests.exceptions.HTTPError as err: - print(f"HTTP error occurred: {err}") - - def update_item(self, item_id, data): - try: - response = requests.put(f"{self.url}/item/{item_id}", json=data) - response.raise_for_status() - print('success') - return response.json() - except requests.exceptions.HTTPError as err: - if response.status_code == 404: - print('id error') - else: - print(f"HTTP error occurred: {err}") diff --git a/src/display/display_melton.py b/src/display/display_melton.py index 533c8d8..56d7add 100644 --- a/src/display/display_melton.py +++ b/src/display/display_melton.py @@ -3,10 +3,10 @@ class Display: - def __init__(self): - rs_pin = 26 - e_pin = 19 - data_pins = [13, 6, 5, 11] + def __init__(self, rs_pin, e_pin, data_pins, cols=16, rows=2): + # Настройка GPIO + GPIO.setwarnings(False) + GPIO.setmode(GPIO.BCM) # Настройка дисплея self.lcd = CharLCD(pin_rs=rs_pin, pin_rw=None, pin_e=e_pin, pins_data=data_pins, @@ -25,6 +25,10 @@ def close(self): if __name__ == '__main__': - display = Display() - display.clear() + rs_pin = 26 + e_pin = 19 + data_pins = [13, 6, 5, 11] + + display = Display(rs_pin=rs_pin, e_pin=e_pin, data_pins=data_pins) + display.display_message("start") diff --git a/src/main.py b/src/main.py index 6500421..a1b7169 100644 --- a/src/main.py +++ b/src/main.py @@ -1,78 +1,60 @@ from datetime import datetime -import RPI.GPIO as GPIO -from RPLCD.gpio import CharLCD -from time import sleep from scanner import barcode_scanner from scales import getting_weight +from fire_db import FireDataBase +from models import Container, ContainerData from constants import KEY, COLLECTION from button import Button, PinOUT, PinIN +from display import MainWindow from display.display_melton import Display -from connection.base import APIConnection +def _updating(key: int, weight: int) -> None: + data = ContainerData(name=str(key), weight=weight, barcode_id=key, + container_id=0, density=0, date=datetime.now()) + container = Container(key=key, data=data) + database.update(COLLECTION, container) -GPIO.setwarnings(False) -GPIO.setmode(GPIO.BCM) +def _creating(key: int, weight: int) -> None: + container_id = len(database.list(collection=COLLECTION)) + 1 + data = ContainerData(name=str(key), weight=weight, barcode_id=key, + container_id=container_id, density=0, date=datetime.now()) + container = Container(key=key, data=data) + database.create(COLLECTION, container) -def scanner_check(): - global is_scanner - key = barcode_scanner() - if key: - is_scanner = True - return key - else: - is_scanner = False +def main(window_instance: MainWindow) -> None: + key = barcode_scanner() + window_instance.update_info(barcode=key) -def scales_check(): - global is_scale - weight = getting_weight() - if weight > 0: - is_scale = True - return weight + if key: + weight = getting_weight() + window_instance.update_info(barcode=key, weight=weight) + + if database.get(str(key), COLLECTION): + _updating(key, weight) + print('update') + else: + _creating(key, weight) + print('create') else: - is_scale = False - - -def main(): - global is_scanner - global is_scale - - key = 0 - while not is_scanner: - key = scanner_check() - print("отсканируйте еще раз") - print(key) - - print("положите на весы") - - weight = "" - while not is_scale: - weight = scales_check() - print("положите еще раз на весы") - print(weight) - print("данные занесены в базу") - - - - - -is_scanner = False -is_scale = False + print("Видимо вы считали QR код, а не штрих код!") if __name__ == "__main__": - # pin_in = PinIN(40) - # pin_out = PinOUT(38) - # button = Button(pin_in, pin_out) - display = Display() - display.clear() + database = FireDataBase(KEY) + pin_in = PinIN(40) + pin_out = PinOUT(38) + button = Button(pin_in, pin_out) + window = MainWindow() try: while True: - main() + if button.is_pressed(): + main(window) except KeyboardInterrupt: - pass + button.cleanup() + window.quit()