Introduction: Make a Python Powered ChatBot #Raspberry Pi

Hello Guys,In this instructables i am going

show you how to make simple Python based chatbot. it's not powerful as Amazon alexa.

Must watch the video first (click here)

Step 1: Requirements

Hardware :

#Raspberry pi 3

(Note:-You can use Can raspberry pi version make sure you have connected wiffi Dongle to it)

Software:

#Python2

(No need to install python it is already install on raspberry pi)

Connect LED to GPIO 11.

Step 2: Working

NOW let me explain how this chatboat works here raspberry pi works as server& our app acts as client. Python server on Raspberry pi handles all the requests from the client. make sure RPi & android phone should be connected to same wiffi network.

You can also access your server outside Your Home wiffi network by Port forwarding.

Step 3: Android App

I have created this android app using MIT app inventor 2.

This app is basically a TCP client which make communication with server.

You can Download this app from below link(click here).

I have provided .aia file of MIT app inventor project you can import it & edit it according your needs.

Step 4: Python Server

open Python 2.7,Copy this code & paste it.

then Run this code.

You can modify it according to your needs.

import socket
import sys import RPi.GPIO as GPIO from thread import *
import datetime
import random
import requests
import os
GPIO.setwarnings(False)
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(address)
server_socket.listen(5)
#Variable for the number of connections
numbOfConn = 0
#Name of list used for connections
addressList = []
clients = set()
##############################################################################
#small database of our bot
greetings = ['hola', 'hello', 'hi', 'hey']
questions = ['how are you', 'how are you doing']
responses = ['okay', 'i am fine']
database={
    'jarvis':'hello,sir how can i help you',
    'name':'jarvis',
    'what is your name':'my name is jarvis',
    'hello jarvis':'hello,sir how can i help you',
    'what can you do for me':'i can do many things..'
}
print ("Listening for client . . .")
###############################################################################
#chatbot code here
def chatboat(data):
    if data in database:
        print(database[data])
        #os.system("flite -t '"+ database[data] +"'")
        sclient(database[data])
    elif data in questions:
        random_response = random.choice(responses)
        print(random_response)
        #os.system("flite -t '"+ random_response +"'")
        sclient(random_response)
    elif data in greetings:
        random_greeting = random.choice(greetings)
        print(random_greeting)
        sclient(random_greeting)
        #os.system("flite -t '"+ random_greeting +"'")
    elif 'light on'in data or 'led on' in data:
        sclient("light turn on")
        #os.system("flite -t 'light turn on'")
        GPIO.output(11,True)
        print("Light on")
    elif 'light of' in data or 'led of' in data:
        sclient("light turn off")
        #os.system("flite -t 'light turn off'")
        GPIO.output(11,False)
        print("Light Off")
    elif 'time' in data:
        now = datetime.datetime.now()
        time=str(now.hour)+str("hours")+str(now.minute)+str("minutes")
        print(time)
        #os.system("flite -t '"+ time+"'")
        sclient(time)
    elif 'date'in data:
        now = datetime.datetime.now()
        date=str("%s/%s/%s" % (now.month,now.day,now.year))
        print(date)
        #os.system("flite -t '"+date+"'")
        sclient(date)
    else:
        conn.send("sorry please repeat..")
        add_data = open("newdata.txt", 'a')
        add_data.write("\n")
        add_data.write(data)
        add_data.close()
###############################################################################
#Sending Reply to all clients
def sclient(mess):
    for c in clients:
        try:
            c.send(mess)
        except:
            c.close()
##############################################################################
#server code here
def clientthread(conn,addressList):
#infinite loop so that function do not terminate and thread do not end.
     while True:
        output = conn.recv(2048);
        if output.strip() == "disconnect":
            conn.close()
            sys.exit("Received disconnect message.  Shutting down.")
            conn.send("connection loss")
        elif output:
            print ("Message received from client:")
            data=str(output).lower()
            print (data)
            print("Reply from the server:")
            chatboat(data)
while True:
#Accepting incoming connections
    conn, address = server_socket.accept()
    print ("Connected to client at ", address)
    clients.add(conn)
#Creating new thread. Calling clientthread function for this function and passing conn as argument.
    start_new_thread(clientthread,(conn,addressList)) #start new thread takes 1st argument as a function name to be run, second is the tuple of arguments to the function.
conn.close()
sock.close()

Download this code from here

For more projects check out my YouTube Channel (Electronics Forever)

Internet of Things Contest 2017

Runner Up in the
Internet of Things Contest 2017