Uncategorized

NRF24L01 Q&A and Chat record V0.1

Asked 
Active 2 months ago
Viewed 225 times
1

I have recently bought two nRF24L01+ radio chips for communication between my Raspberry Pi and Arduino. I will be solely using this from Raspberry towards Arduino.

The tutorial I followed: https://circuitdigest.com/microcontroller-projects/wireless-rf-communication-between-arduino-and-raspberry-pi-using-nrf24l01

My problem is: I don’t receive anything. The Raspberry seems to send everything properly (i.e. “H”, “i”, “0”, … etc) Serial output is listed below. Can someone please help me?

The code I am using for Raspberry:

import RPi.GPIO as GPIO
import time
import spidev
from lib_nrf24 import NRF24

GPIO.setmode(GPIO.BCM)

pipes = [[0xE0, 0xE0, 0xF1, 0xF1, 0xE0], [0xF1, 0xF1, 0xF0, 0xF0, 0xE0]]

radio = NRF24(GPIO, spidev.SpiDev())
radio.begin(0,25)

radio.setPayloadSize(8)
radio.setChannel(0x76)
radio.setDataRate(NRF24.BR_1MBPS)
radio.setPALevel(NRF24.PA_MIN)

radio.setAutoAck(True)
radio.enableDynamicPayloads()
radio.enableAckPayload()

radio.openWritingPipe(pipes[0])
radio.printDetails()

sendMessage = list(" Hi")
while len(sendMessage) < 8:
    sendMessage.append(0)

while True:
    start = time.time()
    radio.write(sendMessage)
    print("Sent the message: {}".format(sendMessage))
    radio.startListening()

    while not radio.available(0):
        time.sleep(1/100)
        if time.time() - start > 2:
            print("Timed out.")
            break

    radio.stopListening()
    time.sleep(3)

The code for my Arduino:

#include<SPI.h>                   // spi library for connecting nrf
#include<RF24.h>                  // nrf library

RF24 radio(9, 10) ;  // ce, csn pins    
void setup() {
  Serial.begin(9600) ;     // start serial monitor baud rate
  Serial.println("Starting.. Setting Up.. Radio on..") ; // debug message
  radio.begin();        // start radio at ce csn pin 9 and 10
  radio.setPALevel(RF24_PA_MIN) ;   // set power level
  radio.setChannel(0x76) ;            // set chanel at 76
  const uint64_t pipe = 0xE0E0F1F1E0LL ;    // pipe address same as sender i.e. raspberry pi
  radio.openReadingPipe(1, pipe) ;        // start reading pipe 
  radio.enableDynamicPayloads() ;
  radio.powerUp() ;          
}

void loop() {

  radio.startListening() ;        // start listening forever
  char receivedMessage[8] = {0} ;   // set incmng message for 32 bytes
  if (radio.available()) {       // check if message is coming
    radio.read(receivedMessage, sizeof(receivedMessage));    // read the message and save
    Serial.println(receivedMessage) ;    // print message on serial monitor 
    Serial.println("Turning off the radio.") ;   // print message on serial monitor
    radio.stopListening() ;   // stop listening radio
    String stringMessage(receivedMessage) ;     // change char to string
    delay(1000);    // delay of 1 second 
    Serial.print(stringMessage);   // print received mesage
  }
  delay(10);
}

Output: just a loop of

Turning off the radio.

Turning off the radio.

Turning off the radio.

I have checked my wiring three times over…

1

This fixed my issues with Raspberry Pi 3 B+ and Raspberry Pi 4 In lib_nrf24.py in function:

def begin(self, csn_pin … after self.spidev.openadd:

self.spidev.max_speed_hz = 4000000

Did you find out an other solution?

—-
 Rpi SPI nRF24L01+ 2.4GHz Transceiver Module Send Message to Arduino Problem

StevenCellistI have recently bought two nRF24L01+ radio chips for communication between my Raspberry Pi and Arduino. I will be solely using this from Raspberry towards Arduino. The tutorial I followed: circuitdigest.com/…

StevenCellist

StevenCellist
Figured my Arduino gives that output even while the Raspberry is turned off…
Also figured that my wireless mouse and keyboard might be interfering but unplugging and turning off those didn’t make any difference
tlfong01

tlfong01
2938
Hi @StevenCellist, Welcome and nice to meet you. Ah, let me see. If Arduino gives same output even Rpi is turned off, then Arduino is not receiving anything or just rubbish from Rpi, and so the problem is perhaps on the Rpi side. Let us start doing troubleshooting the Rpi side: (1) Make sure the SPI software and hardware wiring is OK, by doing SPI loop back. (2) Make sure nRF24L01 is working, by pinging, ie, read config register 0x00 should read 0x80. Of course you can skip (1) and just do (2) If you read 0x80 from nRF24L01’s register 0x00, then SPI is OK. / to continue, …
(3) Read the tutorial “Wireless RF Communication using nRF24L01 Module -Abhiemanyu Pandit 2019aug01, circuitdigest.com/microcontroller-projects/…, (4) Run the tutorial’s python program for Rpi. The statement “radio.printDetails()” should print the “details” does it?
References: (1) nrf24l01 Features – components101 components101.com/wireless/nrf24l01-pinout-features-datashee‌​t (2) nRF24L01+ Single Chip 2.4GHz Transceiver Product Specification v1.0 – Nordic 2008 components101.com/sites/default/files/component_datasheet/…
Ref (1) says the following: “The nRF24L01 module is a bit tricky to use especially since there are many cloned versions in the market. If you are having any problem with getting it work, try adding a 10uF and 0.1uF capacitor in parallel to the Vcc and Ground pins. Also make sure the 3.3V supply is clean and does not have any noise coupled in it.”
Then read the GitHub for the bad news: only for “virtual GPIO”, no longer supported. nRF24L01 Python Library – BLavery/lib_nrf24 2018 may V0.3 beta, no longer being maintained by the original author github.com/BLavery/lib_nrf24 For Raspberry Pi and virtual-GPIO. NRF24: strictly 3.3V supply!! Although logic pins are 5V tolerant.
Docs says the following: “This is BETA only so far. Everything has worked earlier, send, receive, including two RF24 on one host, and including RPI, virtual-GPIO and regular arduino sketch, all talking to each other. But recent testing has been only LIBRARY plus “example-nrf24-pair.py” on virtual-GPIO, so other parts are yet to be re-verified.”
# StevenCellist, So are you using “Virtual GPIO”? Have you found any updated program NOT using virtual GPIO? The Rpi python program looks not that hard. Perhaps you can rewrite it not using virtual GPIO. PS – I NEVER heard of “virtual GPIO”, so I asked.
I visited GiHub and found it was 5 years old, tweaked from the BegaBone program. So I don’t think it worth your time playing with a Non rpi hardware compatible, tweaked program and NO LONGER supported. Find an updated Rpi program and let me know. Thanks and cheers.
Just now I searched this forum for “nRF24L01” and found 100+ posts. I skimmed and found the follow best for troubleshooting: “Major trouble with nRF24L01+ controllers and the RF24 library – Asked 5 years ago Viewed 8k times” (1) raspberrypi.stackexchange.com/questions/23441/…. Many of the 100+ posts above had not answers, but this very good one by @jhallard summarized the causes of trouble and also gave a good recommendation for testing.
As I said earlier, I have done the following last evening: (1) Used SPI loop back test to make sure that SPI wiring is working, (2) Use a one line python statement to read the nRF24L01’s config register at address 0x00 and read successfully the default POR contents of 0x80. Next step is to try any tutorial but NOT your recommended one, for the reasons I gave above. In case you read the the above post @jhallardand and wish to try another tutorial recommend there, and still have problem,s I am happy to reproduce your setup, and see if I overlooked any other causes of trouble. Cheers.
If you read the 100+ old posts on nRF25L01, you might find there a couple of traps for newbies, including the following: (1) If you started your project with 5V Arduino and any Arduino compatible nRF24 modules, you might forget that Rpi is 3V3 only and power for Rpi is indeed 5V, but be WARNED that the nRF24 module for Rpi (but not for Arduino) might not have any 5V to 3V3 step down regulator, so you MUST use 3V3 power for the module, otherwise your nRF24 might FRY IMMEDIATELY!
(This is the reason I suggest you to loopback test SPI and ping (read nRF24 config register to make sure your nRF24 is not fried). (2) As pointed out earlier, there are quite a lot of different nRF25 modules on the market, some have 8 Bit connector, some 12 bit, mine tested OK for Rpi4B has 9 pins, including the antenna pin!, So you to very carefully compare and contrast the version you have to make sure you have wired correctly, beside using 0.1uF, 1/10uF to bypass the power supply fi your nRF is a low quality one without any regulator or bypass/decoupling caps.
Your module, if cheapy module from eBay might not have the necessary pull up resistors on module. For example, the interrupt pin or select module send/or receive mode, if no default pull up/downs, left floating, might be wrongly set to receive mode, instead of send mode which is what you want. Otherwise your nRF might not send, even your program is correct. (3) Some modules have confusing labels CEn, CSn, selectCE etc which might be Arduino friendly, but mislead you to wrongly use the hardwired nrF sen/receive mode pin for the SPI chip slect pin.
You might like to show us a picture of you module showing the SPI and send/receive mode pin and interrupt pin wiring, and I can compare your wiring with mine ( pin version) which has been tested OK. Cheers.
One more thing. I noticed that your question says you are using the “Plus Model” (nrf24L01+, with the “+’ at the end.) If you are using the following + model, then you need to be very careful: “NRF24L01+ 2.4G ATMEGA48 wireless data transmission module + NRF24L01 arduino compatible US$3.50” fr.aliexpress.com/item/1976744557.html. ANOTHER WARNING: The module power supply is 5V, but there is NO wrong polarity protection, meaning that if you supply power with the wrong polarity, the module will get very hot and might fry in less than one minute.
StevenCellist

StevenCellist
34
That’s a lot of stuff to work through.. thanks for all the recommendations! Unfortunately I have two test for university coming up next week, so I won’t have any time till something like Wednesday. I will let you know once I’m working on it again! And thanks for all the information provided!!
Quick confirmation that I indeed am using the + version, shop link: tinytronics.nl/shop/nl/communicatie/rf/… (I am Dutch). Is it recommended to also buy the Adapter Board? tinytronics.nl/shop/nl/communicatie/rf/…
tlfong01

tlfong01
2938
Ah, take your time. We can pause for a couple of days, and resume after your exams. Ah, I don’t know nothing about the nRF24 adapter board, I guess it is for Arduino, but only 50% sure. Perhaps you go study for you exam now, and me in the mean time leisurely google around. Good luck to your exam and cheers.
Just now I had a quick look of the adapter thing. I now guess is just a stupid 8 pin to 5 pin or 6 pin conversion board. My three or four modules are straight connectors with 6 or 9 or more pins. Need to check out later. Cheers.
3 hours later…
StevenCellist

StevenCellist
34
Jan 24, 22:20
Okay I just did a loopback
I got ‘0E 00 00 00 …’ as result. (… filled with 00’s)
STATUS = 0x07 RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=3 TX_FULL=1
RX_ADDR_P0-1 = 0xf0f0f8f8f0 0xe1e1e1e1e1
RX_ADDR_P2-5 = 0xe1 0xe2 0xe2 0xe3
TX_ADDR = 0xf0f0f8f8f0
RX_PW_P0-6 = 0x04 0x00 0x00 0x00 0x00 0x00
EN_AA = 0x1f
EN_RXADDR = 0x01
RF_CH = 0x3b
RF_SETUP = 0x00
CONFIG = 0x06
DYNPD/FEATURE = 0x0f 0x03
Data Rate = 1MBPS
Model = nRF24L01
CRC Length = Disabled
PA Power = PA_MIN
Result of print details
I do not really have a clue of the CONFIG is what you’re looking for while trying to read 0x80 from the 0x00 register
tlfong01

tlfong01
2938
Jan 24, 22:51
Ah, I am sorry to have misled you to try the spi lookback and then read the config register. This test is only a preliminary test or troubleshooting tool to make sure your SPI hardware/software setup is OK, and reading module’s config register is sort of ping ing it. But now your python program can print the module registers as you just listed, there is no need to do the spi loopback and read config.
And we can now look into what the python program is doing and if we can try to do some troubleshooting. But I think you need to prepare for your exam now, so I should not bother you by suggesting any plan now. See you after your exam! Good luck. Cheers.
StevenCellist

StevenCellist
Nah I need something to do instead of studying sometimes.. I’ve got one more hour right now
I do not yet have any capacitors myself, but I just need any communication; reliability is only once I know they are communicating
StevenCellist

StevenCellist
34
Alright I’ve just used the ‘scanner’ sketch from the library provided on Arduino
Here’s the result:
RF24/examples/scanner/
STATUS = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
RX_ADDR_P0-1 = 0xe7e7e7e7e7 0xe0e0f1f1e0
RX_ADDR_P2-5 = 0xc3 0xc4 0xc5 0xc6
TX_ADDR = 0xe7e7e7e7e7
RX_PW_P0-6 = 0x00 0x20 0x00 0x00 0x00 0x00
EN_AA = 0x00
EN_RXADDR = 0x03
RF_CH = 0x4c
RF_SETUP = 0x01
CONFIG = 0x0e
DYNPD/FEATURE = 0x00 0x00
Data Rate = 1MBPS
Model = nRF24L01+
CRC Length = 16 bits
PA Power = PA_MIN
000000000000000011111111111111112222222222222222333333333333333344444444444444445555555555555555666666666666666677777777777777

(see full text)

Now somewhere after 16 lines into the scanner procedure, you can see two lines only filled with zeros. That’s where I unplugged the nRF module from the Pi, but I connected it only 7 lines from the bottom again
18 hours later…
tlfong01

tlfong01
2938
Jan 25, 17:44
Sorry, I have no Arduino on hand to test the “scanner” sketch. But I have a question on the performance of the Arduino sketch. Please first confirm the test setup is as summarized below. (1) First setup Arduino and run the receive message sketch, which is an infinite loop waiting for message from Rpi, and prints the message at the serial monitor, and also the message “Turning off radio”,
(2) Then setup Rpi and run the its “send message” python program, as often as you like. Now every time you run the Rpi send message, only if Arduino side got the Rpi message, then it will print the received message, then the “Turning off radio”.
No if Rpi sends message “Hi” three times, and only if Arduino receives “Hi” every time, it will print the “Hi” on the serial terminal, then followed by “Turning off radio”. This is the part I don’t understand.
To debug, I would suggest to insert the following confirmation message something like, “Serial.println(“yes, I got the message”) BEFORE the statement. “Serial.println(receivedMessage)” This way, even if Arduino gets an empty message, it will still print the “yes, I got the message”, before the “Turning off radio”. I guess this is also your question. I am just making a quick and dirty, brainstorming reply. Nothing urgent to reply now, perhaps only after you exam.
By the way, I tried to google for a more up to date nRF24L01 python library, but no luck, I only found similar libraries forked from the same source, Brian Lavery Oct 2014. Perhaps I should google harder, but it is unlikely I could find more useful things, as this nRF24L01 library stuff has been non active for a couple of years, and all the original or forking authors said they don’t support their libraries any more, and that a couple of thins not yet tested, so it is discouraging, 😦
So I will pause for now, and perhaps see your opinion after your exam. By the way, I studied the python library github.com/BLavery/lib_nrf24/… and found it not that complicated. Perhaps in the long run, I would buy a new version of nRF24L0-1+ (my modules in hand are very old!)
One more thing, if I am going to fork/modify the BLavery library, perhaps I would consider two Rpi python program, one send message, another receiver message. Then I can use two Rpi’s , or one Rpi controlling two nRF24 at the same, time, one using Spi0.0, the other Spi1.0 say. But that is a long term project, at least not for these couple of months. Cheers.
1 hour later…
tlfong01

tlfong01
2938
Jan 25, 19:16
By the way, a good reference for Pi to Pi nRF24L01 is the #13 Tutorial by Module143: (1) Rpi3 Tutorial 13 – Pi to Pi Python Communication with NRF24L01+ – Module 143 Sushant Narang 216jun13
invent.module143.com/…

(2) Rpi3 Tutorial 14 – Pi to Arduino Python Communication with NRF24L01+ – Sushant Narang Module 143 2016jun14
invent.module143.com/….

(see full text)

The Module143 Tutorial #13 has two nRF24L01 demo python programs, one for transmit, another for receive. So I guess it is easier to test both transmit and receive using two or just Rpi’s, without bothering Arduino. By the way, I am curious to know why you start with Pi and Arduino, but not Pi to Pi?
tlfong01

tlfong01
2938
Jan 25, 19:36
And now I have saved the BLavery RF24L01 Library and Demo Porgram listing for future reference: BLavery/lib_nrf24 program listing Brian Lavery Oct 2014 v0.1

penzu link: penzu.com/p/23fef382.

tlfong01

tlfong01
2938
Jan 25, 20:36
As I said earlier, I do not have an Arduino in hand to test the nRF24L01 receiving mode, so I am thinking of using Rpi to test the receiver. A more ambitious goal is to use one Rpi running in multi-processing/multi-threading mode, one transmitter and one receiver. Another thing is to use a scope to display the no modulation carrier waveform, to see how to change the nRF24 options to get the highest output power, as shown in the following picture: (sorry, cannot upload, will try later, :()
user image
The above picture is one of the many summary screen captures of my datasheet reading summary. I am compiling a gallery of those pictures perhaps I might show you later. These pictures help refreshing my memory of datasheet reading.
tlfong01
tlfong01
Jan 25, 20:56
There you are, my datasheet reading summary: penzu.com/p/fb5096a7.
tlfong01

tlfong01
2938
Jan 25, 21:08
And skimming the above pictures, I have summarized the following setting for maximum power output: For troubleshooting, set max power (1) air data rate 250kbps, (2) SPI 100kHz, (3) Tx Setting PwrUp = 1, PrimRx = 0, CE input pin = 1,
(4) Check received power detector (Reg 9, bit 0), (5) max power setup RF-PWR = 11 0dBm (6) Config reg setup bit 1 pwr_up = 1, PRIM_RX = 0.
tlfong01

tlfong01
2938
Jan 25, 21:27
Now I am reading more carefully the Transmit and Receive python programs, both for Rpi. I found it easier to understand what is going on each side, if both program are written in Rpi python, because there is many sections in common, and in the first transmit program, the mirroring parts are commented out, so it should be easy to compare and contrast the two programs. I still find the listening part confusing. So I need to read the library now, which is much longer than the demo programs.
tlfong01

tlfong01
2938
Jan 25, 21:54
Now I have read the nRF24L01 library in python. I am happy to find that the program is very well structured, and self documented, so it is easy to do any maintenance or modification. Earlier I said that I am not interested to use this library which is no longer maintained by the original author, and not all features are tested. Now I have changed my mind, because now I think that this library seems well developed, and so it is a good idea to play with it.
@StevenCellist @StevenCellist, as I said earlier, I think it is worth my time to test without Arduino, but just use two Rpi’s, one to transmit, the other to receive. And everything goes well, we can try one Rpi, two multi-processing functions, one transmit, another receive. But I am tied up with other toy projects and would not be able to start playing now.
So if you are using my suggested one Rpi two python programs, I am interested to join in. Nothing urgent, no need to reply, until you finish your exam. So see you on Wednesday or later. Cheers.
2 days later…
tlfong01

tlfong01
2938
Jan 27, 13:46
I read your sendMessage.py program a second time, and guess it is doing the following three things: (1) setup the nRF24 module, and print what has been setup, (2) Send the message “Hi” only cone, (3) Change to listener mode and listen for only 2 seconds, and print “time out” if not receiving acknowledgement from Arduino?
Now I think we can do the following to troubleshoot: (a) Instead of sending message just once, we can repeatedly send the same message every 4 seconds, and see if Arduino can get the message, (b) Instead of setting only two seconds time out, of course we can set longer, say, two minutes time out, so to give more chances for Arduino to respond.
1 day later…
StevenCellist

StevenCellist
34
Jan 28, 17:27
Alright I aced my first exam yesterday and mnext exam on Friday is Python programming.. so no worries about that one!
I am trying to set up a second raspberry right now, but I am out of SD cards so I hope I can fix one of the broken ones
1 day later…
tlfong01

tlfong01
2938
Jan 29, 19:09
How nice you aced one exam, and next one is a piece of cake for you. So next step is continue troubleshooting. I have already ordered the new version of the module (only
¥7 a piece): item.taobao.com/…. I guess my toy would arrive before this weekend. Then we can cross check each other’s setup and testing, sort of “pairing programming/development) and make troubleshooting more efficient.
StevenCellist

StevenCellist
34
Jan 29, 19:31
Wow that’s so nice of you!!
I managed to recover the SD card so I might be booting the second Pi up tonight, and I’ll see if I can have them communicate
I have been installing PiHole yesterday, so I didn’t manage to test the radio
3 days later…
tlfong01

tlfong01
Feb 1, 13:12
My toys departed just now. I hope they will arrive tomorrow.
user image
6 hours later…
StevenCellist
StevenCellist
Feb 1, 19:01
Awesome! I can’t read Japanese or Chinese or whatever that is, but I guess you ordered 6 of them? You’re definitely going for it lol!
2 days later…
StevenCellist

StevenCellist
34
Feb 4, 6:25
Heyy
I’ve finally got my second Pi running
I tested the following tutorial: invent.module143.com/…
and I used the scripts for ‘Transmit’ and ‘Receive’
Printing the radio details does give me the proper stuff, i.e. non-0xff values
But still, it didn’t give me any communication
10 hours later…
tlfong01
tlfong01
Feb 4, 16:40
Let us first look at the send message program: penzu.com/p/0eeb0578. So did you received the messages “no payload received”, NOT “radio turned off”, … Please confirm if I understood your situation correctly.
5 hours later…
tlfong01

tlfong01
Feb 4, 21:32
While reading transmit.py and receive.py, I found in Tutorial 13 there are two more programs called Master.py and Slave.pi. These master and slaves seem similar to the old transmit and receive programs. Do you know where are the descriptions for them? I have updated my learning notes to include them: penzu.com/p/3979e91f
5 hours later…
StevenCellist

StevenCellist
34
Feb 5, 2:33
My output was something like:
Received: []
Translating the receivedMessage into unicode characters
Loaded payload reply of [1]
And those three lines continuously looped
Those lines looped insanely fast, I couldn’t even find my radio.printdetails() after the program ran for one second
I’m 95% sure the output on the other Pi was: No payload received
7 hours later…
tlfong01

tlfong01
2938
Feb 5, 9:19
@StevenCellist Well, if the while loop runs too fast for your eyes, then of course you can slow it down by sleeping longer. And the radio.print details only print once after configuration and before the while loop. So after the printdetails, it is the while loop that causes trouble. I think we need to look at the python library to see if we can isolate some relevant sections to narrow down the trouble making guy.
8 hours later…
StevenCellist

StevenCellist
34
Feb 5, 17:37
Oh I understand why my time.sleep(100) seemed to stop the program.. In Arduino, the delay is in milliseconds so I thought 100 ms would be a good delay, but I now remember that in Python that would be 100 seconds hahah
I thought my program didn’t function anymore when I added the delay
Have you tried using the radios yourself yet? I am curious if you have the same problem
tlfong01

tlfong01
2938
Ha, so you have made some progress. My toys only arrived yesterday. I have not open the package yet. Usually I need to make a test plan before trying it, might take a couple of days, so in the mean time you very likely find more careless mistakes. I have not played this nRF24 before. My only experience is RF12 which is 433MHz. So I need to read the datasheet before I read the programs.
Now I have inserted the python library into my learning notes below. I skimmed it and found it, as I mentioned some days ago, very structured, so it should be “easy” to do some troubleshooting. This file now has the python library full listing at the beginning. penzu.com/p/3979e91f
StevenCellist

StevenCellist
34
Feb 5, 18:06
My understanding of libraries is still very small so I don’t expect myself to find anything that could cause the trouble but I will read through it when I have some spare time
I did get a warning on my B+ model actually about one of the pins already being in use, but it continued anyway
Which seemed very odd to me since I do not have any other program running
The connector to one of my screens broke two days ago by the way, so it’s gotten a little difficult for me to program them simultaneously. Might take a bit long sometimes to do something
tlfong01

tlfong01
2938
Feb 5, 18:53
Ah, usually libraries created by the hackers and developers are newbie scary, very messy, and in C/C++ and need to be complied. But if it is a python library, then it is usually 10 times easier to hack. Anyway, don’t bother to look at the library for now. Let me take some time to study it and let you know later what I think about it. By the way, I remember the nRF24 GitHub says how to set up for SPI, using source code.
This is what I am worrying, because my Rpi4B has spidev already built in the os, so using the GitHub’s spidev setup instructions might crash something. Anyway, I will not tried it. One more thing, I guess you are using two Rpi’s. I am a lazy guy and my test plan is as follows: (1) test first nRF24 module on SPI0.0, send mode, (2) test second nRF24 module on SPI1.0 receive mode,
(3) test both modules “at the same time”, sequentially (looping), or concurrently (multi-threading multi-processsing). If no luck in (3) then I will try (4) using two Rpi’s. It is a over-ambitious project, so I have only 50% confidence! 😦 PS – Don’t try hard to catch up me, I would prefer you to just watch what I am doing, and perhaps ask question along or later. I am going very slowly now, so you need to be patient! 🙂
tlfong01
tlfong01
Feb 5, 19:21
user image
2 hours later…
tlfong01
tlfong01
Feb 5, 21:17
user image
1 hour later…
StevenCellist
StevenCellist
Feb 5, 22:26
That’s cool! I have used multiple spidevs before so I should be able to quite follow it but we’ll see
18 hours later…
tlfong01

tlfong01
2938
Feb 6, 16:44
Good. My first thought was to start with single SPI bus, to make it more newbie friendly. On second thought I would start with multiple SPI buses. Now I have soldered a dual nRF24 module board, and open/short tests are OK. Next step is to try to ping the modules.
user image
1 hour later…
tlfong01

tlfong01
Feb 6, 17:59
Now I am tidying up my old SPI signal routing lego board to test the two nRF24 modules.
user image
tlfong01

tlfong01
2938
Feb 6, 18:27
Now I looking at the nRF24 library more closely, version 0.5 of nRF24 learning notes: penzu.com/public/09bf5314. There are a couple of reasons: I hope to: (1) Modify the big library to make a smaller and simplified version, for easy troubleshooting, (2) Modify some basic functions to make them more newbie friendly.
(3) Modify some special functions such as SPI, send/receive functions to make them more flexible for future applications. Now I need to first read the datasheet to understand how to read the nRF24 registers, how to config, initialize etc.
1 hour later…
tlfong01

tlfong01
2938
Feb 6, 19:28
Now I am reading the nRF24 Library’s SPI setup method and found a big problem: SPI1 is NOT supported, module B is also NOT supported. I forgot what is the difference of SPI between Model A and Model B, but I will definitely be using Rpi4B (and perhaps also Rpi3B+ later. I remember the library is using a spidev compiled in its setup procedure. Since the library is NO longer supported by the author.
So I feel uncomfortable to use this old SPI method for Rpi Model A only, with the old complied spidev. My decision is to use Rpi4B buster (2019sep26 release)’s preinstalled SpiDev, which has many more (six, to be precise) SPI channels (or buses, I forgot which term I should use :))
user image
tlfong01

tlfong01
2938
Feb 6, 19:44
Rpi4B’s six SPI channels is too messy, and too easy to go wrong. So I think I better be humble and use only two of the six, ie, SPI0, SPI1. And with three CS pins, I can control 5 nRF24 modules. I will also be using python’s “list” and “dictionary” data structure. So it should be “easy” to later to scale up to all six SPI channels.
user image
3 hours later…
tlfong01

tlfong01
2938
Feb 6, 22:23
Now I am trying to build a minimal nrf24 library which consists of the very basic functions: (1) SPI setup, (2) nrf24 module configuration, (3) nrf24 register read write functions. With the above three basic functions, I can then config, and perform the nrf24 functions.
I am now do the top down design of the using the big library as a blueprint. The startup sections are in the top part of the following file: penzu.com/p/772fa292. Next step is reading the datasheet a couple of times and modify the template functions for nrf24.
First thing first is to read the block diagram of the nrf24 module.
user image
Then a brief description.
user image
Then a state diagram.
user image
The state diagram show TX mode and Rx mode. So I think I need to get a rough picture of what is TX and Rx modes.
user image
Then we need to check out the register map to see which registers to config, which to give commands etc. I think I should start with the config register, never mind other not so important registers.
user image
Then we need to read the command set to know how to load a message, how to send, how to receive etc etc.
user image
It is indeed very messy. Bed time. So I will call it a day. See you tomorrow.
StevenCellist

StevenCellist
34
Feb 6, 23:42
Whoa man, indeed this is a mess
I am so grateful for everything you are doing!!
I lost it when you started talking about the block diagram etc haha
I don’t know how you’re doing all this but thank you so much in advance! 🙂
10 hours later…
tlfong01

tlfong01
2938
Feb 7, 9:58
Yes, even the nRF24 block diagram is hard to understand. But at least you must be not too lazy enough not to search the datasheet for meanings of terms like “PA”, “LNA”, GFSK” and so on, otherwise you will never catch up. Anyway, for now, you can just as I suggested earlier, sit back and watch how I am building a minimal nRF24 driver and library, … No hurry though, take your time. Cheers.
2 hours later…
tlfong01

tlfong01
2938
Feb 7, 11:33
Now I am looking at the init method of the nRF24 library (full listing at nRF Learning Notes V0.6) penzu.com/p/303513ed The init method is basically doing two things: (1) Init SPI and GPIO assignment, (2) Configuration using 9 statements. So now I need to check out what those 9 statements are doing, and which registers, beside the Config register, need to be written:
user image
tlfong01

tlfong01
2938
Feb 7, 11:47
Now I move on reading the “begin” method of the nrf24 class. I think the transmit.py is doing something like below: (1) create/instantiate an object of the nrf24 class. This newly created object is called “radio”. Then “radio.init” and “radio.begin” methods are called to do the initiation/setup job. Now I need to study the “begin” method and see how to do it using the functions (yes, no longer objects, all functions now) to do the corresponding “init” and “begin” tasks.
3 hours later…
tlfong01

tlfong01
2938
Feb 7, 15:06
Now I read the nRF24 begin method and found it not that complicated, calling 6 functions and writing 3 registers. I guess the minimal driver must at least entertain these 3 registers. So I go check out these three registers.
user image
The three register to write are : “setup”, “dynamic playload”, and “current status”. I was confused why there is a “setup” register and not using the “config” register.
StevenCellist
StevenCellist
Feb 7, 15:59
Alright I understand this
tlfong01

tlfong01
2938
Feb 7, 16:57
Good. Now I quickly read the datasheet again, and picked a couple more registers to do the preliminary testing. I am thinking of using these basic registers to do config, command, and status control. I now appreciate the use of the state diagram, without that you might get lost during transitions from Tx mode ot Rx mode etc. The config register help to set up maximum power, the status register can check output. I am hoping to use the scope to check the output waveform.
tlfong01

tlfong01
2938
user image
user image
user image
17 hours later…
tlfong01

tlfong01
2938
Feb 8, 10:21
I am casually googling around to see what other experts talking about nRF24. I noticed one expert saying that “… it is not easy to tune the signal strength …”. I was wondering that should I set the transmitting power to maximum to ensure max reception? Reference: (1) [Cheap COTS (Commercial Off The Self) transceivers that work with Raspberry Pi? – Asked 2015 Viewed 924 times]:
raspberrypi.stackexchange.com/….
I also noticed that the nRF24 module is a 5+ year old product, and so should be mature and reliable, worth spending time on it (though the library is not perfect, and no longer supported by the original developer, but then it is more challenging than using a BettyFruit library and everything goes smoothly, spoiling you too lazy to learn.
7 hours later…
tlfong01

tlfong01
2938
Feb 8, 17:26
I am testing two nrf24 modules at the same time, using the following /boot/config.txt, with 2 SPI buses and 5 Chip Selects. The following record is for your reference, in case you wish to use later. Cheers.
user image
3 hours later…
tlfong01

tlfong01
2938
Feb 8, 20:00
Now I am testing the SPI two and three bytes loopback functions, which are used later to read and write nRF24 registers. You can search this forum using keywords “SPI”, “loopback” for newbie friendly Rpi3+ stretch test programs for both SPI1 and SPI2. I am using Rpi4B buster version now. I am using low SPI frequency of 100kHz, so I can use long wiring. Later I might increase to 1MHz. The is the waveform capture: imgur.com/gallery/aFVfLg2.
tlfong01

tlfong01
2938
Feb 8, 20:19
user image
4 hours later…
StevenCellist
StevenCellist
Feb 9, 0:14
Of what I know, the signal strength shouldn’t be set to max when the radios are close to each other. The signal can be too strong, and minimum power should be able to work perfectly fine
9 hours later…
tlfong01

tlfong01
2938
Feb 9, 9:10
Ah, I never thought about that. I wrongly thought that the nRF24 if working as a receiver, is like my FM radio receiver, the strong the signal the better, because I can always use the volume knob to adjust any too strong signals received. Anyway, I need to pause a bit and google harder, to make sure I am not thinking other amateurish thoughts. On second thought, perhaps I can add a manual signal and volume adjust option to my python program. Cheers.
1 hour later…
tlfong01

tlfong01
2938
Feb 9, 10:20
@StevenCellist About your comment: “… I did get a warning on my B+ model actually about one of the pins already being in use, but it continued anyway …”, I vaguely remember that one of the reasons that you might get this kind of warning messages is that you are trying to set a GPIO pin to input or output mode, but that GPIO pin has already been setup earlier. So it is just a warning, nothing important. There seems to be a flag to disable this kind of warning, but again not that important.
By the way, I found that I need to use a GPIO pin to control the CE, module enable/disable pin for certain kind of Tx operation. And we may need another GPIO pin set to input mode to entertain the Interrupt status output of the nRF24 module. So now I need two pins x 4 for 4 modules of my project. I think I need to write a simple python GPIO only module to handle these 8 CE/Interrupt pins.
7 hours later…
tlfong01

tlfong01
2938
Feb 9, 17:19
Now I am going to assign GPIO pins for my 4 nRF24 modules. I looked at the pinout map and found there are not too many pins to go around, because the 6 SPI buses occupy quite a number of pins. So my first thought is to just use SPI1, SPI1, and forget SPI3 to SPI6. So I assign 1 GPIO pin for each module’s CE, and one more pin in pull down configuration, to share among all 4 modules.
The pin map is rather messy, even I am only looking at the SPI pins. I still need to entertain the 5 I2C buses and at least one UART/serial TxD, RxD. Indeed I cannot make end make and must make a big engineering trade off in using the pins.
user image
4 hours later…
tlfong01

tlfong01
2938
Feb 9, 21:28
I always wrongly thought that SPI0 has CE0, CE1, but SPI1 has only CE2, but no CE1. Now I found made a mistake, there is actually CE0 for SPI1, but no CE0. I don’t know why. Anyway, now I extracting the following pins/wires: SPI0 CE0, CE1 and SPI1 CE1, CE2. Together with Ground wire, each of SPI0, SPI1 has 6 wires, as show below.
user image
Please let me know if you guess why there is no CE0 for SPI1. This seems inconsistent.
tlfong01

tlfong01
2938
Feb 9, 22:12
user image
15 hours later…
tlfong01

tlfong01
2938
Feb 10, 12:44
buster has just release another update with a faster Thonny. So I am taking a break here to do the updating. See you later. By the way, three questions: (1) Do you know what is TDD? (2) have you any experience in using python list and dictionary data structure in programming? and (3) Do you prefer OO than FP (Functional Programming)?
user image
tlfong01

tlfong01
2938
Feb 10, 12:57
I hope you can also update your buster in time, so we can later compare our programs using the same versions of SpiDev, python, and Thonny. (1) Raspbian Buster Gets New Features in Big Update By Ash Puckett 7 hours ago New changes and lots of features!
tomshardware.com/news/…

(2) New Linux 5.5 – Supports Raspberry Pi 4! By yida 9 hours ago
seeedstudio.com/blog/2020/02/…

5 hours later…
StevenCellist

StevenCellist
34
Feb 10, 17:28
@tlfong01 Isn’t pin 12 the CE0 for SPI1?
I didn’t know what TDD was but I looked it up and I see what it means
I do have experience with python lists, my exam two weeks ago made quite a bit of use of those
And I really prefer OOP over FP, so I can make changes much easier to my specific codes
I’ll be updating my Pis to the new version soon
On a side note: there’s really no need for me to entertain 6 radio’s.. lol. For my current plans I only need one per Pi. I won’t mind a code that’s ready to add a second but six would totally overkill for me 🙂
tlfong01

tlfong01
2938
@ StevenCellist: “Isn’t pin 12 the CE0 for SPI1?”, Oh my goodness, Thank you very much for pointing out my “Blind Spot”. I actually went through the Tom’s Hardware pin table three times, before giving up, with a conclusion that (1) Tom’s Hardware pinout table is buggy, (2) buster’s ls /dev/spi* is buggy, (3) me only cannot make any mistakes. So last night slept well. But to night I won’t sleep well, … 😦
StevenCellist

StevenCellist
Ahaha don’t worry bro! You have been doing some awesome work already and you don’t wanna know what kind of mistakes I have been making already.. like the time.sleep(100)
You should rest well
tlfong01

tlfong01
2938
Feb 10, 17:49
I agree there is no need to have 6 RF transceivers. I only need one on either side. It is only for “swap/pairing/cross checking/testing” that I need two each side. But then later when I move the slave to my rooftop garden, I may need two on the rooftop, one standby in case of another break down.
I usually test four devices to make sure that even two devices are OK, I must be very sure that my list of two devices can 100% sure scale up to 4, 8, … 64 radios. Ah, I forgot to comment on your comments that why I bought 6.
StevenCellist
StevenCellist
Ahh okay, I see!
tlfong01

tlfong01
2938
I almost could not sleep well to night, because just now I made another careless but very severe mistake when trying flashing the new buster image. Let me show you my installation record, and then, … Ah dinner time, see you later.
user image
StevenCellist

StevenCellist
I can’t read Chinese but that ‘s an error I see! Oops!
It should be possible to do it via ‘sudo apt-get update’ and upgrade, right? Else I’ll have to wait another day
Have a nice meal!
tlfong01
tlfong01
Feb 10, 18:06
Ah, you seem to be an impatient guy. OK, here is a tip: I tried to boot but I got the infamous twinkle, twinkle, twinkle, twinkle little green star! 🙂
StevenCellist
StevenCellist
Ohhh that isn’t gonna boot
Well I’m going to take a shower so I’ll be back too
3 hours later…
tlfong01

tlfong01
2938
Feb 10, 21:10
Another tip: FAQ V0.1 of Using Win32Image Manager v1.0 to flash buster release 2020feb05 image on a 16GB SD Card – tlfong01 2020feb10hkt2107

Q1. If Win32Image Manager V1.0 gives error message when trying to flash a buster image, what should I do?
A1. Use SD Formatter V4.0 to “Overwrite mode” format the SD card (yes, “Quick format mode” won’t do), then the SD card will now be flashable.

Q2. If after SD Formatter V4.0 has “overwrite formatted” the previously Win32ImageManager unflashable SD card, it is now indeed flashable, but

(see full text)

How come so confusing: one drive after SD Formatter V4.0 has “overwrite” formatted, becomes two drives? what is going on?
2 hours later…
StevenCellist
StevenCellist
Feb 10, 23:31
Is this a question to me? If so, I don’t understand your question
I don’t use Win32Image Manager but balenaEtcher
10 hours later…
tlfong01
tlfong01
Feb 11, 9:35
Ah sorry, I though you might have used WinImgv1.0 before. Anyway, let try balenaEtcher and see if I still have the same or similar problem.
2 hours later…
tlfong01

tlfong01
2938
Feb 11, 11:14
Yet one more tip: Guess what careless, but with severe consequence, mistake I made yesterday?
user image
5 hours later…
StevenCellist
StevenCellist
Feb 11, 16:15
I don’t know?
tlfong01

tlfong01
2938
Feb 11, 16:43
@StevenCellist What did you mean by “I dont’ know”. Perhaps you misunderstood my puzzle. There is nothing important or urgent. I just jokingly wanted to test if your eyes are sharp enough to correctly guess what did I do wrong when using WinImageManager v.10 and SD Formatter 4.0 to flash the buster image but got the green LED blinking error. As you might know already, the green LED blinking 4 times is a common newbie sorrow and from time to time I hear newbies swearing the whole galaxy.
The screen capture shows how a ninja image flasher like me might still made a careless mistake resulting a severe damage. But if you don’t know how to use WinImageV1 and SDformatterV4 you won’t understand my question and therefore not appreciate the dangerous trap to the newbies. Perhaps one day you learned how to use WinImage and SDformatter, then I will explain.
Anyway, today I thought I might try BalenaEtchere again, and see if it is good for newbies and ninja alike, particularly to avoid making careless mistakes, some of which might create winkling green stars, therefore saving the galaxy from being over cursed. But then I spent about an hours, flashing a couple of 16GB SD cards and found Balena has disappointed me, and should also disappoint other ninja flasher.
For newbies who don’t know the meaning of FAT64, boot sectors etc, I think Balena is appropriate for them. Rpi4B and buster is changing the boot architecture, so I think it is waste of time digging this subject further. So I stopped here, and moving back to the nrF24 minimal driver project.
tlfong01

tlfong01
2938
Feb 11, 17:05
By the way, about your comment “And I really prefer OOP over FP, so I can make changes much easier to my specific codes”. This is interesting, and I might discuss this later, perhaps when we finished our project. My casual goal is to finally developed two versions of the same nRF24 driver, the OO version to be surpervised by you, and me FP. Actually my preference is DP, “Declarative Programming”.
Have you heard about DP, and Proglog? I vaguely remember that not to many years ago Imperial College used Prolog as the first programming language for their CS freshman, and MIT and Harvard use Lisp (latter Scheme) and Haskell for their CS new comers (not EE guys).
Anyway, I am using DP, in the crude form of python dictionaries, and I am interested to know if you can also use dictionaries in your OO version of nRF24 minimal driver (It should be easier for you to convert my finished FP version of nRF24 to OO. Ah, I have been talking too much, it is dinner time. See you tomorrow, cheers. PS – I am just thinking aloud, my apologies for all the typos.
And in case you have not known already, the GPIO.Zero developer guy is programming in the declarative program style. You might like to check him out in your free time. Again nothing important or urgent. Cheers.
StevenCellist

StevenCellist
34
Feb 11, 17:38
I’d have to dive into all that terminology etc to understand all those different types. I only learned two weeks ago the meaning of OOP and FP from my friend who studies Informatica (if you know what that is) and he’s been telling me some bits about it
I might ask him later about DP or I’ll Google a bit around
5 hours later…
tlfong01

tlfong01
2938
Feb 11, 22:23
Well, take it easy and go slowly. For now, you just need to understand stuff shallow, just a rough picture of the functions I am writing. As I suggested earlier, you might, as we go along, convert my FP functions one by one, to your OO methods.

And as the saying goes, eat the big elephant bite by bite – First bite is SPI setup, Second, nRF24 initiatization, third, nrF24 configuration, …

This way you taste each bite slowly, understand and enjoy, …

I am a huge fan of the mad electrical engineer Oliver Heaviside, and agree very much what he is saying: “Shall I refuse my dinner because…

(see full text)

There you are, the first bite – SPI:
user image
user image
I am calling it a day. See you tomorrow.
3 days later…
tlfong01

tlfong01
2938
Feb 14, 17:08
I found buster release 2020feb05 very good, there are still some teething problems. I tidied up my hardware and software setup, and made a record for future reference. I uploaded a copy here, in case you are interested to see what I am doing.
user image
tlfong01

tlfong01
2938
Feb 14, 17:42
Let let me go back to the question about image flashing. Since you are not using SDFormatter,you won’t appreciate the big mistake I careless made. It is a bit subtle to explain: (1) If you flash a Rpi image to a SD card, the SD card will be partitioned to two drives, ie, one SD card has two drives. Now if you are not careful, you might miscount the drive number, and like poor me, wrongly formatted the wrong drive which is a 500GB SSD!
Luckily I have been incrementally backing up files, therefore nothing valuable is lost. Anyway, so when I used the not flashed SD card to boot, I get the green LED blinking four times error message. I guess many newbies make the same mistake and swear half of the Galaxy that they did not do anything wrong. The flashing trap is illustrated below.
user image
I forgot to update something in the above image, but now it is old to update. So now I upload the updated one, with the mistakes highlighted, my apologies.
user image
23 hours later…
tlfong01

tlfong01
2938
Feb 15, 17:12
Ah, I forgot to tell you why I bought so many nRF24 modules. The reason is that I felt jealous the Arduino guys has more modules than me:)
user image
Arduino Wireless Communication – NRF24L01 Tutorial
howtomechatronics.com/…
The above Arduino nRF24 project explains the project very well. I need to do the project at least as well, if no better, so not to use Rpi guys’ face.
4 hours later…
tlfong01

tlfong01
2938
Feb 15, 21:35
I found the following YouTube view good to explain the differences of all radio modules: Which radio module? NRF24, LoRa, CC1101, HC12, 433MHz, HC05 – 2019jun 30
youtube.com/… After watching this video modules: Which radio module? NRF24, LoRa, CC1101, HC12, 433MHz, HC05 – 2019jun 30
youtube.com/… After watching this video I more what is going on with other modules such as Lora, and BlueTooth.
1 day later…
StevenCellist
StevenCellist
Feb 17, 3:41
I’ve been out of the house past days so I didn’t have time to catch up
Have you been writing any code as of yet or just a case of lots of research on all that’s happening?
13 hours later…
tlfong01

tlfong01
2938
Feb 17, 16:36
Ah, nothing much happened. I am still going on very slowly. As I said earlier, I carelessly wiped out my 500GB SSD when flashing the new buster image. Though what was wiped out is only second generation back up, ie, back up of back up.
I still need to tidy things, and update my knowledge on SSD/HDD formatting (FAT/eXFAT/NTFS etc), and CLI check disk commands (FSCHK etc). The new buster feb05 release has some teething problems, so if you are not anxious to do programming, it might be a good idea to wait for next bug fix release.
I also wish to google more to make sure nRF24 is not a bad choice, no other alternatives is better than it etc. In short, too many things slowing down the project. But I always think that choosing the right path is the beginning is very important, as my grand mother always says, “Look before you leap”.
3 days later…
tlfong01

tlfong01
2938
Feb 20, 12:06
I am still learning how to solve the buster 2020feb05 teething problems, hoping not to wipe out my 500GB SSD again. But I don’t seem to have the prerequsiste linux knowledge and skill to handle the weird SSD partition/volume/directory Fat/Fat32/exFAT/NTFS stuff. So I decided to give up for now, and come back to nRF24. The following is about Balena Etcher trouble you might be interested (and warned 🙂 . I use Win32 ImageManager with SHA256 check sum and have other troubles) Reference: (1) “Recent Version of Raspbian Causes Windows 10 to Add Directory to SD Card, Why and How to Stop?”

(see full text)

4 days later…
tlfong01

tlfong01
2938
Feb 24, 22:37
I still got stuck in buster 2020geb05 release teeth problems. Rpi Foundation has a new release 2020feb13. So I am now upgrading, hoping there will less teething problems. Another thing is that I found I could not use all SPI channels, because there will be clashing with even I2C1. So I am giving up SPI4 for I2C1. I might have to give up more SPI channels.
user image
I might also give up Rpi.GPIO for Rpi.GPIO.Zero. So I need to spend more time to study GPIO.Zero.
StevenCellist

StevenCellist
Feb 24, 22:54
Hey glad to hear from you again 🙂
I myself am working on an escaperoom.. needs to be finished by Friday so I’m still in no need to hurry this project!
21 hours later…
tlfong01

tlfong01
2938
Feb 25, 19:56
Ah, what do you mean by “escape room”? Escape from CoronaVirus? Any way, I am going very slow. One reason is that I diverted a bit to NFC/RFID pm532. My goal is to do 2.4Ghz long range RFID/NFC. So I need to carefully distribute the SPI and I2C buses, as shown below.
user image
So you see, Four nRF24’s, two send, two receive, and two NFC’s one reader, on pretend to be a RFID/NFC card, all six controlled by one Rpi. Supper time. See you tomorrow.
7 days later…
tlfong01
tlfong01
Mar 3, 14:38
Now I am reading the Silicon Lab’s white paper on RF communication and IoT stuff.
References: penzu.com/p/57eff805.
5 days later…
tlfong01

tlfong01
2938
Mar 8, 11:16
This morning I read that Rpi Foundation just release a new imager call “Rpi Imager”. I tired it and found that it has a nice feature of letting you choose you own [already downloaded] image, or image from Rpi download page. And it also lets you to choose which SD card to download, with detailed description of the SD card, OR SSD drive, so it is much less likely I will make the same stupid, careless mistake and zapping my 500GB SSD! See picture below.
user image
1 day later…
StevenCellist
StevenCellist
Mar 9, 18:59
Yeah I heard that! Sounds great
3 days later…
tlfong01

tlfong01
2938
Mar 12, 12:27
Last time I mentioned that I thought that Rpi4B buster could not recognize my SSD partition naming and I needed to stall and look into this, otherwise I could not use my SSD. Now I found that I made another careless mistake in the very beginning step of Win10 SSD partition job. Now I need to go back to partition and rename again.
One more thing. I read that some guys are playing with another more advanced US$15 nRF24 toy called nRF52180. I am feeling jealous and have decided to stop and look around again, before resuming my inferior nRF24. ) References follow.
References:

(1) Nordic nrf52840 Datasheet – Nordic Semi
infocenter.nordicsemi.com/pdf/…

(2) AliExpress nrf52840 Dongle Catalog
aliexpress.com/w/…

(3) AliExpress NRF52840 NRF BLE5.0 dongle with shell – US$15
fr.aliexpress.com/item/…

(see full text)

15 days later…
Feeds
Feeds
Mar 27, 8:00
The last message was posted 24 days ago.
.END

Categories: Uncategorized

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: