nrf24 / rf24mesh Goto Github PK
View Code? Open in Web Editor NEWOSI Layer 7 Mesh Networking for RF24Network & nrf24L01+ & nrf52x devices
Home Page: http://nrf24.github.io/RF24Mesh
License: GNU General Public License v2.0
OSI Layer 7 Mesh Networking for RF24Network & nrf24L01+ & nrf52x devices
Home Page: http://nrf24.github.io/RF24Mesh
License: GNU General Public License v2.0
Hi!
Example: Let's say I have three nodes, namely Master, A and B.
W.r.t. http://tmrh20.github.io/RF24Mesh/index.html
"In the 'mesh' configuration sensors/nodes can move around physically, far from the 'master node' using other nodes to route traffic over extended distances."
I realised that the Master can only receive data from A, and not B. I tried to look at the classes for a method to use for this multi-hop function but I am unable to find it.
May I know how should I go about doing the multi-hop?
Thanks!
Hello, is there a way to use the "Dual Headed Operation" that is available with the RF24Network library?
Thanks, Regards
It used in RF24Mesh.cpp but not defined elsewhere.
There is a way to check if the ID assigned to a node is already in the network?
I was thinking would be a good idea to implement something like this in the begin function, it could return 2 when the ID is duplicated. I'm usign something like dinamics IDs with my nodes, so will be really usefull to have this function.
I'm starting with this library so I should read a lot of code to know it, as I undertand the mesh library works with NRF24, RF24Network and RF24Gateway.
Can someone guide me a little bit how could be possible to implement something like this?
Thanks!
hello TMRh20
i just made a script for dynamic allocation of NodeID using RPi as a master and the galileo as a client.
the basic consept is that i use NodeID = 255 as a master NodeID and i have 2 functions , one server and one client that handles a header message and allocated a Never Used so far Node.
The sketch requires reboot of the client, but as fas as i know it works. I dont have the chance to try it using multiple nodes, but if you are interested i can share my code for u to see (thow it is a basic consept), but can help as an example for other to use (yet is not a material for the library i assume, but with some more testing it can be).
cheers
Spaniakos
Hello ,
I setup sensor network with one RPi (master node) and six arduino pro mini (sensor node , slave) . when I run all devicess I am waiting about 10 minutes after that I can see all nodes on Rpi . in addition I connect relay to one arduino pro mini when I send command to arduino I receive some time error and rarely I receive ok. Network works very slow. When I list node on Rpi some devices change mesh addresses. Pls help me ! What can I do ?
Thanks,
Best Regards,
I am building a sensor network for my home using nRF24L01 Radios. So far it consists of a master node that has my sheild that connect to my SmartThings Hub for my Z-wave network. This basically relays the messages it receives from the nodes to the SmartThings Hub and it processes them the way I need to.
The nodes consist so far of contact sensors and PIR Motion sensors. They run a sketch that sleeps in powerdown mode, and powers down the radio, and uses interrupts to wake up when the state of the sensor changes. That all works great, with only 4 node (all children of the master). Once I try to add 5th, it can't doesn't work because it's parent is sleeping.
Is this a limitation of the library, or is there a way to wake the node using the radio interrupt when it needs to route a message to the master? I have done a little testing, but haven't gotten far....figure I would ask before digging too deep.
I am playing with the sleepNode() function from the RF24Network Library but I can't get it to wake up to relay a message. Most my nodes aren't going to be moving around physically, so I could use just RF24Network if sleepNode() works with that, but I really like the dynamic part of Mesh, so I would like to stick with it if possible.
I can upload the sketches that I'm using, but I'm mostly just wondering if its even possible.
Thanks,
Tom
Afterthought EDIT: If a node can be awoken by sending directly to it. I would be open to implementing code that just sends to it's parent, or even sends a message to its parent that causes it to stay awake long enough to route the message. The problem I see with that is I can't even get the 5th node to connect to the Mesh because it doesn't see any nodes to connect through.
I'm trying to run battery powered nodes, so I want them to sleep as much as possible. I could have them wake every so often (even if its a minute) to allow a child to register.
I created a master (0) and one child node (1). The child node gets an address, and sends a payload (millis) to master. Master receives it, but on the childe the write returns false. Then the checkConnectivity returns false also. So it renews the address which is successful.
There must be some problem with the master ACK-ing the payload. But communication seems to work both ways, because child gets the address OK. What should I do the debug this problem?
Edit: I used RF24 library before, but as long as I remember my previous project didn't use auto ACK.
Edit2: May be I have an incompatible chip and should disable dynamic payload?
Edit3: commented out #define ENABLE_DYNAMIC_PAYLOADS in network config header, but this is even worse, no address is given, and of course no payload is on master
Hi,
i cannot seem to compile any sketch that uses RF24Mesh.h , it just hangs on "Compiling sketch".
Any clue on why this is happening ?
Hi,
Just to let you know that the current master branch of RF24Mesh only work with the Development branch of RF24Network (with is not the default one when we clone a repository).
This is due to the missing channel argument on begin() (and maybe other problems).
Anyway, thanks you very much for your work ! Mesh networking is what RF24 module missed !
Hello,
As I understanded, where are limited to 4 Node per "circle" (or, in other terms, a node, including the master, cannot have more than 4 children).
I think that maybe there is a way to extand this limit. Can you explain us why this limit exist (I think that it come from somewhere...). Maybe this thread will gather people (including me) to work on a solution to expand it.
It's, for me, the main restriction of this incredible library.
Hi
My problem is that some of my RF24 modules work in the mesh, some don't.
I have tested them with simple send/receive examples and those work, but in mesh they just get stuck at "Connecting to the mesh.." . But another set of RF24 modules I have work without any problems. Any ideas how to resolve?
Dear TMRh20,
I'm trying to setup a mesh network with 2 arduinos, one nano and one mega. By loading the examples on the nano I don't have problems. On the mega, after loading, the program hold on the mesh.update line... The mesh.begin is ok, but it does not goes beyond mesh.update...
Do you know why? I tried changing the radios but it is the same... It seems related to the arduino MEGA board... But I'm sure it works because I used a lot.
bye!
Hi!
I was wondering what would be the easiest way to put radio in continious transmitt mode, so I can test my antenna on different channels.
I tried just looping mesh.begin and mesh.update but it is not true continious transmit and it takes time for analyzer to show result.
I know that nordic datasheet gives example of this, but it is bare C and assembler code.
I believe this is very easy.
Thanks in advance!
Sometimes the master detects other nodes connected to the network. There aren't any connected besides the master, I'm sure.
What could them be?
Hi,
I was very happy when I found this library, as it offers exactly what I need for my sensor network!
I still have one problem that I haven't been able to figure out.
When connecting my first arduino to my Raspberry Pi, it is assignmed address 04. When connecting a second node, it gets 044. If I remove the first node, the second is not able to reconnect.
Clearing dhcplist.txt doesn't help.
Has onyone an idea about what might be going on?
I haven't tested it with a third node yet, but I will do this and post the results here if I haven't found the answer.
I'm happy to answer any questions!
Hi. I have a Raspberry Pi 2 as master and an Arduino as my node. I have tried examples from RF24 library (gettingstarted_call_response) and RF24Network library (helloworld_tx/rx) and they work fine.
I enabled the MESH_DEBUG in mesh config and SERIAL_DEBUG and SERIAL_DEBUG_ROUTING in network config but nothing is output in the RPi when I run the RF24Mesh_Example_Master except the start up details
sudo ./RF24Mesh_Example_Master
start
setup_address node=00 mask=00 parent=00 pipe=00
2080213: NET Pipe 5 on node 00 has address cccccccce3
2080213: NET Pipe 4 on node 00 has address cccccccc3e
2080213: NET Pipe 3 on node 00 has address ccccccccce
2080213: NET Pipe 2 on node 00 has address cccccccc33
2080213: NET Pipe 1 on node 00 has address cccccccc3c
2080214: NET Pipe 0 on node 00 has address ccccccccc3
================ SPI Configuration ================
CSN Pin = CE0 (PI Hardware Driven)
CE Pin = Custom GPIO22
Clock Speed = 8 Mhz
================ NRF Configuration ================
STATUS = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
RX_ADDR_P0-1 = 0xccccccccc3 0xcccccccc3c
RX_ADDR_P2-5 = 0x33 0xce 0x3e 0xe3
TX_ADDR = 0xe7e7e7e7e7
RX_PW_P0-6 = 0x20 0x20 0x20 0x20 0x20 0x20
EN_AA = 0x3e
EN_RXADDR = 0x3f
RF_CH = 0x61
RF_SETUP = 0x07
CONFIG = 0x0f
DYNPD/FEATURE = 0x3f 0x04
Data Rate = 1MBPS
Model = nRF24L01+
CRC Length = 16 bits
PA Power = PA_MAX
In the Arduino side it outputs a sort of network poll but it just do it over and over again.
What does that mean? or what could I be doing wrong?
Thanks in advance.
It would be really nice if all NRF23L01(+) libraries would be available for download and update from the Arduino IDE's library manager.
https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5:-Library-specification
I and I guess other people would also really like to get the latest available versions of these libraries quickly from the IDE. At the moment updating these libraries is a bit confusing because if one download the libraries (RF24, RF24Mesh and network) directly from github (Download as an .zip) they do not work together, but using the .io webpage download links did not result in the latest version (if I remember correctly).
Hello, first things first- I have been using this library recently and while I'm new to the nRF24's themselves, it's been pretty great with the nRF systems I've been building, so thank you!
Now for the cruz of the matter- I have discovered quite a weird problem by accident. I'm using the RF24 Mesh library with a master to switch outputs which receive inputs from sensors attached to 2 remote arduinos, each connected to an nRF24L01+.
The issue is while testing out my setup, I accidentally touched the nRF pin header connected to one of the sensor nodes and this caused my master device to freeze. After a tormenting time trying to find the cause, I realised the network.update() function, found inside the "mesh.update()" function caused an error.
I got this by printing messages on Serial in the following while loop:-
while ( radio.isValid() && radio.available(&pipe_num)
The result- the serial output kept on being printed non-stop. I might add, I printed the outputs of radio.isValid() and radio.available(&pipe_num) and got the following results continuously:-
"radio.isValid() = 1"
"radio.available(&pipe_num) = 1"
"pipe_num = 4"
I believe I can deduce this problem is caused by a corrupt incoming packet (I'm open to correction), but what I fail to understand is why it causes the master device to freeze. It seems to me, there is always something being written on pipe no. 4 (I hope I got the nRF24 basics right) and the code gets stuck in an infinite loop.
Now I'm sure this problem can be eliminated by being careful and keeping my hands off what they shouldn't be on (the nRF pins, in this case) but I'm concerned this issue might pop-up and freeze the automation system that I'm building for my room.
I'm attaching my .ino file so you can see the code is quite simple.
Hope you can help me out with this.
Thank you!
When I reset my master node, some nodes do not reappear the the connected node list, but do send packets to the master. This causes multiple issues. Could you please add a safeguard to block all nodes that are not registered to the mesh? Also, what would happen if two mesh networks get in range of each other?
Dear TMRh20,
first of all thank you for your well done job, I really like your project!
I'm learning howto use these nrf24L01+ modules with my arduino. I'm mainly interested in the RF24mesh, because I'd like to do a sensor network comunicating with the master node.
I'd like to know if it is possible to use the RF24audio feature through such a mesh. I have a microphone mounted on a node and I want to listen on the master node. The point is that I want to use the mesh because the microphone node can be far away from the master, so I'd like that another node in the middle could route the audio traffic.
is it possible?
Thanks!
Hi
I have a mesh network with 5 devices: 1 master (raspberry Pi) and 4 sensors (Arduino UNO R3). The master sends a hello packet every 10 seconds to all sensors in order to monitor whether all are responding properly.
But when a sensor gets a "child" mesh address like "044", apparently the sensor with Mesh address "04" is answering the hello packet directly.
To clarify, follows the configuration of the network:
NodeID: 11 - MeshID: 044
NodeID: 22 - MeshID: 03
NodeID: 33 - MeshID: 04
NodeID: 44 - MeshID: 02
When the master sends out a hello packet for the sensor with MeshID: "044", the packet is sent successfully even if this sensor is off! The sensor with MeshID "04" is responding directly without consulting the sensor with MeshID "044".
I believe that the network should not work on this way, correct? Is there any way to fix this issue?
I am using "network.write" to send the hello packet from master to sensors.
I have been using the RF24Network library recently for developing a sensor network in my home, and I came across your Mesh Library. It fits my needs quite well, as want to be able to move sensors around, without having to change parent/child relationships.
However, when RF24Mesh_Example to a node, and the RF24Mesh_Example_Master, I can't seem to get them to hear each other. The master node prints the address list every 5 seconds, but it is always empty.
The Node says "connecting to mesh..." for about 30-40 seconds, then goes to "Renewing Address" every 30-40 seconds.
If I put a timeout in the mesh.renewAddress as shown below, then it writes "Renewing Address" once at 30-40 seconds, and then keeps doing it every 5 seconds (with a 5 second timeout), so it seems that it isn't getting assigned an address from the master.
if ( ! mesh.checkConnection() ) {
//refresh the network address
Serial.println("Renewing Address");
mesh.renewAddress(5000);
} else {
Serial.println("Send fail, Test OK");
}
I had been using pins 9 and 10 for the radio, so I changed that in the example, but I also tried moving the pins to 7 and 8 with no luck.
I went back to the sketches i was running using the RF24Network Library without changing any hardware, and they work great.
I downloaded your mesh library yesterday.
Any ideas? Am I missing something simple?
Hi,
working with mesh library i have some issue with payload data.
For example with a payload of this type:
struct payload_st {
float temperature;
float humidity;
float internal_temperature;
float internal_humidity;
int ivcref;
} data_to_send;
sometimes not received.
While no issue with this payload type:
struct payload_st {
int temperature;
int humidity;
} data_to_send;
I have read that can be a problem due to the lack of a capacitor on the hardware module. is a possible case?
Thanks
Hi,
I'm finding several issues in the last release.
In my project, each time I boot a node, it starts with the temporary 255 nodeID and then the master reassign a unique nodeID in the range 1-254.
Now it happens that if I boot (not at the same time) several nodes, the master results a mesh address list in which the 255 nodeid is listed several times...
Is it due to the fact that now (in several functions, e.g. setAddress()) the nodeID is declared as a char?
Thanks in advance!
One can only assign nodeIDs from 0 to 255.
Does this mean that the network can only have 256 nodes? How can I have more nodes and still uniquely identify them?
Dear, TMRh20
So I was building a project, where I needed Mesh network.(The dynamical properties). My nodes are running on batteries. I managed to build system so, that nodes wake up few times per hour(for testing every other 8 seconds) and send data. I have two static nodes(routing), which are plugged in wall. Everything seemed to work correctly once the addresses are assigned, but at one point it started to look so, that assigning static address doesn't work.
So I have few possible issues in mind for those problems:
When the network is set, it seems to work(in some cases), but when its new or changing and trying to assign all the addresses it does not work fully or at all.
P.S. If I disable sleeping, the system doesn't work also.
I would appreciate any help.
Hi:
I make a red with RPI how master and Arduinos how childrens in a Mesh topology. The arduino nodes works with batery. I need sleep the nodes and send the data Each a Minute for power saving. My cuestion is:
if all nodes are asleep and wake up at different times, the mesh network is working?
As I can coordinate the time they wake up the mesh network to keep it running ?
thanks
Hi,
I'm building a mesh with a master and two nodes. If I check the node's list on the master it correctly displays the two node IDs and addresses.
If I try to see the mesh nodelist on the node side (using mesh.addrList[k].nodeID) I have these problems:
why?
thanks.
bye!
I loaded one node with the Mesh_Example sketch
And another with the Mesh_Example_Master
|Node| >>>>>>> |Master|
There is not problem with the communication between them.
I'm trying to expand the transmission range adding a new node in between.
ID 1 ID 101 ID 0
|Node| >>>>>> |Expander| >>>>> |Master|
I don't know if it's possible but until now I failed getting the message from the first node (ID 1) in the expander node (ID 101)
The master recognise the node 101 in the network but when I check if there is any data available to read, I don't see anything.
Is that possible to do?
What I'm doing wrong?
Great work you have done here :) Just about one of the all time easiest to use NRF libs I have come across despite its underlying complexity.
This is no longer an issue .. more an informational post for any others that come across the same problem and are scratching their heads.
I started debugging it myself then realised that it was due to me being lazy and using the 3.3v from the arduino nano FTDI chip as the NRF Vcc.
This seems to work fine if you do not want to use the serial, but as soon as you open the serial monitor
comms will fail and the device will sit scanning and failing to find nodes.
So .. just a heads up.
RF24Mesh should have timeout for every function that might just hang or fail. I really dislike the idea of a node just freezing silently so that there is nothing I could do via software to alert myself of it.
Whenever I have two connected nodes on the mesh network and I turn the non-master off, the master still displays it in the monitor.
I know that every node should release its address before shutting down, but what if something unexpected happens like dead battery or damaged node? The node wouldn't release its address in these cases. So the master could check if the nodes are alive and manage the list automatically.
Is it possible to have the master do this automatically or I'll have to do it myself?
Will RF24Mesh work in ATTiny85 ? I tried uploading the sketch but I am unable to do it. I removed all the Serial write. When I start building it just gets stuck at some point. Are any more steps needed for this ?
I'm about to move some sensors to using the RF24Mesh setup from RF24Network and was wondering how to access some of the old functions I use:
network.begin(90, 2);
radio.setRetries(15,15);
radio.setDataRate(RF24_250KBPS);
radio.setPALevel(RF24_PA_MAX);
radio.powerDown();
radio.powerUp();
can I just call them directly (not via the mesh instance) or are they not required anymore due to the self-healing nature of a mesh?
the powerUp/powerDown functions are very useful for battery setups, can they still be used, will there be side effects of cutting power to the radio e.g. will they have to rejoin the mesh every time or get a new DHCP address etc?
Is there a way you could create a simple example how to send data from master to other nodes or from node to node? It took me quite a while to figure this out as a newbie (but I still don't know how to use RF24Mesh node ID's as destination instead of assigned RF24Network addresses)
When I have nodes that leave the network (actively powered off), they still seem to linger on in the network, and no matter how long I wait, the mesh doesn't seem to look for stale entries. Is there a way to enforce this?
Thanks,
Anders
I updated all RF24 , RF24Network and RF24Mesh libraries but getting these errors:
RF24Mesh.cpp:In member function 'bool RF24Mesh::begin(uint8_t, rf24_datarate_e)'
RF24Mesh.cpp:30:11: error: 'class RF24Network' has no member named 'returnSysMsgs'
RF24Mesh.cpp:36:31: error: no matching function for call to 'RF24Network::begin(uint16_t&)'
RF24Mesh.cpp:candidate is
RF24Network.h:begin(uint8_t, uint16_t)
RF24Network.h:candidate expects 2 arguments, 1 provided
RF24Mesh.cpp:In member function 'uint8_t RF24Mesh::update()'
RF24Mesh.cpp:47:32: error: void value not ignored as it ought to be
RF24Mesh.cpp:51:13: error: 'NETWORK_REQ_ADDRESS' was not declared in this scope
RF24Network.h:251:34: error: 'uint8_t RF24Network::frame_buffer [32]' is private
RF24Mesh.cpp:56:61: error: within this context
RF24Network.h:251:34: error: 'uint8_t RF24Network::frame_buffer [32]' is private
RF24Mesh.cpp:60:47: error: within this context
RF24Network.h:251:34: error: 'uint8_t RF24Network::frame_buffer [32]' is private
RF24Mesh.cpp:63:48: error: within this context
RF24Network.h:251:34: error: 'uint8_t RF24Network::frame_buffer [32]' is private
RF24Mesh.cpp:70:43: error: within this context
RF24Mesh.cpp:In member function 'bool RF24Mesh::checkConnection()'
RF24Mesh.cpp:112:30: error: 'NETWORK_PING' was not declared in this scope
RF24Mesh.cpp:117:43: error: 'class RF24Network' has no member named 'networkFlags'
RF24Mesh.cpp:In member function 'uint16_t RF24Mesh::getAddress(uint8_t)'
RF24Mesh.h:23:26: error: invalid operands of types 'void' and 'int' to binary 'operator!='
RF24Mesh.cpp:in expansion of macro 'MESH_ADDR_LOOKUP'
RF24Network.h:251:34: error: 'uint8_t RF24Network::frame_buffer [32]' is private
RF24Mesh.cpp:155:26: error: within this context
RF24Mesh.cpp:In member function 'int RF24Mesh::getNodeID(uint16_t)'
RF24Mesh.h:25:24: error: invalid operands of types 'void' and 'int' to binary 'operator!='
RF24Mesh.cpp:in expansion of macro 'MESH_ID_LOOKUP'
RF24Network.h:251:34: error: 'uint8_t RF24Network::frame_buffer [32]' is private
RF24Mesh.cpp:179:24: error: within this context
RF24Mesh.cpp:In member function 'bool RF24Mesh::releaseAddress()'
RF24Mesh.cpp:189:39: error: no matching function for call to 'RF24Network::begin(int)'
RF24Mesh.cpp:candidate is
RF24Network.h:begin(uint8_t, uint16_t)
RF24Network.h:candidate expects 2 arguments, 1 provided
RF24Mesh.cpp:In member function 'uint16_t RF24Mesh::renewAddress(uint32_t)'
RF24Mesh.cpp:204:11: error: 'class RF24Network' has no member named 'networkFlags'
RF24Mesh.cpp:207:37: error: no matching function for call to 'RF24Network::begin(int)'
RF24Mesh.cpp:candidate is
RF24Network.h:begin(uint8_t, uint16_t)
RF24Network.h:candidate expects 2 arguments, 1 provided
RF24Mesh.cpp:218:11: error: 'class RF24Network' has no member named 'networkFlags'
RF24Mesh.cpp:In member function 'bool RF24Mesh::requestAddress(uint8_t)'
RF24Mesh.cpp:226:34: error: 'NETWORK_POLL' was not declared in this scope
RF24Mesh.cpp:228:10: error: 'class RF24Network' has no member named 'multicast'
RF24Network.h:251:34: error: 'uint8_t RF24Network::frame_buffer [32]' is private
RF24Mesh.cpp:241:39: error: within this context
RF24Mesh.cpp:280:19: error: 'NETWORK_REQ_ADDRESS' was not declared in this scope
RF24Mesh.cpp:286:65: error: no matching function for call to 'RF24Network::write(RF24NetworkHeader&, uint16_t_, unsigned int, uint16_t&)'
RF24Mesh.cpp:candidates are
RF24Network.h:write(RF24NetworkHeader&, const void_, size_t)
RF24Network.h:candidate expects 3 arguments, 4 provided
RF24Network.h:write(uint16_t)
RF24Network.h:candidate expects 1 argument, 4 provided
RF24Mesh.cpp:294:28: error: 'NETWORK_ADDR_RESPONSE' was not declared in this scope
RF24Network.h:251:34: error: 'uint8_t RF24Network::frame_buffer [32]' is private
RF24Mesh.cpp:311:31: error: within this context
RF24Network.h:251:34: error: 'uint8_t RF24Network::frame_buffer [32]' is private
RF24Mesh.cpp:313:42: error: within this context
RF24Mesh.cpp:337:28: error: no matching function for call to 'RF24Network::begin(uint16_t&)'
RF24Mesh.cpp:candidate is
RF24Network.h:begin(uint8_t, uint16_t)
RF24Network.h:candidate expects 2 arguments, 1 provided
RF24Network.h:In member function 'void RF24Mesh::DHCP()'
RF24Network.h:251:34: error: 'uint8_t RF24Network::frame_buffer [32]' is private
RF24Mesh.cpp:446:25: error: within this context
RF24Network.h:251:34: error: 'uint8_t RF24Network::frame_buffer [32]' is private
RF24Mesh.cpp:464:33: error: within this context
RF24Mesh.cpp:517:25: error: 'NETWORK_ADDR_RESPONSE' was not declared in this scope
RF24Mesh.cpp:530:77: error: no matching function for call to 'RF24Network::write(RF24NetworkHeader&, RF24Mesh::DHCP()::addrResponseStruct_, unsigned int, uint16_t&)'
RF24Mesh.cpp:candidates are
RF24Network.h:write(RF24NetworkHeader&, const void_, size_t)
RF24Network.h:candidate expects 3 arguments, 4 provided
RF24Network.h:write(uint16_t)
RF24Network.h:candidate expects 1 argument, 4 provided
RF24Mesh.h:21:27: error: invalid operands of types 'void' and 'int' to binary 'operator!='
RF24Mesh.cpp:in expansion of macro 'MESH_ADDR_CONFIRM'
Error compiling
Is there a way to know if a message was routed or it comes directly from the node?
Dear TMRh20,
I'm trying to send quite long strings (500-1000 characters or more) over a mesh network.
First question is: can I send all the characters in one big payload? Which is maximum size supported by the mesh.write/read function?
Otherwise, is it better to send character by character? In this case, I have to avoid ACK (for faster communications) or I can let them enabled? When declaring the msg_type, which is the character to set in order to avoid ACK payload?
thanks.
Bye
I'm developing an application with a Raspberry Pi 2 as a master, and several Arduino Nano as nodes.
If I try using the basic mesh examples with an Arduino as the master, it works fine. If I use the RPi as a master, the nodes keep trying to renew their addresses, but nothing happens.
If I then start the Arduino master alongside my RPi (yes, I know there should only be one master), I start getting the messages to the RPi too.
Working with the RF24Network examples work like a breeze, so I assume it's not a hardware problem.
Regards,
Anders
With the current RF24Network functionality, nodes are generally limited to direct communication with their parent or direct child nodes, although they can route traffic to any node. This allows the radios to use the in-chip functions of auto-acknowledgement and auto-retry, increasing reliability and removing the need for associated devices to perform these functions. This limits the general structure to an underlying tree topology, with a maximum of 5 'child nodes' per parent, but it can be dynamically reconfigured.
Nodes have the capability to work around these limitations, but small integrated devices generally do not have the memory and program space required to make more advanced routing or addressing decisions.
The datashee at https://www.nordicsemi.com/eng/Products/2.4GHz-RF/nRF24L01P diagrams this 'multiceiver' connection.
Questions:
Hello!
I was wondering if two meshes can work nearby, for example have two masters and several nodes that can all see each other. Is there a way to set a unique address or ID to each network and make each node only "see" the nodes of same network and prevent one network from seeing the other?
Thanks!
Dear TMRh20,
I was looking at your new setChild function. Is it correct? Because in RF24Mesh.cpp, I don't see any difference if the "allow" parameter is true or false... I.e. it seems that the FLAG_NO_POLL is not triggered by the "allow" parameter...
I'm doing it wrong?
It would be really nice to have a list of libraries that can be used alongside RF24* libraries without worrying about compatibility issues. Supported libraries could have three status' "Fully compatible", "Possible conflict" and "Incompatible". This would be really useful for those who wish to use many libraries at once.
On zero level, modules can connected to node 01, 02, 03 or 04 perfectly.
When adding the fifth module, it randomly connect to one of zero level node.
Even it successfully connect to zero level node, sometimes the connection lost with the result -1, -2 when do mesh.write.
Anyone face this the same problem an what can I do ?
during the mesh search I think power should start out low, and increase the level as needed upon fail.
Today someone told me about the feature in zigbee, to do a mesh without need of a master node. Would be that possible with the nrf24 and your library/ies?
Seems easily to know the advantages, but what could be the disadvantages to a mesh with this characteristics with this modules?
Could you please tag the library and push the tag so that it can be submitted to the library manager repo?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.