After a bit of success implementing an Arduino 2.4GHz Transceiver, I was encouraged to explore a more familiar environment, something with Python and Linux in the mix.
After a short period of research I landed on the circuitpython-nrf24l01 pypi project page, and quickly began digging through their examples.
It wasn’t long after I had a working prototype that mirrored my Arduino code quite closely:
- CanaKit Raspberry Pi Zero W (Wireless) Complete Starter Kit – 16 GB Edition
- RF24L01+ 2.4GHz Wireless RF Transceiver Module
import sys import select from circuitpython_nrf24l01 import RF24 import board import digitalio as dio # addresses needs to be in a buffer protocol object (bytearray) address = b'Nessy' # change these (digital output) pins accordingly ce = dio.DigitalInOut(board.D4) csn = dio.DigitalInOut(board.D5) # using board.SPI() automatically selects the MCU's # available SPI pins, board.SCK, board.MOSI, board.MISO spi = board.SPI() # init spi bus object # initialize the nRF24L01 on the spi bus object nrf = RF24(spi, csn, ce, ask_no_ack=False, data_rate=250) nrf.dynamic_payloads = False # this is the default in the TMRh20 arduino library nrf.payload_length = 32 # get username username = input('Enter Username: ') # set address of RX node into a TX pipe nrf.open_tx_pipe(address) # set address of TX node into a RX pipe nrf.open_rx_pipe(1, address) nrf.listen = True print('Welcome %s' % username) while True: # handle write if select.select([sys.stdin,],,,0.0): nrf.listen = False for line in sys.stdin: msg = b'[%b] %b' % (username.encode(), line.rstrip().encode()) nrf.send(msg) break # handle recieve if not nrf.listen: nrf.listen = True if nrf.any(): # retreive the received packet's payload buffer = nrf.recv() data = buffer.decode().replace('\x00', '') print(data)