LEGO WeDo 2.0 with MIT App Inventor

I got a request for help today, Mr. Rocha is trying to use MIT App Inventor to control the WeDo 2.0 Smart Hub RGB LED.

I’ve never used App Inventor before but I had already installed the Companion once in my Android Phone because I read something somewhere and found it quite similar to Snap! and Scratch (and  also just because it is from MIT… I have a fetiche for MIT back from when I was at college and read Nicholas Negroponte articles on Wired). So let’s give it a try.

I just wanted to connect to the WeDo 2.0 Smart Hub and change the color to RED. When using gatttool that’s done with just

char-write-cmd 3d 06040109

Just needed to add the BLE extension to start working, getting a connection was easy but writing to the handle took a while since App Inventor BLE extension doesn’t use handles, just UUIDs. So I had to go back to my notes and find the Service UUID and the Characteristic UUID:

service_uuid = 00004f0e-1212-efde-1523-785feabcd123
characteristic_uuid = 00001565-1212-efde-1523-785feabcd123

Then I tried a block called “call BluetoothLE. WriteStringValue” but I couldn’t find a way to convert an hexadecimal string (“06040109”) to a proper string to send.

So I tried another block, “call BluetoothLE.WriteIntValue”. At first I made an old mistake, converting “06040109h” to “100925705”. Didn’t work.

Then I wrote it in reverse (“09010406h”) and converted it to “151061510”. And now it works!


Now that I finally started, I think I will use App Inventor some more times. Damn easy to create an BLE Android app!

13 comentários em “LEGO WeDo 2.0 with MIT App Inventor”

    1. You can’t (sorry, my blog is in a small server).
      Use flickr or other public picture hosting service in the cloud and write down just the link.

  1. Hello,
    Thanks a lot for your blog on Lego and especially Lego WeDo2.0. I’ve followed your example from above, and built the same WeDo app in App Inventor…quite easy like you said. I can check off controlling the motors from Android. Next, I was able to make do the same based upon your tutorial in the site using my BrickPi (RPi 3B…compiling the python GATTRequester was quite easy on that platform (not nearly the headaches you mentioned with the EV3 brick). Anyway, I could control the WeDo from RPi as well using the gatttool and the python libraries as well.
    So, I’m wondering if you’ve deciphered the rest of the control and data codes for the Smart Hub? Mainly, I’m looking for:
    – activating 2 motors at once
    -controlling the speed of the motor
    -getting feedback from the proximity and tilt sensor
    – (from your EV3Dev posting, I got most of the motor control codes)
    -it would also be nice to know the trick things, like determining the button state (pushed/unpushed), making tones with the piezo buzzer, color codes for the RGB LED (you already posted the one for “red” above)
    Many thanks for your help!

    1. Hi!
      Thanks for your comment, I feel delighted whenever someone gets something done thanks to something I write here.
      LEGO released the WeDo 2.0 SDK some months ago ( I’m not a programmer so I’m not used to SDK’s but I was expecting something much more clear and with better documentation.
      I paused the work with WeDo 2.0 for a while, but you can find the basic color codes here:
      and a few more functions (including sound) in these group of posts:

      1. Thanks for the links. I’ll try to add these to my App Inventor app, and see how it goes. My basic idea was to create a WeDo 2.0 control using the accelerometer tilt like in the App Inventor EV3 example. I’ll probably post it to the App Inventor projects when/if I get it working.
        Also, I was digging around in the Lego WeDo SDK Windows 8 code a bit last night….not much success finding a direct statement of the byte codes sent via BLE. Maybe I should invest in the BLE sniffer.
        I’ll let you know if I get the app fully working.

      2. Hi Again, and Happy New Year!
        I got the Lego WeDo2 car app to work based on your blog and the EV3Dev postings. I couldn’t post the code to the MIT App Inventor gallery, since they don’t allow apps with ‘experimental’ extensions. So I published the finished app in Google Play:
        Also, I added a blog entry to document the code in case others want to try it as well:
        I got almost all of the parts to work: motors + LED. But the piezo control failed me. I believe all of the inputs were correct, and I tried manually passing the values, but it still just left the Smart Hub with a continuous mono-tone buzz. The Lego WeDo2 app didn’t implement the Piezo control either, which makes me wonder if they also had a problem with the Android version of this control.
        Anyway, all of this was based on your inputs, and I just implemented some code. Thanks again for all of the critical inputs. Let me know if you have suggestions on how to improve or further the app. I would like to move on to adding computer vision control, but this may require the full blown Android SDK + Lego SDK. I’ll see how ambitious I am…

      3. Hi again and happy New Year,
        I got the lego WeDo Tilt to drive app fully working. All of it was based on your blog posts…I only implemented it in a bit of code.
        I released the app to Google Play:

        Also, the description of how to build the app is on my blog:
        Many thanks again for your insights to the Lego WeDo!

  2. Hi.
    This is absolutely amazing work. I’m very grateful.
    I don’t understand how can it be that the only two usable resources how to combine wedo2.0 and appinventor is your blog and Rex Baker’s blog. It’s insane.
    The potential of the LEGO WeDo for teaching is huge. But the stupid Windows/Mac software is holding it back. Even the android sw is limited to tablets only. And the SDK is a mess. Shame on you LEGO.
    Your blog is the best resource on how to play with WeDo2.0 from Linux/Raspberrypi.

    I just wanted to thank you for your work. You are an inspiration.
    Using your finding on reversengineering the BT protocol and Rex’s hints on appinventor I was able to figure out how to comunicate with the hub and even expand on it a little, so I have sound working through MIT AI too. The trick was to separate the integer values to 32bit values and send it as a list.

    Again, thank you for your inspiring work on this.
    It’s a shame that this kind of closed source approach from LEGO (with the unusable SDK) is hampering STEAM education, unnecessarily. WeDo2.0 is a fantastic tool, that has a very limited reach, because of little details like this. Thank you for helping to change that.

    1. Thanks for your words. Unfortunately WeDo2 is being phased out and the new SPIKE Essentials will replace it so don’t expect much more information to be made available for WeDo2 from now on.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *