PickPack version 1.2 released - Meshed packet radio network

Hi all,

PicPack version 1.2 has been released, with updated RF packet radio code.

Plug in a Nordic nrf2401a or nrf24L01 module into a SparkFun terminal development node and start creating your own meshed network. Nodes can move, require no configuration (other than setting the actual local node address) and the network is self-discovering.

See http://embeddedadventures.blogspot.com

Fun! Did you read any of the papers on mesh routing and AODV (which I think is what zigbee ended up using)?

The sort of non-routing routing protocol you developed reminds me also of the way ham radio APRS routing seems to be done in practice — a “flood” routing with a hop limit, usually manually adjusted.

two other protocols in addition to AODV, all adapted from wireline RFCs from IETF, are OSPF and TBRPF. The latter is a leading candidate for the languishing 802.11s meshing protocol standard.

Everywhere I looked it seemed that the protocol suggested was really trying to do something quite complex - somewhat beyond what a 16f88 is capable of. 384 bytes is not a lot of memory.

Dymo looks pretty neat - http://ianchak.com/dymo/ - looks like Motorola were looking to create their own method of moving data between mobile nodes. Except that, once again, it’s talking about routing IP packets (including ipv6 addresses!). Mobile phones have compete IP stacks in them these days, but that’s a big ask for a microcontroller.

While the picpack protocol is quite simple, it does work pretty well. The improvements would be around reducing the about of chatter in the network - while this improves reliability up to a point, with too much chatter you will end up with collisions and hence reliability goes down. Of course, this all improves with the use of chips with proper carrier detect, eg cc2500, although that chip has its own share of problems.

Some relatively straightforward improvements would be:

Directed Routing


Track:

dest_addr, next_hop_addr

Store this from the ack that comes back. A new packet type with a bit to indicate that this packet shouldn’t be rebroadcast but should only be received by the next_hop_addr even though they’re not the end recipient. If this packet doesn’t make it through after a couple of tries, fall back to broadcast / rebroadcast model.

Rebroadcasted list


Track:

source_addr, pkt_id (identifies a packet uniquely)

When rebroadcasting a packet, check to see if we haven’t already forwarded this packet before. This covers the case when several nodes rebroadcast, this is heard by a third node and then rebroadcast twice (or more) from this third node. Would be useful in very dense meshes.

Broadcast packet


It would be handy to be able to broadcast a packet to all nodes in the network. Packet would be accepted by local node and also rebroadcast, eventually reaching all nodes within the three-hop limit.

regards

Ian.