While I am waiting for the D32 as S3 replacement I already made the PCB for it, but before I get a sample of that I am going to check if it works with the pins I have chosen. This is a hybrid board for either I²S sound or the internal DAC using a PAM8302A amplifier. It doesn’t make a big difference in the price but maybe some of you want to pick what you already got. It also still got the HC-12 433MHz in mind, just in case it comes handy in the future again. Currently there is no fix for the WiFi LR mode available but maybe I have better luck with the D32 on this too. The sound of the I²S board is far better than on the 8KHz internal DAC though it requires more memory for higher quality sounds. I don’t want to add external memory even though it would be possible through the SPI interface for which I also reserved some solder eyes, just in case someone wants to use external memory. Don’t consider the circuit to be rock solid from the picture, it is an UNTESTED layout. I’ll provide the fritzing files as soon as this passed my tests and I got the first samples of it.
A nice feature of the D32 is the battery port, however the 3.7V will be probably too weak for the WLED, audio and for the IR. I am a total electronics idiot maybe it would be sufficient but I prefer a swappable battery pack like a power bank.
While I am stuck at the ATTAG project again I had to solve a completely different problem. If you are running an online shop you probably came across the issue that you have to print different types of documents on different printers. Like product labels, invoices, shipping labels. It is pretty annoying if you have to handle multiple orders and every step requires a change of the print settings over and over again. This often leads to documents printed on the wrong printer, paper mess and so on.
So I was looking around if there are some ready-to-use solutions. And yes there are but at insane costs compared to triviality. For a long while we had a working solution that used javascript inside the pdf document to choose the correct printer. But this only worked for Firefox and after the newer generations seem to block this due to security issues.
So actually it is pretty simple but you need to create PDFs of your documents which then can be retrieved. I am not covering this part here. You may do this with FPDF or any other PDF generator on your shop server.
This guide expects WINDOWS to be used.
First step is you need to install these:
A webserver package such as xampp, just the Apache webserver and php will be used
Python (tested with 3.X)
Ghostscript
GSPrint
Since the browsers won’t allow you to execute a program on your local PC you need to let a local webserver do that. In XAMPP control you can set the Apache webserver to autostart with windows. You may have to run XAMPP with adminstrator priviledges for that!
Once you installed it, create a small print.php script containing the following:
<?php
$pyscript = 'C:\\gs\\print.py'; // the path to python print script
$python = 'python.exe'; // you may need the absolute path of python here, like C:\\programs\\python\\python.exe or wherever you installed it
exec($python." ".$pyscript, $output);
echo "Printjobs started...";
?>
I extracted all the ghostscript / gsprint stuff to C:\gs, put it wherever you like but keep in mind where, you will need it later.
The following is the python script which chooses the correct printer per document and starts the printjob through ghostscript and gsprint. You may also use any other pdf viewer/printer for this which works with command line execution such as the PDF-XChange Viewer.
Of course you have to edit the paths, url and currentprinter according to your settings. Your python may need some packages used here, install them with
However this might not work with the inline PDF parser of the browser so it is most likely required to set the options in the browser to open the PDF in an external viewer sucher as the PDF-X Change viewer. I am not sure which other viewers are executing the script but this one does.
Since the beginning of ATTAG (OSDYLS) I switched the MCU multiple times, from D1 Mini to S2 Mini because I needed more GPIOs and now to S3 Mini. So I collected some experience with these little time eaters.
Let me say one thing at this point, the S3 Mini is a diva. Not sure if it is matter of revision number or of the core cpu or because it is relatively new. However, be prepared for some dramatic behaviour during the programming of it. It loves to block flashing from time to time or ends in boot loops if your code isn’t closely to what it likes. Don’t worry until now I was able to recover any of these, so it isn’t too easy to brick one to death.
First of all, make sure the IDE got CDC on boot “enabled” otherwise you won’t see any serial print outputs.
If it got stuck in a boot loop you need to reset it with the buttons, sometimes multiple times and/or remove/replug the usb cable. If it still doesn’t like to be flashed go to your console and manually execute the esptool command copied from the IDE output.
If it still refuses flashing add –no-stub to the parameters, like this: C:\esptool_py\4.5.1/esptool.exe –no-stub –chip esp32s3 –port COM6 –baud 115200 –before default_reset –after hard_reset write_flash -z –flash_mode dio –flash_freq 80m –flash_size 4MB 0x0 […]
So why the S3 at all if it is so complicated?
Because the D1 and S2 are single core computers, the S3 got two cores and that means one core can be reserved for “listening” to incoming signals. That way the detection of a hit is never interrupted by whatever else happens on the blaster.
So the “eyes” of the blaster will run in the main loop() of the code which is set to core 1 by default, all the trigger/display/ammo/audio will be put on core 0, if everything goes well.
Libs that work with interrupts tend to don’t work well with the IRremote library, such as the WLED control. I need to do some tests to figure that out, however the feedback on the WLED usually just happens when IR detection is not required. Such as hit feedback AFTER hit detection.
Another thing that I stumbled across is the fact that IRremote only allows ONE receiving pin, this makes it more difficult to add multiple hitpoints. There is an old fork of the lib with multiple inputs, I have to check if it works.
So that is the stuff I am currently working on, the Wifi LR / UDP thing is still unresolved, waiting for the guys @espressif to work on it.
I was looking for a way to measure the amps that will hit the sending IR LED of the ATTAG project so I quickly built a small ammeter (amperemeter) with a recording to micro SD feature.
If you choose to build your own you need these parts:
In the requirements I mentioned a 128×32 pixel OLED in the optional stuff, if you are planning to use more than one display per blaster you will have to change the address of the 128×64 pixel OLED unless you get a 128×32 pixel OLED with changeable addresses.
This needs a bit more advanced soldering skills with SMD, which I never had to use before. However I succeeded with my first approach even though it looks pretty ugly. 😉
Remember this absolutely is NOT required for the functionality of the blasters, it is just a neat addon. But if you want to have it you should get a hot air solderingstation, to remove the SMD resistor from its current place.
The resistor is a 4.7K, just in case you kill it during the process. You need to remove it from position R11 (address 0x3C) and solder it to position R12 (address 0x3D).
As I wrote in a former post, I would test the laser power of the small IR laser. I got myself a tiny HWLPM-Mini 10W. It isn’t very accurate and usually measures up to 7% higher than the real power. The smallest step is 1mW and pointing the IR laser at it, powered with 3.3V coming from a D1Mini, it leaves the display of the laser-meter at 0.000W.
While the max voltage of the laser is 3.5V , the specs look pretty realistic with 0.6-0.9mW. So at 3.3V it probably will be around 0.7-0.8mW.
You may say the laser-meter is broken, no it actually isn’t. I tested two laser pointers at it and was a bit shocked, the blue one ends up at 28mW after 20 seconds, the red one at 6mW, so they are both far over the 1mW rate they are sold at and the blue is even far above the 5mW labeled sticker on it. So watch your eyes when using these.
Conclusion: The IR laser might actually be an option.
This post will be updated from time to time, the components might change, so it is up to you if you want to experiment on your own while in the “pre-release” state or wait for a release state. All items get a color status:
yellow = component might change blue = component is final choice, only chance of change is if insurmountable obstacles appear
The prices are those I payed for them and of course depend on the source where you get them. I am not related to any of these shops and I don’t get any bonus or affiliate payments, they are just a suggestion.
NOTE: Not in the list are basic items you will need for sure such as wires, solder, some glue and filament for the printed parts. For the JST connectors I don’t provide a link since there are offers with collections that make more sense including or not including tools etc.
Minimum requirements for ONE blaster, minimum means no audio or visual feedback and no blaster ID, which makes all of this pretty useless but you can fire at a target and the target gives feedback. Actually you just need the IR sender and receiver, one resistor plus the LOLIN S3. But hey, that won’t be fun at all.
Since the S3 Mini causes massive trouble with many libs I probably have to replace it again by something else, I ordered some ESP32 WROOM dual core boards to check them out and to compare their behaviour to the bitching of the S3 Mini.
I hope the S3 is still an option in the future (damn, I got ten of them 😉 ) but at the moment it suffers from incompatibility because the development of many important libs is still not aware of it or just doesn’t want to be aware of it.
While I was watching the IR LED with some old dashcam I noticed that still a lot of the light, which is not in the main cone of light, is unused plus the lens is 31mm instead of the ideal 47,7mm. So the best choice would be a lens about 50mm with the focal length of ~135mm. However this would make a big gun barrel and usually those bigger lenses have a longer focal length so it won’t match the LED again with its 20° angle. Also the spot diameter would be bigger though with less incrementation at distance.
So instead I’ll try to get more light from the LED and push it into a smaller angle with these reflectors:
However they don’t have a 5mm bore so the LED needs to be fixed behind it. Don’t know if there will be any advantage at all but I’ll try. Using two LEDs instead of one is still an idea but in first tests this turned into a display of two spots.
Update: Test with and without reflector, with and without achromat. It looks like the reflector is of no real use. However, these tests are made without the peak amperage of 1A which finally will be used for some microseconds per shot. So the LED emission from the LED still might be different then.
And this is what happens when using two diodes while hoping that the intensity can be doubled. It is not working with lens usage, it probably would requires some diffusor or whatever, I don’t know. I am open for ideas 😉
I mentioned it earlier that the formerly used speakers are not anymore available, so I ordered a batch of new ones. They don’t sound much different than the other ones but might if the sampe rate of the sounds would be better. That will be fine tuning it the end. Got them here:
I am also still experimenting with the best solution for the IR signal and got one of these IR laser modules:
Problem is, they are not trustworthy cause the product description says class 2, the specs say class 3A and the label says class 3B. Lasers with 780nm wavelength cannot be class 2 or 2M so it is 3B. Overall I still don’t feel good with the usage of these even if they are not too focused, there are high chances they are quite above 1mW as many revisions with laserpointers have shown. Not to mention that it depends on the environmental temperature. I’ll get a chance to test them somewhere for their power. Besides all you can read about effects of IR lasers on the eye are vague, either ignoring risks or overrating risks. So it is like lottery and that is a stupid idea with eyesight.