return to table of content

Building an occupancy sensor with a $5 ESP32 and a serverless DB

davidw
58 replies
20h26m

How do people "productize" their ESP32 projects? (Edit: not talking about mass-producing something, I just want a self-contained unit rather than a board with a bunch of wires sticking out)

I see a lot of pages where they show some bare-looking board, but in the real world you want to package that up.

If you're a software guy like me, you would likely prefer to pay a bit extra to just have that tidied up for you rather than fiddle around with stuff.

lostapathy
16 replies
20h24m

3d printed enclosure?

davidw
15 replies
20h22m

That sounds like one of those "I have a problem... now I have two problems" jokes.

I wanted something simple and cheap and now I need to go deal with this whole other thing I don't know much about and either rent or buy into it?

lostapathy
6 replies
20h16m

As somebody else mentioned, you can hire it out.

There's a lot of files running around with existing models for common projects, so you probably don't need to design your own enclosures a lot of the time unless you want to.

And printers have gotten cheap, like $99 gets you a jumping off point into the hobby.

davidw
3 replies
20h9m

Do people not just sell like "complete package" things?

The board in the article is $13.49 (https://www.amazon.com/dp/B072HBW53G). If you could get an enclosed, complete thing for $20, including the board and whatever you need for it to run, that'd be much less of a PITA than "brand new hobby" or "find someone to 3D print stuff for me locally and deal with that whole hassle".

kps
1 replies
19h55m

There are things like M5Stack (also ESP32-based) that suit some purposes.

davidw
0 replies
19h49m

Yes! That looks pretty cool and more like what I'm talking about.

kube-system
0 replies
19h38m

The thing about enclosures is that they are pretty design dependent. Nobody knows what you are hooking up to your board or what the intended purpose is. Some boards do have generic type cases, e.g. raspberry pi cases.

szundi
1 replies
19h45m

$99 is just enough to jump into the hobby of fixing your printer all the time - and that's what hobbyists are actually looking for

solving something would be like $700 calibrated out of the box, like the old prusa 3 something or the bambu p1something.

lostapathy
0 replies
19h42m

I'm well aware. I think of the $99 printer as a filter - either it's going to catch your interest enough to justify jumping to a $600+ printer, or 3d printing isn't for you and you aren't out much.

bluGill
2 replies
20h4m

That is why so many amateur projects look ugly: making a pretty package is a whole new skill set. 3d printing is the easiest acceptable solution, but it isn't the best. Best would be a custom designed injection molded housing, but that is even more work to design.

Nothing about making a nice presentation is beyond what amateurs can do. However it is a lot more effort and so most decide it isn't worth it.

davidw
1 replies
19h51m

I don't care if it's "beautiful" or ultra-compact or looks as nice as some Apple device. All I want is to buy one thing without wires and an exposed board.

bluGill
0 replies
17h12m

There are not enough of you to make it worth the effort most likely. If you disagree then you should invest in the business opportunity.

krasin
0 replies
20h19m

JLCPCB would 3d print high-quality enclosures from a variety of UV resins:https://3d.jlcpcb.com/and decently cheap.

The next best option is injection molding with PCBWay (or other similar provider):https://www.pcbway.com/rapid-prototyping/manufacture/?type=4...

An alternative is a sheet metal enclosure:https://www.pcbway.com/rapid-prototyping/manufacture/?type=4...

But 3d printing with JLCPCB is really the most convenient way unless you need a lot of parts (thousands) or the material properties of the UV resins would not be enough (high-temperature, outdoors, etc).

fnordpiglet
0 replies
19h45m

There are plenty of enclosures available on AliExpress and Amazon. But a cheap reprap 3d printer is a general tool like a screw driver or hammer, albeit more complex for sure. But the learning curve isn’t absurd, it’s basically buying something plugging it in and loading filament then printing a downloaded STL. It gets harder when it needs calibration and maintaining, but it’s not an unknown dark art - there are a billion helpful discord groups.

But once you have it and know how to maintain it, anything where you’re like “man wouldn’t it be nice if I had a physical object like X” becomes a relatively solvable problem. There are lot of materials with many different properties. When you skip into a zone of material or print you can’t afford the equipment for, there are a bazillion print shops.

The harder skill frankly is the 3d modeling. But I find openscad is sufficient for almost everything and then for the rest I use Build123. They’re both parametric code driven design tools so fit well inside a software project (better than GUI tools, and more easy to be precise with). Openscad is absurdly easy, build123 is more advanced and requires Python skills as well as effort to learn the conceptual model.

I sort of felt the way you seem to once upon a time until I said screw it and figured it out one day. Now I feel like I lived most my life hobbled for want of this tool.

So, yeah, overkill for printing an esp32 enclosure. But doing so unlocks a lifetime of possibilities.

dekhn
0 replies
15h19m

The simplest I can think of is this:https://www.digikey.com/en/products/detail/sparkfun-electron...use a step drill or other large-diameter bit to cut holes for cable glands, dremels to cut rectangular holes for power switches, and drill and tap holes for standard brass standoffs. IMHO everybody should have at least one cordless drill and drill bits, as well as an M3 tap. Then use Cable glands for wires going in/out, and nylon sheathing for the cables outside the box.

If you take the time to make the holes nicely, the result often looks good enough that non-makers will think you are a god of manufacturing.

Zetobal
0 replies
20h19m

You can also pay someone to do it.

Johnny555
0 replies
19h42m

If you're looking for an enclosure for your hobby ESP32 project, there are lots of off the shelf, small enclosures available:

https://www.amazon.com/s?k=esp32+enclosure

If you want to sell a more finished commercial quality project and don't want to print your own, there are places that will fabricate one for you (but in low quantities, having them 3d print it probably cheaper)

morphle
9 replies
19h58m

You shouldn't productise anything with ESP32, its just an overprized bloated hobby pcb.

See my comment below on how to productize this: use a 4 cent off the shelf microcontroller on a 10 cent pcb or much better: make a custom chip with all the sensors on board but with $25K minimum Capex but tiny Opex

morphle
5 replies
19h51m

As others point out: you could hire someone to do it. Based on my custom 1 cent ASIC (custom chip) I would design, test and build your (moisture or other) sensor for €3000 excluding tax and price of all the needed tools. Usually more like $6000 because they want to outsource all the problems (like mass production and sales) to me

morphle@ziggo.nl if you want me to design it

szundi
3 replies
19h47m

Mine would be 0.3 cent per chip and would need $50k investment.

Jokes aside, if you know how to design a custom chip for 3k USD, I would like to know about it.

morphle
1 replies
19h39m

it is not a joke, you can do as low as 1.10870 cent per custom chip or 2 cent per off the shelf chip. 0.03 cent is impossible, the minimum size of a chip is .625 mm2 and that sets the minimum price.

Designing one for $3K is possible because I already have a tested chip design that I just have to modify for you.

A master student project is usually a free design with a free tapeout at Google MPW, Mosys of Europractice.

I also design bigger chips and $500 wafer scale integration with 10000 cores :https://vimeo.com/731037615

anigbrowl
0 replies
10h48m

You seem like a very smart and capable person, and for an industrial buyer your proposal makes a lot of sense. For a hacker (who is often a hobbyist or amateur looking to build something simple quickly) a versatile SoC at $5/unit also makes a lot of sense.

I have to say you are hurting yourself with your communication style, because it comes off as very dismissive and arrogant. I bookmarked your presentation in case I need it in the future, but a 4 hour video is not a great way to hook people who are not sure if they are interested or not.

morphle
0 replies
19h28m

if you like to know more about it: morphle at ziggo dot nl to make a video conf appointment and get a demo. Or ask email questions, but that takes more effort for us both.

sweetjuly
0 replies
8h2m

You're selling yourself drastically short asking for just 3k unless your plan is to wrap the entire project in a week. I don't think I've ever managed to even setup a new tech library in under a week, let alone design and verify anything.

tiagod
0 replies
7h30m

I'm certain that an ASIC wouldn't be cost effective for all but very large operations. Even if you could get it at the same price, it would massively increase time to market, and if you need to scale production fast you're shit out of luck. Not to mention you'll probably need multiple iterations, especially if you're sticking a Bluetooth modem and a bunch of sensors in it.

Using an off the shelf MCU and off the shelf sensors saves you all those headaches.

Also, ESP32 is not a "pcb".

dgacmu
0 replies
17h29m

This is silly and reductive. You make different design for manufacturing choices at different steps of product development and volume.

In some cases, you may luck out and find that a widely available dev board is actually a really good match for your needs, in which case, run with it. You'll cut out a lot of NRE and get your product in customers hands faster. Once you've shown that you can sell in volume, do a DFM pass for V2 to minimize cost. OP probably fits this case, as all they need is Wi-Fi and Bluetooth, depending on their eventual power solution.

If you find that you're taking a dev board and soldering a lot of extra components to it, then I agree, you want to move to a custom PCB before doing any real volume. But you still might make a dozen first cuts with this and a 3d printed case to see how some product beta testers respond.

chpatrick
0 replies
19h54m

There are thousands of ESP32-based IoT devices on AliExpress that would disagree with you. It's an SoC chip not a "pcb".

morphle
7 replies
19h34m

You shouldn't productise anything with ESP32, its just an overprized bloated hobby pcb, very unprofessional.

See my comment below on how to productize this: use a 4 cent off the shelf microcontroller on a 10 cent pcb or much better: make a custom chip with all the sensors on board but with $25K minimum Capex but tiny Opex

AnotherGoodName
5 replies
19h16m

The esp is a cheap microcontroller.

You shouldn't productionize an esp32 dev kit but you should absolutely productionize an esp32 on a board you've designed that has the specif features to do your thing (whatever that is).

morphle
4 replies
19h13m

no, the ESP32 is a SoC, a bunch of chips in a package on a PCB. not a bare microcontroller chip. It is already a product with several resellers: ip, fab, packaging, exporter, distributor, retailer and a very high profit overhead of at least 2.7 times the costprice

k0k0
3 replies
19h6m

You're absolutely wrong on a number of points. A SoC stands for "system on a chip", it refers to a single die (if you want to get pedantic, there are multi-die packages but this does not apply here) package, a "bare chip" if you will.

https://www.espressif.com/en/products/socs/esp32

The ESP32 is a SoC. It's available in QFN packaging (Quad Flat Pak No Lead).

The ESP32 is available included with a number of "modules" (and of course devkits). These modules are designed for production use and it can be economical to do so. You clearly don't have the foggiest idea about these product lines so don't seem to be in a good position to comment on the economics.

https://en.wikipedia.org/wiki/ESP32

morphle
1 replies
19h1m

You should call the company, order a few million units, negotiate and sign their NDA and then they will tell you it is not a single bare die

k0k0
0 replies
18h51m

Why would you need to sign an NDA? There are decaps readily available. Most ESP32 models have a separate die for the flash memory, but everything but the flash (that is uC, WiFi, BLE, and peripherals) is on a single die, which sounds like a SoC to me (The definition of SoC devices have always included devices with off-die RAM and Flash). These aren't "a bunch of components on printed circuit boards" as you initially claimed.

https://electronupdate.blogspot.com/2018/08/espressif-esp32-...

emj
0 replies
17h35m

There are some nice images of the ESP32 die herehttps://zeptobars.com/en/read/Espressif-ESP32-Wi-Fi-Bluetoot...and yes does not look like a multi die chip.

HeyLaughingBoy
0 replies
18h47m

Not everything is going to be sold @ qty 100,000. I deal with the other end of the spectrum: 1 unit to maybe 25/year. At those quantities, speed of development and assembly is the most important criteria. Unit price is not.

bluGill
6 replies
20h21m

There are lots of options. Most of what you see they don't: this is a one off project for the hacker and if others find it useful great, but not the goal. As such packaging isn't needed, sometimes you shove it in a box.

If you want something nice, that can be done, now you need to pay someone (could be yourself!) to design a package. ESP32 is designed to be easy to put into your own products, this means design a circuit board and case to fit each other, and so on. Then you buy the ESP32 chips in bulk and assemble them onto the circuit board. The board you buy for a prototype is officially only a reference board and not what they expect you to ship (though shipping the board is common: they are small, cheap, and someone else did the hard board design)

davidw
5 replies
20h19m

I'm not really talking about producing something at scale, just the bare minimum of not having a board with wires coming out of it.

Say I want to do some one-off project and put it outside somewhere, out of the weather, with some batteries to power it.

Or an indoor thing with an AC hookup of some kind.

Doesn't have to be perfect or beautiful or as tiny as possible; just sort of a complete package.

amenghra
1 replies
18h51m

You can buy project boxes. Some of them come with breadboards/perfboard that properly fit with screws (e.g.https://discountbloc.ru/archive/products/xwzz1130z33x.html). Alternative is to 3D print a box.

Altoids box is a classic. Food plastic boxes also works depending how hot the components run.

XorNot
0 replies
18h24m

AliExpress has a number of companies selling the "generic black rectangle" that looks a bit like an Apple TV now. I've been meaning to buy a couple and see what they're like to work with, because that's the overall effect I really want - something that looks like a router or generic company product.

qwertox
0 replies
20h10m

I just buy new small breadboards and jumper wires and make it so that it looks nice. Jumper wires of the proper length, not jumper cables.

anigbrowl
0 replies
11h8m

Time for me to shill m5stack.com again

I don't work for them, I just really like their products and own about 10 of them. Downside, the documentation is rudimentary so you should enjoy steep learning curves (but not too steep - The ESP-IDF and MicroPython docs will get you through most problems).

HeyLaughingBoy
0 replies
18h50m

I mentioned M5Stack above. An alternative is to buy an off the shelf display, e.g., from Polycase -- an outfit I've used a lot and mount your board inside.

There are literally tens of thousands of off the shelf electronics enclosures for every likely possibility. From massive control panel boxes measured in multiple feet, to watch-sized enclosures with straps for items designed to be worn on your wrist. You'll find something suitable no matter what.

qiqitori
1 replies
11h4m

If it uses Bluetooth you're theoretically on the hook for thousands of dollars if you want to sell your ESP32 project as a product. (IANAL; it may take a lawyer to truly understand if you have to pay or not.)

sweetjuly
0 replies
8h10m

ESP32 modules (read: not just the packaged ICs) are pre-certified in most markets. This is the main advantage of shelling out for these more expensive modules instead of just integrating it all yourself. It's also why many of the IOT products which use ESP32s use modules and waste a lot of area rather than the much smaller ICs: certification is a nightmare for small scale products!

HeyLaughingBoy
1 replies
18h54m

I am a huge fan of M5Stack. Take a look at the Tough or Core units. You get an ESP32 with couple of peripherals (speaker, buzzer, real-time clock) and a TFT touchscreen all in a case. Water-resistant in the case of the M5Stack Tough.

I've shipped a couple of consulting products based on them and it really cuts down on the work I need to do in order to build product.

davidw
0 replies
18h42m

That's exactly the kind of thing I'm talking about. You could take those and plug them together and be basically ready to go, rather than "just" investing in a bunch of 3D printing and soldering and lord only knows what else. Maybe it costs a bit more, but that's fine - you get something that you can use somewhere besides sitting on your desk with a bunch of exposed wires.

shoelessone
0 replies
17h3m

I am by no means an expert, but I wrote up a bunch of words on how I did this personally for a family Xmas present here. The tl;dr; is a custom PCB in my case:https://kevinmitchell.io/blog/mitchine-esp8266-wooden-thinki...

serial_dev
0 replies
19h47m

You get a "product designer" (?) who designs a case. If your product is "standard enough", you might skip this step.

Then, you reach out to local manufacturers and ones from bigger markets. You get some samples, you check if things work like they should. If you like it, order a smaller batch. Design a quality assurance workflow, or find a specialist who can help you with that so that the manufacturer doesn't ship you 20% faulty products.

Get your products onto the shelves of a brick and mortar store, and/or create a website, sell on Amazon and other portals.

Talk to your customers, listen to their feedback, improve every step a little.

It sounds overwhelming.

I worked for a small smart home startup, and I learned that, for example, in Shenzhen, there is a whole industry ready to help entrepreneurs realize their dream products, and at every step of the way, you can contract someone to help you. In our experience, the Chinese service was both much better, cheaper, faster than European offers.

mkingston
0 replies
19h22m

I mount the board on some nylon standoffs through a takeaway box lid. The rest of the takeaway box is the enclosure. I drill some holes through the takeaway box for wire ingress and egress.

I use a tupperware container if I'm feeling fancy.

mikub
0 replies
20h8m

I look if if I can find some already assembled things and try to build an project around it. For example I used an pictureframe to build a nice neopixel thing, I also documented it on my website,https://mikub.me/post/(1)/

So what I do is I usually look around what everyday objects could become nice enclosures for microcontrollers and such things.

martinsnow
0 replies
18h30m

Usually a black abs box will do

jpcfl
0 replies
18h52m

You can design both a circuit board and a case with Fusion360, which is free for personal use. Use JLCPCB to assemble the board for you. You can 3D print the case yourself.

It took me about 20hr to learn how to use Fusion360 and make a simple circuit and case this way.

greggsy
0 replies
19h47m

Smaller dev boards and shrink wrap.

dragontamer
0 replies
17h56m

If you're handy with wood, you use wood.

If you've got a 3d printer, you make a 3d print.

If you're more of a acrylic guy, then you take your laser-cutter, cut out some shapes, drill a few holes and bam you've got a box.

If you got none of these and just want a bare-necessities box, you use an Altoids Tin that costs about $25 for 12 tins... and they have these kinda useless mints in them though. So you buy those boxes, then you throw away the mints and shove your project in there.

If you want slightly better than the Altoids tin, you buy a Hammon Enclosure. (https://www.hammfg.com/electronics/small-case).

If you're like me, you wrap it in electrical tape, and then wrap that in duct tape or something. Maybe color on it with permanent marker.

dekhn
0 replies
15h25m

I wouldn't call it "productize", but when I wanted to give an ESP32 project to a friend who would be using it, I did these things: designed and printed a case for the ESP32. The ESP32 is soldered into a perma-proto and all wire connections are soldered to the ESP32's terminals (I don't use a solderless breadboard, or Dupont wires, once I'm done with the design). The perma-proto is screwed into posts in the case (as are several daughterboards). The user-controlled potentiometer is also soldered into the perma-proto and is tightly screwed into the case. There's a power jack screwed into the case, and all wiring in/out of the case goes through a "cable gland" and the cables, outside the case, and wrapped into nylon sleeve with strain relief. And an on/off switch.

example:https://www.printables.com/model/72839-stable-and-waterproof.... If I am using screw terminals, wires are terminated with ferrules.

For some projects that use 120V AC directly, I've purchased nice receptacle with fuse, and grounded the metal casing. But I don't feel comfortable distributing those.

I have also been known to encase an entire project in clear epoxy (the first "maker" project I did, thanks to an enlightened shop teacher in the 1980s, was a nightlight using only 3 components, encased in epoxy; they work some 35 years later!)

Some things I can think of to go further: designing my own PCB instead of using perma-proto. FInding better temporary connectors (duponts are not reliable). Eliminating the ESP32, replacing it with simpler logic circuits when possible.

boustrophedon
0 replies
18h56m

There are a lot of companies that make electronics enclosures. Some of them are waterproof. Usually they have a couple pre-drilled mounting flanges to screw in the board as well, and then you'd drill your own external holes for input/output as necessary. Here's a couple manufacturers, and you can usually find stuff on e.g. adafruit and digikey as well to save on shipping if you're buying dev boards or other parts from them already.

https://www.hammfg.com/https://www.budind.com/http://takachi-enclosure.com/https://www.adafruit.com/product/903

bobsmooth
0 replies
16h26m

I designed a carrier board for my module to slot into. You can also solder the header pins directly to some perfboard and build off that.

_jal
0 replies
19h44m

I like wood. It is pretty much everything you want for something like this - super durable, very easy to work with, and depending on what you pick, cheap and pretty, too.

Plus, woodworking is very satisfying by itself. And also easy to get started with - for small box-like things like this you only need a few cheap hand tools.

filterfiber
17 replies
22h37m

This is an excellent write up!

Seeed Studio XIAO ESP32S3/C3, WaveShare ESP32S3 Zero, Unbranded ESP32-WROOM with OLED, Orange Pi Zero W (untouched), Raspberry Pi Zero W (L->R, T->D) After testing all of these, the only one reliable to work for long periods of time (one month currently) was the XIAO ESP32C3/S3.

I suspect they may be having power issues? For the ESP32's specifically I highly recommend adding a beefy capacitor over the power rails, as those can be rather sensitive to voltage fluctuations especially when transmitting. Both the RPi and ESP's can be finicky depending on the power supply/cable/cable length too, and the RPi's sdcard does tend to fail from sudden power loss. They should all be capable of at least a month, my pi's and esp's have gone several months.

I'd be curious to see the results from other ESP32's (or even the pi) with a larger capacitor added.

sodality2
12 replies
22h28m

It’s definitely not a reliability issue, with the platform - ESP32 in general is very popular so it’s surely an issue with my usage. I’m fairly certain it’s just a cheap manufacturer issue I ran into. I bought essentially a no-name ESP32 at first and that’s the one that refused to last. Proper manufacturer solved that issue for me and now ESP32 works just fine.

The raspberry pi actually never worked, largely because I tried to shoehorn way too much complexity in and manage too many things. It’s just a BT scan and a HTTP call.

I don’t think it’s a power issue as it’s getting 5V1A from a power outlet directly to USB-C into the device. Though that’s definitely something I need to look into, as the Xiao ESP32-S3 I have also had intermittent issues, and IIRC the XTensa cores are more power-hungry than its RISC-V based sibling, the ESP32-C3.

filterfiber
4 replies
22h12m

I don’t think it’s a power issue as it’s getting 5V1A from a power outlet directly to USB-C into the device.

It's not the total voltage/wattage the PSU can provide, but the voltage at the processor.

The ESP's varying current draw notoriously causes too much noise and a lot of boards don't have large enough decoupling capacitors so the voltage drops too much and it glitches out. Also a warning that USB PSU's can very MASSIVELY in quality (I'd suggest an apple one for testing if you have one handy).

I think you're right that the RISC-V processor is either better behaved and draws power more consistently, or the board has shorter traces to it's bypass capacitor or a larger bypass capacitor.

stavros
2 replies
16h51m

This is correct, I thought it wasn't and was going crazy trying to debug my Pi 3 resetting my 3D printer every time, with any of ten power supplies I tried, including a configurable bench PSU.

I switched to the official Pi PSU after someone said "trust me on this" online, and yep, zero issues in all the years since.

numpad0
1 replies
7h48m

It's voltage for Pi 3. They forgot to account for voltage drop due to protection or something. Official as well as third-party Pi 3 specific adapters are rated at 5.1V to mitigate that problem.

nottheengineer
0 replies
4h30m

Early alexa devices also have power supplies that are rated at 5.2V, those could be an alternative. I also had a good experience with a 30W oneplus warp charger after some power issues with cheap 5V2A ones.

iicc
0 replies
3h24m

don't have large enough decoupling capacitors

Is this something you can eyeball to guess at quality?

sokoloff
2 replies
19h14m

I chased a reliability problem with an RPi3 for a while before figuring out it was a poor quality USB cable that I was using for power.

Not saying that’s your issue obviously, but I spent a couple more hours than I really should have swapping USB power bricks but not the cable (because it was threaded through the printer enclosure and laziness prevailed).

sodality2
1 replies
19h11m

I didn’t consider that as highly as the outlet adapter since that’s what pushes the amperage and wattage, but thanks, I’ll definitely be investigating that next!

alias_neo
0 replies
9h51m

I've found cable quality to be quite important for Raspberry Pi, particularly if you're not using an official adapter, the head room can be low and the resistance of the cable can tip it over.

I haven't had major issues with ESP devices but I try to keep them on <30cm cables of decent quality and ensure they're shielded. Though I haven't tested experimentally, I'd expect low quality, poorly shielded cables to have some effect on the signal quality.

londons_explore
2 replies
22h9m

Are you sure that the system isn't still running, but it has just disconnected from wifi and is failing to reconnect? I have a few status LED's flashing to show the main CPU is still running, and it often is, even when the device has fallen off the network.

I find that happens fairly frequently unfortunately, and haven't managed to track down the cause.

sodality2
1 replies
22h1m

Hm, that’s a good call. I have a callback on the connection dropped to reconnect but it’s possible it needs a full reboot? I’m going to have to sit in on the serial monitor and wait until something happens and see. Thanks for the tip!

londons_explore
0 replies
21h52m

I live in a very wifi-busy area (hundreds of networks), and I suspect that the wifi logic somehow hangs itself waiting for some packet/message/state which gets lost and never comes.

numpad0
0 replies
7h33m

Just put a huge low-ESR cap on the 3V3 rail. Newer WiSoCs like ESP32 draws too much for too short that regulators can't catch up. I've once had brownouts with an Uno R3 style ESP32 board, and it didn't stop until I added a 0.22F EDLC from my junk bin, which is absurd and not a recommended usage of EDLC, but I think even 330uF electrolytic from same bin didn't cut it.

jetbalsa
1 replies
19h42m

I'm a huge fan of using Alpine with the RPi due to reducing writes to the SDCard. it will only save data to disk with a lbu commit -d and by default boots into a kind of tempfs.

alias_neo
0 replies
9h46m

I have been using Alpine for a while but didn't know this!

At the moment, I'm looking for a way to make my storage more resilient on a Pi I'm using to host Hashicorp Vault, for secrets in Filesystem mode.

First I looked at high-resilience SD cards, but I don't really want them stored on the OS card anyway, also considered just getting a high-quality USB stick and mounting the secrets storage to that; It sounds like a combination of one of these (or perhaps another, similar option) alongside Alpine to reduce writes to the OS SD could be the ticket.

I have a couple of Pis on my network edge running things like WireGuard, with the root mounted read-only to try and help with the issue of SD card resilience; I've killed dozens upon dozens of SD cards in Pis over the years.

alias_neo
1 replies
9h57m

I have a bunch of ESP32s performing critical-infrastructure tasks in my Home Automation; they've been running flawlessly for about a year now; I update them occasionally (ESPHome) but haven't had any issues.

Some of them perform multiple tasks, e.g. one of them is Bluetooth proxy in my home office, but it also runs the light strip along my Skadis wall boards.

I'm using some random brand ones from a company called "AZDelivery" on Amazon.

I haven't done anything special to them; they sit in 3D printed cases, and are plugged in with relatively short cables (usually <30cm where outlets allow) into at least 5V/1A adapters.

hellweaver666
0 replies
6h36m

I have a number of similar devices but I use dirt cheap Wemos D1 Mini boards from Aliexpress, they usually cost around a buck each (and they come in ESP8266 and ESP32 variants).

linvs
15 replies
18h9m

Outstanding write-up! We actually built a business based on this technology (occuspace.io) and have had to address almost all the questions that you brought up. To answer some of them here:

Q: How accurate is BLE beacon count, as a proxy for occupancy?

A: It's very highly correlated but different dining locations, classrooms and library floors have very different correlation factors. Consider using other, perhaps more complex features, as well.

Q: How accurate is BLE beacon availability time, as a proxy for dwell time?

A: We don't believe it is very accurate given that BT MAC's randomize every 8-20 mins depending on manufacturer.

Q: Can we improve the accuracy by setting an RSSI minimum, for which devices weaker than it do not count, to ensure only those who are really nearby get counted?

A: That's a great idea. It's worth noting that different types of spaces and depending on where you installed your sensor, will have different threshold levels.

georgeashworth
10 replies
13h41m

Does this type of occupancy tracking work accurately outdoors? I'm assuming it would be difficult because signals would travel further. (My startup needs occupancy tracking for tennis courts.)

Maybe I could mount a BT device at a corner of the outdoor space and use its signal strength as the threshold value.

rsaxvc
4 replies
12h59m

If you want to get really spicy, you can use two antennas and an SDR to compute angle of arrival using nothing but a BLE advertisement's data . This is different from BLE AoA as it doesn't require a cooperative transmitter.

alias_neo
3 replies
10h1m

If you want to get really, really spicy, use three devices/antennas and you can roughly track in three-dimensional space.

milkshakes
1 replies
6h30m

there are wifi setups that allow you to do this already.

worthless-trash
0 replies
5h35m

I would like to subscribe to this API.

greggsy
0 replies
2h55m

Wouldn’t three dimensional tracking need four antennas?

sgu999
0 replies
8h14m

Did you consider using BT or UWB as a radar? On a tennis court you won't have any obstacles to worry about, I suspect it's relatively easy to solve.

UWB in particular is accurate enough to get breathing patterns...

rsaxvc
0 replies
13h6m

You could use the BLE AoA extension as well to derive an angle:https://www.bluetooth.com/blog/new-aoa-aod-bluetooth-capabil...

rsaxvc
0 replies
13h13m

You could mount one at each corner and use a directional antenna to help.

linvs
0 replies
10h46m

It does but we don't have a battery powered option (yet) so power availability is the bigger issue. Our sensors can only be outlet powered. Each sensor can cover cover roughly 5,000 sq.ft. or about two tennis courts.

enva2712
0 replies
11h56m

You the same george ashworth that used to work at d&b?

leobg
1 replies
9h24m

Can you do fall detection for the elderly?

hellweaver666
0 replies
6h38m

Seeed Studio (maker of the Xiao) have mmwave sensors that can do fall detection.

rozab
0 replies
2h39m

The differing correlation factors seems like a difficult problem for productizing this. I would expect a STEM college building to have maybe >3 BT devices per person, while other venues may have less than 1.

bambax
0 replies
2h8m

How accurate is BLE beacon count, as a proxy for occupancy?

But how often is an accurate count needed? The initial requirement of the project was just for the OP to "avoid crowds in the dining hall", and for that all one needs is a general idea of highs and lows.

In your business, do customers expect high accuracy? All of them, or some of them?

Also, regarding MAC address, even if they're randomized, isn't there a way to know what kind of device it is? (to count only phones for example, and discard headphones, etc.)

SCUSKU
14 replies
21h31m

Awesome write up, I liked how accessible the writing is, as well as the fun tone.

I have a problem where I will need to monitor the soil moisture of 20 trees in San Francisco. My current thought is to strap an ESP32, Lora module, battery, and capacitive soil moisture sensor and to send data once every 6 hours or so.

I was wondering if off the cuff you have any suggestions or pointers on how to best approach this. Thanks and once again, thank you for sharing this!

mwint
3 replies
21h29m

Do you need an ESP32 vs an 8266? I believe the 8266’s are more energy efficient.

In either case, you can put them in a deep sleep that uses minuscule amounts of energy and can wake back up on a timer. I’d start there.

SCUSKU
2 replies
21h22m

I think I am largely MCU agnostic, although preferably something where I can use Arduino since I am familiar with that. Good to know that ESP8266 is more energy efficient. I have seen this video which demonstrates that the ESP8266 can run off 2 AA batteries for 425 days [1].

Another thought I was having was to write a mobile app that as volunteers walk by the sensor would send data to their phone, which would then forward it to my backend. I suppose this is a mesh network of sorts? Not sure if this is feasible or a good idea though :/

[1] -https://youtu.be/IYuYTfO6iOs?si=oLuJiGxdQ8VHyu29&t=837

sodality2
1 replies
21h11m

Another option would be LoRa - it’s pretty long range. The problem would be that could add a lot to power usage. Though 6h should be plenty of time - wake up, send a small packet, sleep for 6 hours.

You would have a central LoRa receiver in a place that can reach all of the sensors. How far apart are the trees?

Other than that, I would suggest testing out lots of different hardware. I bought several different boards before any decisions were made, and I’m glad I didn’t stick to just one. Costed me maybe $30 to buy a gamut of devices and now I’ve settled on a single one that does what I need.

Also, make sure you’re flashing with the largest image size you can, if your code becomes too large. For me I had to enable an option in the board settings to use the full memory space.

Lastly, one thing you should do is the low power option. See which board supports it the best. Then, what I would do at startup is turn on all the sensors, collect and send data right away, then turn all your sensors off. Do ultra deep sleep for 6 hours. then when it wakes up, don’t bother doing any kind of loop to the beginning - hard reboot. That avoids any problems with memory allocation becoming too large somehow over the course of the program, since it always starts fresh (which is all you need!). I’m not sure the trade off here but for me, I reboot every 12 hours and it works great. (I would do it after every scan but I don’t delay between scans for more constant data, so it would be a lot of set up every single minute).

SCUSKU
0 replies
21h6m

The trees are all pretty close to each other, about 3-4 city block radius (map of trees [1]). The issue is that as far as I can tell there is no existing LoraWAN gateway on The Things Network I can tap into [2], which means I will have to setup my own gateway. Which is fine, but it may prove to be difficult to get this onto a tall building since I am just an apartment dweller. At the very least I can put the gateway in my apartment window.

[1] --https://www.google.com/maps/d/u/0/viewer?mid=1e7K_VdEEYkxuAy...[2] --https://www.thethingsnetwork.org/community/san-francisco/

morphle
3 replies
21h18m

If it is only 20 trees, you could use off the shelf sensors.

Its much better and cheaper to design from scatch, use an $0.04 ultra-low power Arm microcontroller with ADC or a Padauk, add a single layer pcb with two well proportioned pcb traces in a plastic bag as a capacitive moisture censor (better than resistive sensor) and a $0.12 solar cell or rechargable battery. Single sensor cost around $0.41 excluding labor, mass produced $0.08 including labor and sensor network

SCUSKU
1 replies
21h11m

That's a great point. I have experience w/ Arduino and have made a carrier board one time [1], but am not familiar with full custom PCB + MCU designs. Do you have any suggestions on where to get started for someone with my medium level of experience here? And also, how difficult would you anticipate a custom MCU to be?

[1] --https://zachbellay.com/projects/odaf/#iteration-3-phase-2-wi...

morphle
0 replies
20h12m

A custom MCU+pcb is at least 3 months work: downloading an design for an FPGA, testing it, using openlane to make an custom chip, taping it out, writting boot code and the main loop ( I would do that in assembly, much simpler than using C and some vendors library). The big issue is taping it out to a chip FAB, around $25K, see my comment below.

I would get started with an off the shelf MCU with good documentation, writing the software on a good development platform with the same assembly as the final microcontroller. For the $0,04 ARM microcontroller I mentioned above as final target with analog to digital controller (ADC) I would first write the program (the main loop) on a Mac on a high level language like Squeak or Python and use the $4 raspberry pi pico as ADC. I would then rewrite the working software in ARM assembly and test it directly on the pi pico. Then I would flash it on the $0.04 arm microcontroller wired on a breadboard to the moisture sensor. Then I would debug it again, with simple flashing leds to see where your software goes wrong. morphle at ziggo dot nl for more questions like how to find a 4 cent arm chip. I would start at lcsc.com , use their sister company and eda tool to design the pcb only with lcsc.com parts and order it fully assembled. Then I would open source it so others can directly order assembled boards

I would avoid Arduino like the plaque, in essence its just a precanned overpriced bloated C library on an overpriced microcontroller. You always get better results writing from scratch. See 'is it complex or did we make it complicated', a lecture by Alan Kay at Quallcom on Vimeo or Youtube, on designing systems from scratch or buy vendor stuff:https://vimeo.com/82301919

morphle
0 replies
21h8m

I designed my own chip for €,03 , a 180nm 8 core microcontroller with builtin moisture and other sensors. Minimal volume is 800.000 chips.

filterfiber
1 replies
21h20m

There are esp-lora boards including lipo power management you can start with.

The ESP has a few deep sleep modes, and there's a lot you can do to optimize them.

I highly recommend Andreas Spiess on youtube.

EDIT: Heads up that moisture sensors have reliability issues, Andreas's video 463 talks about them.

SCUSKU
0 replies
21h16m

So my thought was to utilize the capacitive soil moisture sensor and then coat the sides of the PCB with a waterproofing epoxy as Andreas recommended. My hope being that even if it craps out, I can just swap out the sensor, and since they are so cheap it won't be a big deal.

Also, great to know that there esp-lora board w/ lipo power included!

chasd00
0 replies
20h29m

look at Adafruit's Feather line up. they have lipo support + charging and then an easy connector to use for i2c which you'll probably be using to interface to the sensor. You can probably find one with Lora included.

Mumps
0 replies
2h42m

Would the Pimoroni Grow help you out?https://learn.pimoroni.com/article/plant-monitoring-with-env...

grab that, a pi pico, and some batteries (which should last months they claim), and set up an MQTT for data.

It is pretty expensive at scale. But if you want "no fuss" I think it would do the trick for you.

Kevin09210
0 replies
21h9m
j1elo
8 replies
19h52m

Always surprised to see people running around with their Bluetooth needlessly enabled.

Maybe I worry to much about battery usage, but I just got used to always enable WiFi, Bluetooth, or NFC, only at the moment of usage, and disabled afterwards.

ThrowAway1922A
4 replies
19h49m

I have a smartwatch and airpods, turning off Bluetooth would cause both not to work.

I'm more surprised that anyone ever turns it off, battery use is negligible compared to the cellular modem as I browse the web/listen to music.

landemva
2 replies
19h29m

I use Bluetooth maybe once or twice a year because I don't want to be tracked everwhere. Wired headphones. Phone in airplane mode much of the day. I suppose I am a privacy outlier, and I'm also not a slave responding to calls/texts.

ThrowAway1922A
1 replies
17h53m

and I'm also not a slave responding to calls/texts.

You do you, but I enjoy talking with my friends and family and I don't see responding to them as "slavery".

landemva
0 replies
16h35m

Yes, I enjoy experience of life in real life.

j1elo
0 replies
16h49m

Well, I said needlessly because of the amount of times I saw people leaving Bluetooth enabled while not using any BT devices. Their phone enabled it by default, and that's how it stays for its lifetime. Even if it's small amounts, it must be chipping battery away!

Of course if you got a smartwatch you'll want to leave BT enabled to get calls messages and such. At least that's a good reason to leave it on.

greggsy
1 replies
19h48m

I feel like you’re an extreme outlier. It’s not at all surprising, given the convenience in a range of modern day activities like driving a car, listening to music, being in a workplace, or simply being at home.

j1elo
0 replies
16h45m

But that's what I meant, using it when there is a purpose makes a lot of sense of course. I'd just enable BT, drive, then leave the car and disable BT before putting the phone in my pocket. Why leave it enabled during times that it's not paired with any other device?

To me it sounds like leaving home and keeping WiFi enabled. It eats battery because it's still sending beacons and trying to find some known device to connect to.

szundi
0 replies
19h51m

Google/Apple obfuscating these mac addresses do not help anymore?

dylan604
8 replies
21h42m

I've heard talks of the toll tag companies wanting to be able to detect occupants in a car so they can properly charge the correct amount of fees when the occupancy changes the amount. I never looked into how that might happen, but I'm guessing Bluetooth would not be a solve here as it's too easy to circumvent if passengers disable bluetooth

HumblyTossed
3 replies
21h36m

Cameras work well for front occupants. They're already being used to check if commercial drivers are wearing seat belts.

dylan604
2 replies
18h57m

if a toll tag required me to power it and allow it to record video of the interior of my car at all times, then FUCK THAT NONSENSE!!!! even if they had it setup so that the camera was only turned on briefly by a signal as you approached and then turned off again as you passed the gates, that's still a hard no from me.

alx__
1 replies
12h51m

Uh you're over thinking it. They just have cameras in the toll booths that snap a photo when the car crosses the sensor.

dylan604
0 replies
10h47m

uh, what about the kids sitting in the back rows that can't be seen?

sodality2
1 replies
21h35m

That’s much worse of an automobile usage case than the ones I read about (measuring vehicle travel speeds to improve travel time estimates)!

Occupancy based pricing for vehicles seems too hard to enforce anyway, change the pricing scheme to something more practical IMO

aidenn0
0 replies
10h7m

Right now occupancy based pricing involves moving a switch on your toll device to indicate if your car qualifies for the high-occupancy discount (e.g.https://www.e-zpassiag.com/about-e-zpass/e-zpass-flex)

kurthr
1 replies
21h38m

Or (shudder) have more or less than the requisite single phone.

dylan604
0 replies
19h7m

Obviously a soccer mom taking her bus load of kids somewhere would ruin the bluetooth use case. I never did hear more about how they would actually do it. I just met someone randomly at a holiday gathering a couple of years ago that said that was something his company was working on. The conversation just didn't allow for follow up.

neilv
6 replies
19h27m

Since this was done by a student at a university, and at some level this involves tracking people, that's an opportunity to ask a professor about what human subjects protocols you'd need if this was research.

(A professor might be easier to ask than the university human subjects board -- who might refuse to talk with you because this isn't under their jurisdiction, or might get alarmed because you didn't talk with them sooner.)

There might also be campus IT privacy&security policies that apply. Of course people are getting violated much harder by ordinary Web sites, apps, and IoT devices, but sometimes universities aspire to be better than the outer world.

alias_neo
3 replies
9h43m

I wonder what the "rules" are for things like tracking beacons. They're being broadcast, and they're almost certainly collected without consent everywhere we go.

I happen to live at a junction where my home is regularly surrounded by large numbers of Bluetooth devices; I had considered setting up a BLE tracker purely for "fun" to see what I could collect and discern from the data.

For example, one thing I'm certain of, is a correlation between poor air quality in my home and the arrival of these Bluetooth devices in the area.

wutwutwat
1 replies
8h40m

So a hidden industry of third-party location-marketing firms has proliferated in response. These companies take their beacon tracking code and bundle it into a toolkit developers can use. The makers of many popular apps, such as those for news or weather updates, insert these toolkits into their apps

Location marketing aims to understand “online-offline attribution.” If a Starbucks coffee ad is sent to your email, for example, marketers want to know if you actually went there and bought a coffee. The only way to know is to monitor your online and offline habits at all times.

Beacons are also being used for smart cities initiatives. The location company Gimbal provided beacons for LinkNYC kiosks that provoked privacy concerns about tracking passers-by. Beacon initiatives have been started in other cities, including Amsterdam (in partnership with Google), London and Norwich.

https://web.archive.org/web/20231027211008/https://www.nytim...

It's the wild west. We're illegally surveilled every day and the government uses the same data in product that allow them to track people without warrants

https://en.wikipedia.org/wiki/Fog_Reveal

There are no "rules" against receiving a signal. All you need is a radio that can pick them up. The rules apply to those broadcasting things afaik

jon-wood
0 replies
5h6m

While I feel like the beacon tracking SDKs in apps are as slimy as going the other way round, those SDKs aren’t watching for your device’s beacon. They listen for BLE beacons with known addresses the company has place on their premises and use that to determine you’ve been to that particular location. I’m sure some of them are doing it at a larger scale and tracking all the beacons you see to provide a view on all the places you’ve been.

Almost all devices you’re carrying with you will regularly rotate the ID they transmit in order to avoid correlation, so reading those beacons in a location can’t really be used for much beyond rough numbers of devices.

numpad0
0 replies
2h3m

Depends on local laws and jurisdiction. US famously has no communication secrecy laws, some countries states broadcast is free to listen, etc.

But I think the point made in GP is tracking people, although indirectly, could qualify as `human subject research`, the same technical category as Stanford prison experiment, MKULTRA project, standard website A/B testing, etc. I don't think it's going to be a problem per se, but can be an opportunity to discuss and learn about ethics and processes.

sodality2
0 replies
18h47m

Yep, I’m talking to a professor about exactly this. Didn’t want to include that in case it doesn’t work out though!

elijahwright
0 replies
17h53m

People lie to their IRBs all the time, unfortunately.

qwertox
5 replies
19h47m

My alarm clock consists of an ESP32 and has a somewhat big LED-array connected to it (powered by a transistor), a buzzer and a PIR sensor. It doesn't show the time, but buzzes (and flashes) and takes care of slowly brightening the room, or at night slowly dimming it into darkness some time after all the lights have been turned off.

One added benefit I discovered afterwards is that even though the AP is not between me and the ESP, I seem to reflect enough RF so that logging the RSSI provides information not only about when I'm in the bed, but also when I change position at night.

https://imgur.com/a/VixOlu5(edit: no erotic content despite the warning)

The green one in the middle is the RSSI, the yellow at the bottom the PIR sensor, the top one a mix of the data from my Mi Band 3 plus an annotation of when I was in bed (yes I did spend a lot of time reading news before falling asleep and before getting up)

picture
3 replies
18h36m

What was your stack like for data collection and visualization?

punkybr3wster
1 replies
18h8m

Ditto! I’d also love to know what is being used for the visualizations.

outworlder
0 replies
17h58m

Not OP but the screenshot looks identical to Grafana.

qwertox
0 replies
17h52m

Sent via UDP to a small custom Python server which feeds it into InfluxDB, then Grafana for visualization.

bayat
0 replies
3h9m

Very cool! Thank you for sharing this. I would love to see a picture the aforementioned alarm clock setup as well.

fnordpiglet
3 replies
19h55m

While I don’t discourage learning a new language the immediate toss aside of rust on esp32 was perplexing. It sounds like a lot of the memory issues would have been mitigated by sticking with a language better understood. Rust’s esp32c3 support is pretty good IMO, that’s all I use. Writing in C++ makes me feel dirty in ways that even COBOL doesn’t.

I also think I would have implemented presence by TTL, updating the TTL for each MAC when I see it and purging a TTL heap before updating my remote statistics. I didn’t fully grok the approach taken for maintaining the hash map, in a taxi off a long flight, but it didn’t seem super robust on my quick read.

sodality2
2 replies
19h48m

The hash map was definitely not robust enough, that’s why I ultimately switched back to the default behavior and increased the memory available on the board!

Also, I am a Rust fanatic. I do nearly everything in it! I gave a talk on it at our last hackathon! I even wear a Rust t-shirt regularly! So rest assured I will be exploring my options with Rust. I would love to get rid of my dependence on Arduino. But C++ was easiest to get off the ground with, believe it or not, just because I have experience flashing Arduino boards.

kramerger
0 replies
5h30m

Is it possible to program this device without the espresso SDK and the arduino stuff?

Whether I'll use C++ or Rust for my next project depends on which one I can first get working on this board with the standard toolchain (GCC and Rustc respectively)

fnordpiglet
0 replies
12h43m

No that’s awesome. Experiment and enjoy. But I would check out the esp33 toolchain for rust. It’s remarkably mature. Awesome project btw.

H8crilA
3 replies
19h6m

There are some very good frameworks out there for doing things like these:

   - ESPHome
   - Home Assistant
You can a build a device like this, often without writing one line of code, with ESP32 firmware updates over the air from a web UI.

I wish those ESP chips/mini boards had Zigbee. You can get much better connectivity on a Zigbee network than on wifi in a typical deployment, where every mains powered Zigbee device also acts as a router.

sodality2
2 replies
19h0m

I have to say, my manual solution was a lot more fun and hands-on and let me learn a lot more skills (C++, Grafana, serverless) than a one-click solution. Though I will be prioritizing maintainability if I decide to go further with it!

martinsnow
1 replies
18h43m

Agree with you fully. It's also a lot more easy to program behavior into an esp32 rather than rely on home assistant pre defined modules.

H8crilA
0 replies
8h58m

It's more about ESPHome rather than Home Assistant.

But yeah it is more fun to do it bare bones :). However, over time I found myself "upgrading" my hand made IoT devices to more standard solutions. Standard solutions usually work better.

raajg
2 replies
19h12m

not losing momentum in a nerd snipe like this is CRITICAL

This line got me laughing! My nerd brain has tried so many times to convince me to splurge money with this exact line!

alias_neo
1 replies
9h37m

It's funny, but it's also true. There are definitely times when I'm more "in the mood" for projects; In the winter particularly, I work more on my electronic projects, and do more gaming (my Gaming "season" just started again last week).

Of course the dramatic shift from "what do I feel like doing today" to "what am I in the mood for / have time for this season" has a lot to do with me being older and having children now, but with such huge gaps between me being willing/able to do such projects, losing momentum could mean coming back to something an entire year later, if ever.

I started an electronics project, at least 10 years ago now. It's "infamous" in my family, particularly when my wife needs something to poke at with my projects, for being the project I started over a decade ago, spent a tidy sum on, and am still adamant I will finish one day!

hasoleju
0 replies
4h50m

I can relate a lot. Having the momentum on your side is the main force that pushes such a project forward. Especially if you have family duties that ususally consume most of your free time.

As long as children are smaller even things like scheduling time for your projects don't work very well. Usually because unexpected things happen that need to be handled. Sickness, children waking up early or taking longer to go to sleep, etc..

lormayna
2 replies
21h8m

Can you use the variation of RSSI to track movement? I know thst it's multipath and cannot be really reliable, but maybe it can provide some useful information. Or maybe using 2 tracking devices and correlate the results.

sodality2
0 replies
20h28m

Instead of triangulation like that, which could get real complicated, you could also simply place enough in the areas you’re counting and limit the RSSI cut-off enough to measure those right next to it. That would work for specific areas you want to measure trends in, instead of general 3d spatial triangulation.

though some of the papers I read did this via measuring the time of flight of BT packets and how they were changed when people walked between them, and that really blew my mind!

dividuum
0 replies
17h17m

I do something like that for my home assistant: I have a few shelly smart plugs that can scan BLE. They filter for apple watches and send the MAC and RSSI to my home assistant where a small neural net then tries to detect the location within my apartment. It works better than I expected given the high variance of signal strength, even when standing still.

lesuorac
2 replies
22h33m

Linux Bluetooth is incredibly painful to handle in a headless way. Binding to DBus requires cross-compiler magic and not even Cross was getting me out of it.

That was my experience as well. I was doing something different so ultimately I just decided I'd put both the devices on the same WiFi network and then scan for "pi.local".

Do wish I knew how all those other crates work though where it crashes at runtime if you don't have a library instead of refusing to build.

wutwutwat
1 replies
8h17m

Home assistant does headless bt presence detection in ~200 lines of python I think the author had a painful experience because they wanted to do embedded and had to interface at a much lower level, where it's a long ago solved problem in higher level languages. Considering the tracker ended up in their door next to their computer, they could have stuck with the rpi that ran python and been fine

https://github.com/home-assistant/core/blob/dev/homeassistan...

https://www.home-assistant.io/integrations/bluetooth_tracker...

lesuorac
0 replies
4h25m

I don't know the author's code but mine was at the same level as home assistant's. I believe I was using Bluer (BlueZ) [1] and afaik the problem is that the dependency needs an armv7 version of DBUS when it compiles which my non-armv7 laptop did not provide.

If I do the home assistant route and just copy my source code over to the raspi and build the binary there it all compiles+runs fine. Except for the part where I can't compile it locally and so I don't know of a build issue until its been transferred + built.

[1]:https://github.com/bluez/bluer

hmottestad
2 replies
18h53m

Ultra wide band can be used to detect tiny movements of humans in a room. It can detect a finger twitching from several meters away.

https://www.eenewseurope.com/en/uwb-human-sensor-uses-impuls...

fotta
1 replies
17h18m

Aqara makes a mmWave presence sensorhttps://www.aqara.com/us/product/presence-sensor-fp2

haddonist
0 replies
15h24m

Make It Work have reviewed 18 different home mmWave sensors, Aqara included:

"Best mmWave Presence Sensors for Home Assistant!"https://www.youtube.com/watch?v=Kt1FpRM8R18

Animats
2 replies
22h26m

And with more of these, you could track where everyone is all the time!

Here's a camera based video people counter.[1] This is a bit less intrusive.

[1]https://github.com/saimj7/People-Counting-in-Real-Time

sodality2
1 replies
22h9m

Given manufacturer’s trends of enabling the privacy feature of randomizing the MAC address every n minutes, it would take some serious effort and analysis to reverse these general trends into individuals. I’ve linked a relevant article in the bibliography about these kinds of attacks [1] but in general, at least with user numbers in the hundreds, it would be very difficult.

[1]:https://ieeexplore.ieee.org/document/9369628

michaelmior
0 replies
21h31m

Just skimming that paper, it doesn't look like they made use of any kind of fingerprinting. The paper below shows how BLE devices can be profiled to extract a potentially unique fingerprint. I don't know how well this would scale to large numbers of devices, but I'd imagine if you used such a fingerprint, you could dramatically improve the association between randomized MAC addresses even if the fingerprint is not 100% unique.

https://inria.hal.science/hal-02359914/document

userbinator
1 replies
17h44m

I am also considering selling it to brick-and-mortar businesses that want to measure occupancy trends.

They've been able to do that long before invasive solutions like this, or computers, even existed --- turnstiles.

fy20
0 replies
14h29m

How many stores have you visited recently that have turnstiles? You've probably been in more that are using a variation of this tech.

There are a few companies offering it as a commercial product, and yes there are people that want to buy it. The value is not just knowing how many people are in a store, but where they are going, what they are spending their time looking at.

simonbarker87
1 replies
16h44m

Very impressive. This made me chuckle:

I asked campus IT to whitelist the MAC address

Back at my uni this would have been a multi week endeavour with a number of forms and likely a denial. This was 15 years ago so hopefully things have changed there now.

sodality2
0 replies
14h38m

It's actually because our WiFi portal doesn't allow printers, game consoles, etc without browsers to connect, we have to manually add it. Though there is a portal to add it ourselves without IT, I am at the max 5 devices through there so I have to ask for overrides :)

reidjs
1 replies
21h47m

is something like this possible for an outdoor setting like a beach?

sodality2
0 replies
21h37m

Definitely, if there’s a solar panel and a battery hooked up + some sort of internet connection. Though I would worry about durability outdoors, probably needs to be sealed pretty tightly

me_again
1 replies
21h8m

Cool!

I didn't totally follow the issues with keeping the data in memory, and it sounds like it is solved now - but you could probably use a cardinality estimation algorithm to estimate the number of unique beacon IDs while only using constant space.https://en.wikipedia.org/wiki/Count-distinct_problem

sodality2
0 replies
20h30m

That’s a really good point. I’ve been meaning to go to a football game recently and bring it, to stress test it with the largest gathering I can quickly access. If it can easily scan a couple thousand without a sweat, I’d consider it pretty solid anyway. But a fixed-size estimating data structure would be really cool to research. I will surely look into it, thank you for the suggestion!

Side note: Definitely one of my favorite parts of this project, that I get to investigate more in-depth and interesting CS concepts without having to worry about doing the easiest solution. I’m scratching an itch, not developing a solution to deliver ASAP.

jve
1 replies
9h31m

but some don't carry any devices at all (or keep Bluetooth off on their phone).

Exactly. I always had a habit of turning BT off, hoping to conserve the battery. And then our security department advises it - if you don't use it at the moment, turn it off. For security reasons. Flaws in BT sometimes come up and good if a user can get that update.

wutwutwat
0 replies
8h23m

Turning bt "off" in your settings likely doesn't actually turn off the radios. It probably just disables connections. If you use lost phone features like findmyiphone, the defaults are to participate in the "find my" network, a mesh network of bt low energy devices for airtags, etc. Most often, even turning off your entire phone won't help, as the incentive to participate in the "find my" network is they give you the feature of tracking your phone even when powered off

https://en.wikipedia.org/wiki/Find_My

https://en.wikipedia.org/wiki/IBeacon

gyf304
1 replies
19h52m

Did something very similar years ago -https://blog.yifangu.com/tag/library-occupancy-project/

sodality2
0 replies
14h36m

Wow, very cool! I would have used WiFi but unfortunately our beacons either separate or merge devices (so you either get just the users on the nearest beacon, which is not a set range of distance, or every user on that region's subnet, which could be entire dorm complexes). But that seems like a really good solution!

ezconnect
1 replies
14h41m

He could have just placed a microphone and correlate noise to occupancy level.

sodality2
0 replies
14h39m

I cannot measure that from a closed dorm room, also plenty of environmental noise in empty rooms or silent, full rooms (during finals!).

epcoa
1 replies
20h31m

and heap thrashing since we're allocating and deallocating the result structure every single callback.

This should not an issue. It is entirely possible to write this without any dynamic allocation (other than stack) at all, or it could be done be done with an arena. Consider with something as powerful as an esp32 a hash table is not even strictly necessary, surely for a single purpose use case like this.

sodality2
0 replies
20h23m

I figure the internal data structure that already exists in the BT library probably uses something similar to a hash table, so I emulated it with less of the data being saved (just a MAC). You’re right though, there are smaller choices for data structures. I ended up upgrading to a better board with more memory, and just used the existing structure in the BT library. It fixed a number of other problems at the same time.

Simon_ORourke
1 replies
9h49m

I'm wondering how accurate this might prove measuring automobile traffic on a relatively busy street?

I've been pondering some way to track the number of vehicles that pass my house each day, and would like (but not ideal) to get their average speed too. Was thinking about computer vision, and even audio doppler approaches, but this seems simpler - if only the bluetooth sensing might work on a device moving at 50mph+ at a distance of maybe 20 to 100 yards.

the-kenny
0 replies
9h11m

I have an unorthodox suggestion: get a bicycle rear radar like the Garmin Varia. They communicate via Bluetooth LE incoming cars, their count, and an average speed (in a set of ranges like 0-15km/h, 15-30km/h, …).

Mount this with a usb cable somewhere, add an ESP32 or anything with Bluetooth somewhere else to accumulate.

Havoc
1 replies
20h32m

You can also get pretty check 24ghz radar that does reliable sensing till like 3m. Much much more accurate than the IR based stuff

foxtrottbravo
0 replies
2h40m

While yes, these devices are cool and I use them in a couple of projects (mostly centered around home automation), I think there is no good way to count people that way (other than placing them above ingress and egress points).

I think the original use case is not to know whether a dining hall is occupied at all but about how occupied it is (and if he should go to lunch now or wait another 20 minutes).

Dowwie
1 replies
21h31m

This would be an interesting way to measure crowds in general-- in concerts, attending political rallies, attending protests, etc. A handful of journalists attending an event could spread out and share their max value.

Smoosh
0 replies
19h46m

This makes me wonder if phone companies would have the ability to provide figures for mass gatherings. Would they only be able to count devices on their own network, or do they "see" all phones in range and then filter out the other-network ones?

summm
0 replies
20h33m

Theres this using ESP32 and LoRa, where you can order readymade hardware:https://cyberman54.github.io/ESP32-Paxcounter/

stblack
0 replies
11h33m

This kid is alright. He’s going to do great. Keep doing what you’re doing kid.

scrose
0 replies
15h40m

It's great seeing all the different approaches people can come up with to do similar things!

I recently worked on a similar side project but took a very different approach. It pretty much was just:

1. A bash script in a Raspberry Pi W that ran `bluetoothctl` once per minute and wrote the raw output for that minute to a file.

2. A systemd process that would ensure the script would get re-run if the process crashed or machine rebooted

3. A separate script that parsed the logs and pushed them to a local sqlite DB that tracked the minute the bluetooth id was found.

4. A daily push to my backup server that stored the sqlite DB

I decided to use systemd and a simple(10loc) bash script since I faced a similar issue to the OP where my pi would crash(although it was purely my fault for messing with a bunch of cables) and I wanted a way to get it running again with the lowest overhead. I also wanted as few dependencies as possible.

I went with SQLite because it made querying for trends and building dashboards simpler and more interesting(and because the real project was the sqlite interface I was building :) )

One thing I learned from running this which also may answer a couple of OPs questions: Apple devices like hiding themselves. The only way I could get my Apple laptops and phones to show up was to keep the bluetooth settings menu open on them. Otherwise, they wouldn't appear to the bluetooth scanner. I can't speak much to whether android devices are 'noisier', but the lack of bluetooth feeds for Apple devices alone cuts out a significant part of the value of bluetooth scanning for crowd sensing, given the market share for Apple devices.

post_break
0 replies
20h21m

This paired with a TPMS scanner would be great for occupancy for the entire campus. Scan the TPMS at the major traffic zones, then compare with bluetooth signatures.

mariocesar
0 replies
21h13m

Interesting DIY project! It reminds me of a startup called OccuSpace (https://occuspace.io/), which offers a similar occupancy solution but as a service. They may be leveraging similar technologies to provide real-time occupancy data, which is incredibly useful for managing space in offices, public venues, etc. It's a good example of how these concepts are scaling up commercially.

I wonder How well can your DIY sensor or OccuSpace figure out what kind of devices are in the room or who's using them. Can they tell different users or gadgets apart?

logbiscuitswave
0 replies
7h57m

I have a couple of home automation projects that use Raspberry Pi boards and rely on BLE. One thing I’ve found is the onboard Bluetooth is pretty awful on the Pi 3 and not very good on the Pi 4. Switching to use a Bluetooth dongle made a huge difference with stability and reliability. I no longer had to continually run scripts to try to reset kernel drivers or the entire Bluetooth stack when things got cranky (which seemed to happen many times a day). As a bonus I got a Class 1 adapter that would let me tweak the power output.

hellweaver666
0 replies
6h37m

Just a tip, if you want an ESP32 board that has more memory etc, look at the range from Unexpected Maker!

fullstop
0 replies
21h7m

ESPresence [1] is an interesting project, and it works with the ESP32-C3.

It is more designed to figure out which room you are in.

1.https://espresense.com/

demondemidi
0 replies
16h41m

Really should point out this is for BLE. I thought it was based on heartbeats, heat, ingress/egress, or something more physical.

Also, ESP32 Rx sensitivity is kinda poor: -94 dBm, most devices are pushing -100, -102 and even -104 dBm. Makes a big difference.

dekhn
0 replies
15h10m

I was initially skeptical, but these days most of my ESP32s just run micropython and I write my "firmware" in Python. This includes (low-performance) callbacks for interrupts, python dicts. Because the ESP32 has nice peripherals, lots of stuff is really just using python or C as a command-and-control to enable part of the chip, like PWM. And porting Python to C++ is usually pretty straightforward.

caycep
0 replies
19h32m

applications for cities w/ housing availability issues and vacant "investor properties" to apply/enforce a vacancy tax?

barkingcat
0 replies
20h24m

I like the inclusion of the bibliography. I should do that with all my blog posts too (even if it's links to other posts, etc, the references still help to understand the post)

bArray
0 replies
7h5m

I'm one of those annoying people that keep BT, data and location services off to save power. WiFi I mostly keep on, so in theory you could collect data this way too.

Regarding the ESP32's reliability, it's likely power supply related. I've seen exactly this before. I run ESP32 devices with a 1A 3v3 linear regulator with a little smoothing, and zero issues.

UncleEntity
0 replies
19h26m

Bluetooth is fun.

A while ago I was playing around with libble++[0] to read the data from some cheap temp/humidity sensors which broadcast their data as an advertising packet. Pretty simple, considering.

Did some other playing to turn my laptop into a BLE beacon (which worked pretty well with some random app on my phone) and also tried (IIRC successfully) to emulate one of those apple airtags though that code is lost somewhere on said laptop.

A quick glance at my temperature reading code and I'd say that counting the number of seen advertisements would be trivial using that library, I'm currently letting it do all the real work and just filtering the results to the devices I'm interested in.

[0]https://github.com/edrosten/libblepp

--edit--

I also seem to have started writing a python C wrapper around libble++ but obviously never followed through so its completeness is doubtful.