C53UiG+5HPaxD2HPaxD MikroTik hAP ax3 + with POE

C53UiG+5HPaxD2HPaxD MikroTik hAP ax3 + with POE

I’ve been playing with all kinds of MicroControllers, but not this one.
Something new to learn.
The STM32 Nucleo-64 board provides a flexible way to try out the STM32 microcontroller. The Arduino Uno V3 can be connected as a shield.
STM32 excels in high-performance, deterministic industrial control with better real-time capability, lower power, and rich peripherals, using ARM Cortex-M cores, while ESP32 dominates IoT with built-in Wi-Fi/Bluetooth, lower cost, easier Arduino/PlatformIO access, and strong community, but with higher power and less precise real-time control (Xtensa cores), making ESP32 great for connected projects and STM32 for industrial/precision tasks.
STM32 (STMicroelectronics)
Strengths:
ESP32 (Espressif Systems)
Strengths:
I’ve given people on the street control over my Xmas/Fireworks lights last month. (This month it is going to be converted to an interactive game)
I saw some LED strip dividers on Aliexpress, next year it’s going to have a star on top.


Like this….

Another LED related project I started today is a Whack-A-Mole game with multiple levels.
For this I need to convert a simple arcade button to a programmable multicolor version.
From single white LED to multi color, programmable.
While this is a old project from 2019, I decided to make a more responsive one, after my friend Tyrone mentioned a project somewhere on the internet (forgot where).
Time to dust off this project!
Above version worked but was slow.
I used a python script to send values to de controller.
Memory setup was the same.
Below my new schematic, using an opamp to drive the analog meter.
Utilizing a MCP41000 digital potmeter and a LM358 signal amplifier I hope to get a more responsive setup.
Input to display MQTT and maybe Serial.
Two player mobile pong using secure mqtt I made a few months ago.
Today I tested my group playing mode while at family to celebrate xmas.
I was filming during testing to get responses. I can’t post this because of everyone being in the shot.
What worked:
To do:
Nice to have:
Use a web server with a simple php script.
<?php
$host = $_SERVER['HTTP_HOST'];
$redirects = [
'torrent.local' => 'http://192.168.1.1:9091/',
'nzb.local' => 'http://192.168.1.1:8080/',
'squeezebox.local' => 'https://192.168.1.2:9000/',
'squeeze.local' => 'https://192.168.1.2:9000/',
];
if (isset($redirects[$host])) {
header("Location: " . $redirects[$host], true, 302);
exit;
}
http_response_code(404);
echo "Unknown host";
Add your webservers IP number to your local DNS server or hosts file
192.168.1.4 torrent.local
192.168.1.4 nzb.local
192.168.1.4 squeeze.local
192.168.1.4 squeezebox.local
Now you can use http://nzb.local in your browser and you will be redirected to http://serverip:port
No need to remember IP numbers or ports
Control your effects using MQTT.
You can add anything to control your effects using RotaryEncoders, sensors and other data values.
I’m fixing the code to make use of free MQTT servers on the internet.
Then I’ll post the JavaScript in the Hydra forum or discord.
Calling the JavaScript in https://hydra.ojack.xyz/ website
https://gist.githubusercontent.com/fashice/2098d1301117b86caed94aca8f2101ff/raw/7d2a7300e7ddf42d4f1793f693dbb517e09bd2d8/gistfile1.txt
change mqtt server and add to hydra using
await loadScript("https://domain/script.js¨);
Taking a few minutes every day to get my hydra-fu up to par.
I’m building a library of images and movies to include into hydra effects.
Testing my beamer today. I need a new one!
Not good enough to perform on a stage.
I will add some new effects to the gallery this week.
https://media.henriaanstoot.nl/hydra
Mixed with blender using OBS
Drawing like etch a sketch using Midi pots input and Hydra feedback
At the WHY2025 hackers event, we used bigred’s antenna pole to make a huge sign using leds.
It gave me the idea to make a pole which displays digital “fireworks” using leds.
Fireworks are becoming illegal the next year in the Netherlands, I think.
So why not going digital?
12 Meter pole, 300 Leds.
There is a QR code and a website link mentioned on a page at the gate.
10 presets to select via a website.
Notification on my TV
While waiting for the first visitor I made a magnetic game.
Using a bunch of magnets, and 3D printed hexagon rings.
Two players try to place magnets in a small area without moving the others. If magnets slam together, you have more pieces to place.
(Below, last player has to take those 6 pieces)
CODE for website index.html
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>WLED Mast</title>
<style>
body {
background: #111;
color: #fff;
font-family: Arial;
margin: 0;
padding: 20px;
text-align: center;
}
.grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 18px;
}
button {
padding: 25px;
font-size: 22px;
border-radius: 20px;
border: none;
background: #333;
color: #fff;
font-weight: bold;
}
button:active {
background: #555;
}
</style>
</head>
<body>
<h1>WLED Mast</h1>
<div class="grid">
<button onclick="run('b1')">off</button>
<button onclick="run('b2')">fireworks</button>
<button onclick="run('b3')">sound<BR>reactive</button>
<button onclick="run('b4')">bounch-balls</button>
<button onclick="run('b5')">fire</button>
<button onclick="run('b6')">juggle</button>
<button onclick="run('b7')">swing</button>
<button onclick="run('b8')">sparkle</button>
<button onclick="run('b9')">popcorn</button>
<button onclick="run('b10')">comet</button>
</div>
<script>
const API_KEY = "misuse-prevent";
function run(action) {
fetch(`/action.php?action=${action}&key=${API_KEY}`)
.then(r => r.json())
.then(j => console.log(j))
.catch(err => alert("Error"));
}
</script>
</body>
</html>
CODE for Wled API
<?php
$public_api_key = "misuse-prevent";
if (!isset($_GET['key']) || $_GET['key'] !== $public_api_key) {
http_response_code(401);
die("Unauthorized");
}
$action = $_GET['action'] ?? null;
// Map 10 buttons → WLED preset numbers
$allowed_actions = [
"b1" => 19,
"b2" => 22,
"b3" => 23,
"b4" => 20,
"b5" => 21,
"b6" => 3,
"b7" => 8,
"b8" => 2,
"b9" => 4,
"b10" => 14
];
if (!$action || !isset($allowed_actions[$action])) {
http_response_code(400);
die("Invalid action");
}
$preset = $allowed_actions[$action];
// ---- WLED IP address ----
$wled_ip = "http://WLEDDEVICEIP"; // <-- CHANGE THIS
// API endpoint
$url = $wled_ip . "/win&PL=" . $preset;
// Call WLED directly
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($ch, CURLOPT_TIMEOUT, 2);
$response = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
header("Content-Type: application/json");
if ($error) {
echo json_encode(["ok" => false, "error" => $error]);
} else {
echo json_encode(["ok" => true, "preset" => $preset]);
}
One of my old ideas, never made or tested.
I saw a post on Reddit with this question, I decided to post a little drawing using my idea.
Center of below picture shows pages (the lines), with coppertape going front to back and connect to following page
Inductive copper tape

Taking resistors of the same value, you’ll get a logarithmic voltage divider.
If you want the values evenly spaced, to make sure you are not misreading the value you have to make the resistors more like:
10k,6k,3k3,2k5,2k,1k68,1k5