ทำ ChatBot Powered Python #Raspberry Pi: 4 ขั้นตอน (พร้อมรูปภาพ)

ทำ ChatBot Powered Python #Raspberry Pi: 4 ขั้นตอน (พร้อมรูปภาพ)

สารบัญ:

Anonim

สวัสดีทุกคนในคำสั่งนี้ฉันจะไป

แสดงวิธีสร้างแชทจาก Python อย่างง่าย มันไม่ได้ทรงพลังเหมือน Amazon alexa

ต้องดูวิดีโอก่อน (คลิกที่นี่)

วัสดุ:

ขั้นตอนที่ 1: ข้อกำหนด

ฮาร์ดแวร์:

#Raspberry pi 3

(หมายเหตุ: - คุณสามารถใช้รุ่น Can raspberry pi ให้แน่ใจว่าคุณเชื่อมต่อ Dongle กับ wiffi ไปแล้ว)

ซอฟต์แวร์:

# Python2

(ไม่จำเป็นต้องติดตั้งหลามมันติดตั้งอยู่แล้วบน raspberry pi)

เชื่อมต่อ LED กับ GPIO 11

ขั้นตอนที่ 2: การทำงาน

ตอนนี้ให้ฉันอธิบายว่าแชทนี้ทำงานอย่างไรที่นี่ raspberry pi ทำงานเป็นเซิร์ฟเวอร์และแอพของเราทำหน้าที่เป็นลูกค้า เซิร์ฟเวอร์ Python บน Raspberry pi จัดการการร้องขอทั้งหมดจากไคลเอนต์ ตรวจสอบให้แน่ใจว่าโทรศัพท์ RPi และ Android ควรเชื่อมต่อกับเครือข่าย wiffi เดียวกัน

นอกจากนี้คุณยังสามารถเข้าถึงเซิร์ฟเวอร์ของคุณนอกเครือข่ายโฮมของคุณโดยการส่งต่อพอร์ต

ขั้นตอนที่ 3: แอพ Android

ฉันสร้างแอพ android นี้โดยใช้ MIT app inventor 2

แอพนี้นั้นเป็นไคลเอนต์ TCP ที่ทำให้การสื่อสารกับเซิร์ฟเวอร์

คุณสามารถดาวน์โหลดแอพนี้ได้จากลิงค์ด้านล่าง (คลิกที่นี่)

ฉันให้ไฟล์. aia ของโครงการ MIT app inventor คุณสามารถนำเข้าและแก้ไขได้ตามความต้องการของคุณ

ขั้นตอนที่ 4: เซิร์ฟเวอร์ Python

เปิด Python 2.7 คัดลอกโค้ดนี้และวาง

จากนั้นเรียกใช้รหัสนี้

คุณสามารถปรับเปลี่ยนได้ตามความต้องการของคุณ

ซ็อกเก็ตนำเข้า

นำเข้า sys นำเข้า RPi.GPIO เป็น GPIO จากการนำเข้าด้าย *

นำเข้าวันที่และเวลานำเข้าสุ่มคำขอนำเข้านำเข้า

GPIO.setwarnings (เท็จ) GPIO.setmode (GPIO.BOARD) GPIO.setup (11, GPIO.OUT)

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

server_socket = socket.socket (socket.AF_INET, socket.SOCK_STREAM) server_socket.bind (ที่อยู่) server_socket.listen (5) # แปรผันตามจำนวนการเชื่อมต่อ numbOfConn = 0

#Name ของรายการที่ใช้สำหรับการเชื่อมต่อ addressList = clients = set () ################################################################################## รายการ ##################################################################################################################### greetings = 'hola', 'hello', 'hi', 'hey' คำถาม = 'คุณเป็นอย่างไร', 'คุณเป็นอย่างไร' คำตอบ = 'โอเค', 'ฉันสบายดี' ฐานข้อมูล = {'jarvis': 'สวัสดีค่ะฉันจะช่วยคุณได้อย่างไร', 'ชื่อ': 'จาร์วิส', 'ชื่อของคุณคืออะไร': 'ชื่อของฉันคือจาร์วิส', 'สวัสดีจาร์วิส': 'สวัสดี ช่วยคุณ ',' คุณทำอะไรให้ฉันได้บ้าง ':' ฉันทำอะไรได้หลายอย่าง.. '}

พิมพ์ ("การฟังสำหรับลูกค้า..") ############################################################## #################################################################################################################################### ถ้าข้อมูลในฐานข้อมูล: พิมพ์ (ฐานข้อมูล ข้อมูล) # os.system ("flite -t ​​'" + ฐานข้อมูล ข้อมูล + "'") sclient (ฐานข้อมูล ข้อมูล) ข้อมูล elif ในคำถาม: random_response = random.choice (การตอบกลับ) พิมพ์ (random_response) # os.system ("flite -t ​​'" + random_response + "'") sclient (random_response) ข้อมูล elif ในคำทักทาย: random_greeting = random.choice (ทักทาย) พิมพ์ (สุ่ม _greeting) sclient (random_greeting) # os.system ("flite -t ​​'" + random_greeting + "'") elif 'light on'in data หรือ' led on 'ในข้อมูล: sclient ("light turn on") # os.system ("flite -t 'light turn on' ") GPIO.output (11, True) พิมพ์ (" Light on ") elif 'แสงของ' ในข้อมูลหรือ 'led of' ในข้อมูล: sclient (" ปิดไฟ ") # os.system ("flite -t ​​'light off' ') GPIO.output (11, False) พิมพ์ (" Light Off ") elif' time 'ในข้อมูล: ตอนนี้ = datetime.datetime.now () เวลา = str (now.hour) + STR ("ชั่วโมง") + STR (now.minute) + STR ("Minu tes ") พิมพ์ (เวลา) # os.system (" flite -t ​​'"+ เวลา +"' ") sclient (เวลา) elif 'date'in ข้อมูล: now = datetime.datetime.now () วันที่ = str ("% s /% s /% s "% (now.month, now.day, now.year)) พิมพ์ (วันที่) # os.system (" flite -t ​​'"+ date +"' ") sclient (date) อื่น: conn.send ("ขออภัยโปรดทำซ้ำ.. ") add_data = open ("newdata.txt", 'a') add_data.write (" n") add_data.write (ข้อมูล) add_data.close () #### ################################################## ######################## การส่งการตอบกลับไปที่ลูกค้าทั้งหมด def sclient (ระเบียบ): สำหรับ c ในไคลเอนต์: ลอง: c.send (ระเบียบ) ยกเว้น: c.close () #################################################################### ผลิตภัณฑ์ ####################################################################################@@@@ ดังนั้นฟังก์ชั่นจะไม่ยุติและเธรดจะไม่จบ ในขณะที่ True: output = conn.recv (2048); ถ้า output.strip () == "ตัดการเชื่อมต่อ": conn.close () sys.exit ("ข้อความปลดการเชื่อมต่อที่ได้รับการปิดระบบ") conn.send ("การสูญเสียการเชื่อมต่อ") elif เอาต์พุต: print ("ข้อความที่ได้รับจากลูกค้า: ") data = str (output).lower () พิมพ์ (ข้อมูล) พิมพ์ (" ตอบกลับจากเซิร์ฟเวอร์: ") chatboat (ข้อมูล)

ในขณะที่ True: #Accepting การเชื่อมต่อขาเข้า conn, address = server_socket.accept () พิมพ์ ("เชื่อมต่อกับลูกค้าที่", ที่อยู่) clients.add (เชื่อมต่อ) # สร้างเธรดใหม่ เรียกฟังก์ชั่นไคลเอนต์ด้ายสำหรับฟังก์ชั่นนี้และผ่าน conn เป็นอาร์กิวเมนต์ start_new_thread (clientthread, (conn, addressList)) #start เธรดใหม่รับอาร์กิวเมนต์ที่ 1 เป็นชื่อฟังก์ชันที่จะเรียกใช้งานที่สองคือ tuple ของการขัดแย้งกับฟังก์ชัน

conn.close () sock.close ()

ดาวน์โหลดรหัสนี้จากที่นี่

สำหรับโครงการเพิ่มเติมลองดูช่อง YouTube ของฉัน (Electronics Forever)

รองชนะเลิศอันดับที่ใน

การประกวด Internet of Things 2017