Go Down

Topic: Announcing: The RD-11 Radio Storage System - simple comm between Arduinos! (Read 3365 times) previous topic - next topic


Dear Friends,

I have been working for many months to create the following product. It is a small $25 board which attaches to Arduinos and gives them very simple and easy to use radio communication between them.

Full documentation is available at http://www.swiftEnterprises.biz, but let me describe it very briefly here as well:

Once connected, it acts like a tiny disk. You store "datums" onto it, each datum has a "name" and a "value". There are just two calls: RD11_read and RD11_write. For example, you could do:

  analogRead(2,v);  RD11_write("outside temperature",v);

This writes a datum called "outside temperature" and a value (v) to the RD-11. Now here is where it gets interesting: WHAT YOU WRITE TO ANY RD-11 YOU WRITE TO ALL OF THEM! Think "Disk drive of the Borg". Thus, what is written at one system can be read back at any other system. EG, any system in the same area network as the above could do:

  t = RD11_read("outside temperature");

Simple, eh? Read/write to common variables. The RD-11 OS handles everything. The Arduino programs merely read and write data. One writes it, another reads it, and they have thereby communicated.

Well, check out the website and let me know what you think, and especially, how many you would like to order!!!


Steven Swift
CEO Swift Enterprises


The concept, at least as best as I can understand, is very interesting. Kind of a wireless distributed database ?

However my impression is that this is not going to be a open source project/product, is that correct?

No offense meant, but I'm not much interested if it's not. The open source nature (hardware and software) of the Arduino is what initially attracted me to the Arduino platform and it is those projects that build on and contribute to that concept where I want to invest my time,money, and support. Without published schematics and software, It's just not attractive enough to me.

However I do wish you success for your product.



Hmm. Ok.

NO offense, but I don't think I would touch this with a 10 meter Cattle Prod.

From a program interface standpoint, there are 2 calls:

For example, an RD-11-equipped Arduino could execute the following:
RD11_write("Steve's Favorite Number",17);

That seems inefficient. That text tag needs to be sent over whatever comm link to the system and propagated to all points. Just how many of these "datum" points can you store? How long does it take to store them?

And any other RD-11-equipped Arduino could now read that datum, as follows:
int favnum = RD11_read("Steve's Favorite Number");

The ONLY way that call could work is if it's a blocking call. And one that blocks for a while. First, it has to transmit the text tag to the system, then find the data... then return it. All the while the calling Arduino is drooling. And then, how does the receiver know this is current data? Is it the local copy of the data? What's the timeframe for updating the data?

Were it Open Source, (It appears it is not) I could modify it to fit my needs. (For example, adding a callback to the RD11_read call to make it non blocking.)


Retrolefty & TeslaFan, I have clarified my documentation (www.swiftEnterprises.biz) to reflect that the hardware (pcb) and software IS open source. Several of the parts within, namely the radio receiver, transmitter, and network controller chip, purchased from elsewhere, are proprietary to their manufacturers. This is clarified on the website.

And TeslaFan, you are correct, all packets contain the "name" as well as "value" and a few more bytes of overhead for error correction etc. "Steve's favorite Number" is 24 bytes, its value 4 more, and with overhead let's just round way up and call it 50 bytes total. We are running 5000 bps or 500 bytes/sec. So to answer your question, a latency therefore of about 1/10 second. Keep datum names short and you may see 1/20 second.

The total database is not stored on any one RD-11, but cached at each. Once a datum is read by your Arduino host, the attached RD-11 could delete it until requested again. It uses an LRU cache replacement scheme. At least one copy of any datum will always exist. The space used by each datum is the same as the transmission packet, about 50 bytes, or about 20 datums per 1K of memory. I currently have just over 1K of free memory, so to answer the second question, about 20 datums, depending on size, multiplied by the number of systems. I am already experimenting with using a system which has far more memory (about 8x), which may be available for Version 2.

You are correct that this kind of network organization is not optimally efficient. I have traded that off for simplicity of operation. I am giving priority to two basic design goals:

(1) it must be extremely simple to unsophisticated programmers. For example, I would venture a guess that 90% of the people using Arduinos cannot define "blocking call". Thus I have taken great pains to keep it to just "read" and "write".

(2) we are focusing on simple and small systems.

Also, I have clarified the "Future Features" page to contain a section which explains about blocking. And for the most part, you are wrong, it will not block. It does use a "timeOut" to allow the program to use "old" values for a fixed time, like 1/5 second (default), or longer, and re-transmits BEFORE that time is up so that we should not have to block except the first access, or when there is heavy network traffic.

Also in version 2, I have a number of efficiency improvements envisioned as well. One very specific one is to assign a number to the last 128 "names" transmitted, and in future transmit only that single byte instead of the entire name. You can "work around" this now by using short names on high-trafficed items! We also have a "no error correction" mode which still includes a parity bit on all bytes but eliminates anything more than that and which shortens the packets still farther. A "name" reduced to one byte and a value of 2 bytes, with no other overhead but a packet start, is now 4 bytes instead of 50 and has a 1/125 second latency on our 500 byte/sec radio.

I can envision a huge number of applications for the RD-11 with just 2 or 3 systems, such as where a sensor or two is needed far from the main device. And I can support a dozen or two systems easily. I think that covers a huge need among Arduino experimenters. If you need to transmit gigabytes of data among hundreds of systems, look elsewhere.

Hope that all helps,

Steven Swift.


what's the difference w.r.t. a 15$  Aurel TX/RX module, apart from the SW?
Any picture?


The Aurel module is a Zigbee system. It operates at 2.4 GHz. I am using these from Sparcfun, which operate at 433 MHz.

The zigbee system is much faster with a similar range (the spec sheet from Aurel says 70 meters in open air, the ones I'm using say 100 meters).

Yes, the ENTIRE difference is the software. The Aurel system and others like it are very complex. There are many dozens of "commands" to set it up. With the RD-11, a simple system can get up and running within minutes. With more complex systems you will be debugging the radios for days or longer, with many calls to "experts" to figure it out. I've been there and done that!

Again, I am of the firm belief that the simple software model of:

  v = rd11_read("name");

is by far the simplest way to present a network. There are no "channels" to "connect" to, no "sockets", no "ports". The RD-11 (and WIZ-11E) handles all that internally. (So you don't have to!)

In future I may switch to other radio chips, like the Aurel and others. This would be transparent to all RD-11 users and shoot speed way up. For now, 5000 bps (10,000 on < 3 meters) will solve a lot of user situations just fine.

Steven Swift


Several cases in point. In this forum, just today we see "Bluetooth Nightmares". The author says:

"I've been trying to get Bluetooth up and running on my project for quite a while now... I've looked all over at guides for the BT modems, but I can't seem to communicate with the modules. One by one, I successfully paired with the module on my netbook (green light on the module), found the COM ports, opened up hyperterminal, and tried sending "$$$", "+++", and just about every other command I could find without any response from the module. I'm going to try configuring the module with commands from the Arduino, but after that I'm out of ideas... Even if I get the BT modules communicating, I'm uncertain of how to set up the BT modules so they will pair and communicate with each other. I figure one needs to be set up as master, the other as slave, but that's close to the limit of my understanding."

BT has a lot of commands, modes, configuration parameters. For Pete's sake, the guy just wants to get two Arduinos hooked up, one reading and transmitting the value of a joystick, the other receiving those values. This could not be simpler than the RD_11 code. Something like:
    analogRead(2,joystickX); analogRead(3,joystickY);
    rd11_write("jx",joystickX); rd11_write("jy",joystickY); // other other variables transformed from these
And at the other Arduino, almost identical code to receive them. He would be up an running in minutes!

Another case in point, in today's entries in this forum: "Debugging XBEE doorbell". Again, a 2-Arduino system where one reads and one writes. Couldn't be simpler than to wire up a pair of RD-11s (cheaper than Zigbee shields) and he'd be up in half an hour.

Steven Swift.


I think this could be a useful gadget as long as you play within the limitations. In situations where you only have one publisher and N subscribers, say an outside temp sensor, door bell etc.

I too prefer open source but won't exclude something if it's not, although I have to say for me to design something into a project it has to be either OS or from a big company that will (hopefully) still be around in five years.

I've had some interest in something I'm doing at the moment, but there's no way they will entertain the chance of being orphaned with some hardware they can't replicate and/or fix when, as they say, "I move on to another hobby".

Everything I do is OS anyway so it doesn't make any difference to me, but it's worth thinking about.

Rob Gray aka the GRAYnomad www.robgray.com


Graynomad, this has been clarified. We ARE open source (mostly). Some of our component chips are proprietary, but everything that runs in your Arduino and all of the PC Board is fully open source.


Steve, this is a nice concept, which I've thought about but never gone beyond that.

This is a lot like "Shared Memory" between processors.  Back in the day I tightly coupled dissimilar minicomputers and PCs by making "memory card" replacements that were really opto-isolated shared memories. And then I/O on large test systems simply became memory moves to what "looked like" a memory card.  IBM Customer Engineers were not happy, but they got over it  :)

This is more Object Oriented with the identifiers of ad hoc data. 

Cool idea.

I'll be in touch about some other ideas.....


Thoughts about "Open Source": Arduino is open source. But it incorporates significant sub-assemblies that are proprietary. Like an ATMEL microcontroller, a non-trivial USB interface chip, proprietary voltage regulators, resonators etc.

If the sub-assemblies are easily available, I don't think that their inclusion in an "Open Source Design" detracts in any significant way from the Open Source concept.

Indeed few really interesting devices can be made without utilizing such sub-assemblies.

If they're second-sourced, so much the better.   But I don't think the ATMEL chips are...


Go Up