3
3
import usys
4
4
import ustruct as struct
5
5
import utime
6
- from machine import Pin , SPI
6
+ from machine import Pin , SPI , SoftSPI
7
7
from nrf24l01 import NRF24L01
8
8
from micropython import const
9
9
10
- # Slave pause between receiving data and checking for further packets.
10
+ # Responder pause between receiving data and checking for further packets.
11
11
_RX_POLL_DELAY = const (15 )
12
- # Slave pauses an additional _SLAVE_SEND_DELAY ms after receiving data and before
13
- # transmitting to allow the (remote) master time to get into receive mode. The
14
- # master may be a slow device. Value tested with Pyboard, ESP32 and ESP8266.
15
- _SLAVE_SEND_DELAY = const (10 )
12
+ # Responder pauses an additional _RESPONER_SEND_DELAY ms after receiving data and before
13
+ # transmitting to allow the (remote) initiator time to get into receive mode. The
14
+ # initiator may be a slow device. Value tested with Pyboard, ESP32 and ESP8266.
15
+ _RESPONDER_SEND_DELAY = const (10 )
16
16
17
17
if usys .platform == "pyboard" :
18
- cfg = {"spi" : 2 , "miso" : "Y7" , "mosi" : "Y8" , "sck" : "Y6" , "csn" : "Y5" , "ce" : "Y4" }
18
+ spi = SPI (2 ) # miso : Y7, mosi : Y8, sck : Y6
19
+ cfg = {"spi" : spi , "csn" : "Y5" , "ce" : "Y4" }
19
20
elif usys .platform == "esp8266" : # Hardware SPI
20
- cfg = {"spi" : 1 , "miso" : 12 , "mosi" : 13 , "sck" : 14 , "csn" : 4 , "ce" : 5 }
21
+ spi = SPI (1 ) # miso : 12, mosi : 13, sck : 14
22
+ cfg = {"spi" : spi , "csn" : 4 , "ce" : 5 }
21
23
elif usys .platform == "esp32" : # Software SPI
22
- cfg = {"spi" : - 1 , "miso" : 32 , "mosi" : 33 , "sck" : 25 , "csn" : 26 , "ce" : 27 }
24
+ spi = SoftSPI (sck = Pin (25 ), mosi = Pin (33 ), miso = Pin (32 ))
25
+ cfg = {"spi" : spi , "csn" : 26 , "ce" : 27 }
26
+ elif usys .platform == "rp2" : # Hardware SPI with explicit pin definitions
27
+ spi = SPI (0 , sck = Pin (2 ), mosi = Pin (3 ), miso = Pin (4 ))
28
+ cfg = {"spi" : spi , "csn" : 5 , "ce" : 6 }
23
29
else :
24
30
raise ValueError ("Unsupported platform {}" .format (usys .platform ))
25
31
28
34
pipes = (b"\xe1 \xf0 \xf0 \xf0 \xf0 " , b"\xd2 \xf0 \xf0 \xf0 \xf0 " )
29
35
30
36
31
- def master ():
37
+ def initiator ():
32
38
csn = Pin (cfg ["csn" ], mode = Pin .OUT , value = 1 )
33
39
ce = Pin (cfg ["ce" ], mode = Pin .OUT , value = 0 )
34
- if cfg ["spi" ] == - 1 :
35
- spi = SPI (- 1 , sck = Pin (cfg ["sck" ]), mosi = Pin (cfg ["mosi" ]), miso = Pin (cfg ["miso" ]))
36
- nrf = NRF24L01 (spi , csn , ce , payload_size = 8 )
37
- else :
38
- nrf = NRF24L01 (SPI (cfg ["spi" ]), csn , ce , payload_size = 8 )
40
+ spi = cfg ["spi" ]
41
+ nrf = NRF24L01 (spi , csn , ce , payload_size = 8 )
39
42
40
43
nrf .open_tx_pipe (pipes [0 ])
41
44
nrf .open_rx_pipe (1 , pipes [1 ])
@@ -46,7 +49,7 @@ def master():
46
49
num_failures = 0
47
50
led_state = 0
48
51
49
- print ("NRF24L01 master mode, sending %d packets..." % num_needed )
52
+ print ("NRF24L01 initiator mode, sending %d packets..." % num_needed )
50
53
51
54
while num_successes < num_needed and num_failures < num_needed :
52
55
# stop listening and send packet
@@ -90,23 +93,20 @@ def master():
90
93
# delay then loop
91
94
utime .sleep_ms (250 )
92
95
93
- print ("master finished sending; successes=%d, failures=%d" % (num_successes , num_failures ))
96
+ print ("initiator finished sending; successes=%d, failures=%d" % (num_successes , num_failures ))
94
97
95
98
96
- def slave ():
99
+ def responder ():
97
100
csn = Pin (cfg ["csn" ], mode = Pin .OUT , value = 1 )
98
101
ce = Pin (cfg ["ce" ], mode = Pin .OUT , value = 0 )
99
- if cfg ["spi" ] == - 1 :
100
- spi = SPI (- 1 , sck = Pin (cfg ["sck" ]), mosi = Pin (cfg ["mosi" ]), miso = Pin (cfg ["miso" ]))
101
- nrf = NRF24L01 (spi , csn , ce , payload_size = 8 )
102
- else :
103
- nrf = NRF24L01 (SPI (cfg ["spi" ]), csn , ce , payload_size = 8 )
102
+ spi = cfg ["spi" ]
103
+ nrf = NRF24L01 (spi , csn , ce , payload_size = 8 )
104
104
105
105
nrf .open_tx_pipe (pipes [1 ])
106
106
nrf .open_rx_pipe (1 , pipes [0 ])
107
107
nrf .start_listening ()
108
108
109
- print ("NRF24L01 slave mode, waiting for packets... (ctrl-C to stop)" )
109
+ print ("NRF24L01 responder mode, waiting for packets... (ctrl-C to stop)" )
110
110
111
111
while True :
112
112
if nrf .any ():
@@ -122,8 +122,8 @@ def slave():
122
122
led_state >>= 1
123
123
utime .sleep_ms (_RX_POLL_DELAY )
124
124
125
- # Give master time to get into receive mode.
126
- utime .sleep_ms (_SLAVE_SEND_DELAY )
125
+ # Give initiator time to get into receive mode.
126
+ utime .sleep_ms (_RESPONDER_SEND_DELAY )
127
127
nrf .stop_listening ()
128
128
try :
129
129
nrf .send (struct .pack ("i" , millis ))
@@ -144,7 +144,5 @@ def slave():
144
144
print ("NRF24L01 pinout for test:" )
145
145
print (" CE on" , cfg ["ce" ])
146
146
print (" CSN on" , cfg ["csn" ])
147
- print (" SCK on" , cfg ["sck" ])
148
- print (" MISO on" , cfg ["miso" ])
149
- print (" MOSI on" , cfg ["mosi" ])
150
- print ("run nrf24l01test.slave() on slave, then nrf24l01test.master() on master" )
147
+ print (" SPI on" , cfg ["spi" ])
148
+ print ("run nrf24l01test.responder() on responder, then nrf24l01test.initiator() on initiator" )
0 commit comments