Server and Client Send Actual Sensor Data over Network using Raspberry Pi¶
objective¶
In this Experiment we shall learn to create our own server and client with raspberyy pi uisng python Socket Programming.
Our Tagrget is to create a server. the server would be Running 24x7 on Raspberry pi and server is always listening for request from client When a client request server it shall send the Temperature and Humidty over Network using Socket Programming
Video Tutorial can be found below link¶
from IPython.display import YouTubeVideo
YouTubeVideo('QihjI84Z2tQ')
Getting Started with Raspberry pi¶
from IPython.display import YouTubeVideo
YouTubeVideo('qL2ClHYEuog')
Connection Diagram¶
%%html
<img src="http://www.circuitbasics.com/wp-content/uploads/2015/12/How-to-Setup-the-DHT11-on-the-Raspberry-Pi-Three-pin-DHT11-Wiring-Diagram.png" , width=600, height=300>
DHT Pinout¶
%%html
<img src="http://www.circuitbasics.com/wp-content/uploads/2015/12/DHT11-Pinout-for-three-pin-and-four-pin-types-2.jpg" , width=600, height=300>
Step 1: Create Server¶
Define the Library
import socket
import numpy as np
import encodings
Define the HOST and PORT
HOST = '127.0.0.1' # Standard loopback interface address (localhost)
PORT = 65432 # Port to listen on (non-privileged ports are > 1023)
For the Experiment we shall send Dummy Data and then once we know the concept we can send actual Sensor value over the socket programming.
Define the function which will send dummy data when client sends request¶
def random_data():
x1 = np.random.randint(0, 55, None) # Dummy temperature
y1 = np.random.randint(0, 45, None) # Dummy humidigy
my_sensor = "{},{}".format(x1,y1)
return my_sensor # return data seperated by comma
Define the actual server when client sends string Data it shall send Data¶
def my_server():
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
print("Server Started waiting for client to connect ")
s.bind((HOST, PORT))
s.listen(5)
conn, addr = s.accept()
with conn:
print('Connected by', addr)
while True:
data = conn.recv(1024).decode('utf-8')
if str(data) == "Data":
print("Ok Sending data ")
my_data = random_data()
x_encoded_data = my_data.encode('utf-8')
conn.sendall(x_encoded_data)
elif str(data) == "Quit":
print("shutting down server ")
break
if not data:
break
else:
pass
if __name__ == '__main__':
while 1:
my_server()
Explanation¶
when client sends Data as a string server will send sensor data over the network
Entire Code for Server¶
import socket
import numpy as np
import encodings
HOST = '127.0.0.1' # Standard loopback interface address (localhost)
PORT = 65432 # Port to listen on (non-privileged ports are > 1023)
def random_data():
x1 = np.random.randint(0, 55, None) # Dummy temperature
y1 = np.random.randint(0, 45, None) # Dummy humidigy
my_sensor = "{},{}".format(x1,y1)
return my_sensor # return data seperated by comma
def my_server():
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
print("Server Started waiting for client to connect ")
s.bind((HOST, PORT))
s.listen(5)
conn, addr = s.accept()
with conn:
print('Connected by', addr)
while True:
data = conn.recv(1024).decode('utf-8')
if str(data) == "Data":
print("Ok Sending data ")
my_data = random_data()
x_encoded_data = my_data.encode('utf-8')
conn.sendall(x_encoded_data)
elif str(data) == "Quit":
print("shutting down server ")
break
if not data:
break
else:
pass
if __name__ == '__main__':
while 1:
my_server()
Step 2: Write the Code for Client¶
Import library¶
import socket
import threading
import time
Define the HOST and PORT¶
HOST = '192.168.0.111' # The server's hostname or IP address
PORT = 65432 # The port used by the server
we need to process the Data that server sends us lets us define a function for that¶
def process_data_from_server(x):
x1, y1 = x.split(",")
return x1,y1
Write the Client Code¶
def my_client():
threading.Timer(11, my_client).start()
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
my = input("Enter command ")
#my = "Data"
my_inp = my.encode('utf-8')
s.sendall(my_inp)
data = s.recv(1024).decode('utf-8')
x_temperature,y_humidity = process_data_from_server(data)
print("Temperature {}".format(x_temperature))
print("Humidity {}".format(y_humidity))
s.close()
time.sleep(5)
if __name__ == "__main__":
while 1:
my_client()
Entire Client Code¶
import socket
import threading
import time
HOST = '192.168.0.111' # The server's hostname or IP address
PORT = 65432 # The port used by the server
def process_data_from_server(x):
x1, y1 = x.split(",")
return x1,y1
def my_client():
threading.Timer(11, my_client).start()
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
my = input("Enter command ")
#my = "Data"
my_inp = my.encode('utf-8')
s.sendall(my_inp)
data = s.recv(1024).decode('utf-8')
x_temperature,y_humidity = process_data_from_server(data)
print("Temperature {}".format(x_temperature))
print("Humidity {}".format(y_humidity))
s.close()
time.sleep(5)
if __name__ == "__main__":
while 1:
my_client()
Great Job try the Code and lets send Actual Sensor Data over Network¶
Server Code which will run on Raspberry pi¶
import socket
import numpy as np
import encodings
import Adafruit_DHT
HOST = '192.168.1.4' # Standard loopback interface address (localhost)
PORT = 65432 # Port to listen on (non-privileged ports are > 1023)
def random_data():
pin = 4
sensor = Adafruit_DHT.DHT22
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
if humidity is not None and temperature is not None:
print('Temp={0:0.1f}*C Humidity={1:0.1f}%'.format(temperature, humidity))
print("data was written on database T{} H{}".format(temperature,humidity))
data = '{},{}'.format(temperature,humidity)
return data
def my_server():
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
print("Server Started waiting for client to connect ")
s.bind((HOST, PORT))
s.listen(5)
conn, addr = s.accept()
with conn:
print('Connected by', addr)
while True:
data = conn.recv(1024).decode('utf-8')
if str(data) == "Data":
print("Ok Sending data ")
my_data = random_data()
x_encoded_data = my_data.encode('utf-8')
conn.sendall(x_encoded_data)
elif str(data) == "Quit":
print("shutting down server ")
break
if not data:
break
else:
pass
if __name__ == '__main__':
while 1:
my_server()
You have done amazing work, i will be thankful if you explain these lines
ReplyDeleteif __name__ == '__main__':
while 1:
my_server()
RegardsL Humza
1 ist true, 0 is false. so "while 1:" means "while true"
DeletePythonist: Server And Client Send Actual Sensor Data Over Network Using Raspberry Pi¶ >>>>> Download Now
Delete>>>>> Download Full
Pythonist: Server And Client Send Actual Sensor Data Over Network Using Raspberry Pi¶ >>>>> Download LINK
>>>>> Download Now
Pythonist: Server And Client Send Actual Sensor Data Over Network Using Raspberry Pi¶ >>>>> Download Full
>>>>> Download LINK EA
Hi i want to ask question about creating comm and sending messages bwtween 1 server and 5 clients via wifi socket i mean the server is at first running a init_script and sends a couples of messages to the 5 clients and then enters to a inifinty loop and wait for incoming data from the clients and than analyze this data,,each clinet sends its data to the server after he finished his analyze (for example l have ultrasonic sensor which messuring the elapsed time of someone who passes obstcale and in the end sends it to the server and think i have 5 obstacles so he needs to pass 5 obstacles and send the time of each of them to server and the server in the end creating Excel file with the total time (5 obstacles time)..i really would like for help in the socket here its somthing rh drives me crazy and i would be greatfull for help thnx (i have couple of files that i wrote )
ReplyDeleteFile "D:\rasbeery pi\entire server code.py", line 2, in
ReplyDeleteimport numpy as np
ModuleNotFoundError: No module named 'numpy'
this error found whilw running entire server code i dont't know to solve it plz help me out
Hi bro!, you must install the pk of numpy previusly. Run 'python install numpy' or 'py install numpy' or similar command from cmd console in Windows (Windows+r and enter 'cmd' for open this console...)
DeleteFor 'encodings' pkg is similar: enter 'py install encodings' from cmd console. See this link https://datatofish.com/install-package-python-using-pip/
This comment has been removed by the author.
ReplyDeleteHello hope you are doing well. At last I have found something related to my work. Kindly help me out with sending adxl345 data from one pi to another pi from controlling the motors.
ReplyDeletePlease do reply me, I'll be waiting for your kind reply.
Thankyou.
Usman Gillani
usman.gilani10205@gmail.com
Pythonist: Server And Client Send Actual Sensor Data Over Network Using Raspberry Pi¶ >>>>> Download Now
ReplyDelete>>>>> Download Full
Pythonist: Server And Client Send Actual Sensor Data Over Network Using Raspberry Pi¶ >>>>> Download LINK
>>>>> Download Now
Pythonist: Server And Client Send Actual Sensor Data Over Network Using Raspberry Pi¶ >>>>> Download Full
>>>>> Download LINK