Friday, October 10, 2025

Raspberry Trixie with KDE Plasma

For an index to all my stories click this text

In the previous story I showed how to install the KDE desktop on a Raspberry Pi with the Raspberry OS Bookworm. Why ?? Well because the KDE desktop is beautiful while the Raspberry OS desktop is childish.As this story leans heavily on that previous story I urge you to read that first. Here is the link: http://lucstechblog.blogspot.com/2025/10/raspberry-os-bookworm-with-kde-desktop.html

And just when I was writing that story Raspberry introduced Trixie. The new OS based on Debian 13.
So I upgraded my setup (always recommended) and started experimenting to check if I could install the KDE desktop, called Plasma, on Trixie.

The official Raspberry site writes:
Something you will notice, however, is that we’ve made some changes of our own in the Trixie release. The most obvious is that we have updated the theme for the desktop — we have a completely new set of icons, a new font, new desktop backgrounds, and some other small tweaks to refresh the appearance of the system. This should be apparent as soon as you launch it.

Well actually the new theme looks indeed a bit better. But installing new software, and changing settings and a lot of other things still look dreadful. I wonder why they did not take the chance to upgrade tp KDE Plasma together with the new OS.

How to try this safely


A reader send me a mail telling that he was reluctant to do this as he was afraid to break things in his software. I told him not to worry.

You can try this safely before definitely stepping over.
Just use a fresh SD card. Install the Raspberry OS on that and follow the described steps. That will not harm your original setup and you can experiment as much as you like

But do yourself a favour and give it a try. You will not be disappointed.

Backup your data

First thing to do is to backup your valuable data. Good practice is to do that at least every week. I use an external harddisk for that and copy my complete home directory to that.

Installing KDE Plasma

Well actually most of the steps are equal to installing KDE Plasma on the previous OS: Bookworm.

So I refer to that story which you can find here:
https://lucstechblog.blogspot.com/2025/10/raspberry-os-bookworm-with-kde-desktop.html

The differences in the steps.

Step 7 in the story says:

And there we are.
The screen opens with your user name and you need to login with your password.

Well with Trixie that is not the way it works.
After rebooting the Raspberry GUI appears again.

Another difference is that when updrading Bookworm there is a dropdown menu on the top left side of the screen.
With Trixie this menu is at the left bottom side of the screen.

Just continue.

That is what you need to do. Just continue all the steps and when you reached the last step you will have achieved what you want: the KDE Plasma desktop on the Raspberry Pi !!!


The picture shows the Raspberry Config screen on the KDE Plasma desktop.

Keeping both: Raspberry Theme AND KDE Plasma

Actually it is possible to keep the Raspberry theme and KDE at the same time.
If you want this just omit the steps 10-11-12 from the previous story.

When the login screen appears you can then use the menu on the left-bottom side of the opening screen.

Be aware that it does not really look as a menu. There is just a text saying KDE Plasma on X11 (or Wayland). But that text is clickable and when you do the rest of the options are shown. Just click on the one you want and log in.

The only point with keeping all GUI's is that it will take up space on your root directory. And on a small SD card, like 32Gb, that might limit the amount of additional software you can install.

But when you have installed KDE Plasma and tried it you will see there is no reason to go back.

That's all for now
have fun


Luc Volders

Monday, October 6, 2025

Raspberry OS (Bookworm) with KDE Desktop !!!

For an index to all my stories click this text

This story tells how to get the KDE desktop running on a Raspberry Pi with the Raspberry OS. Why ?? Well because the KDE desktop is beautiful while the Raspberry OS desktop looks childish.

UPDATE:
This story tells how to install the KDE desktop on Raspberry Pi Bookworm. Just when I was writing this Raspberry brought out a new version of their OS: Trixie
At this moment I am testing whether this works with Trixie too. So come back if you want to use the KDE desktop with Trixie
.

For those who have worked only in the Raspberry OS desktop I'll show you some screenshots from the KDE desktop and that will make it easier to decide if you want to switch.

The KDE desktop.

The screenshots below are actually made from my Raspberry Pi5 running Raspberry OS with the KDE desktop.


The Raspberry OS has a drop down menu at the top right of your screen. KDE has also a menu from which to choose the program you want to run. It looks far better as the Raspberry's.


This is the window from which you can choose to install or remove new software packages. On the left side there is a menu from which you can choose a category. And clicking on a category opens a screen with loads of programs. Clicking on one of the programs not only presents a good description and the possibility to install the program or remove it if it already is installed. You will also get the possibility to read some users reviews.


At the bottom of the screen there are icons that represent programs and actions that are direct available and do not have to be chosen from the menu. This is of course fully customizable.
The second icon (the one with the 4 squares) is the one I miss most from other distributions like the Raspberry OS or even Ubuntu.

The 4 squares (you can add more) represent 4 virtual screens. By clicking on one of them your current screen closes and another screen opens. This allows you to have multiple programs open at the same time (like Thonny and a browser and your file browser). The difference is that you can place each program on its own screen so they do not clutter.


This is the Raspberry's configuration screen.


And this is the way KDE offers you to alter your configuration settings. Just look at all the possibilities at the left side of the window.


Some background

I love the Raspberry Pi. I have several of them that each performs a specific task. There is one for example installed as a printer server so anybody in my home can use my office printer from their location. The others are my Domoticz system, two Pi Zero's each as an internet radio, an MQTT server, a Dweet server, A Pi3 running Octoprint for my 3D printer, and a Pi as a media system connected to my TV.

Not all of them are active at the same time. Octopi only when I am going to print, the internet radio's when they are needed. But some of them (Domoticz and the printer server) are running 24 hour a day and most have been doing this for years.

So you can say I am a fan.

My main PC is an old beast from 2018 on which I switched from Windows to Kubuntu about a year and a half ago. The main reason was that my PC was getting slooowwwww. So I tried Kubuntu and it made my computer about 3 times as fast as when running Windows. The most gain is achived at starting up and shutting down. But often Windows was doing so many tasks at the same time in the background that it made the computer unworkable. and I never had these issues with Kubuntu.

However the beast is getting old an I am getting memory errors. So more and more the computer freezes just when I am doing something important..... Time for a new beast.

Raspberry Pi 5 as my new desktop beast.

As soon ad I laid my hands on the new Raspberry Pi 5 (my model has 8Gb) I was blown away at it's speed. It is way faster than my Kubuntu desktop machine and runs all the software I need like Office for writing my books, Arduino IDE, Thonny, The Gimp, Cura, VNC madia player etc. etc. etc.

There is just that one thing.
I don't like the Raspberry Desktop User Interface. It does the job flawless but just looks ridiculous childish.

I could switch to Ubuntu which is robust. But Ubuntu's user interface is not intuitive. I also don't like the way of choosing the program I want to run. And it lacks the Raspberry specific software.

So what I wouild like is the Rapberry OS with the looks of Kubuntu. And guess what: you can have that setup.

KDE

Kubuntu is a version of Ubuntu that has a different User interface. It is called KDE and the looks come from Plasma.

So in Ubuntu you can replace the User Interface (GUI) with KDE and that is just what KDE did with Kubuntu.
But then I saw that you could install KDE on all kinds of different Linux Distributions. To mention a few: Suse, Ubuntu, Fedora, Gentoo, Arch Linux

Most of these Linux distributions are Debian based. Hey, but so is the Raspberry OS !!

So I dug deeper and I found it.

There are several Raspberry Pi users who have replaced the Raspberry OS desktop with the KDE desktop.
How to install the KDE desktop is not documented very well And it took me several tries to get it working. I found descriptions that did not work. Maybe that was because they were written for older versions of Raspberry OS (Raspbian).

So here is the step by step guide to install the KDE Desktop on your Raspberry PI.

KDE on Raspberry OS.

The first step is to install the Raspberry OS on your SD card.


Use the Raspberry pi Imager to install the Raspberry OS as described on the raspberrypi.com website: 
https://www.raspberrypi.com/documentation/computers/getting-started.html

Install the full 64bit version. I advise not to install the OS Lite version.
If you install the full version you will get all Raspberry specific software.

Boot the Raspberry and open the console.

STEP 1

sudo apt update && sudo apt full-upgrade -y

The first thing to do is to make sure your system is fully up to date.

STEP 2

sudo apt install kde-full -y

Then use this command to install the full KDE desktop with all major packages.
This might take a few minutes.

STEP 3

sudo reboot

Now reboot your system

The Raspberry will reboot but reboots the Raspberry OS with it's own Desktop. We now have to activate the KDE desktop.

STEP 4

sudo apt install kde-plasma-desktop sddm -y

This installs the KDE login manager (sddm)

STEP 5

sudo dpkg-reconfigure sddm

And this command makes a dialog appear in which you can choose which display manager should boot. Choose sddm and press ok.

STEP 6

sudo raspi-config

We will use this to make sure the OS will start with the Desktop interface and not with the console. So choose Desktop/ Console and make sure to choose Desktop.

STEP 7

sudo reboot

And there we are.
The screen opens with your user name and you need to login with your password.

Just like in any Linux version you can add users later on if you have multiple people working at this computer. So this menu will expand when you have added users.


On the top right side of the screen there is a drop-down menu. Clicking that menu offers you the choice to boot to different versions. Choose for the Plasma (X11) session. On KDE X11 is more stable as Wayland.

The system will boot now.

Booting KDE takes a bit longer as booting the Rasberry desktop. 

But it is so much better looking !! And boooting is just done once every time you power up the Pi.

Remove the Raspberry desktop.

The last thing to do is to remove the Pixel/LXDE desktop so the Pi will boot into the KDE with Plasma desktop.

Open the console and give the following command:

STEP 8

sudo apt install kde-plasma-desktop sddm -y

Yes, I know we just did this. But we want to be on the safe side.

STEP 9

sudo dpkg-reconfigure sddm

We did this in previous steps but do it again for safety. Choose for sddm and press ok.

STEP 10

sudo apt purge lxde* lightdm* openbox* -y

Pixel is based on LXDE, LightDM and openbox This command removes them., and frees some of your storage space.

STEP 11

sudo apt purge raspberrypi-ui-mods -y

And this removes the rest of the Raspberry Pi desktop. 

STEP 12

sudo apt autoremove --purge -y
sudo apt clean


And with these command s we clean up all unused packages, which frees even more storage.

STEP 13

sudo reboot.

Reboot the Raspberry Pi and it will boot straight into the KDE desktop.

And this is what my desktop looks like (at the moment of this writing) with a clock widget and a custom background.


Side notes

My Raspberry boots from an SD card.
Please note that booting KDE is a bit slower as booting Raspberry OS.
From powering up and filling in my password to the opening of the KDE Desktop took 43 seconds. And be aware that this includes typing in my password.


Concluding.

This setup is way faster than my Kubuntu desktop machine.
It looks every way that the humble Raspberry Pi5 with Raspberry OS and the KDE Desktop is going to be my new main computer.
There are however still some things to do. I want a different casing as my 3D printed case, and I want an SSD disk for storage. That's a future project.

Till next time
have fun


Luc Volders

Friday, September 26, 2025

Pico audio 7: Build a Zwitscherbox

For an index to all my stories, click this text

My girlfriend got a birthday present from a friend. Nothing to write about you would think. But it was a Zwitscherbox. Never heard of it ??? Neither did I. Read on.



A Zwitscherbox is a simple concept. It is a box with some kind of a microcontroller inside (no I did not take it apart), a speaker and a PIR. Every time you pass by, the PIR detects movement, and the box plays the sound of birds singing.

Simple, but effective and fun. And most of the time it brings a smile to your face. So a real fun present.

I looked it up on the internet and was amazed at the price. It was a rather expensive gift at 50 to 60 Euro (USD).

That got me thinking. How difficult would it be to build one myself. Well actually it is dead simple.

Playing audio with a microcontroller.

There are several ways to play audio with a microcontroller. You can add an MP3 player like I did it this story: http://lucstechblog.blogspot.com/2019/10/web-controlled-mp3-player.html

Another method is to use the Raspberry Pi Pico as an audio player. I have written a few stories on using a Raspberry Pi Pico as an audio player. You just need a few cheap components. It can be build in 15 minutes or so. And like stated before, the audio quality is very good. I chose this option for this project.

Raspberry Pi Pico audio player.

To build an audio player with the Raspberry Pi pico you will need a few simple components. You will need a few resistors, some capacitors and (for larger audio files) an SD card with an adapter. If you can solder, you can use the SD adapter that is included with most micro-sd cards. If you can not solder you can use an SD-card adapter for microcontrollers.

I wrote several stories on this subject and it would be wise to read these first before continuing this story.

The audio file has to be in WAV format and you can use Audacity to convert an MP3 file to a 8K wave file. The following link takes you to my story on how to achieve this:
https://lucstechblog.blogspot.com/2024/10/audacity-pico-audio-part-1.html

The Raspberry Pi Pico audio player hardware can be found here:
https://lucstechblog.blogspot.com/2024/10/audio-on-pico-part-2-hardware.html

The Raspberry Pi Pico software (Micropython) can be found here:
https://lucstechblog.blogspot.com/2024/10/pico-audio-part-3.html

Attaching an SD card:
https://lucstechblog.blogspot.com/2025/01/pico-sdcard-part-1-hardware.html

Software for Pico and SD card:
https://lucstechblog.blogspot.com/2025/01/pico-sd-card-part-2-software.html

For this project we need to add a PIR.
You can read the basics on how a PIR works here: https://lucstechblog.blogspot.com/2017/01/pir-basics-movement-detection.html

Alternatively you could use a radar module like this one:
http://lucstechblog.blogspot.com/2018/08/motion-detection-with-rcwl-0516-radar.html

They both work the same way so rummage through your stock and use what you have got.

The breadboard setup.

Basically it is the setup from the Pico audio player. You can use that for testing. When everything works as planned just remove the buttons and the Oled screen. If you want to use that setup just look at this story: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx




I just added one thing to this setup and that is a PIR.
The VCC of the PIR MUST be connected to the VBUS connection of the Pico as it needs 5 Volt.
The PIR is further connected to GP21 and to GND.
If you are not building this on top of the Pico Audio Player you can attach the PIR to any GPIO you like. Just make sure you adjust the program to use the selected pin.

And that's all for the hardware side.

The audio file.

For replicating the Zwitscherbox I needed an audiofile of a bird singing. There are many sites on the internet that offer royalty free sounds. I found a nice audio file that plays a blackbird singing. It runs for about 2 minutes. Ideal for this project. You can download it here:

https://quicksounds.com/sound/4769/blackbird-in-town-3

Next step is to import the file into (free software) Audacity and convert it to an 8K wav file. In a previous story in this series I described how to do that. You can find that story here: 
https://lucstechblog.blogspot.com/2024/10/audacity-pico-audio-part-1.html

When the audio file was converted I stored it on the SD card that is attached to the Pico in the directory music with the name "Blackbird.wav"

Zwitscherbox software

Basically this is the same program that was used for the Talking Dice. The program is written in MicroPython.

import os as uos
import time
from machine import SPI, Pin
import sdcard
from wavePlayer import wavePlayer

spi = SPI(1,sck=Pin(14), mosi=Pin(15), miso=Pin(12))
cs = Pin(13)
sd = sdcard.SDCard(spi, cs)

pir=machine.Pin(21, machine.Pin.IN)

uos.mount(sd, '/sd')

player = wavePlayer()

print(uos.listdir('/sd/Music'))
time.sleep(10)

try:
    while True:
      print(pir.value())   
      if (pir.value() == 1):
        player.play('/sd/Music/Blackbird.wav')
        time.sleep(5)
      time.sleep(0.3)
except KeyboardInterrupt:
    player.stop()
    print("wave player terminated")


For testing purposes I build a keyboard interrupt into the program. Pressing CTRL-C on the keyboard, while the Pico is connected to Thonny, stops the program and shuts the audio player down.

Like said before and as can be seen in the schematics: the PIR is connected to GPIO 21 on the Raspberry Pi Pico.

Almost everything is identical to the previous audio programs except for this part:

      if (pir.value() == 1):
        player.play('/sd/Music/Blackbird.wav')
        time.sleep(5)
      time.sleep(0.3)

First the program tests if the PIR signal is high. If that is the case then someone is passing by. The player then plays the blackbird sound witch is stored on the attached SD card in the directory Music. The program then waits 5 seconds so the PIR can settle down and then runs again.

Concluding.

The Raspberry Pi Pico with MicroPython is a golden combination that is easy to program and enormous versatile.
The Zwitscherbox clone is an easy build and great fun. It makes a fantastic present for a fraction of the price of the original.

Next step is to design and build a nice casing.........

Till next time
Have fun


Luc Volders



Friday, September 12, 2025

Javascript Speech Synthesises

For an index to all my stories click this text.

I like Javascript. I really do. The language is easy to learn, versatile and extensive. You just make a simple (or complicated) webpage, put some Javascript code in it and it runs on your PC, Raspberry, phone or tablet. Interfacing with the ESP8266, ESP32, your home automation system or a myriad of other devices and services is generally not difficult to achieve.

And there is speech synthesises.......

Have your computer speak to you.

The Javascript commands for having your computer/phone/tablet speak to you are really easy.

var msg = new SpeechSynthesisUtterance();

This starts a new Speechsynthesis instance and we call it msg.

msg.text = "this is my text"

Obviously the text that the message will speak = "this is my text"

speechSynthesis.speak(msg);

And this speaks out the message.

That is really all there is to it.

Now let us look to the next html code with a Javascript example.

<!DOCTYPE html>
<html lang="en-US">
<body>

<h2>Javascript Speech</h2>

<script>

var msg = new SpeechSynthesisUtterance();
msg.text = 'I have put the lamp on';

speechSynthesis.speak(msg);

</script>
</body>
</html>

Copy this code in your favorite text editor (I use notepad) and save it as speech01.html Make sure not to save it as a txt file. So use "Save as" for that. Save the file in a directory of your choice.



As you can see the file was saved as speech01 and seen as a Firefox HTML document. If your default browser is Chrome you should see the file as a Chrome HTML file.

Double-click the file and your browser will open and the words 'I have put the lamp on' will be spoken. Naturally you will have to make sure that your speakers are on and the volume is up. The text shows where this is going.......

Neat huh ???

For the next step I urge you to change your default browser to Chrome or Edge as these browsers have more posibillities for speech synthesises as Firefox has. You can always left-click on the html file and choose open with Chrome or Edge provided these are installed on your computer. You might try with other browsers (I haven't) to see if that works.

Changing the language and voice

Now we know how simple it is to have the computer speak to us we might want to change some parameters. Again: this works in Chrome and Edge but not in Firefox.

var msg = new SpeechSynthesisUtterance();
var voices = window.speechSynthesis.getVoices();
msg.voice = voices[0];
msg.volume = 1; // From 0 to 1
msg.rate = 1; // From 0.1 to 1
msg.pitch = 1; // From 0 to 2
msg.lang = "en";

These are the parameters you can change.

msg.voice = voices[0];

You can most of the time choose between 0 and 1. This will change the voice sometimes from female to male or between different male/female voices. Choose what sounds best to you.

msg.volume = 1;

Set this to 0 and speechsynthesises is set off. Set this to any value between 0 and 1 (like 0.2) and you can have the voice whisper without having to change the volume settings on your computer.

msg.rate = 1;

This will set the speech rate. from 0.1 which is veeerrrrrryyyyyy ssssssslllllloooooowwwwwww to 1 which is the normal speech rate.

msg.pitch = 1;

This will set the pitch of the voice. 0 is very low and 2 is high. 1 Is the standard value.

msg.lang = "en";

And finally this allows us to choose the language in which the text will be spoken.

msg.text = 'I have put the lamp on';

This one we have seen behore in the first (small) program. And this is where to put the text that has to be spoken.  So if you change msg.lang into another language you need to alter the text in msg.text in the text for that language.

If you want to change the text in Dutch (hey that's my native language) you would need to set the following parameters:

msg.lang = 'nl'
msg.text = 'Ik heb de lamp aangezet'


Another example

Here is another example that would speak out a fake temperature setting. In this example all parameters are available so you can change them to your liking.

<!DOCTYPE html>
<html lang="en-US">
<body>

<h2>Javascript Speech</h2>

<script>

var msg = new SpeechSynthesisUtterance();
var voices = window.speechSynthesis.getVoices();
msg.voice = voices[1];
msg.volume = 1; // From 0 to 1
msg.rate = 1; // From 0.1 to 1
msg.pitch = 1; // From 0 to 2
msg.lang = "en";

msg.text = 'The temperature is' + 18 + 'degrees';

speechSynthesis.speak(msg);

</script>
</body>
</html>

Just copy this into your editor and save it as speech02.html Go to the directory where you saved it and double-click on it and the webpage will open and speak the text. Alter some settings in the editor, save it again and reload the page.

What languages are available ???


Javascript uses the BCP 47 Language Codes and here is the complete list of languages that are available:

ar-SA Arabic Saudi Arabia
cs-CZ Czech Czech Republic
da-DK Danish Denmark
de-DE German Germany
el-GR Modern Greek Greece
en-AU English Australia
en-GB English United Kingdom
en-IE English Ireland
en-US English United States
en-ZA English South Africa
es-ES Spanish Spain
es-MX Spanish Mexico
fi-FI Finnish Finland
fr-CA French Canada
fr-FR French France
he-IL Hebrew Israel
hi-IN Hindi India
hu-HU Hungarian Hungary
id-ID Indonesian Indonesia
it-IT Italian Italy
ja-JP Japanese Japan
ko-KR Korean Republic of Korea
nl-BE Dutch Belgium
nl-NL Dutch Netherlands
no-NO Norwegian Norway
pl-PL Polish Poland
pt-BR Portuguese Brazil
pt-PT Portuguese Portugal
ro-RO Romanian Romania
ru-RU Russian Russian Federation
sk-SK Slovak Slovakia
sv-SE Swedish Sweden
th-TH Thai Thailand
tr-TR Turkish Turkey
zh-CN Chinese China
zh-HK Chinese Hong Kong
zh-TW Chinese Taiwan


So if you are Belgian or Dutch and like the soft touch of the Belgian voices set:

msg.lang = "nl-BE";
msg.text = 'Ik heb de lamp aangezet';


Fun to play with.

Remember the Javascript pages made to control an ESP8266 and get information from that ESP ??? Next time we are going to incorporate the speech synthesises into that page so you will have an audible feedback on the commands you have send to the ESP and sensor readings from that ESP.

For now you have something funny and usefull to play with.

Till next time
have fun

Luc Volders


Friday, September 5, 2025

Autostarting a program with Raspberry Bookworm OS

For an index to all my stories click this text

October 2018 I wrote a story on how to build an internet radio with the Raspberry Pi Zero. You can find that story here: https://lucstechblog.blogspot.com/2018/10/raspberry-pi-internet-radio-part-3.html

As you might know (as a faithfull follower of this weblog) I am building a second version for using in my living room. The old one is still working in my mancave, and stays there.

The old one uses the, at that time, current Raspberry OS. And of course I am now going to use the latest version. And that posed a small problem.

The previous version (which still works flawlessly) modified the LXDE-pi file in a way that made the internet radio program start automatically when the Pi Zero booted. And that does not work anymore.

For those that are interested I'll show you how to make a Python program autostart with Raspberry Pi's Bookworm OS.

Modify .bashrc

There are several ways to make a program, any program, autostart but this is one of the easiest.

Open the console and type:

sudo nano /home/pi/.bashrc

This opens the .bashrc file in the Nano editor. Please not the . at the beginning of the .bashrc filename. This makes the file normally hidden.

This is a fairly large file. Scroll down to the end of the file, and at put down the next two lines:

echo Running at boot
python /home/pi/radio.py


Then press CTRL-O to save the file and CTRL-X to quit the Nano editor.

You can alter python /home/pi/radio.py in any program you want to start when the Pi boots.

Reset the Pi with:

Sudo reboot now

And the Pi will reboot and automatically runs your program.

That's all for now

Till next time
Have fun

Luc Volders

Friday, August 22, 2025

Dweet.cc with MicroPyton

For an index to all my stories click this text

After my story about Dweet.cc and Freeboard I got some mails from readers of that wanted to know how to send data to Dweet.cc and retrieve data from Dweet.cc with MicroPython.

Well here we go.

Sending a dweet to Dweet.cc


The API call I used to send a temperature value to Dweet.cc with the thingname lucstechblog is as follows:

https://dweet.cc/dweet/for/lucstechblog?temperature=25

To use that API call in a MicroPython program you can use the following code: 

import network
import urequests

# Router credentials
ssid = "YOUR_ROUTER_NAME"
pw = "PASSWORD"
print("Connecting to wifi...")

# wifi connection
wifi = network.WLAN(network.STA_IF) # station mode
wifi.active(True)
wifi.connect(ssid, pw)

# wait for connection
while not wifi.isconnected():
    pass

# wifi connected
print("Connected. IP: ",str(wifi.ifconfig()[0], "\n"))

# Replace 'lucstechblog' with your actual thing name
# Replace valuename with the name of the value you are sending
# Replace value with the actual value
thingname = 'lucstechblog'
valuename = 'temperature'
value = 25
value = str(value)

url = 'https://dweet.cc/dweet/for/'
url = url + thingname
url = url + "?"
url = url + valuename
url = url + "="
url = url + value

response = urequests.get(url)
print(response.text)
response.close()



That is it.

Put this code in Thonny and press the "run" button. And you will get the next response in the shell:



Of course your IP address will be different.
The response clearly states that the command had succeeded.

I will break the most important part of the code down here for you.

thingname = 'lucstechblog'
valuename = 'temperature'
value = 25
value = str(value)

These are the variables that need to be send to Dweet.cc

I used lucstechblog for the thing name but please use your own thing name. You can choose any name you want but best practice is to make it relevant.
Please be aware that we are sending a public dweet. So anybody in the world that sends a dweet with the same thing name will alter your value.

Then there is a valuename. I used temperature but use something significant like "kitchen-temperature" or "mancave-temperature". For a single dewwt this looks irrelevant but wait till you build a complete home automation system with this.

And then there is the value itself.
If the value is a number (integer or floating point) like in this example you need to convert it into a string like this example shows.

url = 'https://dweet.cc/dweet/for/'
url = url + thingname
url = url + "?"
url = url + valuename
url = url + "="
url = url + value

This is the code that combines all variables into the api call. Just make sure to incorporate the "?" after the thingname and the "=" after the valuename.

I split the code up like this so you can easily put this in your own program and replace the variable names into your own names.

Retrieving a value from Dweet.cc

The code for retrieving a value from the Dweet.cc server is:

https://dweet.cc/get/latest/dweet/for/my-thing-name

In this example it would be:

https://dweet.cc/get/latest/dweet/for/lucstechblog

Let's translate this in a MicroPython program.

import network
import urequests
import ujson

# Router credentials
ssid = "YOUR_ROUTER_NAME"
pw = "PASSWORD"
print("Connecting to wifi...")

# wifi connection
wifi = network.WLAN(network.STA_IF) # station mode
wifi.active(True)
wifi.connect(ssid, pw)

# wait for connection
while not wifi.isconnected():
    pass

# wifi connected
print("Connected. IP: ",str(wifi.ifconfig()[0], "\n"))

# Replace 'my-thing-name' with your actual thing name
thing_name = 'lucstechblog'

url = 'https://dweet.cc/get/latest/dweet/for/'
url = url + thing_name

response = urequests.get(url)
print(response.text)
response.close()

And here is the important part for this program:

url = 'https://dweet.cc/get/latest/dweet/for/'
url = url + thing_name

I splitted the api call in two parts. The first part is the general part and the second part adds your thingname. That is the variable you just created.

And this would gain the following response:




So this proves that it worked.

Decoding the JSON response.

So now we know that this works. However the response is JSON code. And unfortunately that is not direct usable in our program.

Suppose you want to display the temperature on an oled screen, or build a physical thermometer pointer with a servo, or use a bunch of neopixels to display the value like an old-school thermometer.
The JSON code would certainly not be suitable as a value we can work with. We have to decode it.

Here is the complete program that rertrieves the dweet and extracts the value.

import time
import network
import urequests
import ujson

# Router credentials
ssid = "Ziggo2903181"
pw = "ptzbB2ohKbgs7agp"
print("Connecting to wifi...")

# wifi connection
wifi = network.WLAN(network.STA_IF) # station mode
wifi.active(True)
wifi.connect(ssid, pw)

# wait for connection
while not wifi.isconnected():
    pass

# wifi connected
print("Connected. IP: ",str(wifi.ifconfig()[0], "\n"))

# Replace 'my-thing-name' with your actual thing name
thing_name = 'lucstechblog'

#url = 'http://192.168.178.62:8000/get/latest/dweet/for/Kit-pow'
#url = 'http://dweet.me:3333/get/latest/yoink/from/Man-temp'

url = 'https://dweet.cc/get/latest/dweet/for/'
url = url + thing_name

response = urequests.get(url)
print(response.text)

print ("============================================")
# Parse the JSON string
data = ujson.loads(response.text)

# Extract the temperature value
tempvalue = data["with"][0]["content"]["temperature"]

# Display the result
print("Temperature is:", tempvalue)

The important parts are these:

data = ujson.loads(response.text)

We create a variable that decodes the JSON response in its individual parts

tempvalue = data["with"][0]["content"]["temperature"]

There we extract the temperature value and put it into the tempvalue variable.

print("Temperature is:", tempvalue)


And this is where we print the actual value in the shell.

If your JSON code looks different you can use a JSON decoder of which there are several on the internet.

Now the value is stored into the tempvalue variable we can use it for our project.

Decoding JSON structures is a bit puzzling.


Click here to buy my book on the Raspberry Pi Pico W

But then you could buy my book on MicroPython with the Raspberry Pi Pico W that explains it in detail and shows how to get help from a JSON decoder.


Till next time
Have fun

Luc Volders



Friday, August 15, 2025

Freeboard with Dweet.cc

For an index to all my stories click this text.

In a previous story I informed you (as if you did not know) that Dweet.io stopeed working. They suddenly ceased their service and left many users in the dark. Their IOT projects just stopped working. You can read that story here:
https://lucstechblog.blogspot.com/2025/08/dweet-is-dead-long-live-dweet.html


Dweet.io was a great free service and what's more there was a good looking free to use dashboard available. It is called Freeboard and I wrote a few stories about this:
- A first look at Freeboard 
- Use Freeboard on Github 
- Run your own Freeboard on a Raspberry Pi

And as Dweet.io is not working anymore would I wondered if it would be possible to use Freeboard with one of the rising alternative services.

Altering the Freeboard source code

As written in the story about Dweet.io shutting down, there is an alternative that uses almost the same API calls. The name is Dweet.cc. The only thing you have to do is to alter dweet.io into dweet.cc in your api calls and your ESP8266, ESP32 or Raspberry Pi Pico's can talk to Dweet.cc.


Freeboard has a special datasource accessible called Dweet.io and of course that does notwork anymore.

So I started with adjusting the Freeboard source code.

In the story Run your own Freeboard on a Raspberry Pi I showed how you can download Freeboard and install it on your own PC or a Raspberry Pi.
Freeboard is written in Javascript and that offers opportunities for altering the code.

So I started opening all the HTML, CSS and JSON files in a text editor. I searched for dweet.io and changed it in dweet.cc
Well that did not work. Hmm.

JSON

And then I realized that there was a Datasource with the name JSON.


So I started by sending a simple api call with my browser to Dweet.cc:

https://dweet.cc/dweet/for/lucstechblog?temperature=25

And that worked. I got this as a result:


Ok, that worked.
For retrieving dweets you need to use:

https://dweet.cc/get/latest/dweet/for/my-thing-name

And in this case I had to replace my-thing-name into lucstechblog.

For more information about this, open the index of this weblog and look for Dweet. There are detailed stories on how to use it.
For testing please use your own "thing" name.

So now I had to implement this in Freeboard.
It really is easy and I am going to show you how to get the value for the thing lucstechblog and the value for temp
erature. Again if you want to try this go ahead but please use your own thing name.

First step is to put the get API call into the JSON configuration menu.

When filled in press "SAVE"


Now choose ADD Pane and a smal window opens.


Press the  + on the top right side of that window


A pop-up window shows in which you can choose what kind of widget you want. In this example choose Gauge.


In the menu fill the data in as shown.
Pressing the datasource test on the right side gives you the opportunity to walk through the JSON steps.
Press SAVE


And there it is, my simple dashboard with only a gauge.

Now you can add multiple widgets to get your own dashboard up and running with Dweet.cc

If you have any questions that you can not find in the stories on this weblog) do not hesitate to send me a mail.

Conclusion.

Getting Freeboard to work with Dweet.CC was easier than I thought.
Just one problem remains...........Dweet.cc is again a cloud service and I wonder how long before THEY cease operation.........

So my main goal is still to build my own Dweet server that I can run locally. And guess what: I already have that running. It runs on a humble Raspberry Pi3 with a USB stick for memory. The base code was written by a friend of me and I enhanced it with a real database and some other stuff.
I am testing it as we speak.

So keep tuned for further updates on building your own Dweet server. But for now can can get it running with Dweet.cc

Till next time.
Have fun !!

Luc Volders

Friday, August 8, 2025

Dweet is dead, long live dweet

For an index to all my stories click this text.

I fall for it every time, and this time I have had enough.
Read on if you want to know what this is about.

It started a few year ago.

First there was Blynk.I was using Blynk for several projects. You could use their free service on which you could use a limited amount of IOT devices. But you could also install your own Blynk server on a Raspberry Pi and then you could use unlimited devices. And suddenly they switched to Blynk 2. The free server was removed from Github and the accompaning App was removed from Android Play.
Blynk 2 had at that time just a very limited free use. So that was the end of it.

Then there was IFTTT. They suddenly stopped allowing users to use free webhooks. You needed a payed subscription for that. So for using IFTTT with your IOT projects you suddenly needed a payed subscription. So that was the end of it.

Appybuilder, which was an app-building system based on MIT's App Inventor ceased working some time ago.

And the list goes on and on. Several services start giving their customers free access and then suddenly become paid services or quit alltogether.

And now Dweet

I have made some projects with dweet.io and published several stories about this service on this weblog. If you have no clue about what Dweet is read this story first:
https://lucstechblog.blogspot.com/2019/05/dweet-volatile-iot-cloud-service.html

And just January this year they quit too.


This was the message they posted on Twitter (X).
And that really pisses me off as there were lots of users.
So all the projects you made with Dweet.io just stopped working.

And what's more: this also shuts Freeboard down.
For those in the dark: Freeboard is a free IOT dashboard that offers buttons, switches, gauges, leds etc, etc. etc. With this you can make your own IOT dashboard for free but....... it relys on Dweet.io

And to be frank I loved Dweet for being free and it's simplicity.

Dweet users to the rescue.

I was not the only one who was pissed for being disappointed for the umpteenth time.

A few clever users came to the rescue and started a free public Dweet server by themselves. But there is a catch.

dweet.cc
This is the best alternative for dweet.io They claim on their website that at the moment of this writing a total of 1127113 dweets have been send.
It is free and uses nearly the same API.
The catch is that you need to change dweet.io into dweet.cc in the API calls.

dweet.me

Another alternative for dweet.io Dweet.me started 15 March 2025 and claim that they already had more than 1 million dweets on April 24 2025.
On the positive side it is just as free as dweet.io was, and it even offers someting extra. Dweet.io saved the last 5 messages. Dweet.me saves the last 8 messages.
On the negative side the website mentiones it is rate limited, although it does not state what the maximum rate is. And the API calls are more deviant from the dweet.io ones.
This means that you need a bit more altering your projects code.

dweetr.io

This is the last alternative I found. At the moment of this writing the number of dweets used was 57. Not a lot really. And there is a catch. You can only have 2 "things" for free. If you need more you will need a pro subscription. On the positive side: the subscriptions are cheap 25USD for 25 things and 49USD for 50 things for a period of 5 year !!!
The dweetr.io API looks similar to the original dweet.io. You need to change dweet.io into dweetr.io in the API call.

The API calls

I am going to show you the basic API call to send a dweet for the original dweet.io and for the 3 alternatives. So you can see for yourself what changes are needed to use the service.

Send dweet with dweet.io
This will not work anymore, but for comparing purpose only.
https://dweet.io/dweet/for/my-thing-name?hello=world

Send a dweet with dweet.cc
https://dweet.cc/dweet/for/my-thing-name?hello=world

Send a dweet with dweet.me
https://dweet.me:3334/publish/yoink/for/my-thing-name?hello=world

Send a dweet with dweetr.io
http://dweetr.io/dweet/for/my-thing-name?hello=world

As you can see the changes are minimal. Nevertheless you need to alter all your original dweet.io projects.

Which one to choose.

Well that is a difficult question.
Both dweet.cc and dweet.me claim to already have processed more than a million dweets. So it looks like their servers are robust. Dweet.me mentions on their website that it is rate limited and I send them a mail about that. Next to that their API is a bit different so dweet.cc looks like the better choice.
The limitation of just 2 "things" for the free tier makes dweetr.io the least attractive choice.

Mail me if you want the sourcecode for micropython or Arduino code for dweet.cc if you do not get this working. And maybe I am going to do a story about this anyhow.

And Freeboard ?

Freeboard will not work with any of these alternatives right out of the box.
I am going to try to get it working again but that might take some time, if I get it to work at all.........

But I had enough !!!

That's what I wrote at the beginning of this story.
And I am really fed up with companies or private individuals that offer IOT services for free and after a while start charging for subscriptions or quit the service all together.

And like you have seen in this story. There are alternatives to Dweet.io and just like the original they are free to use. But how long will it take for the developer to get fed up with it and shuts the service down, or decides it costs too much bandwidth and needs to charge money for the service.

So what is the real alternative.
Well, to put up your own server at home using a cheap Raspberry Pi or a small (obsolete) PC. That is what I am researching now for my future IOT projects. A Raspberry Zero is quite capable running a dweet alike service and will set you back just a few dollar/euro. So that is a serious option.
I'll keep you up to date through this blog, so keep returning here.

Till next time,

Luc Volders