nkitanov / iaq_board Goto Github PK
View Code? Open in Web Editor NEWIAQ Board is a DIY (Do-It-Yourself) device for measuring internal air quality
IAQ Board is a DIY (Do-It-Yourself) device for measuring internal air quality
Here's the result of esphome iaq_board.yaml run
.
Tried with:
$ esphome iaq_board.yaml run
INFO Reading configuration iaq_board.yaml...
INFO Generating C++ source...
INFO Compiling app...
INFO Running: platformio run -d iaq_board
Processing iaq_board (board: wemos_d1_mini32; framework: arduino; platform: [email protected])
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
PACKAGES:
- framework-arduinoespressif32 3.10004.200129 (1.0.4)
- tool-esptoolpy 1.20600.0 (2.6.0)
- toolchain-xtensa32 2.50200.80 (5.2.0)
Dependency Graph
|-- <NeoPixelBus> 2.6.0
| |-- <SPI> 1.0
|-- <DNSServer> 1.1.0
| |-- <WiFi> 1.0
|-- <Wire> 1.0.1
|-- <Update> 1.0
|-- <WiFi> 1.0
|-- <ESPmDNS> 1.0
| |-- <WiFi> 1.0
Compiling .pioenvs/iaq_board/src/esphome/components/api/api_connection.cpp.o
Compiling .pioenvs/iaq_board/src/esphome/components/api/api_server.cpp.o
Compiling .pioenvs/iaq_board/src/esphome/components/api/list_entities.cpp.o
Compiling .pioenvs/iaq_board/src/esphome/components/api/proto.cpp.o
In file included from src/esphome/components/light/light_color_values.h:8:0,
from src/esphome/components/light/light_effect.h:4,
from src/esphome/components/light/light_state.h:6,
from src/esphome/core/controller.h:11,
from src/esphome/components/api/util.h:5,
from src/esphome/components/api/list_entities.h:5,
from src/esphome/components/api/list_entities.cpp:1:
src/esphome/components/json/json_util.h:4:25: fatal error: ArduinoJson.h: No such file or directory
*********************************************************************
* Looking for ArduinoJson.h dependency? Check our library registry!
*
* CLI > platformio lib search "header:ArduinoJson.h"
* Web > https://platformio.org/lib/search?query=header:ArduinoJson.h
*
*********************************************************************
compilation terminated.
In file included from src/esphome/components/light/light_color_values.h:8:0,
from src/esphome/components/light/light_effect.h:4,
from src/esphome/components/light/light_state.h:6,
from src/esphome/core/controller.h:11,
from src/esphome/components/api/util.h:5,
from src/esphome/components/api/proto.cpp:2:
src/esphome/components/json/json_util.h:4:25: fatal error: ArduinoJson.h: No such file or directory
*********************************************************************
* Looking for ArduinoJson.h dependency? Check our library registry!
*
* CLI > platformio lib search "header:ArduinoJson.h"
* Web > https://platformio.org/lib/search?query=header:ArduinoJson.h
*
*********************************************************************
compilation terminated.
In file included from src/esphome/components/light/light_color_values.h:8:0,
from src/esphome/components/light/light_effect.h:4,
from src/esphome/components/light/light_state.h:6,
from src/esphome/core/controller.h:11,
from src/esphome/components/api/api_server.h:4,
from src/esphome/components/api/api_server.cpp:1:
src/esphome/components/json/json_util.h:4:25: fatal error: ArduinoJson.h: No such file or directory
*********************************************************************
* Looking for ArduinoJson.h dependency? Check our library registry!
*
* CLI > platformio lib search "header:ArduinoJson.h"
* Web > https://platformio.org/lib/search?query=header:ArduinoJson.h
*
*********************************************************************
compilation terminated.
*** [.pioenvs/iaq_board/src/esphome/components/api/api_server.cpp.o] Error 1
*** [.pioenvs/iaq_board/src/esphome/components/api/list_entities.cpp.o] Error 1
*** [.pioenvs/iaq_board/src/esphome/components/api/proto.cpp.o] Error 1
In file included from src/esphome/components/light/light_color_values.h:8:0,
from src/esphome/components/light/light_effect.h:4,
from src/esphome/components/light/light_state.h:6,
from src/esphome/core/application.h:30,
from src/esphome/components/api/api_connection.h:4,
from src/esphome/components/api/api_connection.cpp:1:
src/esphome/components/json/json_util.h:4:25: fatal error: ArduinoJson.h: No such file or directory
*********************************************************************
* Looking for ArduinoJson.h dependency? Check our library registry!
*
* CLI > platformio lib search "header:ArduinoJson.h"
* Web > https://platformio.org/lib/search?query=header:ArduinoJson.h
*
*********************************************************************
compilation terminated.
*** [.pioenvs/iaq_board/src/esphome/components/api/api_connection.cpp.o] Error 1
============================================================================== [FAILED] Took 2.86 seconds ==============================================================================
Hi,
This is a great project. It would be great to have a closed box for it (maybe for a slimmed version, without LEDs, and displays).
Hi. Fantastic project, thanks for sharing.
I went to JLCPCB to order some PCBs and this was the email they sent to me after my order:
We noticed your files are in Gerber X2 format but currently JLCPCB is still not ready for Gerber X2 (We are working on to support Gerber X2, but not fully done yet).
If we use current CAM tools to convert the X2 file, there is high risk of lossing traces and get deformed pads.
Some customers already received defective boards with Gerber X2 files.
So please do not check "Use extended X2 format" when you plot the Gerber files.
Ref:
https://forum.kicad.info/t/jlcpcb-strange-issue-with-rounded-rectangle-pads-kicad-nightly/26715
When we are ready for Gerber X2, we'll announce it.
The supplier in the BOM for the MH-Z19B is out of stock. It is much easier to get an MH-Z19C here in Germany from a trustier supplier then a MH-Z19B.
From the Datesheet the MH-Z19C seems to be pin compatible, but i have seen reports that say that it is more fickle with its voltage supply.
Do you have any Idea if it should work on this PCB?
I bought the exact linked display. But i took the v2 Version with the Buttons on the Ali Express site.
The Problem is that it displays the same contents as the first display, regardless which address is configured.
I even tried removing the first display completely from the code which just had the effect that none of the displays showed anything.
My current assumption is that those displays are simply bad, but maybe somebody has an input.
Funny thing about the first display is that mine is configurable on the back between 0x78 and 0x7A but it still works with the default addresses.
Hello,
I am building a device for room presence detection and I was wondering if this type of device might be what I need for the job.
From asking around I found out that humans produce lots of carbon dioxide when breathing so it can become a viable metric for presence detection.
So can you or someone who built this device can tell me the carbon levels when there is a human present and when there is no one. I am mainly interested in how big the difference is.
Also how much time does it take for the carbon levels to be normal/stable.
And about the carbon dioxide sensors you said that the sgp30 is more or less inaccurate compared to the dedicated sensor so I was wondering how inaccurate is it?
Thank you!
The current PMS7003 orientation is causing the photodiode to gather dust and limiting the life of the sensor. See this video for the explanation: https://www.youtube.com/watch?v=QgO0iWpK7Ho
Hi. Could you please provide a config file which would be compatible with ESPHome docker image (HA addon)?
Right now it requires: brightness.yaml include to be pasted to the main config and also is missing fonts, which im not sure how to overcome.
Yesterday I tried opening the f360 design linked on this github page. However, the design is not viewable or downloadable. Could you please share the f360 design files so that I can build my own enclosure?
Thanks!
Hi,
thank you for providing your code. It is is great!
I have a similar setup and I am new to ESPHome, so I wanted to peek in your code.
I can't see where you turn off the display and where you configure the second button to reset the baseline for the voc sensor.
Can you point me in the right direction?
Thanks!
Hi,
First of all, I would like to thank you for the cool project. Super work! 😎
Unfortunately I have a problem with the SGP30 sensor. I built and programmed everything as you described in the repository, but when starting the device I get the following message:
[22:24:58][C][sgp30:178]: SGP30:
[22:24:58][C][sgp30:179]: Address: 0x58
[22:24:58][W][sgp30:195]: Unknown setup error!
[22:24:58][C][sgp30:209]: Update Interval: 1.0s
[22:24:58][C][sgp30:210]: eCO2 'eCO2'
[22:24:58][C][sgp30:210]: Unit of Measurement: 'ppm'
[22:24:58][C][sgp30:210]: Accuracy Decimals: 1
[22:24:58][C][sgp30:210]: Icon: 'mdi:molecule-co2'
[22:24:58][C][sgp30:211]: TVOC 'TVOC'
[22:24:58][C][sgp30:211]: Unit of Measurement: 'ppb'
[22:24:58][C][sgp30:211]: Accuracy Decimals: 1
[22:24:58][C][sgp30:211]: Icon: 'mdi:radiator'
[22:24:58][C][sgp30:213]: Compensation:
[22:24:58][C][sgp30:214]: Temperature Source: 'Temperature'
[22:24:58][C][sgp30:214]: Unit of Measurement: '°C'
[22:24:58][C][sgp30:214]: Accuracy Decimals: 1
[22:24:58][C][sgp30:214]: Icon: 'mdi:thermometer'
[22:24:58][C][sgp30:215]: Humidity Source: 'Humidity'
[22:24:58][C][sgp30:215]: Unit of Measurement: '%'
[22:24:58][C][sgp30:215]: Accuracy Decimals: 1
[22:24:58][C][sgp30:215]: Icon: 'mdi:water-percent'
The first thing I thought was that the sensor is broken and I tried a NodeMCU (ESP8266) and set it up in ESPHome (+ Home Assistant). There everything worked and I got legitimate values back, so the sensor can not be broken.
I also tried to connect the sensor to the PCB with the receptacle in the middle of the board, but I got the same error.
This is the relevant configuration for the SGP30:
i2c:
scl: GPIO22
sda: GPIO21
frequency: 100kHz
sensor:
- platform: sgp30
address: 0x58
eco2:
name: "eCO2"
accuracy_decimals: 1
id: eco2
tvoc:
name: "TVOC"
accuracy_decimals: 1
id: tvoc
update_interval: 1s
baseline:
eco2_baseline: 0x92B7
tvoc_baseline: 0x935A
compensation:
temperature_source: temp
humidity_source: hum
Do you guys have any idea what the problem could be?
Mast likely due to this breaking change:
PMSx003 add relevant device and state classes to default config esphome#5633 by @wheimbigner (breaking-change)
Hello,
Thank you for the great project! I built an IAQ-Board and it works well. The only issues experienced are the typical WiFi issues. To help with these WiFi issues I am interested in designing a new PCB to work with the QuinLED-ESP32 boards. Specifically, the ethernet model but it should work for the other QuinLED boards too. Also, since the QuinLED boards share the same pinout, it will work with the WeMos D1 Mini ESP32 as well.
Unfortunately, the Ethernet module of the QuinLED board requires many of the same pins as your PCB layout, and the serial ports, i2c, and the button will need to be moved.
I2C: GPIO21 -> GPIO13 and GPIO22 -> GPIO14
PMS7003 Serial: GPIO1 -> GPIO15
MH-Z19 Serial: GPIO18 -> GPIO1 and GPIO19 -> GPIO3
Button: GPIO23 -> GPIO32
PMS7003_SET: GPIO26 -> GPIO33
Questions
Hi all. Is there any chance to order an assembeled board?
Hi!
First off, thanks for a great project. Im waiting for all my parts to arrive to I can go ahead and assemble it !
However, it seems quite hard to get the TSL 2561.. Do you have any suggestion of a "drop in replacement" for this part?
/Tilly
I am only seeing pm2.5 but not the output for pm1 or pm10. Is it supposed to do that, and if not any thoughts on what I could check? Thanks
Thank you so much for sharing all this information in enormous details. We are planning to build a couple of this for fun, learning and entertainment. I just noticed a plastic spacer in your video between on of the the displays and the PCB. Although technically not needed of course, can you add these to the BOM with the details of the size? Thanks!
Hi. After the update to 2022.12 the firmware stopped compiling.
Compiling /data/iaq-kitchen/.pioenvs/iaq-kitchen/FrameworkArduino/esp32-hal-uart.c.o
Compiling /data/iaq-kitchen/.pioenvs/iaq-kitchen/FrameworkArduino/firmware_msc_fat.c.o
Compiling /data/iaq-kitchen/.pioenvs/iaq-kitchen/FrameworkArduino/libb64/cdecode.c.o
Compiling /data/iaq-kitchen/.pioenvs/iaq-kitchen/FrameworkArduino/libb64/cencode.c.o
Compiling /data/iaq-kitchen/.pioenvs/iaq-kitchen/FrameworkArduino/main.cpp.o
Compiling /data/iaq-kitchen/.pioenvs/iaq-kitchen/FrameworkArduino/stdlib_noniso.c.o
Compiling /data/iaq-kitchen/.pioenvs/iaq-kitchen/FrameworkArduino/wiring_pulse.c.o
Compiling /data/iaq-kitchen/.pioenvs/iaq-kitchen/FrameworkArduino/wiring_shift.c.o
Archiving /data/iaq-kitchen/.pioenvs/iaq-kitchen/libFrameworkArduino.a
Linking /data/iaq-kitchen/.pioenvs/iaq-kitchen/firmware.elf
/data/cache/platformio/packages/toolchain-xtensa-esp32/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld: /data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/lib/libvfs.a(vfs.c.obj): in function `esp_vfs_utime':
/Users/ficeto/Desktop/ESP32/ESP32S2/esp-idf-public/components/vfs/vfs.c:585: multiple definition of `utime'; /data/iaq-kitchen/.pioenvs/iaq-kitchen/src/main.cpp.o:/config/esphome/.esphome/build/iaq-kitchen/src/main.cpp:68: first defined here
collect2: error: ld returned 1 exit status
*** [/data/iaq-kitchen/.pioenvs/iaq-kitchen/firmware.elf] Error 1
========================= [FAILED] Took 59.34 seconds ==================
Thanks for your awesome project, soldering it was really fun. Unfortunately I am now facing the issue none of the I2C devices can be found. I did a fully assembled board, so with the TSL2561, the BME280, both the SSD1306 OLEDs and the SGP30. In the ESPHome Debug log I get:
[E][bme280.sensor:146]: Communication with BME280 failed!�
[E][tsl2561:044]: Communication with TSL2561 failed!�
[E][ssd1306_i2c:031]: Communication with SSD1306 failed!�
[E][ssd1306_i2c:031]: Communication with SSD1306 failed!�
All the soldering looks good, have you any suggestion on how to approach this problem?
Hi. I cannot compile it using the latest ESPHome, because im getting Neopixel error:
INFO Reading configuration /config/esphome/iaq-privateoffice.yaml...
WARNING 'iaq_privateoffice': Using the '_' (underscore) character in the hostname is discouraged as it can cause problems with some DHCP and local name services. For more information, see https://esphome.io/guides/faq.html#why-shouldn-t-i-use-underscores-in-my-device-name
Failed config
light.neopixelbus: [source /config/esphome/iaq-privateoffice.yaml:587]
'variant' is a required option for [light.neopixelbus].
platform: neopixelbus
num_leds: 3
pin: GPIO16
name: RGB strip
id: rgb_led
default_transition_length: 0s
I have everything set up and working. Good work on the displays and led turning off when it gets dark. The Wemos ESP32 onboard led however stays on. Is there a way to turn this off at the same time?
Hello!
Amazing work on the sensor. I've got already all the components currently working on a protoboard.
I've got a question related the PMSX003 (I have the PMS7003). I noticed that when sleeping the fan is audible for me so I was wondering if there's a way to put it into sleep mode and wake it up each XX minutes to take a reading. That would also hopefully make the sensor life longer.
I've checked the yaml in the repo but it seems there's nothing like that included.
Thanks for any info and sharing this with us!
Hey! First of all thanks for your work on this project. I really appreciate it. It's the first time I ordered a custom PCB and I hope it will bring me to making more custom devices.
I have ordered your PCB, with the D1 mini ESP32, the MH-Z19 and PMS7003. Other sensors/components are still on their way.
Therefore I use a limited part of your config:
uart:
- rx_pin: GPIO1
baud_rate: 9600
id: pms
- rx_pin: GPIO18
tx_pin: GPIO19
baud_rate: 9600
id: mh
sensor:
- platform: pmsx003
type: PMSX003
uart_id: pms
pm_1_0:
name: "PM 1 Concentration"
id: pm1
pm_2_5:
name: "PM 2.5 Concentration"
id: pm2_5
pm_10_0:
name: "PM 10 Concentration"
id: pm10
- platform: mhz19
co2:
name: "CO2"
id: co2
temperature:
name: "MH-Z19 Temperature"
update_interval: 10s
automatic_baseline_calibration: false
uart_id: mh
id: mh_sensor
switch:
- platform: gpio
name: "PMS7003_SET"
pin:
number: GPIO26
mode: OUTPUT
restore_mode: ALWAYS_ON
id: pms_set
The readings from the CO2 sensor are just fine and roughly what I expect. However, I get no reading from the PMS7003.
Some observations:
I've thought about my PMS7003 being faulty, but I have no way to double check as I have no 1.25 mm pitch headers/converter cables.
I read somewhere online about pulling up the set pin. Is this required for this board?
Is there something else I should check before ordering a new sensor?
I just completed building two of the iaq boards and they both are connected to wifi and work (I love them!). I can integrate them both in Home Assistant independently. However, when I want to integrate them both, it only shows one working device. Since i figured HA has no way to differentiate one from another, I wanted to change the name in the .yaml file. Unfortunately, when compiling I get the error:
Failed config
light.neopixelbus: [source /config/esphome/arjen.yaml:591]
'variant' is a required option for [light.neopixelbus].
platform: neopixelbus
num_leds: 3
pin: GPIO16
name: RGB strip
id: rgb_led
default_transition_length: 0s
Does someone have an idea how to solve this? Or an alternative approach to solve my initial problem?
Many thanks!
Hi!
Saw your installation video - considering the CO2 sensor is the most expensive part and the B version seems more difficult to get, along with several different versions (and bad clones)-
Was thinking of revisiting the ability to make this piece removable (in case I need to swap sensors due to fake or something else - even some Z19C versions are being rebadged as Z19B). Making it removable will most likely alter the overall thickness and height of the device from the pcb. I've also been looking into PCB pin socket/receptacles to see if it's possible to minimize the height difference.
Thanks for this project!
I was wondering how hard it would be to change the design to have through board holes for the D1 Mini, instead of SMD pads? I have not played with trying to design a PCB before.
Thanks
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.