1. Introduction
Page is a short presentation on what raspberry pi pico can do. Projects are mostly from here: https://github.com/AdrianCX/
This is a very cheap microcontroller with built in wifi, programmable IO (PIO) and GPIO.
This makes it easy and cheap to build internet connected projects as you would with a regular raspberry pi.
2. How do you develop for it
Most common are python with micropython/circuitpython or C/C++ with picoSDK or FreeRTOS
2.1. Micropython
This allows you to code using python, usually with an editor like thonny:
You are limited to libraries built in by micropython.
You are also limited by resources of the board to a bigger extent (RAM/CPU)
This in general means no nice things like HTTPS and limits to connections.
Debugger is built in to thonny.
2.2. PicoSDK
If you want your code to run directly on the microcontroller you can use the official SDK to have a quick start.
This is a lot faster and more customizable.
It is also more difficult to debug.
- You can still use logs. USB Serial is built in, there's also a UART port.
You can also send logs and simple crash reports via UDP if you look at pico_https. - You can use a proper debugger, picoprobe
2.3. FreeRTOS
This is a fully featured OS for microcontrollers: https://www.freertos.org/
3. What can I do with it?
Showing off some fun projects
3.1. Learn to play the piano
- Fun article: tomshardware
Source code: github
Getting user input:
-
main.py loads configuration config.py and sets up wifi via wifi.py
-
main.py serves index.html on any "GET /"
-
Javascript sets up a websocket connection that feeds user input to the microcontroller.
-
User selects a song and speed and presses "play", this is sent via websocket and controller starts showing lights.
Showing a song on led strip:
-
Code takes in converted timing information from text files and displays these based on configuration
-
Example song: bela ciao
-
Converted via a simple python script: converter
-
And displays these on the LED strip via gradients class: gradients.py
-
All driven from main.py
3.2. Control radio devices over 433mhz
This is one of my first projects which started this hobby.
It helped convert remotes into a phone based control.
Source code: pico433mhz
This is an even simpler project:
-
webserver.py handles "/receive" and "/send/{code}" HTTP endpoints to either transmit or decode and return detected codes.
-
rfdevice.py handles radio encoding and decoding. This is code from milaq/rpi-rf adapted for raspberry pi pico.
With this HTTP API it can be integrated into other applications such as my telegram bot that is in last picture above.
3.3. Lightsaber
Steps to build this:
-
glue a ws2803 led strip on a wooden stick.
-
Solder power cables to the led strip.
-
Put the wooden stick with leds in a PVC pipe that is sealed on one end..
-
Go outside, put protection equipment on and mix then pour epoxy into the PVC pipe. (protection is important, epoxy is dangerous)
-
set up raspberry pi pico, battery pack and button as in picture.
-
3d print a hilt. (openscad is useful to design this)
Unfortunately I lost the hilt 3d model but I can help redo the project if anyone is curious.
3.4. Irrigation system.
This uses the same logic as for RC Cars below.
-
A DRV8833 drives two solenoids.
-
A battery pack powers the device. (4 AA rechargeable batteries)
-
A RTC keeps time for us while in deep sleep.
3.5. hexagon based lights
You can check out how to build this and other hexagonal shaped devices here: github
3.6. RC cars
These are controlled via a joystick over websocket or via game controller via browser game API.
The fun part is that they are simple to make and powered via regular USB power banks
Source code for the first RC robot: crawlspacebot
3.7. DNS Server
Source code: pico_hole
This is a bare raspberry pi pico running a simple C based application that inspects DNS packets and only forwards domains we want.
This was fun to build in order to block ads on a smart TV.
3.8. Connect old alarm remotes to the internet
This takes old alarms that are not internet connected and connects them.
We just tear down the old alarm and connect the raspberry pi pico to the button inputs.
Then we use a web API similar to pico433mhz to make a telegram bot or anything else.
3.9. Portable epoxied alarm remote
More information: reddit
This eventually ended up using MQTT to enable/disable alarm, it would light up red for alarm on, green for alarm off and pink for in-progress.
3.10. HTTPS Server
Getting SSL is a bit difficult within constraints of the pico.
Debugging SSL issues is even more difficult.
A project that attempts to make things easier can be found here: pico_https
Just follow the hello world and ask questions.