RP2040 picture on left by Phiarc, CC BY-SA 4.0, via Wikimedia

Kaluma Puts JavaScript On The RP2040

With a simple firmware update, Kaluma puts a lightweight JavaScript runtime on the Raspberry Pi Pico (which uses the RP2040 microcontroller), providing handy modules for file systems, graphics, networking, and more. Code for a simple LED blink can then look like:

// index.js
const led = 25;
pinMode(led, OUTPUT);
setInterval(() => {
}, 1000);

Development can then be done using tools that are very familiar to JavaScript developers, such as npm and flashing new code to a USB-connected Pico with the (Node.js-based) Kaluma command-line interface. Take a look at the GitHub repository for the project, or browse some of the projects made with Kaluma.

Much like with MicroPython, there’s value to be had in putting implementations of high-level languages on microcontrollers. Each new language opens embedded programming to a whole new group of coders. But it’s not just languages making their way to the RP2040. Wonderful projects such as emulating the ZX Spectrum on an RP2040 also happen.

Thanks to [Shri Hari Ram] for the tip!

Button, Button, Who’s Got The (Pico) Button?

There is an episode of Ren and Stimpy with a big red “history eraser’ button that must not be pressed. Of course, who can resist the temptation of pressing the unpressable button? The same goes for development boards. If there is a button on there, you want to read it in your code, right? The Raspberry Pi Pico is a bit strange in that regard. The standard one lacks a reset button, but there is a big tantalizing button to reset in bootloader mode. You only use it when you power up, so why not read it in your code? Why not, indeed?

Turns out, that button isn’t what you think it is. It isn’t connected to a normal CPU pin at all. Instead, it connects to the flash memory chip. So does that mean you can’t read it at all? Not exactly. There’s good news, and then there’s bad news.

The Good News

The official Raspberry Pi examples show how to read the button (you have read all the examples, right?). You can convert the flash’s chip-select into an input temporarily and try to figure out if the pin is low, meaning that the button is pushed. Sounds easy, right?

Continue reading “Button, Button, Who’s Got The (Pico) Button?”

Hands-Free Compass Uses Haptic Feedback

If you’ve never experienced it before, getting turned around on a cloudy day in the woods or getting lost during an event like a snowstorm can be extremely disorienting and stressful — not to mention dangerous. In situations where travel goes outside the beaten path, it’s a good idea to have some survival gear around, including a good compass. But if you need your hands for other things, or simply don’t want to have to stop often to check a compass, you might want to try out something like this belt-mounted haptic feedback compass.

The compass is based around a Raspberry Pi Pico microcontroller and uses a ULN2803a transistor array chip to control a series of motors. The motors are mounted all along a belt using custom 3D printed clips with wires woven to each through the holes in the belt. The firmware running on the belt communicates with an Android app via USB to control each of the motor’s vibration based on the direction the wearer is traveling and their desired heading. With certain patterns, the wearer can get their correct heading based on the vibrations they feel through the belt.

While it does rely on having a functioning phone, a modern smartphone’s built-in compass doesn’t require a signal to work. We would still recommend having a good simple compass in your pack as backup if you’re going to be far off the beaten path, though. There are other ways of navigation besides by compass, map, or GPS too. Have a shot at inertial navigation if you want a challenge.

Thanks to [Peter] for the tip!

Arbitrary Waveforms On The Cheap

A signal generator that can produce the usual sine, square, and triangle waves is handy and has been a staple of electronic benches for decades. Being able to craft custom signals opens up new horizons, but historically, these instruments were expensive. The price has come down, though, and [Rishin Goswami] made a 5 MHz 8-bit signal generator with 131K data points of arbitrary waveform for a low price: about $20. If you want to spend a bit more, you can improve the output DAC and op amps, but even that should cost well under $100, all in.

This is one of those projects that seems easy until you start digging into it. For example, storing some points and generating signals using any microcontroller isn’t a big deal. But minimizing jitter and maximizing speed with a conventional processor is difficult. That’s why [Rishin] uses a Raspberry Pi Pico. The programmable I/O units are perfect for generating waveform data fast and reliably. You can see the project go through its paces in the video below.

The Pi streams data to an 8-bit DAC. However, it would be easy to improve resolution with a different converter. The DAC0808 also limits the instrument’s sample rate. The processor could likely go much faster if it had a DAC accommodating higher speeds.

This is just a proof-of-concept, so don’t expect fancy GUIs or the ability to import spreadsheets. You control the device from a command-line-like interface. Still, a good example of how to take advantage of the Pi’s hardware. We took a shot at a similar device nearly a decade ago.Those programmable I/O blocks are finding uses in some surprising applications.

Continue reading “Arbitrary Waveforms On The Cheap”

Listening To Bats As They Search For Food

The range of human hearing goes up to about 20 kilohertz, which is fine for our purposes, but is pretty poor compared to plenty of other animal species. Dogs famously can hear up to about 60 kHz, and dolphins are known to distinguish sounds up to 100 kHz. But for extremely high frequencies we’ll want to take a step into the world of bats. Some use echolocation to locate each other and their food sources, and bats like the pipistrelle can listen in to sounds up to 350 kHz. To listen to them you’ll need a device like the π*pistrelle. (Ed Note: a better explanation is available at the project’s website.)

The original implementation of the bat detector was based on a Raspberry Pi Pico, from which it gets its name. But there have been several improvements on it in the years since it was first developed. The latest can detect bats when it hears their 350 kHz sonar calls thanks to an ultrasonic microphone and op amp. The device then records the bat sounds and then either heterodynes the sound down or time-expands it to human-audible range so the calls can actually be heard. There’s an LED display on the board as well as three input buttons, but an iOS companion app is available to interact with the device as well.

If you want to know for sure which species is flying around at night, you can use machine learning to help figure that out.

A BASIC Interpreter For The Raspberry Pi Pico

It’s pretty easy to program the Raspberry Pi Pico in Python, or you can use C or C++ if you so desire. However, if you fancy the easy language of yesteryear, you might like PiccoloBASIC from [Gary Sims].

Putting it simply, piccoloBASIC is a BASIC interpreter that runs on the Raspberry Pi Pico. It features all the good bits of BASIC such as GOTO and GOSUB commands, that fancier languages kind of look down upon. It’s also got enough built-in routines to handle regular programming life, like sleeps, delays, a basic pseudorandom number source, trigonometric functions, and the ability to deal with floating point numbers. As far as microcontroller tasks go, it’s got rudimentary support for talking to GPIOs right now via the pinon and pinoff commands. However, it’s probably not the way to go if you want to bit-bang an SD card to within an inch of its speed rating.

Down the road, [Gary] hopes to add support for features like the Pico’s I2C, SPI, and PIO hardware, along with networking protocols and Bluetooth. PEEK and POKE are also hopefully on the way for those that like to fiddle with memory directly.

Meanwhile, if you’re looking for a different yet similar take, explore the port of MMBasic to the Pico platform. Video after the break.

Continue reading “A BASIC Interpreter For The Raspberry Pi Pico”

Pi Microcontroller Still Runs A Webserver

At first glance, the Raspberry Pi Pico might seem like a bit of a black sheep when compared to the other offerings from the Raspberry Pi Foundation. While most of the rest of their lineup can run Linux environments with full desktops, the Pico is largely limited to microcontroller duties in exchange for much smaller price tags and footprints. But that doesn’t mean it can’t be coerced into doing some of the things we might want a mainline Pi to do, like run a web server.

The project can run a static web page simply by providing the Pico with the project code available on the GitHub page and the HTML that you’d like the Pico to serve. It can be more than a static web page though, as it is also capable of running Python commands through the web interface as well. The server can pass commands from the web server and back as well, allowing for control of various projects though a browser interface. In theory this could be much simpler than building a physical user interface for a project instead by offloading all of this control onto the web server instead.

The project not only supports the RP2040-based Raspberry Pi Pico but can also be implemented on other WiFi-enabled microcontroller boards like the ESP8266 and ESP32. Having something like this on hand could greatly streamline smaller projects without having to reach for a more powerful (and more expensive) single-board computer like a Pi 3 or 4. We’ve seen some other builds on these boards capable of not only running HTML and CSS renderers, but supporting some image formats as well.

Continue reading “Pi Microcontroller Still Runs A Webserver”