Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/user/bin/env python
- import serial
- import time
- import datetime
- #holder for active serial ports
- serialPorts = []
- #trur æ kan slet
- serialConnections = []
- #populated by the Ardunios by either "TIL" or "PUST"
- #this decices the name of the logfile for this arduino.
- typeOfSensorNode = []
- #holder for generated files
- filenames = []
- #trur æ kan slett
- files = []
- # messages[0] = 'hello' is used for probing each active com-port and checking for an answer 'hello'
- # messages[1] = 'give me' is used to ask the Arduino's for sensor data
- messages = ['1', '2']
- #time between each sensor log
- timeBetweenDataTransfers = 10
- #number of connected devices
- numberOfArduinoDevices = 2
- # Serial Connection settings
- # Do not change
- baudrate = 9600
- parity = serial.PARITY_NONE
- stopbits = serial.STOPBITS_ONE
- bytesize = serial.EIGHTBITS
- timeout = 1
- # Routine checking what type of sensorNode we found
- # This routine populates typeOfSensoNodes
- # It is also detrimental to ensure established connection
- def checkDeviceConnectivity():
- establishedConnections = 0
- for portNumber in range(0, numberOfArduinoDevices):
- print ('Writing to Arduino at ' + serialPorts[portNumber].port.__str__())
- serialPorts[portNumber].write(messages[1])
- #print(serialConnections[portNumber])
- recievedData = serialPorts[portNumber].readline()
- print("First package from Arduino is: " + recievedData)
- if (recievedData == "TIL" or recievedData == "PUST"):
- print ('We found a sensor node')
- typeOfSensorNode.append(recievedData)
- establishedConnections += 1
- if (establishedConnections == numberOfArduinoDevices):
- return True
- else:
- return False
- # Routine that probes the first 100 possible Arduino-COMs
- # This routine populates serialPorts
- def establishSerialConnections():
- counter = 0
- while (counter < 100):
- try:
- ser = serial.Serial(
- port= "/dev/ttyACM" + counter.__str__(),
- baudrate = baudrate,
- parity = parity,
- stopbits = stopbits,
- bytesize = bytesize,
- timeout = 1
- )
- serialPorts.append(ser)
- ser.close()
- ser.open()
- print ("Found open device at /dev/ttyACM" + counter.__str__())
- except IOError:
- print ("No Arduino at this port")
- counter += 1
- # Routine generating filenames, using typeOfSensorNode
- def generateFileNames():
- for device in range(0, numberOfArduinoDevices):
- filenames.append(typeOfSensorNode[device].__str__()+'_Arduino_nr_'+device.__str__()+'_'+datetime.datetime.now().__str__()+'.csv')
- print ("Created file: " + filenames[device].__str__())
- # Routine creating actual measurement files and fills in first two rows
- def createMeasurementFiles():
- generateFileNames()
- for device in range(0, numberOfArduinoDevices):
- files.append(open(filenames[device], "w+"))
- files[device].write('Date;Time;Temperature;Relative Humidity;CO2;Formaldehyde Start;Control;High bit;Low bit;Reserved;Reserved;High bit;Low bit;Checksum;PM1.0;PM2.5;PM4.0;PM10;NCPM0.5;NCPM1.0;NCPM2.5;NCPM4.0;NCPM10.0;Typical Particle Size')
- files[device].write("\r\n")
- files[device].close()
- # Function for writing to the sensor nodes.
- # Consider taking in what file to write to.
- def writeToFile(string):
- for device in range(0, numberOfArduinoDevices):
- files[device] = open(filenames[device], "a")
- print ('Opened ' + files[device].__str__())
- files[device].write('heia \n')
- files[device].close()
- # Function for reading from the nodes
- # All write functionality here, should at a later point be written in writeToFile-routine
- def readFromArduino():
- for device in range(0, numberOfArduinoDevices):
- print ('Reading from Arduino at ' + serialPorts[device].port.__str__())
- recievedData = serialPorts[device].readline()
- print (recievedData)
- files[device] = open(filenames[device], "a")
- files[device].write(datetime.datetime.now().date().__str__())
- files[device].write(";")
- files[device].write(datetime.datetime.now().time().__str__())
- files[device].write(recievedData)
- files[device].write("\r\n")
- files[device].close()
- def writeToArduino(message):
- for device in range(0, numberOfArduinoDevices):
- serialPorts[device].write(message)
- establishSerialConnections()
- connection_established = checkDeviceConnectivity()
- createMeasurementFiles()
- print (len(serialPorts).__str__() + " Arduino devices found")
- if True:
- while True:
- writeToArduino(messages[0])
- readFromArduino()
- print ("Waiting " + timeBetweenDataTransfers.__str__() + " seconds")
- time.sleep(timeBetweenDataTransfers)
- else:
- print ('Failed finding enough Arduino Devices, shutting down')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement