Control Arduino from WIndows using Python

1st post attempt failed so this one is not as long winded

This code

from firmata import *
import time
a = Arduino("COM32", baudrate=57600) # Baudrate must match rate set in sketch
#time.sleep(3)
a.pin_mode(12, firmata.OUTPUT)

print "wait"
time.sleep(2)
print "Go"
b=1
while True:
    a.digital_write(12, firmata.HIGH) 
    time.sleep(1)
    a.digital_write(12, firmata.LOW)
    time.sleep(1)
    print "count" , b
    b= b +1

#a.serial.close()

Stops after 5 counts - ctrl-c takes tens secs to hand back control and then it give this

Traceback (most recent call last):
  File "E:\Dropbox\Private\arduino\py\firmatatest.py", line 12, in <module>
    a.digital_write(12, firmata.HIGH)
  File "build\bdist.win32\egg\firmata\firmata.py", line 91, in digital_write
    self.serial.write(chr(self.digital_output_data[port_number] >> 7))
  File "C:\Python27\lib\site-packages\serial\serialwin32.py", line 268, in write
    err = win32.GetOverlappedResult(self.hComPort, self._overlappedWrite, ctypes.byref(n), True)
KeyboardInterrupt

any ideas why and what to do about it or alternative working methods of switching pins off and on using Python from Windows?

regards
Simon

a = Arduino("COM32"

32? You need to shitcan whatever application is abusing your COM ports. I never get a number above 8 when connecting my Arduinos.

"Ditch" might be the nice term to use over this side of the pond :slight_smile:

i don't think that the high com port num is the problem as the Firmate_Test.exe prog works just fine (unless Python on Windows can't handle it???)

(I'm running an 8 Yr old XP machine here that has had more USB kit plugged into it over the years that I've had hot dinners)

I did reset a com port to a lower number a few years ago so might try doing it again.

regards
Simon

made no diff - switched it down to com2 - still stopped after 5 iterations :frowning:

Simon

this is getting wierder !
I'd left the python prog running since last post and just noticed my LED on in 12 going off and on - switched to my Python console and the count is now up to 43!

Simon

So consider solved, but not understood?

Not at all :slight_smile:
Over an hour the count should have got to 1800 :slight_smile:

Simon

Finally after many days of googling and trying I've manged to get a continous blink and read an analog input program running :slight_smile:

from pyfirmata import Arduino, util
import time
a = Arduino("COM2", baudrate=57600) # Baudrate must match rate set in sketch

print "wait"
time.sleep(2)
print "Go"
it = util.Iterator(a)
it.start()
a.analog[5].enable_reporting()
while True:
    a.digital[12].write(1)
    time.sleep(1)
    a.digital[12].write(0)
    time.sleep(1)
    print "analog 5" , a.analog[5].read()

I downloaded pyfirmata from here
https://bitbucket.org/tino/pyfirmata
and added to my python 2.7 install by cd ing to my download location

E:\downloads\tino-pyfirmata-4bed4280dd31\tino-pyfirmata-4bed4280dd31

and then typing

c:\Python27\python.exe setup.py install

regards
Simon

1 Like

Thanks for sharing!