Skip to content

Instantly share code, notes, and snippets.

@titipata
Last active July 7, 2017 17:49
Show Gist options
  • Save titipata/7ddd815c4207c0613635b504b3da8619 to your computer and use it in GitHub Desktop.
Save titipata/7ddd815c4207c0613635b504b3da8619 to your computer and use it in GitHub Desktop.

Socket Programming

Client

import time
import socket
from threading import Timer

HOST = '192.168.128.147'
PORT = 8000

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
request = "10, 1, light"
s.send(request.encode())
t = request.split(",")[0].strip()
extra_wait = 5
time.sleep(t + extra_wait) # wait for sever to collect data
light_sensor_data = s.recv(1024).decode() # receive data back
light_sensor_data.split(',') # data in list
light_sensor_data = []
result = s.recv(1024) # receive data back
while len(result) > 0:
    light_sensor_data.append(s.recv(1024))
light_sensor_data_decode = list(map(lambda x: x.decode(), light_sensor_data)

Server

this goes into server.py to run it, just run python server.py

import socket
import mraa
import time

def collect_from_sensor(req):
    req_split = list(map(lambda x: x.split(), req.split(',')))
    t, dt, sensortype = req_split
    print("Time = %s, dt = %s, Sensor Type = %s" % (t, dt, sensortype))
    t = int(t[0].strip())
    dt = int(dt[0].strip())
    sensortype = sensortype[0].strip()
    sensor_data = list()
    if sensortype == 'light':
        try:
            n_samples = int(t/dt)
            data_point = mraa.Aio(3)
            for _ in range(t/dt):
                sensor_data.append(data_point.readFloat())
                time.sleep(dt)
                print("%.5f" % data_point.readFloat())
        except:
            print('No sensor connected')
    return sensor_data

serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = "192.168.128.147"
port = 8000
serversocket.bind((host,port))
serversocket.listen(5)
print ('server started and listening')


while 1:
    (clientsocket, address) = serversocket.accept()
    print("connection found!")
    request = clientsocket.recv(1024).decode()
    sensor_data = collect_from_sensor(str(request))
    if sensor_data:
        r = ','.join(map(str,sensor_data))
        clientsocket.send(r.encode())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment