Bunnie and Xobs Release Open Near-Ultrasound Data Link Reference Design for Cheap IoT Provisioning

Following tests carried out as part of the Simmel COVID-19 contact-tracing project, the NUS data link is being repurposed — and released.

Noted maker Andrew "bunnie" Huang has published an open source near-ultrasound (NUS) data link reference design, in the hopes it could assist Internet of Things (IoT) project creators with provisioning.

Building a low-cost IoT device is, thanks to the prevalence of accessible development platforms and open toolchains, relatively straightforward; provisioning them once in the hands of end users, not so much. Many open source, maker-centered projects rely on having network details and other configuration settings hard-coded in the program, which then must be compiled and flashed — not a user-friendly experience.

Bunnie and Sean "xobs" Cross have developed an alternative — by way of an investigation into using near-ultrasound technology for a COVID-19 contact-tracing device. "After a month of poking at it, the TL;DR is that, as suspected, the physics of NUS is not conducive to reliable contact tracing," bunnie explains. "While BLE has the problem that you have too many false positive contacts, NUS has the problem of too many false negatives: pockets, purses, and your own body can effectively block the signal."

"That being said, we did develop a pretty decent-performing NUS data link, so we’ve packed up what we did into an open source reference design that you can clone and use in your own projects."

While ill-suited to contact tracing, NUS does spell a potential fix for the provisioning issue for low-cost IoT devices: "I imagine one use for this would be a way to provision IoT devices: The 'how do I get Wi-Fi credentials into an IoT device that lacks both screen and keyboard?' problem," bunnie elaborates. "With the addition of a ~$1 microphone to a Cortex-M4 class device, you get a short-range data link to a host device, such as a phone. You can use a web page (via JavaScript) to generate the modulated audio directly, thus bypassing a host of multi-platform issues, or you can generate a file offline and send it to any standard music player."

`The system works by encoding data via PSK31 at a rate of 651 symbols per second, then transmitting it on a 20.8kHz carrier with binary phase-shift keying (BPSK). While slow compared to something like Bluetooth, it's fast enough to send network details and other configuration settings in mere seconds — and tests showed it can work at a distance of around 3.3 feet with 60dB ambient noise.

More details are available on bunnie's blog, with the reference design and source code available on the Simmel Project GitHub repository.

Gareth Halfacree
Freelance journalist, technical author, hacker, tinkerer, erstwhile sysadmin. For hire: freelance@halfacree.co.uk.
Latest articles
Sponsored articles
Related articles
Latest articles
Read more
Related articles