Archive

Posts Tagged ‘google’

How to Setup an Orange Pi Zero DIY Smart Speaker with Google Assistant SDK

July 30th, 2017 36 comments

A preview release of Google Assistant SDK working with Raspberry Pi 3 and other ARMv7 boards was released in May, and soon after, AIY Projects Voice Kit was offered for free with Raspberry Pi Magazine in order to a complete smart speaker kit working with RPi 3. I wanted to try it on one of FriendlyELEC or Shenzhen Xunlong Allwinner board, since all we need is audio input and output, and an Internet connection. Earlier this month, I came across Orange Pi Zero Set 6 Kit that had all I needed: Orange Pi Zero ARM Linux board, an expansion board with built-in microphone and audio output jack, and a cute and small case to neatly put everything together.

Orange Pi Zero Set 6 Kit Unboxing and Assembly

Shenzhen Xunlong sent me the kit so that I can try it out.

The package includes two Orange Pi packages, the plastic case, some a bag with screws and rubber pads.

One of the package comes with Orange Pi Zero board powered by Allwinner H2+ quad core processor with 512 MB RAM, micro USB for power, 10/100M Ethernet, a USB port, a WiFi antenna, and expansion headers on the top…

Click to Enlarge

.. and a micro SD card slot on the bottom, which we’ll use to boot the operating system.

The second package is for Orange Pi Zero Interface board v1.1 with two more USB port, an IR receiver, a 3.5mm audio jack, and a built-in microphone (top right).

Click to Enlarge

The next step is just to plug the interface board into Orange Pi Zero board, bending the WiFi antenna between the two boards…

Click to Enlarge

… before pushing the board from the bottom of the enclosure, tightened the cover with the 4 screws, and adding the 4 rubber pads.

Click to Enlarge

Installing Ubuntu on Orange Pi Zero & Configuring Networking and Audio Input & Output

Google Assistant SDK requires Ubuntu or Debian operating system, so I downloaded Ubuntu server legacy image on Armbian website, since the mainline image does not support XR819 WiFi module at all. I then extracted Armbian_5.30_Orangepizero_Ubuntu_xenial_default_3.4.113.7z and flashed Armbian_5.30_Orangepizero_Ubuntu_xenial_default_3.4.113.img  with Etcher on a micro SD card using my main computer.

Once it was done, I took the micro SD card to Orange Pi Zero board, connected my own speakers to the 3.5mm audio jack and USB for power, as well as a 5V/2A USB charger to power the system.

Click to Enlarge

You may notice an extra USB dongle on the picture above, but we’ll talk about that later.

I’ll use WiFi to test Google Assistant, but I also connected an Ethernet cable to make it easier for first time setup. If you don’t have Ethernet, you could also connect the board to a TV via HDMI first.

After looking up the IP address of the board in my router, I connected with SSH using root (password: 1234):

The very first boot it will ask your to change the root password, and create a new user. You may want to create “pi” user at this stage. We should not be able to access the command, and run the following command to configure Orange Pi Zero board:

I first changed the timezone.

Then selected WiFi – Connect to wireless access point to connect to my WiFi router.

We can quit armbian-config, and optionally disconnect the Ethernet cable, and reconnect SSH over WiFi, which I did.

Back in the command line, I tested audio recording & playback with the built-in microphone and speakers using the same commands as in ReSpeaker guide:

The first command recorded my voice, and then I pressed Ctrl+C to stop, and play it back with the second command. I worked fine for me. If you wish you can adjust the playback and recording volume with:

We’ll also need to create .asoundrc file for Google Assistant to work with ALSA. For we need to note the microphone card and device number (0,0):

as well as speaker card and device number (0,0):

If you want to use your TV as speaker, you’d use Card 1, device: 0.

If you have not created a pi or other user yet, you’ll want to add one belonging to sudoers and audio groups, and go the home directory:

Now create a ~/.asoundrc with the following match the card and device for our mic and speaker:

[Update: As we’ll see below this won’t work with the built-in microphone, but as indicated in the comments below, this can be fixed by changing pcm.mic section with:

I have not changed the rest of the post, but the built-in microphone on Orange Pi Zero does work now]

Setting Up Google Assistant on Orange Pi Zero

Now that audio and networking are both setup and working, we can carry on with the instructions to install Google Assistant SDK and demo. Those are the same for all boards, and I’ll describe them below in details.

We need to configure a Google Developer Project.

Go to the Project page in Google Platform Console, and click on Create Project.

I called it Orange Pi Zero Smart Speaker, and clicked on Create.

Next, we’ll need to enable Google Assistant API for our project. Simply click on Enable on that page. The “Orange Pi Zero Smart Speaker” project was already selected in my case.

We’re then being asked to create an OAuth Client ID. I only filled my email address, and a product name before clicking on Save.

Select Other in the next page, and give another name – I used “Linux Thingy” – before clicking on Create.

You should now see an OAuth client pop-up window with your client ID and secret. You can just click OK, no need to copy or save either.

Instead we’ll download client_secret_[your_client_id].json file on the next page by clicking on the arrow circled in red.

I then copied that file to Orange Pi Zero board using scp (change [your_client_id] with your actual client ID):

Now that we have configured most options we need in Google Cloud platform, let’s install Python 3 and dependencies:

At this stage to need to make sure “Web & App Activity” with “Include Chrome browsing history and activity from websites and apps that use Google services”  checked, Device Information and Voice & Audio Activity are enabled in the Activity Controls page. All options were already enabled for me by default.

We can now install Google Assistant SDK package including library and sample code:

and the authorization tool:

Run the authorization tool:

This should show a text reading “Please visit this URL to authorize this application: https://….”. Select the URL and open it in a web browser, and copy/paste the authorization code you see in the web browser back into the terminal.

We can now start the demo

That’s the initial output

I went to say “OK Google” and “Hey Google”, and… nothing. No answer, and no info in the terminal window either. I tried several times, and also played with:

as explained in the troubleshooting section in Google Assistant documentation, incrementing the value by 6 until I reached -60, before running the demo, and no luck. So I thought maybe my “American accent” could have been the problem, so I launched Google Translate in my phone, and make it say “OK Google”. Same disappointing result. I went to Google Cloud Console, and good see some activity, but with 100% errors.

Click to Enlarge

So I did some searching on the web, I could find one person changing the .asoundrc file, but I did not work for me with the file generating plenty of sound related errors when running the demo, and another fix a similar problem by changing the microphone. Which reminded me, I had bought a cheap USB microphone on eBay for $1.45. So I connected it to Orange Pi Zero board, and that’s the extra USB dongle in the photo with the speakers higher in this guide, and check the card and device number:

We can see the USB card 2, device 0, so I update the relevant line in pcm.mic section in .asoundrc:

and ran the demo again. Success! The device would reply to make “OK Google” request, and tell me the time, my name, the weather for tomorrow, sing a song, do some calculus and so on.

This is what the output looks like when the demo works:

Bear in mind that Google Assistant SDK is in preview mode right now, and it’s mainly aimed at developers. First, I understand you can’t do automation tasks, or play music like you can on an actual Google Home. The good news is that you can roll you own implementation, and for example, somebody made his AIY Project Voice Kit work with Google Music, something you should be able to reproduce on other boards. Google Home also includes a microphone array, which will make hot word detection more reliable even in noisy environment. Orange Pi Zero + USB microphone did a decent job though, as I could use it 5 or more meters away.

Next time you boot the board, you can login as pi user, and run the following commands to run the demo:

You could also use systemd to automatically start the demo, or your own implementation, and I did so with instructions adapted from Nordic Semi’s Google Assistant Wiki.

First, create /etc/systemd/system/google-assistant-demo.service file with the following content:

I add “Type = idle” as other the app would not run, possibly because it would start after the audio was enable. I did not find any audio specific services handled by systemd, so “type = ilde” will make sure the service starts after other are loaded.

Now we can enable the service, and start it:

The demo will run at this point, and it will start automatically each time your boot the board. I played with it for several hours and it seemed stable. Some people have however expressed concered about WiFi on Orange Pi Zero, so if you encountered some instability issues, you may want to switch to Ethernet instead, or use a WiFi USB dongle, or use another Orange Pi or NanoPi board with a time-proven WiFi module.

I’d like to thank Shenzhen Xunlong Software for sending the kit my way. If you are interested, you can purchase it for $12.95 + shipping.

$13 Orange Pi Zero Set 6 Kit Could Make an Inexpensive DIY Google Home Alternative

July 13th, 2017 7 comments

Since Google released the Google Assistant SDK for Raspberry Pi 3, and other ARMv7 boards, I thought I should it try myself on one of the tiny headless boards I have, as you just need audio output and a microphone. I first planed to use NanoPi NEO board with NanoHAT PCM5102A audio board, a cheap USB microphone, and pair of speakers, but this morning, I’ve come across Orange Pi Zero Set 6 kit that looks perfect for this applications and sells for just $12.95 plus shipping ($18.27 in total for me) with Orange Pi Zero board, Orange Pi Zero interface board, and a case.

Orange Pi Zero board is powered by Allwinner H2+ quad core Cortex A7 processor with 512MB RAM, and can run the required Ubuntu/Debian distribution using one of the Armbian images, and connected to the Internet over Ethernet or WiFi, however if you want to use the latter, be aware that stability and performance issues have been reported.

Microphone and audio output are added using Orange Pi Zero Interface Board V1.1 which adds one built-in microphone, and a 3.5mm audio jack where you should be able to connect your speakers. You’ll also get two extra USB host ports.

All you need to complete the hardware setup is a micro SD card, a pair of speakers, and a USB power supply. I’ve seen some demo requiring that you press a button before speaking. That will not be possible with this kit unless you add some button connected through USB or GPIO, but hopefully it’s possible to use the “hot word” technique to avoid adding that extra button.

The instructions on Google developer website for ARM boards seem clear enough, but since Aliexpress lists over 3,000 orders for that “Set 6” kit, I assumed somebody already tried that and wrote some specific instructions. Sadly, I had no luck finding such instructions, but I noticed somebody did something similar with Orange Pi PC board that includes a microphone and audio jack, and he uses a jar as an enclosure.

Ficus Online also posted the instructions on his blog, where he explains how to use a hotword too, so in theory you would not need any button. You may want to check their full website, as they use this Smart Jar as a home automation gateway with other purposes than just Google Assistant. If alternatively, you have some 96Boards on hand, there’s a specific Google Assistant project being worked on. If you prefer Amazon Alexa, there’s a project for Orange Pi + Alexa on Github, but it has not been updated for a year.

Sonoff B1 is an $18 Hackable WiFi RGB LED E27 Light Bulb based on ESP8285 WiSoC

July 4th, 2017 6 comments

Earlier this year, I wrote about an ESP8266 based RGB LED “AI Light” lightbulb that was hacked to run ESPurna open source firmware. That’s all good, except some people tried to get one, and ended with a different hardware. So if you’d like something that’s more of a “sure thing”, ITEAD Studio has designed Sonoff B1 dimmable RGB LED E27 light bulb based on ESP8285 processor, and with a “4 pads” to allow for custom firmware flashing.

Sonoff B1 hardware specifications:

  • Typical Lumen Output – 600lm
  • Beam Angle – 120 degrees typ.
  • Color Temperature –  2800K-6500K & RGB full color
  • Connectivity – WiFi 802.11 b/g/n @ 2.4GHz
  • Power Supply – 90-260V AC 50/60Hz via E27 base
  • Power Consumption – Light off: 0.5W Max; rated power: 6W
  • Temperature Range – Operating: 0ºC~ 40ºC; storage: -20ºC~ 80ºC
  • Operating Humidity – 5%-90% RH

Sonoff B1 with stock firmware can be controlled using the usual eWelink Android / iOS app to turn the light on and off, define timers, select the color, and/or dim the light. The aopp also supports 4 scenes for resting, reading, partying and casual use that you can customize as you wish. The LED bulb is also compatible with Amazon Alexa, and Google Assistant services so you can use voice commands to control the light instead. Bear in mind that you may need to wait a little longer to get custom firmware working for it, unless you are willing to get your hands dirty. But this looks so similar to “AI Light”, that I’d expect a port not to be too difficult.

You can purchase Sonoff B1 light bulb for $18 + shipping on ITEAD Studio website.

Android Play Store Tidbits – Blocking Unlocked/Uncertified/Rooted Devices, Graphics Drivers as an App

May 20th, 2017 10 comments

There’s been at least two or three notable stories about the Play Store this week. It started with Netflix not installing from the Google Play Store anymore on rooted device, with unclocked bootloader, or uncertified devices, and showing as “incompatible”. AndroidPolice contacted Netflix which answered:

With our latest 5.0 release, we now fully rely on the Widevine DRM provided by Google; therefore, many devices that are not Google-certified or have been altered will no longer work with our latest app and those users will no longer see the Netflix app in the Play Store.

So that means you need to  Google Widevine DRM in your device, which mean many Android TV boxes may stop to work with Netflix. You can check whether you device is certified by opening Google Play and click on settings, Scroll to the bottom and check Device Certification to see if it is Certified or Uncertified (H/T jon for the tip).

I tried this in my Chinese phone, and unsurprisingly it is “Uncertified”. AndroidPolice however successfully tested both Netflix 4.16 and Netflix 5.0.4 on an unlocked Galaxy S tab with Level 3 DRM and both worked. So the only drawback right now is that you can’t install Netflix from the Play Store, but it still works normally. Some boxes do not come with any DRM at all, which you can check with DRM info, and they may not work at all (TBC).

We’ve know learned this will not only affect Netflix, as developers will now be able to block installation of apps that fail “SafetyNet” as explained at Google I/O 2017:

Developers will be able to choose from 3 states shown in the top image:

  • not excluding devices based on SafetyNet
  • excluding those that don’t pass integrity
  • excluding the latter plus those that aren’t certified by Google.

That means any dev could potentially block their apps from showing and being directly installable in the Play Store on devices that are rooted and/or running a custom ROM, as well as on emulators and uncertified devices ….. This is exactly what many of you were afraid would happen after the Play Store app started surfacing a Device certification status.

This would mean it might become more complicated to install apps from the Google Play store on some devices, and we may have to start to side-load apps again, or use other app store. That’s provided they don’t start to stop apps running all together. The latter has been possible for year, as for example many mobile banking apps refuse to run on rooted phones.

I’ll end up with a better news, as starting with Android O it will be possible to update Graphics Drivers from the Play Store, just like you would update an app. Usually, a graphics driver update would require an OTA firmware update, or flash a new firmware image manually, and it’s quite possible this new feature has been made possible thanks to Project Treble.

Categories: Android Tags: Android, app, driver, drm, google, gpu, netflix, oreo

Android Things Developer Preview 4 Released with Google Assistant SDK Support

May 18th, 2017 2 comments

Earlier this month, Google released a preview of the Google Assistant SDK that works on boards running Debian like the Raspberry Pi 3, and even launched AIY Project Voice Kit for the later. You can now play with Google Assistant on Android Things as the company has just released Android Things Developer Preview 4 with support for Google Assistant SDK.

The operating systems works on any Android Things certified devices, but the example instructions  for Google Assistant API on Android Things also include steps to use Raspberry Pi 3 board together with AIY Projects Voice kit.

The developer preview 4 also adds I2S to the peripheral I/O API and is demonstrated in the aforementioned example, and new hardware support with NXP i.MX7D based Pico Board equipped WiFi & Bluetooth, Ethernet, USB ports, an audio jack, and an I/O expansion port.

Pico Board with NXP i.MX7D SoM

Android Things DP4 also brings the ability for developers to enable/disable Bluetooth profiles at run time. Finally, Google mentioned the open source hardware Edison Candle to show an example of Android Things hardware, which we shortly covered previously. Separately, Rockchip published a press release about a Rockchip RK3229 solution supporting the Google Assistant SDK and Android Things. Sadly, few details are provided in the PR, and RK3229 devkit is not listed in Android Things Hardware page.

You can download Android Things DP4 in the developer preview page.

Banana Pi BPI-M64 Board Gets Allwinner R18 Processor with Google Cloud IoT Core Support

May 18th, 2017 30 comments

Banana Pi BPI-M64 board was launched with Allwinner A64 processor, but a few days ago, I noticed the board got an option for Allwinner R18. Both processors are likely very similar since they are pin-to-pin compatible, and Pine64 was first seen with Allwinner R18, so I did not really feel it was newsworthy. But today, Google announced Google Cloud IoT Core cloud service working with a few app partners such as Helium and Losant, as well as several device partners including ARM, Marvell, Microchip, Mongoose OS, NXP… and Allwinner, having just announced the release of an Allwinner R18 SDK with libraries supporting Google Cloud IoT Core.

Let’s go through the board specifications first which are exactly the same as for the original BPI-M64 board, except for the processor:

  • SoC – Allwinner R18 quad core ARM Cortex A53 processor with Mali-400MP2 GPU
  • System Memory – 2GB DDR3
  • Storage – 8GB eMMC flash (16, 32 and 64GB options), micro SD slot up to 256 GB
  • Video Output / Display interface – HDMI 1.4 up to 4K resolution @ 30 Hz, MIPI DSI interface
  • Audio – HDMI, 3.5 mm headphone jack, built-in microphone
  • Connectivity – Gigabit Ethernet + 802.11 b/g/n WiFi & Bluetooth 4.0 (AP6212)
  • USB – 2x USB 2.0 host ports, 1x micro USB OTG port
  • Camera – MIPI CSI interface (which I guess you support parallel cameras via some kind of bridge)
  • Security – Hardware security enables ARM TrustZone, Digital Rights Management (DRM), information encryption/decryption, secure boot, secure JTAG and secure efuse
  • Expansion – 40-pin Raspberry Pi 2 somewhat-compatible header
  • Debugging – 3-pin UART header
  • Misc – IR receiver; U-boot, reset and power buttons;
  • Power – 5V via power barrel; 3.7V Lithium battery header; AXP803 PMIC

So from hardware perspective, there’s no advantage of getting the board with the new R18 processor. But the SDKs are somehow different, and based on Allwinner’s press release, only R18 processor gets Google Cloud IoT Core support.

Cloud IoT Core Overview

Some of the key benefits of Cloud IoT Core include:

  • End-to-end security – Enable end-to-end security using certificate-based authentication and TLS; devices running Android Things or ones supporting the Cloud IoT Core security requirements can deliver full stack security.
  • Out-of-box data Insights – Use downstream analytic systems by integrating with Google Big Data Analytics and ML services.
  • Serverless infrastructure: Scale instantly without limits using horizontal scaling on Google’s serverless platform.
  • Role-level data control – Apply IAM roles to devices to control access to devices and data.
  • Automatic device deployment – Use REST APIs to automatically manage the registration, deployment and operation of devices at scale.

Both Foxconn/SinoVoIP and Pine64 can offer Allwinner R18 platforms compatible with Google Cloud IoT Core via their Banana Pi BPI-M64 and Pine A64+ boards respectively.

Google Releases Android O Developer Preview 2, Announces Android Go for Low-End Devices, TensorFlow Lite

May 18th, 2017 2 comments

After the first Android O developer preview released in March, Google has just released the second developer preview during Google I/O 2017, which on top of features like PiP (picture-in-picture), notifications channels, autofill, and others found in the first preview, adds notifications dots, a new Android TV home screen, smart text selection, and soon TensorFlow Lite. Google also introduced Android Go project optimized for devices with 512 to 1GB RAM.

Notifications dots (aka Notification Badges) are small dots that show on the top right of app icons – in supported launchers – in case a notification is available. You can then long press the icon to check out the notifications for the app, and dismiss or act on notifications. The feature can be disabled in the settings.

Android TV “O” also gets a new launcher that allegedly “makes it easy to find, preview, and watch content provided by apps”. The launcher is customizable as users can control the channels that appear on the homescreen. Developers will be able to create channels using the new TvProvider support library APIs.

I found text selection in Android to be awkward and frustrating most of the big time, but Android O brings improvements on that front with “Smart Text Selection” leveraging on-device machine learning to copy/paste, to let Android recognize entities like addresses, URLs, telephone numbers, and email addresses.

TensorFlow is an open source machine learning library that for example allows image recognition. Android O will now support TensorFlow Lite specifically designed to be fast and lightweight for embedded use cases. The company is also working on a new Neural Network API to accelerate computation, and both plan for release in a future maintenance update of Android O later this year.

Finally, Android Go project targets devices with 1GB or less of memory, and including optimization to the operating system itself, as well as optimization to apps such as YouTube, Chrome, and Gboard to make them use less memory, storage space, and mobile data. The Play Store will also highlight apps with low resources requirements on such devices, but still provide access to the full catalog. “Android Go” will ship in 2018 for all Android devices with 1GB or less of memory.

You can test Android O developer preview 2 by joining the Android O beta program if you own a Nexus 5X, 6P, Nexus Player, Pixel, Pixel XL, or Pixel C device.

AIY Projects Voice Kit Transforms Raspberry Pi 3 Into Google Home, Comes Free with Raspberry Pi Magazine

May 5th, 2017 11 comments

We’ve just reported about the preview release of Google Assistant SDK that works on the Raspberry Pi 3, and other boards with a microphone, speakers, and access to Internet. The Raspberry Pi foundation and Google have now made it even easier, as they launched AIY Projects Voice Kit with a Google Voice HAT, a speaker, a stereo microphone Voice HAT board, a button, a few cables, and a cardboard case.

You’ll just need to add your own Raspberry Pi 3, follow the instructions to assemble kits, load and setup the software. Once this is all done, you’ll be able to press the top button, asking anything you want to Google Voice, including the weather.

Price? Sort of free, as it comes with MagPi 57 magazine, where you’ll also find detailed instructions for the kit. Google AIY Projects got its name from a mix between (DIY) and artificial intelligence (AI), and considering it’s “Projects” and not just “Project”, we can expect more kits in the future.