Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. Hardware
  3. Step-by-step procedure to connect the NRF24L01+ to the GPIO pins and use the Raspberry as a Serial Gateway (MySensors 1.x)

Step-by-step procedure to connect the NRF24L01+ to the GPIO pins and use the Raspberry as a Serial Gateway (MySensors 1.x)

Scheduled Pinned Locked Moved Hardware
nrf24raspberry piraspberryraspberry nrf24l01 gpiogateway
168 Posts 47 Posters 175.0k Views 36 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • D Offline
    D Offline
    den2k
    wrote on last edited by
    #44

    weird. Permission Denied problem again.

    What is the USER : GROUP that is needed for this to work?

    martinhjelmareM 1 Reply Last reply
    0
    • mfalkviddM Offline
      mfalkviddM Offline
      mfalkvidd
      Mod
      wrote on last edited by
      #45

      @den2k I think your best chance is to post in the Home Assistant category. I don't have any experience with Home Assistant unfortunately.

      1 Reply Last reply
      0
      • J jpbabou

        Hi
        something is missing..

        Is there a problem with the repository
        Tks a lot for your job!

        pi@domoticjp ~ $ sudo git clone https://github.com/mysensors/Raspberry.git
        Cloning into 'Raspberry'...
        remote: Counting objects: 273, done.
        remote: Compressing objects: 100% (3/3), done.
        remote: Total 273 (delta 0), reused 0 (delta 0), pack-reused 270
        Receiving objects: 100% (273/273), 215.00 KiB | 0 bytes/s, done.
        Resolving deltas: 100% (114/114), done.
        Checking connectivity... done.
        pi@domoticjp ~ $ cd Raspberry/librf24-bcm
        -bash: cd: Raspberry/librf24-bcm: No such file or directory
        mfalkviddM Offline
        mfalkviddM Offline
        mfalkvidd
        Mod
        wrote on last edited by
        #46

        @jpbabou said:

        Hi
        something is missing..

        Is there a problem with the repository
        Tks a lot for your job!

        pi@domoticjp ~ $ sudo git clone https://github.com/mysensors/Raspberry.git
        Cloning into 'Raspberry'...
        remote: Counting objects: 273, done.
        remote: Compressing objects: 100% (3/3), done.
        remote: Total 273 (delta 0), reused 0 (delta 0), pack-reused 270
        Receiving objects: 100% (273/273), 215.00 KiB | 0 bytes/s, done.
        Resolving deltas: 100% (114/114), done.
        Checking connectivity... done.
        pi@domoticjp ~ $ cd Raspberry/librf24-bcm
        -bash: cd: Raspberry/librf24-bcm: No such file or directory
        

        The guide has been updated to reflect the updated in the MySensors Raspberry repository now. Thanks @jpbabou !

        1 Reply Last reply
        0
        • D den2k

          weird. Permission Denied problem again.

          What is the USER : GROUP that is needed for this to work?

          martinhjelmareM Offline
          martinhjelmareM Offline
          martinhjelmare
          Plugin Developer
          wrote on last edited by martinhjelmare
          #47

          @den2k

          Hi!

          Have you added the user that runs homeassistant to the dialout group? This group is usually owner of serial ports.

          Check default group of serial port (change for your port below) after connecting it:

          pi@martin-pi:~ $ ls -l /dev/ttyUSB0 
          crw-rw---- 1 root dialout 188, 0 dec 18 03:21 /dev/ttyUSB0
          

          Check groups that user pi is in:

          pi@martin-pi:~ $ groups pi
          pi : pi adm dialout cdrom sudo audio video plugdev games users input netdev spi i2c gpio
          

          If pi runs homeassistant, which should be the case, and is not in dialout, add pi to dialout:

          sudo adduser pi dialout
          

          Changing owner of a port will only work until you disconnect it. Default owner will be restored upon reconnect, if you haven't written a special udev rule.

          Edit:
          According to the readme in the mysensors raspberry repo (https://github.com/mysensors/Raspberry), the group of the device is tty. So you should probably use that, and not dialout. But you will know, when you check with ls -l.

          1 Reply Last reply
          1
          • mfalkviddM mfalkvidd

            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

            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 install
            

            If 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 constant
            
            

            You'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 := 3F000000
            

            VERIFY 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_LOW
            

            If 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 wires
            

            If this happens, double-check your wiring and correct any problems. Press Ctrl+Z and type

            sudo killall PiGatewaySerial
            

            to 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 start
            

            to start the gateway as a background process. Verify that it started correctly by running

            sudo cat /dev/ttyMySensorsGateway
            

            You 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-gwserial
            

            Enable 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/ttyUSB20
            

            And change /etc/rc.local from this

            exit 0
            
            

            to this

            ln -s /dev/ttyMySensorsGateway /dev/ttyUSB20
            exit 0
            
            

            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. 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 error

            pi@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 found
            

            you 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.

            S Offline
            S Offline
            Scala
            wrote on last edited by
            #48

            @mfalkvidd Hi there and thanks for a great and super detailed step-by-step tutorial.

            I've got mine running in no time with your instructions, but after a couple of minutes I've got the following error:

            2015-12-30 20:51:30.356 Error: MySensors: Unhandled sensor (sub-type=32), please report with log!
            2015-12-30 20:52:01.390 Error: Serial Port closed!... Error: End of file
            2015-12-30 20:52:02.315 MySensors: retrying in 30 seconds...
            2015-12-30 20:52:31.319 MySensors: Using serial port: /dev/ttyUSB20
            2015-12-30 20:52:31.320 Error: MySensors: Error opening serial port!
            2015-12-30 20:52:32.321 MySensors: retrying in 30 seconds...
            2015-12-30 20:53:01.324 MySensors: Using serial port: /dev/ttyUSB20

            I also attached a partial screen capture showing that it was working before 8-)

            2015-12-30 21_18_13-Domoticz - Opera.png

            Any idea on why is this happening and how to solve it?

            Southern regards and happy new year to all!

            ronnyandreR 1 Reply Last reply
            0
            • mfalkviddM Offline
              mfalkviddM Offline
              mfalkvidd
              Mod
              wrote on last edited by
              #49

              You are using a sensor type that your version of Domoticz doesn't support. What type os sensor is it? Which version of Domoticz are you using? Upgrading Domoticz might solve the problem (if the newer version supports this sub-type).

              1 Reply Last reply
              0
              • Sander TeunissenS Offline
                Sander TeunissenS Offline
                Sander Teunissen
                wrote on last edited by
                #50

                When I try to run the init.d script:

                sudo /etc/init.d/PiGatewaySerial start
                

                I get the following error:

                [....] Starting PiGatewaySerial (via systemctl): PiGatewaySerial.serviceFailed to start PiGatewaySerial.service: Unit PiGatewaySerial.service failed to load: No such file or directory.
                 failed!
                

                No such file or directory.... Obviously a missing folder or file, but I am not savvy enough to debug this.... Any help appreciated..

                mfalkviddM 1 Reply Last reply
                0
                • Sander TeunissenS Sander Teunissen

                  When I try to run the init.d script:

                  sudo /etc/init.d/PiGatewaySerial start
                  

                  I get the following error:

                  [....] Starting PiGatewaySerial (via systemctl): PiGatewaySerial.serviceFailed to start PiGatewaySerial.service: Unit PiGatewaySerial.service failed to load: No such file or directory.
                   failed!
                  

                  No such file or directory.... Obviously a missing folder or file, but I am not savvy enough to debug this.... Any help appreciated..

                  mfalkviddM Offline
                  mfalkviddM Offline
                  mfalkvidd
                  Mod
                  wrote on last edited by
                  #51

                  @Sander-Teunissen my guess is that you forgot the sudo make install part of the installation instructions.

                  1 Reply Last reply
                  0
                  • Sander TeunissenS Offline
                    Sander TeunissenS Offline
                    Sander Teunissen
                    wrote on last edited by
                    #52

                    @mfalkvidd Yesterday I stopped trying and shutdown the Pi. This morning I tried the same again and it works !!
                    Pretty sure I haven't done anything else.
                    Thanks anyway.

                    Sander

                    1 Reply Last reply
                    1
                    • MrRikkieM Offline
                      MrRikkieM Offline
                      MrRikkie
                      wrote on last edited by MrRikkie
                      #53

                      Hello, If followed the instruction and everything seemed to work without any problem.
                      However when I enter the command : sudo cat /dev/ttyMySensorsGateway
                      I get the message : cat: /dev/ttyMySensorsGateway: No such file or directory
                      Does anybody have any idea how to solve this ?

                      mfalkviddM ronnyandreR 2 Replies Last reply
                      0
                      • MrRikkieM MrRikkie

                        Hello, If followed the instruction and everything seemed to work without any problem.
                        However when I enter the command : sudo cat /dev/ttyMySensorsGateway
                        I get the message : cat: /dev/ttyMySensorsGateway: No such file or directory
                        Does anybody have any idea how to solve this ?

                        mfalkviddM Offline
                        mfalkviddM Offline
                        mfalkvidd
                        Mod
                        wrote on last edited by
                        #54

                        @MrRikkie what output did you get when you ran sudo /etc/init.d/PiGatewaySerial start ?

                        1 Reply Last reply
                        0
                        • MrRikkieM Offline
                          MrRikkieM Offline
                          MrRikkie
                          wrote on last edited by
                          #55

                          @mfalkvidd said:

                          sudo /etc/init.d/PiGatewaySerial start

                          No output and no error message. Just a new command line.
                          pi@raspberrypi ~ $ sudo /etc/init.d/PiGatewaySerial start
                          pi@raspberrypi ~ $

                          1 Reply Last reply
                          0
                          • Sander TeunissenS Offline
                            Sander TeunissenS Offline
                            Sander Teunissen
                            wrote on last edited by
                            #56

                            When I

                            ls -l ttyMySensorsGateway
                            

                            I get

                            lrwxrwxrwx 1 root root 10 Jan  3 20:21 ttyMySensorsGateway -> /dev/pts/0
                            

                            It's all root. This results in all kinds of acessability issues. I followed all instructions exactly. Anyone any ideas how to change this ?

                            Sander.

                            martinhjelmareM mfalkviddM 2 Replies Last reply
                            0
                            • Sander TeunissenS Sander Teunissen

                              When I

                              ls -l ttyMySensorsGateway
                              

                              I get

                              lrwxrwxrwx 1 root root 10 Jan  3 20:21 ttyMySensorsGateway -> /dev/pts/0
                              

                              It's all root. This results in all kinds of acessability issues. I followed all instructions exactly. Anyone any ideas how to change this ?

                              Sander.

                              martinhjelmareM Offline
                              martinhjelmareM Offline
                              martinhjelmare
                              Plugin Developer
                              wrote on last edited by
                              #57

                              @Sander-Teunissen

                              Try writing a udev rule to set owner of the device (ttyMysensorsGateway) at boot. If you don't need to use the link you could write a rule that names the pts device to the same name every boot, I think. At least for usb devices this works. Haven't tried it in this particular case.

                              1 Reply Last reply
                              0
                              • Sander TeunissenS Sander Teunissen

                                When I

                                ls -l ttyMySensorsGateway
                                

                                I get

                                lrwxrwxrwx 1 root root 10 Jan  3 20:21 ttyMySensorsGateway -> /dev/pts/0
                                

                                It's all root. This results in all kinds of acessability issues. I followed all instructions exactly. Anyone any ideas how to change this ?

                                Sander.

                                mfalkviddM Offline
                                mfalkviddM Offline
                                mfalkvidd
                                Mod
                                wrote on last edited by
                                #58

                                @Sander-Teunissen said:

                                When I

                                ls -l ttyMySensorsGateway
                                

                                I get

                                lrwxrwxrwx 1 root root 10 Jan  3 20:21 ttyMySensorsGateway -> /dev/pts/0
                                

                                It's all root. This results in all kinds of acessability issues. I followed all instructions exactly. Anyone any ideas how to change this ?

                                The permissions for a soft link are not used (and if they were, any user would be allowed to do anything since everything is rwx). The permissions for the target is used instead. So it is the result of

                                ls -l /dev/pts/0
                                

                                you need to worry about.

                                1 Reply Last reply
                                1
                                • ahmedadelhosniA Offline
                                  ahmedadelhosniA Offline
                                  ahmedadelhosni
                                  wrote on last edited by
                                  #59

                                  Hello @mfalkvidd , I read the topic again but I am a bit confused. Normally we have a sketch on the Arduino board to enable signing for example or implement our desired code. I don't understand how to edit this before compiling ?

                                  1 Reply Last reply
                                  0
                                  • mfalkviddM Offline
                                    mfalkviddM Offline
                                    mfalkvidd
                                    Mod
                                    wrote on last edited by
                                    #60

                                    Sorry @ahmedadelhosni, I haven't tried to compile the Raspberry gateway for signing. @Anticimex will probably chide me for that, and rightly so :)
                                    It should just be a matter of modifying MyConfig.h to enable signing, as per the instructions in http://forum.mysensors.org/topic/1021/security-introducing-signing-support-to-mysensors but maybe the MySensor files in the Raspberry repo haven't been updated with the signing features.

                                    1 Reply Last reply
                                    0
                                    • AnticimexA Offline
                                      AnticimexA Offline
                                      Anticimex
                                      Contest Winner
                                      wrote on last edited by
                                      #61

                                      The signing backends are updated for multi arch support thanks to @tbowmo and his SAMD gateway project, but they still assume Arduino compatible api:s for io, so if the raspberry repo/port provide that, it should work. If not, it should just be a matter of adding support for the raspberry spi:s for setting pin direction and states and (if sw backend is to be used) provide a random number generator. The code is C/C++ and hw independent in other aspects.

                                      Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

                                      1 Reply Last reply
                                      0
                                      • AnticimexA Offline
                                        AnticimexA Offline
                                        Anticimex
                                        Contest Winner
                                        wrote on last edited by
                                        #62

                                        If anyone would like to add support for rPi to the signing backends, I suggest using a Linux generic approach using sysfs to handle io. Same for rng (using an appropriate device node, rpi has a hw rng that should be used).
                                        If the design is Linux generic and uses proper design to abstract raspberry board specifics, it opens up for reuse by any hw that uses a Linux kernel :)

                                        Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

                                        1 Reply Last reply
                                        0
                                        • haydukeH Offline
                                          haydukeH Offline
                                          hayduke
                                          wrote on last edited by
                                          #63

                                          I've been struggling with this setup for a few weeks now. I've resisted posting to try and figure it out, but I'm not making any progress. When I first setup the rpi with the nrf24 directly connected, everything worked great. I was running a node with temp and motion pretty reliably. I had some difficulty getting the relay node to work, but I got that working eventually as well, but not reliably. While trying to resolve this, I started getting these errors (log from Domoticz):
                                          2016-02-19 10:43:36.007 MySensors: Using serial port: /dev/ttyUSB20
                                          2016-02-19 10:43:36.008 Error: MySensors: Error opening serial port!
                                          2016-02-19 10:43:37.008 MySensors: retrying in 30 seconds...

                                          I see the post above about this being related to using sensors not supported. Since it started with the relay node, I took that out of the setup, but I'm still getting the error.

                                          I've rebuilt the entire rpi, mysensors, and domoticz, but I can't get it to work reliably. If I start the gateway manually via a putty session, it will work for a few minutes, but then it stops and goes back to the command prompt in putty and I can see the log in Domoticz start showing the above errors.

                                          I have setup the gateway to start automatically, but it doesn't seem to restart correctly after a reboot.

                                          I suspect I have a version mismatch in my code somewhere, but I can't seem to find it. My last effort was to remove all code from my computer and start over, ie reinstall Arduino and a fresh download of MySensors code (v1.5).

                                          I've also tried changing the permissions on the tty devices, but that didn't seem to help either.

                                          I was real excited about this project when I first read about it. When I finally got some parts in, I had some quick success that kept me motivated, but my enthusiasm is waning a bit with my total lack of progress on this issue. :(

                                          Thanks in advance for any help.

                                          1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          18

                                          Online

                                          11.7k

                                          Users

                                          11.2k

                                          Topics

                                          113.0k

                                          Posts


                                          Copyright 2019 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • MySensors
                                          • OpenHardware.io
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular