* Muraqib

CO2 sensor that collects and sends its data via MQTT to a server. The board of the sensor is the Wemos D1 mini ESP32 and the sensor is a SCD41.


#+ATTR_HTML: :width 40%
[[./board.jpg]]

** Pinout of the board

#+ATTR_HTML: :width 40%
[[./pinout.png]]

** Dependencies
- [[https://github.com/Sensirion/arduino-i2c-scd4x][Sensirion I²C SCD4X Arduino Library]]
- [[https://github.com/marvinroger/async-mqtt-client][Async MQTT client]]
- [[https://github.com/bblanchon/ArduinoJson][ArduinoJSON]]
** Configuration

In the data directory, there is a JSON file that allows the configuration of multiple values:

- ssid: WiFi network name
- psk: WiFi password
- mqtt_host: IP address of the MQTT broker
- mqtt_user: username that has write access on the MQTT broker
- mqtt_password: password for the user that has write access on the MQTT broker
- mqtt_port: port used by the MQTT broker
- mqtt_topic: channel name
- device_id: unique identifier of the sensor
- sleep_time: time interval between each data transmission
- connection_attempts: maximum connection attemps to the network

The file needs to be renamed to config.json

** Deployment

The software uses the Arduino framework and the development environment of [[https://platformio.org/][PlatformIO]], which offers better tooling than the official Arduino IDE.

*** Generate compilation database
#+begin_src sql
pio run -t compiledb
#+end_src
*** Upload the configuration file to the board
#+begin_src shell
pio run -t uploadfs
#+end_src
*** Compile the project
#+begin_src shell
pio run -t compile
#+end_src
*** Upload firmware
#+begin_src shell
pio run -t upload
#+end_src
