Monkey Detector web service!

The monkey detector is temporarily live as a web service (I’m using the free version of Roboflow for image recognition – to save on server resources – so it will run out at some point)

Try it out! Send an image via curl like so*:

curl -X POST -F "file=@image.jpg"

For example if your filename is monkey.jpg then it’s “file=@monkey.jpg” You should see True or False as a response in the terminal.

Successful monkeys detected will be displayed on this web page: – just re-fresh the page after your POST request.

This service will eventually be part of the Monkey Squirter project.

*please be nice and don’t spam my service, right now the server is pretty overloaded and running low on resources!

Magic Poi Lite Firmware (Definitive Version)

Ever had your computer crash and had to re-install the OS, then restore all of your projects one by one, only to forget about an important file and re-do all of the work?

I did the test firmware for Magic Poi Lite 7 months and one Laptop crash ago. Today I went to upload the firmware I worked on all last week and it turns out I already have a GitHub repo set up – for the same project – which I forgot about.

Turns out the new version is better though, so here it is: – made in PlatformIO, now with bonus Documentation!

In case you didn’t already know, Magic Poi Lite is the single colour version of Magic Poi – WiFi enabled, internet connected flashy lights poi.

SmartPoi js utilities update

Hi Smart Poi enthusiasts!

I have been working on more stability and functionality for the offline web utilities for Smart Poi. (see the code here:

Check out the video walkthrough here:

If you want to try it out, make sure to get the latest Smart Poi firmware in order for this to work:

SmartPoi File List

Just a quick one to let you know that SmartPoi has a server (running on the lowly ESP8266) which means I can do stuff like this:

The html to do this is now on GitHub here: – usage is in the README.

Basically it fetches a list of files from the poi and then fetches each compressed binary file in the list, decompresses them and displays the resulting images. Up until now the only way to see what was actually on the poi was to spin them, so this is definitely an improvement. This is all done using the SmartPoi AP – no internet access required!

Any day now* I will be upgrading my poi to work with ESP32 but until then I’m still trying to make the ones I use in my shows better!

*I am aware I have been saying this for a while now 🙂

SmartPoi – new Web Software to upload images.

I wrote some new code, so now you can upload offline images from a web browser! Finally the (old) poi can take advantage of the hack I did to have up to 52 offline images displaying.

First, install the latest SmartPoi firmware (otherwise the web upload won’t work)

Then clone this repository here to your computer and follow the instructions in the README. It all runs in a web browser, nothing to install or download (currently tested working on 36px poi using Firefox browser).

Thanks to Andreas for giving me the reason to make this – look out for updates to the SmartPoi project, more control from a web browser coming soon. I think I already mentioned this in my previous blog post – I am a bit tired of fighting with Android!

SmartPoi have a hidden feature I didn’t tell anyone about yet

So far I haven’t gotten my new ESP32 based version of SmartPoi hardware working (re-named MagicPoi) – make no mistake, it’s coming but due to various reasons this keeps getting delayed. *ESP32 dual core is a game changer, that’s all I’m going to say here.

My ESP8266 based SmartPoi 36 and 72px poi are still going strong, on their third battery (now Lithium). So I got bored recently and instead of working on the new poi I had another look at SmartPoi Arduino code and remembered the “Hidden Feature” – Router Mode!

Activating Router Mode

First of all, make sure you have the latest firmware. This is because the older versions may not include the fail-safe I built in. Remember that “Main” and “Auxillary” poi – and number of pixels – need to be set in code, before uploading. So in the SmartPoi app there is a menu entry called “Settings” – with Pattern and Channel fields as well as Router settings. Fill these in, using your own router settings to guide you. My address is with Address2 79 but your router may be 192.168.1.xx or something completely different – the last numbers are for the fixed IP on your network, please consult the router options for available addresses on your own network.

Once you press “Send Request”, nothing happens. That is for a reason, it was an experimental feature and I didn’t want to brick anyone’s poi if they accidentally put the wrong Router or Password.. In order to activate the setting you have to go to a browser (on a device connected to the poi Access Point) and put in and then

First the “Auxillary” poi (78), then the “Main” poi (1) please or it won’t work! At your own risk! You may need to try again if it doesn’t work.

What this does is set the poi to start up 50% of the time in STA mode – connected to your router with the static IP address you configured with “Settings”. Every time you switch the poi off and on again it changes, AP mode then STA mode and back again. Make sure to keep the 2 poi in sync, that is on the same startup mode as each other!

Both Poi will show a green . . . . . indicator when attempting to connect and fast green ……. when connected. If you see green dots going up slowly for ages it means it’s not connecting and the Router and Password need to be checked (in AP mode with the app)

What is this for?

AP mode is simple – your phone connects to the poi direct, no router needed. I have noticed, however that the AP signal is pretty weak on the ESP-01 so using a router could help reliability.

Also, ESP-01 AP mode can only connect 4 devices at a time – including the phone, so that’s 2 pairs of poi and controller max. With a router connection you could have a lot more.

Finally the Router connects to the internet. This is helpful because I am moving all of the functionality to the cloud (sorry) mainly due to being sick of Google changing things for Android developers all of the time – breaking things really. It’s too frustrating so I’m moving everything to the cloud. The Offline mode remains the same.

My SmartPoi demo app doesn’t work anymore!?

Yes I haven’t had a chance to do anything with the Router Mode yet – the Android code doesn’t know about your new STA mode IP address. You can use the C code from the circusscientist site here with the new IP address for example:

To switch off the Router option just do the following in a browser connected to the poi AP (poi in AP mode so not connected to your router) and then

The SmartPoi Router option will soon be accessible from the main “MagicPoi” site, with downloads of your offline images (72px only) direct from the browser, control of functions, and more!

Writing code for products is different from writing code for yourself.

And that is differrent again from writing code for other developers (eg: open source).

Differences between coding styles explained

There are three types of code. I am going to attempt to differentiate between the different approaches by showing an example based on ESP8266 here.

1. Coding for yourself

This type of code is the easiest to do of course but comes with it’s own pitfalls and requirements. I would say that a git repository and README is a minimum requirement for any project, even if it’s just a test to see if something works. I have been guilty of ignoring this and later coming back to a project to find I have no idea of what it is about, or even how long I worked on it and even whether it worked or not.

2. Coding for a product

Now one needs to take into account the potential users of the product. For example ESP8266 WiFi connection now needs a web interface to input the password. A manual is also needed to explain how to use the product. The coding style can remain the same (although for all coding I recommend at least describing the various functions in the code)

3. Coding for other developers

If your code is going to be read and extended by other developers, other considerations come to the fore. Documentation, reproducible tests and linting are important, as well as a README which explains what the code if for as well as how to run it. For ESP8266 Arduino IDE is no longer good enough, as it doesn’t have the means to specify library versions – which one reason I have moved over to using PlatformIO almost exclusively for coding (that and code highlighting and navigation with VSCode)


So there you have it – a quick rundown and not very complete but hopefully you get the idea. The requirements for Open Source development are pretty exacting – something that has taken me a long time to realise, and am still working on perfecting in my own code.