A Bluetooth NVidia Shield driver is HERE

Few weeks ago i posted this sneak peak...


Since I just couldn't stand the fact that Shield Bluetooth support was promised, but never delivered. So I started a long... long... quest online and spend no less then 200 hours researching over the past few weeks, learning a lot about Bluetooth GATT profiles, services, characteristics etc. etc.

I tried implementing the driver in pure Javascript, but unfortunately it was not suitable due to pairing issues. I didn't stop there, and I can now say you that i have a working Bluetooth connection from my Raspberry Pi to my NVidia Shield TV.

In the end i managed to make it work; and the driver is now on GitHub!


24replies Oldest first
  • Oldest first
  • Newest first
  • Active threads
  • Popular
  • Getting somewhere...


    • Gilles van den Hoven OMG that is another level!

    • Gilles van den Hoven Please oh please support key input as well. Especially function keys(F1 etc.), they are life saver for one-button application bindings. Best of luck for project!

    • Canberk Demiroluk actually the BLE peripheral i am making just FWDs the key combo you send from the driver. So you can always extend the driver yourself (it will be open source) to implement this. So by default there will be support for this, you just have to add it :)

  • Gilles van den Hoven this is amazing news!  Thank you so much for continuing this effort!

  • Update, check a video i posted on Twitter :)


  • Ok, first video was the peripheral working; now to see some actual integration of the remote and the shield (over Bluetooth):


  • Christian Kalemkiewicz Canberk Demiroluk Jacob Wiqvist Jeff Bernard Cooper Markus Marbach Emmanuel Serebe Pepijn Chad L. Quint Stoffers Julien Luca Weil Niels de Klerk Daniel Jordi

    The driver is now on Github https://github.com/Webunity/neeo-driver-nvidia-shield

    Twitter link: https://twitter.com/GillesvdHoven/status/1118395927578988544

  • Do you think there's any chance this driver can be mangled to support Amazon Fire?

  • Darren Greenberg Personally, I consider a Logitech hub to be the easiest way to realize this because the NEEO Brain itself cannot use Bluetooth because of discontinued development. The Logitech hub can be paired easily as a normal remote with the Amazon Fire TV via Bluetooth. The only thing you have to do then is to send the commands from NEEO via forward actions to a system that passes the command to the Logitech Hub. You can do this, for example, with a Raspberry with a PHP server or a home automation software that forwards the command from NEEO and passes it to the Logitech Hub. I myself use Symcon and IPSymconNEEO with IPSymconHarmony to remotely control a Fire TV in another room via a Logitech Hub via Bluetooth with an NEEO Remote.

      • Darren Greenberg
      • Disappointed Kickstarter Backer
      • Darren_Greenberg
      • 2 yrs ago
      • Reported - view

      Fonzo So basically replace my Logitech Harmony Touch Remote + Logitech Hub with Neeo Remote + Brain + Logitech Hub, right?

      • Fonzo
      • Fonzo
      • 2 yrs ago
      • Reported - view

      Darren Greenberg NEEO sends all commands to an external system under Settings -> NEEO Brian -> Forward actions. So you need an external system that receives these commands send from the NEEO Brian and then sends to another system the command to execute.
      In this case, you need at least NEEO Remote + NEEO Brian + a Computer, for example, a raspberry to receive the command from forward actions + Logitech Hub

      On the computer (proxy) can either be installed software that accepts the data from NEEO and just passed the command to the harmony hub. In my case, I use IP-Symcon and IPSymconNEEO for this. 

      As an alternative and if you have the technical skills and don't want to use existing software you can do this by yourself. Then you have to install for example a php server on the raspberry to get the commands from the NEEO Brian and then send the command to the Logitech Hub for example with HA-bridge

      In any case, you always need a proxy to evaluate the data from NEEO Brian and then send the command to the Logitech hub, the cheapest way is a raspberry pi.

      If the set up is ready the Harmony Hub sends without a delay a command as soon as a button is pressed on the NEEO Remote. The harmony hub can also be located in a completely different room. The important thing is that the NEEO brain and Harmony Hub are integrated in the same network

  • Hello Gilles van den Hoven Are you still there? Can you please advise on how to install the driver SDK?

    I managed to pair up the the Shield with the PI but still stuck on getting the driver in the BRAIN. 

    Doing an "npm run index.js" doesn't yield anything but error. How far am I too off?

    Or do I have to do it on the whole folder?

  • You are close, did you check the config? If the error persists, i can't really help you unless it is NodeJS related; i am no longer actively developing for the Neeo and switching to the Yio-Remote. If it IS node-js related, please open an issue on github and i'll see if i can fix it for you

  • Gilles van den Hoven ,

    I guess you are busy and most likely forgot about my request. Am sorry about that.

    But here goes : In the files hosted on Git hub miss the critical files and/ or folder namely "peripherals" as shown in your last video posted here : https://gopro.com/v/DbW4rZbP1NlQo which are of the NEEO driver side of things. 

    Of course I know you mentioned that you don't develop for NEEO anymore but what has one got to do to get hold of this driver before the NEEO dies? 😟

    It's sad that no so many realized how amazing the all in one Nvidia SHEILD is and we all missed the plot!

    Else, do I have to contact you privately about this?, because I didn't get a response at Git Hub. Pleas advise.

    • Emmanuel Serebe i am still reading in :)  if i remember correctly you have to have the BLE peripheral running and then just configure the details in config/default.json of the driver, right?

    • Emmanuel Serebe p.s. do you have some logs?


      > npm i (if needed)

      > export DEBUG=*

      > node index.js

    • Gilles van den Hoven Ok,

      Will try again later and will let you know. I just happen to be installing the WebSocket and the Neeo separately! If that's not where am going wrong.

      Otherwise I will try your steps above and will notify you.

      Thanks again.

  • Gilles van den Hoven ,

    When I run npm i in the neeo-driver-nvidia-shield cloned folder. here is the log :

    0 info it worked if it ends with ok
    1 verbose cli [ '/home/pi/.nvm/versions/node/v6.14.4/bin/node',
    1 verbose cli   '/home/pi/.nvm/versions/node/v6.14.4/bin/npm',
    1 verbose cli   'i' ]
    2 info using npm@6.11.3
    3 info using node@v6.14.4
    4 verbose npm-session 9bb3fed6f3d399ee
    5 silly install runPreinstallTopLevelLifecycles
    6 silly preinstall neeo-driver-nvidia-shield@0.0.1
    7 info lifecycle neeo-driver-nvidia-shield@0.0.1~preinstall: neeo-driver-nvidia-shield@0.0.1
    8 silly install loadCurrentTree
    9 silly install readLocalPackageData
    10 timing stage:loadCurrentTree Completed in 64ms
    11 silly install loadIdealTree
    12 silly install cloneCurrentTreeToIdealTree
    13 timing stage:loadIdealTree:cloneCurrentTree Completed in 2ms
    14 silly install loadShrinkwrap
    15 timing stage:loadIdealTree:loadShrinkwrap Completed in 21ms
    16 silly install loadAllDepsIntoIdealTree
    17 http fetch GET 200 https://registry.npmjs.org/neeo-sdk 430ms (from cache)
    18 http fetch GET 200 https://registry.npmjs.org/one-websocket 446ms (from cache)
    19 http fetch GET 200 https://registry.npmjs.org/@neeo%2fcli 502ms (from cache)
    20 silly fetchPackageMetaData error for one-websocket@^2.0.0 No valid versions available for one-websocket
    21 silly pacote range manifest for neeo-sdk@^0.53.8 fetched in 498ms
    22 silly pacote range manifest for @neeo/cli@^1.1.0 fetched in 585ms
    23 http fetch GET 200 https://registry.npmjs.org/body-parser 367ms (from cache)
    24 silly pacote range manifest for body-parser@^1.18.3 fetched in 477ms
    25 http fetch GET 304 https://registry.npmjs.org/debug 1466ms (from cache)
    26 http fetch GET 304 https://registry.npmjs.org/config 1479ms (from cache)
    27 http fetch GET 304 https://registry.npmjs.org/bluebird 1552ms (from cache)
    28 silly pacote range manifest for debug@^3.1.0 fetched in 1618ms
    29 silly pacote range manifest for config@^1.28.1 fetched in 1634ms
    30 http fetch GET 304 https://registry.npmjs.org/debug 1061ms (from cache)
    31 silly pacote range manifest for bluebird@^3.5.2 fetched in 1696ms
    32 http fetch GET 304 https://registry.npmjs.org/bluebird 1129ms (from cache)
    33 http fetch GET 304 https://registry.npmjs.org/commander 1118ms (from cache)
    34 http fetch GET 304 https://registry.npmjs.org/axios 1183ms (from cache)
    35 http fetch GET 304 https://registry.npmjs.org/bonjour 1207ms (from cache)
    36 silly pacote range manifest for debug@^4.1.0 fetched in 1199ms
    37 silly pacote range manifest for bluebird@^3.5.3 fetched in 1267ms
    38 silly pacote range manifest for commander@^2.19.0 fetched in 1246ms
    39 http fetch GET 304 https://registry.npmjs.org/express 1241ms (from cache)
    40 silly pacote range manifest for axios@^0.18.0 fetched in 1340ms
    41 silly pacote range manifest for bonjour@^3.5.0 fetched in 1354ms
    42 http fetch GET 304 https://registry.npmjs.org/fast-url-parser 904ms (from cache)
    43 silly pacote range manifest for bluebird@^3.5.1 fetched in 118ms
    44 silly pacote range manifest for express@^4.16.4 fetched in 1394ms
    45 silly pacote range manifest for commander@^2.16.0 fetched in 167ms
    46 silly pacote range manifest for fast-url-parser@^1.1.3 fetched in 1052ms


    There is an error at line "20"

    • Emmanuel Serebe it seems like the library i have been using (one-websocket) is no longer on npmjs and github. I'll have to check how i'll fix it.  I do have a local version which has the library, i'll see if i can just make it part of the github project

  • Emmanuel Serebe i've restored the websocket library i've used and added this to the project. You should be able to get the latest version from GitHub. Can you check if it works for you now?

  • Gilles van den Hoven ,

    So far so sweet!

    Am now going to look into the auto start stuff. I found a few pages where you posted them.

    Nice one man!