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
a.pin_mode(12, firmata.OUTPUT)

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


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\", line 12, in <module>
    a.digital_write(12, firmata.HIGH)
  File "build\bdist.win32\egg\firmata\", line 91, in digital_write
    self.serial.write(chr(self.digital_output_data[port_number] >> 7))
  File "C:\Python27\lib\site-packages\serial\", line 268, in write
    err = win32.GetOverlappedResult(self.hComPort, self._overlappedWrite, ctypes.byref(n), True)

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


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 :)

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 :(


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!


So consider solved, but not understood?

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


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

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

print "wait"
print "Go"
it = util.Iterator(a)
while True:[12].write(1)
    print "analog 5" , a.analog[5].read()

I downloaded pyfirmata from here and added to my python 2.7 install by cd ing to my download location


and then typing

c:\Python27\python.exe install

regards Simon

Thanks for sharing!