I am not a programmer but would like to use python to capture and manipulate serial data from Arduino. I modified code from the web to read dht11 sensor data and write it to rrdtool but I would like to improve it. For example, the script crashed when there was a hiccup in the serial data sent. From other forum postings I see that there could be more efficient ways to capture the data but I don't know how to implement the code snippets.
I have looked at some of these BeginnersGuide/NonProgrammers - Python Wiki and at Amazon's books but nothing seems like it is appropriate. Either very basic, very advanced or focused on writing games.
Can anyone suggest a guide to help me learn to fix my code below?
#!/usr/bin/env python
#
import serial
import time
import rrdtool
########################################################################
# Global Variables - Yes I know these are bad...
ready=0 # ready to send command to arduino
timeout = 0 # To avoid infinite wait state, we will count 100 loops and assume failure
line = None # Holds current response from Arduino Serial
line_len = 0 # number of items in "line"
##########################################################################
# Declare functions
def get_arduino_response():
global line
global line_len
if (arduino.inWaiting() > 0): # Number of characters in arduino buffer
line = arduino.readline()
humidity = line [0:5]
temperature = line [9:14]
print line, temperature, humidity
rrdtool.update('dht11.rrd', 'N:%s:%s' % (temperature, humidity)) # Write values to RRD
time.sleep(300) # Time for next read
##########################################################################
# Set up serial port to Arduino
arduino = serial.Serial('/dev/ttyACM0', 9600, timeout = 10)
arduino.open()
time.sleep(10) # Time for Arduino to reset and settle
arduino.flushInput()
##########################################################################
# Main Loop
running = True
while 1: # Continuous loop
# os.system('clear')
stamp = time.time()
get_arduino_response() # If data available from arduino, retrieve into "line"
# if line_len == 17: # Ensure entire line came through
# print "temperature is ", temperature, "and humidity is ", humidity