Which feather to use with enviro+

Hello - I’d like to use an Enviro+ to measure air quality and automatically log this to a spreadsheet
As the pihat version has sold out I want to use the featherwing as a chance to learn how to use a feather instead. The link from the Enviro page is to a Bluetooth feather, but isn’t WiFi better for setting up automated recording of data remotely?
Any advice gratefully received!

That’s just what they “recommend”. Probably what they actually tested the Enviro Feather on. I can’t recommend which one to use though, I have yet to buy my first Feather.
I would think as long as the one you pick supports what you want to program in, Circuit Python or whatever, you should be good to go. I would go with something with a lot of RAM on board. You may need the space with everything going on on the Enviro.

Thanks - that’s reassuring. I believe the Feather uses CircuitPython … and can always use it as a way in to learn Arduino IDE. From what I see there is a good Bluetooth interface to iOS from the Feather boards and the battery usage should be much lower … and if I need WiFi can use a breakout or just get a new board and use the Bluetooth one to run a robot!

I’m leaning towards getting an M4 Express or maybe the STM32F405 Express.
EDIT: mated to this

I think the only Feathers which don’t support CircuitPython are the ESP8266 and ESP32 Huzzah boards. The new ESP32-S2 chips will apparently get a CircuitPython Feather but that’ll not be until Adafruit go back to normal after Covid, whenever that will be. They do make Airlift expansion boards for adding WiFi, but double check exactly what you want to do first, some task need a decent amount of RAM and Adafruit recommend something like an M4 board for using these with CircuitPython.

I can’t think why the board would need an M4, but they’re not that much more expensive and they’re capable of a lot more stuff.

Yeah, it looks like the new kids on the block don’t have Circuit Python “yet”.

To add, I now have the Enviro+ featherwing working happily on the Adafruit nRF52840 Express. Set up was straightforward on CircuitPython with all the guides from Adafruit and Pimoroni. It’s also surprisingly easy to stream the data to my iPhone using the Adafruit BLE connect app. Ideally this would be saved straight to a google doc (for which WiFi would be easier), but I am looking to save the data on the feather and then see if I can transfer that over Bluetooth (of course could do this via usb too).

Hi slennard,

that´s sounds very good. Could you explain how you realize the data stream to the iPhone?
Could you share your code please?

Thanks a lot!

Of course. The first thing would be to visit the Adafruit BLE tutorial for the LE Connect app (https://learn.adafruit.com/bluefruit-le-connect/ios-setup) - my code is pretty much straight from there!

The second thing to note is that this only provides a live feed to your iPhone. Which is cool but it doesn’t save the data anywhere. You can set up to relay the data from your iPhone to the Adafruit IO service. This isn’t too hard, but again only works if you have your iPhone on and connected, so I think a better solution would be to send the data via WiFi directly from the Enviro+ to Adafruit IO (or another web server) … I’m working on this now.

Anywhere here is my code … caveat I’m new to coding so might be a few errors in there!

from adafruit_ble import BLERadio
from adafruit_ble.advertising.standard import ProvideServicesAdvertisement
from adafruit_ble.services.nordic import UARTService

from adafruit_bluefruit_connect.packet import Packet
from adafruit_bluefruit_connect.button_packet import ButtonPacket

import time
import board
import analogio
from pimoroni_pms5003 import PMS5003

pms5003 = PMS5003()

ble = BLERadio()
uart_server = UARTService()
advertisement = ProvideServicesAdvertisement(uart_server)

while True:
ble.start_advertising(advertisement)
while not ble.connected:
pass

# Now we're connected

while ble.connected:
    reading = pms5003.read()
    pm2 = reading.data[1] # PM2.5
    print(pm2)
    uart_server.write("{}\n".format(pm2))
    time.sleep(60) # One minute delay between samples
1 Like

Wow! Thanks a lot! For the fast and extensive answer!I will try to reproduce it as soon as possible!