Arduino Node Sketch Compatibility

Hello everyone. I've been successfully using the Arduino node until now. I have a query regarding its compatibility.

Does the Arduino node only work with the StandardFirmata/StandardFirmataPlus sketches loaded onto the Arduino board, or does it work with the other Firmata sketches (AnalogFirmata) as well?

yes is only supports the standard firmata. Most often people find it almost as easy to write their own application specific Arduino code and then send direct via generic serial or ethernet, etc.

Thank you. I guess I'm going to try Serial then. Is serial communication as effective as Firmata in terms of speed of sending data?

Yes. Firmata is just using the same serial connection after all.

Is serial communication as effective as Firmata in terms of speed of sending data?

Firmata is limited to ca. 56000 bit/sec. And it has lot's of overhead, because it's using a MIDI standard to communicate.

Serial speed can be set as you wish.

  • You can start with "standard" 115000 baud,
  • or higher = 1Mbit
  • or even reduce it for long distance cable (30-1200m) to 9600 baud.

What many people forget to set:

  • parity &
  • flow control

Personally I like "xOn/xOff" flow control + "Even" parity bit set, because it worked best in "electrical noisy" environment (pizza kitchens) while I was using Serial-POS-printers 10-20 years ago.

I also recommend (and really, I'm shocked, why nobody does) to start the communication with a specific identification string. Like a "board name" or "serial-number".

Why?

  • Because whenever you plug your Arduino into a different USB > it will change the path to that device.
  • So if you are using other things too, or more of the same board, they can accidentally mixed up!

If this is only a "hobby project", than it does not matter. But in real life scenarios:

  • Imagine you are trying to switch a light bulb at Pin7 >>
  • but an other board is responding and may cause and accident. (Like cutting off a head of a baby under a roller shutter or exploding the heating system...)

A good way to avoid that is to access it via /dev/serial/by-id. If you run
ls /dev/serial/by-id
you should be able to see the device. For example a usb serial device might appear as:

ls  /dev/serial/by-id
usb-1a86_USB2.0-Ser_-if00-port0

Then in the serial node you can use
/dev/serial/by-id/usb-1a86_USB2.0-Ser_-if00-port0
Usually that is a unique name that does not change if the device is unplugged and plugged back in again, wheres in that situation it might well move from /dev/ttyUSB0 to /dev/ttyUSB1

Yes, that is true (and I know about it) but:

  • What about Windows + iOS ?
  • How can you prevent such accidents, if the programmer does not take responsibility to put +2 lines in the code?

No idea, sorry. Don't use them.

Any system that, if it goes wrong, can cause injury or significant damage must have multiple independent safety controls, so that no one fault can cause the problem. In fact in the case of serious injury then probably there should be more than two independent systems. In the case of the boiler exploding then there should be (and certainly will be in any correctly installed system) safety valves that open in the case of overpressure. Mine has at least three such safety valves I think.
Another example with less serious consequences is my home heating control system. I have left in all the standard systems (room stats and so on) and added mine in such a way that that any fault in my part of the system should do no worse than leave the heating off, or fall back to using the room stats, which are set a little higher than the normal room temperature that my system controls.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.