1

I would like to send data of BMP180 sensor between a client and a server with two raspberry pi 3 being that the client when executing the command get the server will give the temperature value to the client. However with the code I build when I execute the get command, the server goes down. I need some help for this topic. My code is as follows:

Server:

import socket
import Adafruit_BMP.BMP085 as BMP085
host = '10 .6.4.198 '# Specifies the IP address of our Server
port = 4840 # Port through which to go to carry out the communication, replace 12345 by the port that we want above 1024

sensor = BMP085.BMP085()

# Function setting of our server so we can call it
def setupServer ():
    s = socket.socket (socket.AF_INET, socket.SOCK_STREAM, 0)
    # s = socket (domain, type, protocol)
    # AF_INET specifies that the desired domain is the Internet domain
    # SOCK_STREAM is the type you want and supported by the AF_INET domain
    print ("Socket Created.")

    # Print statement of socket not working
    try:
        s.bind ((host, port)) # binds our host and port
    except socket.error as msg:
        print (msg)
    print ("Socket bind complete.")
    print ("Waiting for data ......")
    returns

# Function setting of our server connection
def setupConnection ():
    s.listen (10) # Allows one connection at a time. You can change the value for the desired connections at the same time.
    conn, address = s.accept () #Configuration of connection and address and accepting whatever is listening
    print ("Connected to:" + address [0] + ":" + str (address [1])) # Str (Address [1]) converts the ip address to string
## print ("Connected to:" + address [1] + ":" + str (address [2]))
    return conn # returns connection value

def GET (): # retrieves this stored value that was previously specified
    reply = sensor # variable data storage
    return reply

def REPEAT (dataMessage): # repeats the message entered in the command
    reply = dataMessage [1]
    return reply

def dataTransfer (conn):
    #A big loop that sendsreceives data until told not to.
    while True:

        #Receive the data
        data = conn.recv (1024) # receive the data
        data = data.decode ('utf-8') # decoding data received in utf-8

        #Split the data such that you separate the command from the rest of the data.
        dataMessage = data.split ('', 1)
        command = dataMessage [0]
        if command == 'get':
            reply = GET ()
            print ("Temperature = {0: 0.2f * C" .format (sensor.read_temperature ()))
        elif command == 'repeat':
            reply = REPEAT (dataMessage)
        elif command == 'quit':
            print ("Our client has left us :(")
            break
        elif command == 'kill':
            print ("Our server is shutting down.")
            s.close ()
            break
        else:
            reply = 'Unknow Command'
        conn.sendall (str.encode (reply))
        print ("Data has been sent !!!!")
    conn.close ()

s = setupServer () # calls the setupServer

while True:
    try:
        conn = setupConnection () # get the connection from the setupServer function
        dataTransfer (conn)
    except:
        break

Client:

import socket
import time

host = '10 .6.4.198 '# Server IP Address
port = 4840 # Port of communication, must be above 1024
s = socket.socket (socket.AF_INET, socket.SOCK_STREAM, 0) # s = socket.socket (addr_family, type)
#################### GRADES ############################# ##############################
#### TCP #####
# Communication in IPV4 protocol with TCP flow-based connection
# Computers establish a connection to each other and read / write data
# in a continuous stream of bytes --- as a file, most common case.
#### UDP ####
# If we had AF_INET6 would be communication with IPV6 protocol
# Had we SOCK_DGRAM we had communication based on UDP datagrams
#Computers send discrete packets (or messages) to each other.
# Each packet contains a collection of bytes, but each packet is separate and independent.
################################################## ####################################

s.connect ((host, port))

print ("<======== Connected to Server =========> \ n")
while True:  
    command = input ("Enter your command:")
    if command == 'quit':
        print ("Disconnected of Server")
        #Send EXIT request to other end
        s.send (str.encode (command))
        break
    elif command == 'kill':
        print ("Server shutdown")
        #Send KILL command
        s.send (str.encode (command))
        break
    s.send (str.encode (command))
    reply = s.recv (1024)
    print (reply.decode ('utf-8'))
s.close()

However this error appears to me:

enter image description here

How can i solve this error and send the data between client and server?

  • you'll need a module named Adafruit_GPIO - when you installed Adafruit_Python_BMP did you run the setup, as per the documentation? – Jaromanda X Jul 31 '18 at 6:01
  • Can you make 1st sentence grammatical and clear, please? Your sensor doesn't give any output. Sort it out first. Check if you can read BMP180 with one RPi, then, try to send the data out – smajli Jul 31 '18 at 9:39
  • yes i run de setup.py with the command sudo python setup.py install Jaromanda – Sergio Nunes Jul 31 '18 at 12:43
  • I had tested with a sensor BMP180 and one RPi and work's well, the sensor gives me the values of temperature, altitude, pressure and sealevel pressure, i run the example file in the directory, the file is the simpletest.py and the values are: Temp = 32.70 *C Pressure = 97466.00 Pa Altitude = 326.78 m Sealevel Pressure = 97461.00 Pa When i run with the command sudo python simpletest.py, when i try run in python 3 gives me an error who is ImportError: No module named 'Adafruit_BMP' – Sergio Nunes Jul 31 '18 at 12:50

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.