![ทำ ChatBot Powered Python #Raspberry Pi: 4 ขั้นตอน (พร้อมรูปภาพ) ทำ ChatBot Powered Python #Raspberry Pi: 4 ขั้นตอน (พร้อมรูปภาพ)](https://img.gwsigeps.com/img/circuits/make-a-python-powered-chatbot-raspberry-pi-5.jpg)
สารบัญ:
- วัสดุ:
- ขั้นตอนที่ 1: ข้อกำหนด
- ขั้นตอนที่ 2: การทำงาน
- ขั้นตอนที่ 3: แอพ Android
- ขั้นตอนที่ 4: เซิร์ฟเวอร์ Python
สวัสดีทุกคนในคำสั่งนี้ฉันจะไป
แสดงวิธีสร้างแชทจาก 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