Zbuduj Python Powered ChatBot #Raspberry Pi: 4 kroki (ze zdjęciami)

Zbuduj Python Powered ChatBot #Raspberry Pi: 4 kroki (ze zdjęciami)

Spisu treści:

Anonim

Cześć chłopaki, w tych instrukcjach idę

pokaż, jak zrobić prosty chatbot oparty na Pythonie. nie jest potężny jak Amazon alexa.

Najpierw musisz obejrzeć film (kliknij tutaj)

Kieszonkowe dzieci:

Krok 1: Wymagania

Sprzęt:

# Malinowy pi 3

(Uwaga: -Możesz użyć Czy wersja raspberry pi upewnia się, że masz połączenie z Dongle wiffi)

Oprogramowanie:

# Python2

(Nie ma potrzeby instalowania Pythona, jest już zainstalowany na Raspberry Pi)

Podłącz LED do GPIO 11.

Krok 2: Praca

TERAZ pozwól mi wyjaśnić, jak działa ten chatboat, raspberry pi działa jako serwer, a nasza aplikacja działa jako klient. Serwer Python na Raspberry pi obsługuje wszystkie żądania klienta. upewnij się, że RPi i telefon z Androidem powinny być podłączone do tej samej sieci Wiffi.

Możesz również uzyskać dostęp do swojego serwera poza siecią Wiffi Twojego domu, przekierowując port.

Krok 3: Aplikacja na Androida

Stworzyłem tę aplikację na Androida za pomocą wynalazcy aplikacji MIT 2.

Ta aplikacja jest w zasadzie klientem TCP, który umożliwia komunikację z serwerem.

Możesz pobrać tę aplikację z poniższego linku (kliknij tutaj).

Udostępniłem plik.aia projektu wynalazcy aplikacji MIT, który możesz zaimportować i edytować zgodnie z własnymi potrzebami.

Krok 4: Serwer Python

otwórz Pythona 2.7, skopiuj ten kod i wklej go.

następnie uruchom ten kod.

Możesz go modyfikować zgodnie z własnymi potrzebami.

importuj gniazdo

import sys import RPi.GPIO jako GPIO z importu wątków *

import datetime import losowe żądania importu import os

GPIO.setwarnings (False) GPIO.setmode (GPIO.BOARD) GPIO.setup (11, GPIO.OUT)

host = '' port = 8220 adres = (host, port)

server_socket = socket.socket (socket.AF_INET, socket.SOCK_STREAM) server_socket.bind (adres) server_socket.listen (5) # Zmienna dla liczby połączeń numbOfConn = 0

# Nazwa listy użytej dla połączeń addressList = clients = set () ################################## ############################################ #small baza danych naszego bota greetings = 'hola', 'hello', 'hi', 'hey' questions = 'jak się masz', 'jak się masz' responses = 'okay', 'i am fine' database = {'jarvis': 'cześć, proszę pana, jak mogę ci pomóc', 'imię': 'jarvis', 'jak masz na imię': 'moje imię to jarvis', 'hello jarvis': 'cześć, sir, jak mogę pomóż ci „, co możesz dla mnie zrobić”: „mogę zrobić wiele rzeczy …”}

drukuj („Słuchanie klienta …”) ####################################### ######################################## #chatbot code tutaj def chatboat (dane): jeśli dane w bazie danych: print (baza danych dane) # os.system ("flite -t" "+ baza danych dane +" '") sclient (baza danych dane) dane elif w pytaniach: random_response = random.choice (odpowiedzi) print (random_response) # os.system ("flite -t" "+ random_response +" '") sclient (random_response) dane elif w powitaniach: random_greeting = random.choice (greetings) print (random_greeting) sclient (random_greeting) # os.system ("flite -t" "+ random_greeting +" '") elif' light on'in data lub 'led on' w data: sclient (" light turn on ") # os.system (" flite -t 'light turn on' ') GPIO.output (11, True) print („Light on”) elif „light of” w danych lub „led of” w danych: sclient („light turn off”) # os.system ("flite -t ​​'light wyłącz'") GPIO.output (11, False) print ("Light Off") elif "time" w danych: teraz = datetime.datetime.now () time = str (now.hour) + str ("godziny") + str (teraz.minute) + str ("minu tes ") print (time) # os.system (" flite -t ​​'"+ time +"' ") sclient (time) elif 'date'in data: now = datetime.datetime.now () date = str ("% s /% s /% s "% (teraz.month, teraz.day, now.year)) print (data) # os.system (" flite -t ​​"" + data + "'") sclient (data) inaczej: conn.send ("przepraszam proszę powtórzyć..") add_data = open ("newdata.txt", "a") add_data.write ("n") add_data.write (dane) add_data.close () #### ################################################## ######################### # Wysłanie odpowiedzi do wszystkich klientów def sclient (bałagan): dla cw klientach: spróbuj: c.send (mess) z wyjątkiem: c.close () ########################################### ################################### # kod serwera tutaj def clientthread (conn, addressList): #infinite loop więc ta funkcja nie kończy się i wątek nie kończy się. podczas gdy True: output = conn.recv (2048); if output.strip () == "disconnect": conn.close () sys.exit ("Odebrany komunikat rozłączenia. Zamykanie.") conn.send ("utrata połączenia") wyjście elif: print ("Wiadomość otrzymana od klienta: ") data = str (output).lower () print (dane) print (" Odpowiedz z serwera: ") chatboat (dane)

podczas True: # Przyjmowanie połączeń przychodzących conn, adres = server_socket.accept () print ("Połączony z klientem w", adres) clients.add (conn) # Tworzenie nowego wątku. Wywoływanie funkcji clientthread dla tej funkcji i przekazywanie conn jako argumentu. start_new_thread (clientthread, (conn, addressList)) #start nowy wątek przyjmuje pierwszy argument jako nazwę funkcji, która ma zostać uruchomiona, druga to krotka argumentów funkcji.

conn.close () sock.close ()

Pobierz ten kod tutaj

Aby uzyskać więcej projektów, sprawdź mój kanał YouTube (Electronics Forever)

Runner Up w

Internet of Things Contest 2017