Elektroda.pl
Elektroda.pl
X
Asaj - Inteligentny DomAsaj - Inteligentny Dom
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Sterowanie mcp23017 przez dwa skrypty (w python) jednocześnie

05 Sty 2020 23:14 150 4
  • Poziom 2  
    Dzień dobry,
    Proszę o wskazówki jak rozwiązać poniższy problem,
    projekt do sterowania akwarium:
    1. Raspberry pi 3
    2. ekspander MCP 23017
    3. przekaźniki.
    Układ jest skonfigurowany, działa sterowanie.
    Program został napisany w python. Problem się zaczyna jak uruchomiam dwa skrypty jednocześnie.
    Jeden skrypt który ma działać non stop (sterowanie temperaturą w akwarium - grzanie/chłodzenie wykorzystane dwa wejścia oraz czujnik temperatury DS18B20 podpięty pod GPIO 4). odczyt temperatury ustawiony jest co 120s.
    Drugi skrypt służy do podmiany wody (wykorzystane dwa wyjścia do sterowania zaworami poprzez przekaźniki oraz dwa wejścia dla wyłączników pływakowych.

    Każdy ze skryptów używa tego samego ekspandera oczywiście inne są przydzielone wejścia/wyjścia. Początek kodu jest następujący:
    import wiringpi2 as wiringpi
    from time import sleep

    pin_base = 65
    i2c_addr = 0x20

    wiringpi.wiringPiSetup()
    wiringpi.mcp23017Setup(pin_base,i2c_addr)

    Niezależnie działa wszystko ok. Jak są dwa skrypty uruchomione jednocześnie to np przy odczycie temperatury przełącza wyjścia przy podmianie wody z drugiego skryptu.
    Mam świadomość że ekspander sterowany jest poprzez wprowadzanie naraz ramki bitów co może powodować powyższy problem.
    Może należy wstawić ogólną bibliotekę która uwzględni ustawienia dla obu skryptów, może niewłaściwe jest podejście w początku kodu dla obu skryptów.

    Proszę o wskazówki,
    Pozdrawiam,
    Sebastian
  • Asaj - Inteligentny DomAsaj - Inteligentny Dom
  • Poziom 26  
    Zmień architekturę na taką wykorzystującą tzw. message brokera. Przykładowo https://zeromq.org/languages/python/
    W ten sposób masz jeden skrypt główny, sterujący MCP (serwer) i kilka skryptów logiki (klienci) które wysyłają wiadomości do serwera. Przy takim rozwiązaniu niejako gratis dostajesz separację odpowiedzialności i ładny podział na wartswy :)
    Ja w swoim projekcie podlewaj.pl użyłem zamiast zeromq bazy danych MySQL ponieważ dane są wolnozmienne (opóźnienie rzędu kilku sekund nie jest problemem) i mogą być zmieniane przez różne elementy systemu (skrypt PHP, program w C++, skrypty w bashu itd). Ale jeśli całość masz na pythonie to tego się trzymaj :)
  • Asaj - Inteligentny DomAsaj - Inteligentny Dom
  • Poziom 2  
    Z góry dziękuję za informację. Brzmi zawile biorąc pod uwagę moją wiedzę z programowania. Trzeba walczyć.
    Jeżeli masz może jakiś przykład takiego rozwiązania do przesłania to będę wdzięczny.
    Pozdrawiam
    Sebastian
  • Poziom 26  
    Gotowy przykład masz przecież w linku który podesłałem...
  • Poziom 2  
    Ok dzięki :):):)