As you might guess, I'm really getting in to using the Raspberry Pi PICO for embedded development. If I can do a job in MicroPython I will but the C/C++ tools and the library they provide is a fantastic step up from the Arduino. The official plugin for Visual Studio Code is really excellent. I purchased the official debug probe and it seems excellent.
You can compile and run with a single button but more interestingly you can single step debug and look at variables.
Claude code is a real help and just for fun I asked it to make a program that makes the PICO emulate a USB audio output device feeding the audio to a PWM DAC pin which I've added a simple low pass filter to.
It sounds great:
My interest in being a USB audio device stems from my interest in making an embedded version of at least bits of FreeDV RADE.
The PICO 2 is quite a powerhouse although doesn't have enough RAM for what I have in mind. I haver some 3rd party boards on the way with extra RAM so we shall see.
Before the days of FreeDV RADE (which uses multiple machine learning models to turn speech to features, transmit data over HF, and turn the demodulated features back in to speech audio; it was possible to run FreeDV with Codec2 on embedded hardware.
I wondered if it might be possible to divide up the tasks and perhaps use several microcontrollers working together. I would not have attempted this before the days of AI tools like Claude Code but last night decided to give it a whirl.
This project captures audio from a MEMS PDM microphone. PDM is pulse density modulation and these little microphones have excellent sound.
LPCNet is the input side of the FARGAN vocoder. It turns speech audio into "features" which are a stream of 32bit floating point numbers. In FreeDV RADE, these features are transmitted over the air with an ML modem (but that's another story). The recovered features are turned back into speech audio with the Vocoder.
This project live encodes the audio to a stream of features which it sends over a USB serial cable to a computer which has a python program which syncs up and captures the features to a file which can be decoded using one of the test tools with FreeDV.
Here's me talking in to it followed by a decode of the features captured.
I tried to get this going on a PICO but it could not keep up. Partly because it doesn't have floating point and must emulate it. The PICO2 keeps up and even has some head room. There is some work down sampling the audio from the microphone that could be dropped if I used an A/D input instead.
Now here is a features to speech decode side. Features are streamed over USB. Audio is PWM into a simple low pass filter. (My tests indicate that this can sound very good). So far the audio is understandable but quite poor.
I'm not sure that the Radio Autoencoder can fit on one of these but you never know... Any recommendations of easy to use embedded ARM boards?
I'll share the code when it's a bit more polished. Not sure that this will be of interest to anyone but you never know.
I just saw the announcement of NetBSD 11. Software that has been around for many years. What struck me was this comment:
As you are probably aware, the number of security issues found or suspected everywhere has massively increased with the advent of AI tools. As a consequence, we can't publish a release without open issues. Instead of delaying the release further to fix them (new ones are being reported all the time), we've instead chosen to be transparent about this.
I've also seen big bug fix releases in popular software such as ffmpeg.
Last week I pointed Claude Code at my iOS app WSPR Watch which has so far had no AI involvement. I asked it to audit the code for bugs and it found about 20 issues, three of them critical. Some of the bugs are threading issues which can be hard to reproduce and even understand.
My own code has been under development for a decade and there's bits of it I can't really remember. AI tools are fantastic at reading a big codebase and noticing inconsistencies and errors.
People talk about "vibe" coding but bug finding is possibly the bigger win in the short term.
Nice net this morning with VK2, VK3, VK4 stations participating. A few new stations which is always good to hear.
Again I ran the net using my macOS client FreeDVNeo. On the frequency were VK5FD, VK5RA, VK5AG, VK5ABE, VK3KEZ, VK3JCO, VK3GTP, VK2KNC, VK2BLQ, VK2AOO, VK3ZTR, VK2LUI (no activity though), VK3PT (first time caller), VK3FAR, VK2KNC, VK5JPL and me VK3TPM.
See you next Sunday from 09:30 eastern time normally on 7.197 but +- depending on band usage.
Artificial Intelligence was one of the focuses of the Labor Party conference, with disruption to employment, education, the arts and the impact of data centres, unchartered problems needing to be resolved.
When I purchased my M4 Mac Mini I chose 512GB of SSD thinking that would be more than enough. (I'm old enough to remember running on a 200MB disk). Developer tools and video editing eats a lot of space and I ran out. I had already paid an extra A$300 to get 512GB, to go from the default of 256GB up to 1TB Apple charges A$750, so I decided to attempt a cheaper option, and puchased a new 1TB SSD from AliExpress for A$375.
There are plenty of videos showing how to pop the bottom off the computer and get to the SSD.
The board came with a spludger and a screw driver with the required bits. I was careful with the cable to the power button and fan. Unlike some upgraders I did not remove the power button and all was well.
Once the new, blank, drive is installed you need to put the machine in to DFU mode by holding the power button while plugging in the mains power. The power light blinks orange.
Next step is to plug the middle USB-C socket to another mac which detects DFU and offers to repair or restore the "faulty" mac. As this is a new drive choose Restore.
This is where I had problems. For some reason my internet has occasional ping fails and the downloading of the software image would fail.
The error message isn't terribly helpful as you can see here.
In the end I located the restore image and downloaded it manually. The trick is to Option-Click the Restore button which lets you choose the restore image. This worked.
The disk seems fast and I have enough space. For now, I would say, 1TB seems to be needed for developers. AI models are also huge and I expect will be eating many people's hard disks in the next few years.
I had a simple display that monitored my solar generation, usage and net some years ago but the company updated the software to require HTTPS and an authentication token. This update gets it going again.
A MicroPython project that turns a CYD (Cheap Yellow Display) — an ESP32 board with an integrated 320×240 ILI9341 TFT — into a live dashboard for a home solar system. It polls an Enphase Envoy gateway on the local network and displays current generation, consumption, and net power, along with a scrolling line graph of recent history.
Along the way I ran in to a problem with HTTPS from MicroPython on ESP32 that turned out to be a known bug. To get it to work I've had to use an older version of MicroPython for ESP32.
You'll need to log in to your Enphase account and generate a token which lasts a year.
My wife hasn't driven her Toyota Yaris hybrid for some weeks and today when she tried to start it was shown a series of alarming errors.
Happily as well as indicating a serious problem with the car, these can also be a side effect of a low accessory battery. I opened the bonnet but there's no battery I could see. Turns out the fuse box has a special place for jump starting.
I charged at 8A for only a few minutes and the car started just fine. We took it for a drive.
Another good FreeDV RADEV1 net on Sunday. My macOS client was acting up so I used the official client this week.
As is often the case there were comments about audio quality. Charlie, VK3ZD, had particularly crisp audio and it turned out that he had cut the bass and boosted treble in the app. I tried the same here but reports came in of clipping so care is needed.
Stations on the net were VK2BLQ, VK2DWG, VK2KNC, VK3FAR, VK3FC, VK3GTP, VK3JCO, VK3KEZ, VK3UBK, VK3ZD, VK3ZTR, VK5ABE, VK5AG, VK5RA and me VK3TPM.