Full duplex wireless com (nrf24l01+HC12) is possible?

Why have to be full-duplex?

I have two Arduino, a controller-side(Master) and a been-controlled-side(Slave). The Master randomly sends commands to the Slave, and the Slave constantly reports status info back to the Master (at a very high frequency).
I had been used a pair of "nrf24l01" to handle a 2-way com(Rx&Tx) until I realized that there is a chance that both Master and Slave could stop listening and start sending at the exact same time, which resulted in package loss. (I'm also using AckPayload to verify, which again, increased the Rx/Tx swap frequency. It makes the system more unstable.)

Is nrf24l01+HC12 possible?

I saw a thread on this forum using four HC-12 to build full-duplex com, but due to those four HC-12 are working in adjacent bands, the jamming is almost inevitable.
The commanding procedure (Master --> Slave) needs to be ensured and verified which the Automatic Packet Handling on nrf24l01 gonna help.
The reporting procedure (Slave -> Master) doesn't contain sensitive info so that any radio module could be applied.

Why do I think this should work/could be better than before?

  1. The nrf24l01 and HC-12 are working on totally different frequencies, which navigated the jamming issue.

  2. The nrf24l01's RF24::writeAckPayload helps command reading-back(verify) without stopping listening.

  3. HC-12 uses serial com and doesn't snatch SPI pins. I'm using Mega2560 which has FOUR hardware serial for me to mess up.

  4. The nrf24l01 is always on Tx, and HC-12 is always on Rx. Data won't be lost when Rx/Tx swaps on a single module because they simply don't have to.

PS Why don't I use an algorithm or setup protocol to control R&T?

I know that such conflict could be solved by modifying the code, but...

  1. It significantly increased the program's complexity, which may cause me to lose hair. I'm using Arduino for simplicity and efficiency.
  2. Increased system process cycle time. More code ≈ more time.
  3. Increased lag between commanding and executing. Caused by 2 and the protocol itself.

Please advise me if you have a better alternative, or you think it's not gonna work(please tell me why).

Thanks!

what qualifies as "very high frequency"? 10 messages per seconds? 1000 messages per second?

The reporting frequency is not a key point, you could just imagine a speed which higher enough to have a conflict with Master Tx.

The theoretical probability of conflicts will drop when reporting frequency drops, but I want to wipe it out totally.

As long as I don't switch to full-duplex, the possibility of this conflict will still remain.

Radio communication in general is half-duplex if TXing and RXing on the same channel/freq so there's is really no way around it unless you double up your hardware

Maybe I didn't make myself clear, sorry for my bad English.

I did doubled the hardware.

For Master:  Tx > nrf24l01 (Rx Ack ONLY);  Rx > HC-12 
For Slave:   Tx > HC-12;                   Rx > nrf24l01 (Tx Ack ONLY)

*Ack = ackPayLoad(), use for command readback

Is that what you mean?

My point is you can't achieve full-duplex on a single pair of TX/RX on software alone, hence you need a separate TX/RX pair for each direction

As hzrnbgy writes, wireless communications are generally half-duplex.

It doesn't have to be all that complex. Have the slave only respond to a request from the master. Send commands as you do now, but send a "report" command at a defined interval.

Hmmm... I think that I did separate them.

Two wireless modules for each Arduino, four wireless modules for Two Arduino.

Each wireless module only handles Tx OR only handles Rx.

So presumably you have tested the results of having a high power 2.4Ghz transmitter sending right next to a 434Mhz receiver and vice versa of course.

What degree of sensitivity loss did you see ?

If the Master keeps commanding, and the commanding package has the highest priority, all cycle time will be crammed by command packages, how can I send out the "request info" package to get status info?

If I disable the priority system, the command package will be delayed(which shouldn't be) because an in queued "request info" package is ahead, how can I avoid the delay?

I'm not sure where you get this idea from? How long are your command packets and at what interval do you transmit them?

I'm not a pro for radio com, so I just googled.

Someone said "the effective range will be limited to about 100m."
Is that correct?

100m works for me, it shoud be fine.

This is designed to pass a final load test. Which test if this communication system could handle some heavy flows(lots of command) and bad coincidences(both side start Tx at same time).

Command package size based on command itself, and sending frequency based on when a command has been published (human input, time based event, event based event...)

Depends, maybe maybe not.

But before you go to far you needs to test it.

This assertion;

The nrf24l01 and HC-12 are working on totally different frequencies, which navigated the jamming issue.

May not be correct.

Simple radio modules rarely have highly tuned or selective inputs. Its entirely possible that a HC12 transmitter blasting away right next to a NRF24 receiver will make the NRF24 receiver as deaf as a post, and vice versa.

That doesn't mean anything. I really think you should figure out your constraints before going any further.

Reading Your post it looks like 2 masters running.
Do some research for communication protocols.
One common way is that the master sends a request for slave data and sets a timer variable in case of the slave not responding. Then the master looks for slave data. When received, the master sends and acknowledge to the slave......

Yes, that's correct. Both side are actively sending info to the other side, that's why I'm asking for full duplex. The “master/slave” is only a call sign, there is no real master.

For the protocol, please read #11 see if you could solve the conflict.

Commercial and amateur radio systems that are full-duplex use 2-3 coaxial filters between the transmitter and the antenna. Then a different set of 2-3 coaxial filters between the receive antenna and the receiver. When the filters are properly tuned to pass ONLY the needed frequency then full duplex communication is possible.
Where the OP fails is understanding the given frequency for either the transmit or the receive is the center point of a BELL shaped curve. ALL frequencies on both sides of the center frequency are transmitted or received, but at a very reduced level. But be sure they are still there unless filtered out.
The cheap devices the OP wants to use do not have ANY external filtering.
Paul

This is a XY problem.

This is the root cause. If you won't listen to our advice I don't see how we can help.