Step-by-step procedure to connect the NRF24L01+ to the GPIO pins and use the Raspberry as a Serial Gateway (MySensors 1.x)
-
you need to port the mysensors core library.. It is however filled with arduino specifics at the moment (we have had some talks about removing arduino dependencies, but it's not made yet).
Ideally someone should make a raspberry pi port, that we can merge into the main repository, so the same codebase can be build for both raspberryPi and arduino based hardware.
A 2.0.0 GW should be compatible with 1.5.x nodes, but 2.0.0 nodes require a 2.0.0 GW.. (I can't remember the specifics in what the changes are, @tekka is the brain behind that stuff). That said, we do recommend that both nodes and GW will be updated to same mysensors versions, as to avoid any problems.
-
you need to port the mysensors core library.. It is however filled with arduino specifics at the moment (we have had some talks about removing arduino dependencies, but it's not made yet).
Ideally someone should make a raspberry pi port, that we can merge into the main repository, so the same codebase can be build for both raspberryPi and arduino based hardware.
A 2.0.0 GW should be compatible with 1.5.x nodes, but 2.0.0 nodes require a 2.0.0 GW.. (I can't remember the specifics in what the changes are, @tekka is the brain behind that stuff). That said, we do recommend that both nodes and GW will be updated to same mysensors versions, as to avoid any problems.
@tbowmo @wergeld @GertSanders a port is already available, see https://forum.mysensors.org/topic/2759/mysensors-raspberry-port-suggestions/11 (and github)
It would be awesome if someone could merge that great work with the MySensors repo.
-
Would it be safe to say a RPI gateway 2.0 is not available yet for beginners ? (like the instructions @mfalkvidd made are not usable for this ?)
-
Would it be safe to say a RPI gateway 2.0 is not available yet for beginners ? (like the instructions @mfalkvidd made are not usable for this ?)
@Sander-Teunissen
At the moment I would advise beginners to use a separate GW for the official 2.0.0 (ethernet or serial based). I found the ethernet based gateway the easiest to use in various setups, espcially since Domoticz (my controller of choice) supported this. -
@Sander-Teunissen
At the moment I would advise beginners to use a separate GW for the official 2.0.0 (ethernet or serial based). I found the ethernet based gateway the easiest to use in various setups, espcially since Domoticz (my controller of choice) supported this.@GertSanders Thanks Gert !
I did a quick build of the serial gateway using an arduino which I connect to my RPI. Pretty easy. I'll be watching this when I can switch back to the RPI built gateway... -
Note: This guide is only applicable to MySensors 1.x. For MySensors 2, use this guide.
I noticed that a step-by-step procedure to connect the NRF24L01 to the GPIO pins and use the Raspberry as a Serial Gateway was listed in the document for MySensors 1.6.
Since I have three gateways configured this way, and I need to set up 3 more for covering different offices around the world, and I had already written the instructions in Swedish for Datormagazin, I thought I'd help out.
This is the first draft. Any feedback is welcome.
INTRODUCTION
The radio module NRF24L01+ is cheap and power efficient, but it is unable to communicate with regular wifi. The bridge between NRF24L01+ nodes and the "computer world" is called a Gateway. You can use other types of gateways, but connecting the NRF24L01+ module directly to the Raspberry Pi is a simple and cheap alternative.Wiring Things Up
Connect the NRF20L01+ radio module to the Raspberry Pi like this:
![raspi_mysensors[1].png](/uploads/files/1448223387663-raspi_mysensors-1.png)
Raspberry Pi NRF24L01+ Color 6 / GND GND Black 1 / 3.3V DC VCC Red 22 / GPIO25 CE Orange 24 / GPIO 8 CSN/CS Yellow 23 / GPIO11 / SPI_CLK SCK Green 19 / GPIO10 / SPI_MOSI MOSI Blue 21 / GPIO9 / SPI_MISO MISO Violet The IRQ pin on NRF24L01 is not currently used.
For a comprehensive view of the Raspberry Pi pins, see http://pinout.xyz/
You should also connect a decoupling capacitor to the radio. See this guide.
COMPILING THE GATEWAY
Login to your Raspberry Pi (using SSH or open a terminal on the graphical console) and run these commands:git clone https://github.com/TMRh20/RF24.git cd RF24 make all && sudo make install cd .. git clone https://github.com/mysensors/Raspberry.git cd Raspberry make all && sudo make installIf you get the following error:
pi@raspberrypi ~/RF24 $ make all && sudo make install g++ -Wall -fPIC -Ofast -mfpu=vfp -mfloat-abi=hard -mtune=arm1176jzf-s -march=armv7-a -D BCM2835_PERI_BASE=0x -c RF24.cpp gcc -Wall -fPIC -Ofast -mfpu=vfp -mfloat-abi=hard -mtune=arm1176jzf-s -march=armv7-a -D BCM2835_PERI_BASE=0x -c bcm2835.c bcm2835.c: In function ‘bcm2835_init’: bcm2835.c:1207:28: error: invalid suffix "x" on integer constantYou've probably run into the problem discussed in this thread. People have had luck with different solutions. The simplest is to make the following change to ~/Raspberry/librf24-bcm/Makefile
#IOBASE := $(shell cat /proc/iomem | grep bcm2708_vcio | cut -f 1 -d "-") IOBASE := 3F000000VERIFY THE GATEWAY
Run sudo /usr/local/sbin/PiGatewaySerial. The output should look like this:pi@raspberrypi ~/Raspberry $ sudo /usr/local/sbin/PiGatewaySerial Starting PiGatewaySerial... Protocol version - 1.4 Created PTY '/dev/pts/1' Gateway tty: /dev/ttyMySensorsGateway ================ SPI Configuration ================ CSN Pin = CE0 (PI Hardware Driven) CE Pin = Custom GPIO25 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 = 0xe7e7e7e7e7 0xc2c2c2c2c2 RX_ADDR_P2-5 = 0xff 0xc4 0xc5 0xc6 TX_ADDR = 0xe7e7e7e7e7 RX_PW_P0-6 = 0x00 0x00 0x20 0x00 0x00 0x00 EN_AA = 0x3b EN_RXADDR = 0x07 RF_CH = 0x4c RF_SETUP = 0x23 CONFIG = 0x0e DYNPD/FEATURE = 0x3f 0x06 Data Rate = 250KBPS Model = nRF24L01+ CRC Length = 16 bits PA Power = PA_LOWIf the NRF24L01+ isn't correctly wired, the following error will be shown
pi@raspberrypi ~ $ sudo /usr/local/sbin/PiGatewaySerial Starting PiGatewaySerial... Protocol version - 1.4 Created PTY '/dev/pts/2' Gateway tty: /dev/ttyMySensorsGateway check wiresIf this happens, double-check your wiring and correct any problems. Press Ctrl+Z and type
sudo killall PiGatewaySerialto get rid of the non-functioning Gateway. Then run sudo /usr/local/sbin/PiGatewaySerial again
If all is well, exit PiGatewaySerial by pressing Ctrl+C. Then run
sudo /etc/init.d/PiGatewaySerial startto start the gateway as a background process. Verify that it started correctly by running
sudo cat /dev/ttyMySensorsGatewayYou should see the message "Gateway startup complete". Exit by typing Ctrl+C.
MAKE THE GATEWAY AUTOSTART
To make sure the Gateway is started when your Raspberry Pi boots up, run the following command:sudo make enable-gwserialEnable the gateway for use with Domoticz
Domoticz (and maybe other home automation systems) has trouble reading from the default path created by PiGatewaySerial. You might need to run the following command:sudo ln -s /dev/ttyMySensorsGateway /dev/ttyUSB20And change /etc/rc.local from this
exit 0to this
ln -s /dev/ttyMySensorsGateway /dev/ttyUSB20 exit 0OTHER NOTES
-
The 3.3V power on the Raspberry Pi is rated for a maximum of 50mA. A regular NRF24L01+ only needs 15mA, but if you are using a power amplified version you might exceed what the Raspberry Pi can output. In that case, an external power supply might be required. If you use an external power source gnd must be connected to the Raspberry Pi's gnd.
-
Connecting the NRF24L01+ directly to your Raspberry Pi will prevent you from using the Raspberry Pi's gpio ports for other things, like a Z-wave board.
-
A user experienced slow data transfer compared to USB-to-Serial(ttl)<-->MySensors Gateway connection, especially on OTA firmware update. If you think this will cause a problem for you, an ethernet gateway might be a better alternative.
As always, I stand on the shoulders of giants. Related posts:
- http://forum.mysensors.org/topic/1151/tutorial-raspberry-pi-nrf24l01-direct-connection
- http://forum.mysensors.org/topic/1974/domoticz-as-controller-and-a-gateway-for-mysensor-nodes-running-on-a-raspberry-pi-2
TROUBLESHOOTING
If you get this errorpi@Domoticz3:~/Raspberry$ sudo /etc/init.d/PiGatewaySerial start [....] Starting PiGatewaySerial (via systemctl): PiGatewaySerial.serviceFailed to start PiGatewaySerial.service: Unit PiGatewaySerial.service failed to load: No such file or directory. failed!or this error
pi@raspberrypi ~ $ sudo /usr/local/sbin/PiGatewaySerial sudo: /usr/local/sbin/PiGatewaySerial: command not foundyou have probably forgotten to run sudo make install. Read the instructions again, and follow them this time :-) User @sineverba reported that a reboot of the Pi after running make install helped.
@mfalkvidd said:
OTHER NOTES
- The 3.3V power on the Raspberry Pi is rated for a maximum of 50mA. A regular NRF24L01+ only needs 15mA, but if you are using a power amplified version you might exceed what the Raspberry Pi can output. In that case, an external power supply might be required.
Nice guide thanks.
when using external power supply i think it is best to connect Ground from Rpi and ext power supply. Maybe write that in the guide? -
-
@mfalkvidd said:
OTHER NOTES
- The 3.3V power on the Raspberry Pi is rated for a maximum of 50mA. A regular NRF24L01+ only needs 15mA, but if you are using a power amplified version you might exceed what the Raspberry Pi can output. In that case, an external power supply might be required.
Nice guide thanks.
when using external power supply i think it is best to connect Ground from Rpi and ext power supply. Maybe write that in the guide?@flopp the best would be to use Raspberry's 5V rail and reduce it to 3.3V via the LDO like @GertSanders did in his board.
There is one member using 3.3V rail for powering PA+LNA Tranceiver without any issues - check out the latest open hardware. I have not tried it personally
-
@flopp the best would be to use Raspberry's 5V rail and reduce it to 3.3V via the LDO like @GertSanders did in his board.
There is one member using 3.3V rail for powering PA+LNA Tranceiver without any issues - check out the latest open hardware. I have not tried it personally
@alexsh1 I wouldn't want a guide to recommend a solution that is way outside the specifications even if users might not experience problems. Strange problems usually happen outside specs, they are a pain to troubleshoot and in this case might lead to frying someone's Raspberry Pi.
@flopp thanks for your suggestion, I've amended to guide.
-
Note: This guide is only applicable to MySensors 1.x. For MySensors 2, use this guide.
I noticed that a step-by-step procedure to connect the NRF24L01 to the GPIO pins and use the Raspberry as a Serial Gateway was listed in the document for MySensors 1.6.
Since I have three gateways configured this way, and I need to set up 3 more for covering different offices around the world, and I had already written the instructions in Swedish for Datormagazin, I thought I'd help out.
This is the first draft. Any feedback is welcome.
INTRODUCTION
The radio module NRF24L01+ is cheap and power efficient, but it is unable to communicate with regular wifi. The bridge between NRF24L01+ nodes and the "computer world" is called a Gateway. You can use other types of gateways, but connecting the NRF24L01+ module directly to the Raspberry Pi is a simple and cheap alternative.Wiring Things Up
Connect the NRF20L01+ radio module to the Raspberry Pi like this:
![raspi_mysensors[1].png](/uploads/files/1448223387663-raspi_mysensors-1.png)
Raspberry Pi NRF24L01+ Color 6 / GND GND Black 1 / 3.3V DC VCC Red 22 / GPIO25 CE Orange 24 / GPIO 8 CSN/CS Yellow 23 / GPIO11 / SPI_CLK SCK Green 19 / GPIO10 / SPI_MOSI MOSI Blue 21 / GPIO9 / SPI_MISO MISO Violet The IRQ pin on NRF24L01 is not currently used.
For a comprehensive view of the Raspberry Pi pins, see http://pinout.xyz/
You should also connect a decoupling capacitor to the radio. See this guide.
COMPILING THE GATEWAY
Login to your Raspberry Pi (using SSH or open a terminal on the graphical console) and run these commands:git clone https://github.com/TMRh20/RF24.git cd RF24 make all && sudo make install cd .. git clone https://github.com/mysensors/Raspberry.git cd Raspberry make all && sudo make installIf you get the following error:
pi@raspberrypi ~/RF24 $ make all && sudo make install g++ -Wall -fPIC -Ofast -mfpu=vfp -mfloat-abi=hard -mtune=arm1176jzf-s -march=armv7-a -D BCM2835_PERI_BASE=0x -c RF24.cpp gcc -Wall -fPIC -Ofast -mfpu=vfp -mfloat-abi=hard -mtune=arm1176jzf-s -march=armv7-a -D BCM2835_PERI_BASE=0x -c bcm2835.c bcm2835.c: In function ‘bcm2835_init’: bcm2835.c:1207:28: error: invalid suffix "x" on integer constantYou've probably run into the problem discussed in this thread. People have had luck with different solutions. The simplest is to make the following change to ~/Raspberry/librf24-bcm/Makefile
#IOBASE := $(shell cat /proc/iomem | grep bcm2708_vcio | cut -f 1 -d "-") IOBASE := 3F000000VERIFY THE GATEWAY
Run sudo /usr/local/sbin/PiGatewaySerial. The output should look like this:pi@raspberrypi ~/Raspberry $ sudo /usr/local/sbin/PiGatewaySerial Starting PiGatewaySerial... Protocol version - 1.4 Created PTY '/dev/pts/1' Gateway tty: /dev/ttyMySensorsGateway ================ SPI Configuration ================ CSN Pin = CE0 (PI Hardware Driven) CE Pin = Custom GPIO25 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 = 0xe7e7e7e7e7 0xc2c2c2c2c2 RX_ADDR_P2-5 = 0xff 0xc4 0xc5 0xc6 TX_ADDR = 0xe7e7e7e7e7 RX_PW_P0-6 = 0x00 0x00 0x20 0x00 0x00 0x00 EN_AA = 0x3b EN_RXADDR = 0x07 RF_CH = 0x4c RF_SETUP = 0x23 CONFIG = 0x0e DYNPD/FEATURE = 0x3f 0x06 Data Rate = 250KBPS Model = nRF24L01+ CRC Length = 16 bits PA Power = PA_LOWIf the NRF24L01+ isn't correctly wired, the following error will be shown
pi@raspberrypi ~ $ sudo /usr/local/sbin/PiGatewaySerial Starting PiGatewaySerial... Protocol version - 1.4 Created PTY '/dev/pts/2' Gateway tty: /dev/ttyMySensorsGateway check wiresIf this happens, double-check your wiring and correct any problems. Press Ctrl+Z and type
sudo killall PiGatewaySerialto get rid of the non-functioning Gateway. Then run sudo /usr/local/sbin/PiGatewaySerial again
If all is well, exit PiGatewaySerial by pressing Ctrl+C. Then run
sudo /etc/init.d/PiGatewaySerial startto start the gateway as a background process. Verify that it started correctly by running
sudo cat /dev/ttyMySensorsGatewayYou should see the message "Gateway startup complete". Exit by typing Ctrl+C.
MAKE THE GATEWAY AUTOSTART
To make sure the Gateway is started when your Raspberry Pi boots up, run the following command:sudo make enable-gwserialEnable the gateway for use with Domoticz
Domoticz (and maybe other home automation systems) has trouble reading from the default path created by PiGatewaySerial. You might need to run the following command:sudo ln -s /dev/ttyMySensorsGateway /dev/ttyUSB20And change /etc/rc.local from this
exit 0to this
ln -s /dev/ttyMySensorsGateway /dev/ttyUSB20 exit 0OTHER NOTES
-
The 3.3V power on the Raspberry Pi is rated for a maximum of 50mA. A regular NRF24L01+ only needs 15mA, but if you are using a power amplified version you might exceed what the Raspberry Pi can output. In that case, an external power supply might be required. If you use an external power source gnd must be connected to the Raspberry Pi's gnd.
-
Connecting the NRF24L01+ directly to your Raspberry Pi will prevent you from using the Raspberry Pi's gpio ports for other things, like a Z-wave board.
-
A user experienced slow data transfer compared to USB-to-Serial(ttl)<-->MySensors Gateway connection, especially on OTA firmware update. If you think this will cause a problem for you, an ethernet gateway might be a better alternative.
As always, I stand on the shoulders of giants. Related posts:
- http://forum.mysensors.org/topic/1151/tutorial-raspberry-pi-nrf24l01-direct-connection
- http://forum.mysensors.org/topic/1974/domoticz-as-controller-and-a-gateway-for-mysensor-nodes-running-on-a-raspberry-pi-2
TROUBLESHOOTING
If you get this errorpi@Domoticz3:~/Raspberry$ sudo /etc/init.d/PiGatewaySerial start [....] Starting PiGatewaySerial (via systemctl): PiGatewaySerial.serviceFailed to start PiGatewaySerial.service: Unit PiGatewaySerial.service failed to load: No such file or directory. failed!or this error
pi@raspberrypi ~ $ sudo /usr/local/sbin/PiGatewaySerial sudo: /usr/local/sbin/PiGatewaySerial: command not foundyou have probably forgotten to run sudo make install. Read the instructions again, and follow them this time :-) User @sineverba reported that a reboot of the Pi after running make install helped.
@mfalkvidd I"m confused. I noticed the instructions below is for 1.5X or below and will not work with 2.0. The link for 2.0 that is posted doesn't make any sense to me at all. It also takes me to a thread where I start reading the information from the middle of a thread. I'm coming to the conclusion that it doesn't work yet..... Am I right?
SUPER New here. sorry -
-
@mfalkvidd I"m confused. I noticed the instructions below is for 1.5X or below and will not work with 2.0. The link for 2.0 that is posted doesn't make any sense to me at all. It also takes me to a thread where I start reading the information from the middle of a thread. I'm coming to the conclusion that it doesn't work yet..... Am I right?
SUPER New here. sorry -
I also have a serial gateway next to my raspberry (3 in this case) with Domoticz on it.
If there is an issue than at least a part is still running without breaking everything.
I am using zwave at most and mysensors now for playing.
I cannot break the current zwave implementation so for me a serial gateway is the best solution.
For playing around you might just try as i imaging it could be fun to do it. -
How can we update the gateway to v1.5? I just tried to rebuild from github today and I am getting really odd errors now that I did not get before:
cc1: error: bad value (cortex-a7)What I could find online states I need to update the gcc compiler on my rPi - it is currently version 4 and latest is 5...but apt-get update gcc says I am already at latest version.
I am trying to get my slimNodes up and running using v1.5 of mysensors.
-
is this true ?
pi@raspberrypi:~$ sudo make enable-gwserial make: *** No rule to make target 'enable-gwserial'. Stop.