Skocz do zawartości

Raspbbery Pi + strona WWW + dostęp do GPIO


gamperos

Pomocna odpowiedź

Cześć wszystkim,

realizuję pewien projekt i mam problem z jedną częścią. Tak jak pokazuje rysunek:

 

piszę aplikację, która

1. generuje losowe zmienne 0 lub 1,

2. zmienne mają się zapisać w bazie danych mySQL, postawionej na Raspberry PI.

3. Stronna www postawiona na tym serwerze, odczytuje dane z bazy i w zależności czy 0 czy 1 na stronie zapala się odpowiednie okienko, a już najlepiej jakby dodatkowo można było wyświetlić tabelę z bazy danych na stronie WWW - wszystko w czasie rzeczywistym, tak aby tabela i strona www się aktualizowały w zależności od generowanych wartości z aplikacji.

 

Pytanie, jak podejść do tych 3 punktów? Punkt 1, myślę aby napisać po prostu w php generowanie takich wartości. Nie wiem jak z pozostałymi punktami.

 

Dzięki z góry!!

PRZYKLAD.png

Link do komentarza
Share on other sites

@gamperos witam na forum 🙂 Możliwości jest wiele, jak chcesz sterować GPIO na podstawie informacji z bazy danych to może warto np. napisać ten skrypt w Pythonie? Połączysz się wtedy z bazą danych, a z poziomu Pythona już bardzo łatwo będziesz mógł sterować GPIO. Stronę WWW możesz zrobić w innej technologii i korzystać z tej samej bazy (jak Ci wygodnie).

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

1 minutę temu, gamperos napisał:

A czy da radę zrobić to samym php lub js?

Niespecjalnie... chociaż zaraz ktoś wyskoczy pewnie z NodeJS. Ale da się zrobić za pomocą php oraz js 🙂 Jak mniemam oba te języki jako tako znasz.

2 minuty temu, gamperos napisał:

Nie znam niestety pythona.

A warto się poduczyć... bo w sumie nie jest to nic strasznego.

 

  • Lubię! 1
Link do komentarza
Share on other sites

1 godzinę temu, gamperos napisał:

Znalazłem też film, w którym jest pokazane jak otrzymywać dane z bazy na stronie www za pomocą php. Czy to właśnie o taki sposób chodzi?

PHP jest idealny do wyświetlania danych z bazy na stronie - i tak możesz działać. Problemem jest sterowanie GPIO z poziomu PHP. Tutaj przyda się Python z dostępem do bazy.

  • Lubię! 1
Link do komentarza
Share on other sites

11 minut temu, Treker napisał:

Problemem jest sterowanie GPIO z poziomu PHP

Niekoniecznie - np.:
 

<?php

function gpioWrite($pin, $wartosc)
{
	system("/usr/bin/gpio -g write {$pin} {$wartosc}");
}

function gpioRead($pin)
{
	$f=popen("/usr/bin/gpio -g read {$pin}","r");
	$rc=fgets($f);
	pclose($f);
	return (int)$rc;
}
	
?>

Oczywiście w php.ini trzeba zezwolić na wywołanie system czy popen

  • Lubię! 2
Link do komentarza
Share on other sites

Podszedłbym do tematu trochę inaczej.
Czy jesteś pewny, że potrzebujesz bazy danych i PHP? Czy poza jedną prostą zmienną będziesz zapisywać w bazie danych coś więcej?
Jak dla mnie to wszystko dałoby się osiągnąć przy użyciu basha, websocketd i javascriptu po stronie serwowanego pliku html.
 

  • Lubię! 1
Link do komentarza
Share on other sites

Jeśli chodzi o dostęp do GPIO.

PHP to dobra sprawa. To wygodne rozwiązanie gdzie programujemy prawie jak w C. Python to już inna bajka i inna składnia.

Taki skrypcik zadziała po zainstalowaniu PHP i na stronie WWW udostępnianej przez np. Apache czy lighttpd. Zadziała także z wiersza poleceń (konsoli):

pi@pi: php ./skrypcik.php
<?php

	shell_exec("/usr/bin/gpio -g mode 21 out"); 		usleep(75000);
	for($x=0; $x<5; $x++)
	{
		shell_exec("/usr/bin/gpio -g write 21 1"); 		usleep(100000);
		shell_exec("/usr/bin/gpio -g write 21 0");		usleep(75000);
	}
?>

 

Edytowano przez Belferek
  • Lubię! 1
Link do komentarza
Share on other sites

26 minut temu, Overwatch napisał:

Czy jesteś pewny, że potrzebujesz bazy danych

 

Dnia 11.11.2020 o 18:44, gamperos napisał:

2. zmienne mają się zapisać w bazie danych mySQL, postawionej na Raspberry PI.

No comment.

  • Lubię! 1
Link do komentarza
Share on other sites

(edytowany)

Hmm, chyba źle to opisałem lub ja źle Was zrozumiałem :P. Chodzi mi o :

1. Napisanie skryptu php, który generowałby kilka zmiennych i przypisywał im losowe wartości 0 lub 1.

2. Te wygenerowane wartości mają się zapisać do bazy (może chyba być po otworzeniu strony www) w kolumnach takich jak nazwy zmiennych. 

3. Na stronie chce wyświetlić dane zmienne i wartości jakie maja przypisane, lub cała tabelęz bazy i np. dla zmiennej 'drzwiOtwarte' z wartością w bazie = 0, pokazać np. znacznikiem div na czerwono, że są zamknięte. I analogicznie gdyby wygenerowała się 1, to kolor zielony.

Takich zmiennych będę miał kilka typu zapaloneŚwiatło, zasłonięteRolety itp.

Nie wiem, czy to co napisałem opiera się na dostępie do GPIO, czy tu nie ma jedynie przesyłania danych z i na serwer?

 

Dzięki za odpowiedzi

 

Edytowano przez gamperos
Link do komentarza
Share on other sites

6 godzin temu, gamperos napisał:

Mam pytanie czy da się to co opisałem bez działania na GPIO?

Tak. GPIO to taka szczotka wystająca z płytki RPi, która służy do połączenia tworzonego przez Ciebie Matrixa ze światem rzeczywistym (np. jakbyś zamiast zamiast generowania losowej zmiennej określającej otwarcie/zamknięcie jakichś urojonych drzwi chciał podłączyć to ustrojstwo do rzeczywistych drzwi do mieszkania).

 

  • Lubię! 2
Link do komentarza
Share on other sites

Nie używałem, ale widzę, że jest PHP wrapper for WiringPi. Dla Raspberry Pi 4B trzeba będzie chyba zainstalować nieoficjalne uaktualnienia WIringPi, bo po zarzuceniu projektu przez autora nie działa on poprawnie na nowszych malinach.

Można  też w Pythonie.

from http.server import HTTPServer, BaseHTTPRequestHandler
from socketserver import ThreadingMixIn
import threading

USE_HTTPS = False

PAGE="""\
<!DOCTYPE html>
<html>
<head>
<title>Test webserv</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<center><h1>Raspberry Pi control panel</h1></center>
 <button type="button" id="testbutton">Test button</button> 
   <script>
    document.getElementById('testbutton').addEventListener("click", function() {
   getURL("/index.html?test=testOK");
});
    async function getURL(url) {
    	let response = await fetch(url);
    	let responseTXT = await response.text();
    	return responseTXT;
    }
    </script>
</body>
</html>
"""

def parseURL(requestedURL, parameter):
    parameter = parameter + "="
    requestedURL = requestedURL.partition(parameter)[2]
    requestedURL = requestedURL.partition("&")[0]
    return requestedURL

class Handler(BaseHTTPRequestHandler):

    def do_GET(self):
        if self.path == '/':
            self.send_response(301)
            self.send_header('Location', '/index.html')
            self.end_headers()
        elif self.path == '/index.html':
            self.send_response(200)
            self.end_headers()
            self.wfile.write(PAGE.encode('utf-8'))
        elif self.path[0:12] == "/index.html?":
            print(parseURL(str(self.path), "test"))
            self.send_response(200)
            self.end_headers()
        else:
            self.send_error(404)
            self.end_headers()


class ThreadingSimpleServer(ThreadingMixIn, HTTPServer):
    pass

def run():
    server = ThreadingSimpleServer(('0.0.0.0', 8080), Handler)
    if USE_HTTPS:
        import ssl
        server.socket = ssl.wrap_socket(server.socket, keyfile='./key.pem', certfile='./cert.pem', server_side=True)
    server.serve_forever()


if __name__ == '__main__':
    run()

Z innej beczki. Video Streaming with Raspberry Pi Camera (strona WWW w Pythonie).

Są też biblioteki dla C++, np

https://github.com/etr/libhttpserver

https://github.com/yhirose/cpp-httplib

https://mariusbancila.ro/blog/2017/11/19/revisited-full-fledged-client-server-example-with-c-rest-sdk-2-10/

https://github.com/jeremycw/httpserver.h

Edytowano przez rziomber
  • Lubię! 1
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.