MagicMirror Forum
    • Recent
    • Tags
    • Unsolved
    • Solved
    • MagicMirror² Repository
    • Documentation
    • 3rd-Party-Modules
    • Donate
    • Discord
    • Register
    • Login
    A New Chapter for MagicMirror: The Community Takes the Lead
    Read the statement by Michael Teeuw here.

    MMM-Navigate, Navigation inside MagicMirror with Rotary Encoder

    Scheduled Pinned Locked Moved System
    45 Posts 6 Posters 21.3k Views 5 Watching
    Loading More Posts
    • 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.
    • E Offline
      Eisblume @AxLed
      last edited by

      @AxLed said in MMM-Navigate, Navigation inside MagicMirror with Rotary Encoder:

      {notification:‘BUTTON_PRESSED’,payload:‘’},

      Thanks. Works perfect !!!

      1 Reply Last reply Reply Quote 0
      • K Offline
        keineAhnung123
        last edited by

        Hello @AxLed ,

        Two things:

        First

        I have the same issue like @Eisblume :

        The click doesnt work.
        When i then start a sample code to test the rotary encoder (from like here), the click works in the sample code.
        If i start the Magic Mirror after that again, then the click works there too.

        Maybe there is a missing initialization of the rotary encoder in your code?

        Second

        Is there a possibility to get more config possibilities?
        Like starting the module hidden or shortening the time of the hiding process?

        Thanks in advance :)

        1 Reply Last reply Reply Quote 0
        • A Offline
          AxLed Module Developer
          last edited by

          @keineAhnung123,

          to your first issue:

          • is only click not working or is rotation also not working?
            Because rotation and click (Button press) uses the same library (onOff).
          • on which pin is click connected, as the pi GPIO Pins have different features?
          • what versions you are using (pi, OS, MM-Version)?

          To your second issue.

          • MMM-Navigate uses the MM notification system, so you can do almost everything you want. What are you trying to to, maybe i can give you a sample for your config.js
          • for shortening time of hidding see MM Docs -> search for hide, there is a parameter for speed.

          Regards

          AxLED

          1 Reply Last reply Reply Quote 0
          • K Offline
            keineAhnung123
            last edited by

            Hello @AxLed , thanks for your reply

            first

            • rotation works fine but the button press does not
            • i use your standard configuration so it seems to be BCM 19
            • PI 3 B+, stretch, MM 2.14.0

            I tried MMM-Buttons too. Same problem there. I first have to run a sample script with python and after that the button works in MM too. It uses the onoff library too.

            I found a strange behaviour:
            I start MM -> button click doesnt work
            I start python test script and after that MM -> button click works
            When i restart the Raspberry PI and start MM (without the python test script) -> button click works
            When i shutdown the Raspberry PI and cut off the connection to an electricity source and restart the PI after that -> button click doesnt work

            Thats strange isnt it?

            second

            I changed the hiding time from 10000 to 2000 cause i prefer a shorter time.
            Is there a way to start the module hidden?
            I tried following:

                // Define start sequence.
            
                start: function() {
            
                    Log.info("Starting module: " + this.name);
            
                    this.sendConfig();//pass config to node_helper.js
            
                    this.hide();
            
                },
            

            and this

                //Helper, to use module without Rotary Encoder and without GPIO Pins, like developing in Pixel VM
            
                notificationReceived: function(notification, payload) {
            
                    if(notification === "CW" || notification === "CCW" || notification === "PRESSED"){
            
                        this.naviaction({inputtype: ""+ notification +""});
            
                    }
            
                    if(notification === "SHELLCOMMAND"){
            
                         this.sendSocketNotification(notification, payload);
            
                    } 
            
                    if(notification === "MODULE_DOM_CREATED"){
            
                         this.hide();
            
                    }
            
                },
            

            but both didnt take effect :(

            third

            I found an reproducable error:
            When i start MM and first rotate counterclockwise there is an error in the MM console:

            [09.01.2021 09:11.07.337] [LOG]   MMM-Navigate, listen on GPIO PINs (BCM): 26,20,19
            
            [09.01.2021 09:11.18.306] [ERROR] Whoops! There was an uncaught exception...
            [09.01.2021 09:11.18.321] [ERROR] ReferenceError: lastdir is not defined
                at tick (/home/pi/MagicMirror/modules/MMM-Navigate/node_helper.js:92:39)
                at /home/pi/MagicMirror/modules/MMM-Navigate/node_helper.js:66:4
                at /home/pi/MagicMirror/modules/MMM-Navigate/node_modules/onoff/onoff.js:135:9
                at Array.forEach (<anonymous>)
                at pollerEventHandler (/home/pi/MagicMirror/modules/MMM-Navigate/node_modules/onoff/onoff.js:134:32)
            

            It doesnt effect the functionality but just wanted to mention it… ;)

            1 Reply Last reply Reply Quote 0
            • A Offline
              AxLed Module Developer
              last edited by

              @keineAhnung123,

              thanks for feedback.
              first:
              Idea A:

              • maybe the pin 19 is the problem, because it is not only a GPIO pin rather it has SPI features. Can you change to BCM16 (and change it in config.js as well) and try it?

              Idea B:

              • Do you use capacitors for debouncing? If not, you can change debouncing value of following line: https://github.com/Ax-LED/MMM-Navigate/blob/master/node_helper.js#L37

              second:

              • Which module should start hidden? MMM-Navigate?

              third:
              I tried to reproduce on my pi 3 and get no error, so i checked the code.
              You can add following line as new line 19 in node_helper.js
              var lastdir = '';

              AxLED

              1 Reply Last reply Reply Quote 0
              • K Offline
                keineAhnung123
                last edited by

                @AxLed
                I will try that later. Thanks
                And yes, i want to start MMM-Navigate hidden. Is that possible?

                1 Reply Last reply Reply Quote 0
                • A Offline
                  AxLed Module Developer
                  last edited by

                  @keineAhnung123 ,

                  informations to your second issue:
                  Your request is not provided by MMM-Navigate, maybe it is possible with one of the following modules (untested):

                  • MMM-ModuleScheduler
                  • MMM-ModuleToggle

                  AxLED

                  1 Reply Last reply Reply Quote 0
                  • K Offline
                    keineAhnung123
                    last edited by

                    Hello @AxLed

                    first

                    • Idea A: didnt solve the problem. Still no click
                    • Idea B: I tried capacitors and software debouncing. Still no click

                    I will use this python script to get the click working:

                    import RPi.GPIO as GPIO
                    GPIO.setmode(GPIO.BCM)
                    BUTTON_PIN = 16
                    GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down = GPIO.PUD_UP)
                    

                    and start it within node_helper.js:

                    var child_process = require('child_process');
                    
                    module.exports = NodeHelper.create({
                    	// Subclass start method.
                      start: function() {
                    		var self = this;
                    		this.loaded = false;
                    		this.createRoutes();
                    		child_process.execFile('python', ['/home/pi/MagicMirror/modules/MMM-Navigate/ky-040-initialisieren.py']);
                    	},
                    

                    Now it works.

                    Btw: In intializeRotary-function (node_helper.js) there ist a CLK and DT.read and also a CLK and DT.watch instruction. For the SW there is only a SW.watch but not a read instruction. Is that right? Just wanted to mention. Im not an expert in programming.

                    third
                    Yes, the error is gone :)

                    1 Reply Last reply Reply Quote 0
                    • A Offline
                      AxLed Module Developer
                      last edited by

                      @keineAhnung123 ,

                      thanks for your patience.
                      to first:
                      it seems to be something with the pullup / pulldown resistors, see also https://github.com/fivdi/onoff#configuring-pullup-and-pulldown-resistors
                      See also the new “gpio” config command (https://www.raspberrypi.org/forums/viewtopic.php?f=117&t=208748)
                      So here is another idea, can you try (based on informations mentione above):

                      • (i suppose your SW pin is 16)
                      • add following line in /boot/config.txt
                        gpio=16=ip,pu
                        Meaning: sets your GPIO 16 as input (ip) and pull up (pu)
                      • if this doesnt work try:
                        gpio=16=ip,pd
                        Meaning: sets your GPIO 16 as input (ip) and pull down (pd)

                      Maybe this way MMM-Navigate works without the python script.

                      To SW.watch you mentioned, this is ok, as i dont need to know the initial state of SW.

                      to third:

                      • i added the line in node_helper.js in the github repo.

                      Regards

                      AxLED

                      1 Reply Last reply Reply Quote 0
                      • K Offline
                        keineAhnung123
                        last edited by

                        @AxLed Now it works with gpio=16=ip,pu
                        Do the changes in boot.txt affect the Raspberry Pi in any way i have to know?

                        Thanks a lot so far :)

                        1 Reply Last reply Reply Quote 0
                        • 1
                        • 2
                        • 3
                        • 4
                        • 5
                        • 1 / 5
                        • First post
                          Last post
                        Enjoying MagicMirror? Please consider a donation!
                        MagicMirror created by Michael Teeuw.
                        Forum managed by Sam, technical setup by Karsten.
                        This forum is using NodeBB as its core | Contributors
                        Contact | Privacy Policy