72 lines
1.7 KiB
Python
72 lines
1.7 KiB
Python
import socket
|
|
import ollama
|
|
import serial
|
|
import time
|
|
import threading
|
|
|
|
ip = '127.0.0.1'
|
|
port = 5000
|
|
|
|
usbPort = '/dev/ttyACM0'
|
|
baud_rate = 9600
|
|
stopFlag = False
|
|
|
|
instruction = "Ne fait pas de long paragraphe répond simplement"
|
|
|
|
def send_message(client_socket, message):
|
|
client_socket.send(message.encode())
|
|
|
|
def connect_arduino():
|
|
count = 0
|
|
|
|
ser = serial.Serial(usbPort, baud_rate)
|
|
while not ser.isOpen():
|
|
if (count == 5):
|
|
count = 0
|
|
print("Serial port still trying to open...")
|
|
time.sleep(1)
|
|
count += 1
|
|
return (ser)
|
|
|
|
def arduino_thread(thread_name, ser):
|
|
global stopFlag
|
|
|
|
while not stopFlag:
|
|
if ser.in_waiting > 0:
|
|
data = ser.readline().decode('utf-8').strip()
|
|
print("Arduino data:", data)
|
|
|
|
def start_server():
|
|
global stopFlag
|
|
|
|
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
server_socket.bind((ip, port))
|
|
server_socket.listen(1)
|
|
|
|
print("Server ready!")
|
|
|
|
ser = connect_arduino()
|
|
client_socket, client_address = server_socket.accept()
|
|
thread1 = threading.Thread(target=arduino_thread, args=("Thread1", ser))
|
|
thread1.start()
|
|
while (1):
|
|
message = client_socket.recv(1024).decode()
|
|
|
|
if (message == "exit"):
|
|
send_message(client_socket, "exit")
|
|
break
|
|
message = message + instruction
|
|
response = ollama.chat(model='mistral', messages=[
|
|
{
|
|
'role': 'user',
|
|
'content': message,
|
|
},
|
|
])
|
|
send_message(client_socket, response['message']['content'])
|
|
stopFlag = True
|
|
print("closed server.")
|
|
thread1.join()
|
|
client_socket.close()
|
|
|
|
start_server()
|