Comments (6)
i.e.: one for light sensor streaming, one for a robotic controller, one for a different arduino with a servo or something.
in my case need a lot of streaming, so would need specific control.
from pyfirmata.
Never tried with more than a single board, but Have you tried declaring the 3 boards? Something like
board1=Arduino("/dev/ttyUSB0") board2=Arduino("/dev/ttyUSB1") board3=Arduino("/dev/ttyUSB2")
from pyfirmata.
I tried to use two boards at the same time but didn't work. The limitation is the pySerial library. I still don't know why, but the trick that worked for me is to start two instances of Process from multiprocessing.
from multiprocessing import Process, Queue
def one(queue):
board_one = Arduino('/dev/ttyUSB0')
#your code for board one here
def two(queue):
board_two = Arduino('/dev/ttyUSB1')
#your code for board two here
q1 = Queue()
mp_one = Process(target=one, args=(q1,))
q2 = Queue()
mp_two = Process(target=two, args=(q2,))
mp_one.start()
mp_two.start()
#interaction between this context and mp_one and mp_two through q1 and q2
If communication is necessary, you can use multiprocessing.Queue as a way to exchange objects between the main process and the other processes as you can see in the example. multiprocessing.SimpleQueue and multiprocessing.Pipe can also be employed to this end.
from pyfirmata.
Hmm, strange. If I remember correctly I've used 2 Arduino Mega's at the same time in a project several years ago without spawning multiple processes. But I'd have to dig into my code archive to make sure.
Also pyserial seems to open a file descriptor per serial.Serial
class (https://github.com/pyserial/pyserial/blob/master/serial/serialposix.py#L265), so that should work.
Do you run into any specific error?
from pyfirmata.
Yes. For example, when I tried the code below only one of the boards worked.
board_one = Arduino('/dev/ttyUSB0')
board_two = Arduino('/dev/ttyUSB1')
#boards setup here, enable_reporting and Iterator stuff
print(board_one.analog[0].read()) #prints None
print(board_two.analog[1].read()) #prints current state of pin A1
If I changed the instantiation order, the opposite occurred: board_one Ok but board_two not Ok.
Just for context, I'm working with Python 3.5.3 on an RPi running Raspbian, communicating with two Arduino Uno.
When I each board is isolated in a multiprocessing.Process instance, everything works fine.
Since I didn't find anything that could cause this problem in pyFirmata code, I searched for similar issues involving pySerial. I found some threads on StackOverflow related to open multiple ports using subprocess, threads, or multprocessing. They weren't stating that the problem was in pySerial per se, but I modified the code with their suggestion, and this did the trick.
You are correct regarding the file descriptor and pySerial, and I made a mistake on blaming pySerial. It was just an assumption. I fixed my previous comment.
Because this solved my problem, I decided not to continue the investigation to find the cause of the problem.
from pyfirmata.
Thanks for the clarification and the solution!
from pyfirmata.
Related Issues (20)
- HC-SR04 or PulseIN
- Problem with the method ping()
- Does it have any kind of unit testing?
- problem in running a RGB Led with pyfirmata
- Why does the pyfirmata closes after a certain amount of time running?
- Steps for PWM in pyfirmata
- How to get 20kg servo working in pyfirmata HOT 2
- documentation enhancement request: How to use a newly defined board layout dict?
- python 3.10.5 HOT 1
- Save data with analog read
- ImportError HOT 2
- inspect.getargs - Not available in Py 3.11 - Replace with inspect.getfullargspec HOT 6
- Error obtaining data when multiple sensors at the same time are used on a ArduinoUno
- AttributeError
- (python 3.x) ImportError: no know parent package
- Import "pyfirmata" could not be resolved
- Sending text to display no longer working? < board.send_sysex( STRING_DATA, util.str_to_two_byte_iter( text ) ) > HOT 1
- Communicating with I2C module
- Pyfirmata not working but there are no errors HOT 1
- shiftOut command missing HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from pyfirmata.