spark_abacus/README.md

120 lines
4.2 KiB
Markdown
Raw Normal View History

This is the firmware for the **spark abacus**.
project
=======
summary
-------
The spark abacus is a system to monitor electricity consumption.
A micro-controller collects data from various electricity meters placed at the entry of the 3-phase 4-wire mains electricity distribution installation, and sends it over a local network to a computer storing the values in a database.
The measurements can then be visualized.
More information is available on the [wiki](https://wiki.cuvoodoo.info/doku.php?id=spark_abacus).
2016-01-29 12:12:04 +01:00
board
-----
The development board used for this project is a [blue pill](https://wiki.cuvoodoo.info/doku.php?id=stm32f1xx#blue_pill).
This offers a [STM32F103C8T6 micro-controller](http://www.st.com/web/en/catalog/mmc/FM141/SC1169/SS1031).
2016-01-29 12:12:04 +01:00
2016-10-04 11:16:49 +02:00
peripherals
===========
2017-01-20 10:22:23 +01:00
LED
---
4 LEDs have been added to show the current activity:
- power (red): shows if the board is power (the voltage regulator works).
- heart beat (green): shows if the firmware is running correctly. It starts when all the setup of all peripherals is complete (including connecting to the WiFi network) and toggles every second.
- query (yellow): goes on when starting to query the measurement values from all electricity meters, and goes off when it received all values.
- submit (blue): goes on when it start submitting the values to the database (using an HTTP POST on influxDB), and goes off when the submission succeeded.
Note: don't use the onboard LED on PC13 on the blue pill as switching it heavily influences the RTC.
Connections LED (cathode) <-> board (all LED anodes are connected to the +3.3V rail):
- power; GND
- heart beat; PA5
- query; PA6
- submit; PA7
2017-01-21 20:57:29 +01:00
RTC
---
The onboard Real Time Clock (RTC) is used to track the uptime a periodically start querying all electricity meter for their measurement value.
The time interval between the periodic queries is hard coded in `main.c`.
2016-10-04 11:16:49 +02:00
ESP8266
-------
2017-01-21 20:53:27 +01:00
The ESP-01 WiFi module (based on the ESP8266 chip) is used to join the local network, connect to an InfluxDB database using HTTP, and store the measurement values gathered from the electricity meters.
2017-01-19 13:30:23 +01:00
2016-10-04 11:16:49 +02:00
AT firmware v0.51 from the espressif NONOS SDK 1.5.0 has been used for this project.
Be sure to have configured the module to connect to the right access point beforehand using the following AT commands:
- set station mode: `AT+CWMODE_DEF=1`
- enable DHCP: `AT+CWDHCP_DEF=1,1`
- set access point to connect to: `AT+CWJAP_DEF="essid","password"`
When booting the micro-controller will reset the device and wait until the module connects to the access point and gets an IP.
2017-01-21 20:53:27 +01:00
Once all measurements from all meters have been collected, the firmware will connected to the InfluxDB database to submit the values using and HTTP POST request.
The hostname, port, database name, user name, and password are hard coded in `main.c`.
2017-01-19 13:30:23 +01:00
Connections ESP-01 <-> board:
- GND, pin 1; ground
- TX, pin 2; PA10, USART1_RX
- GPIO2, pin 3; not connected
- CH_PD, pin 4; pull-up resistor
- GPIO0, pin 5; not connected
- RST, pin 6; pull-up resistor
- RX, pin 7; PA9, USART1_TX
- VCC, pin 8; +3.3V (add a large capacitor to cope with power spikes)
code
====
2016-01-29 12:12:04 +01:00
dependencies
------------
2016-01-29 12:12:04 +01:00
The source code uses the [libopencm3](http://libopencm3.org/) library.
libopencm3 is already a git submodules.
To initialize and update it you just need to run once: `git submodule init` and `git submodule update`.
2016-01-29 12:12:04 +01:00
firmware
--------
2016-01-29 12:12:04 +01:00
To compile the firmware run `make`.
2016-01-29 12:12:04 +01:00
documentation
-------------
To generate doxygen documentation run `make doc`.
2016-01-29 12:12:04 +01:00
flash
-----
The firmware will be flashed using SWD (Serial Wire Debug).
For that you need an SWD adapter.
The `Makefile` uses a ST-Link V2 along OpenOCD software (per default), or a Black Magic Probe.
To flash using SWD run `make flash`.
2016-01-29 12:12:04 +01:00
debug
2016-01-29 12:12:04 +01:00
-----
SWD also allows to debug the code running on the micro-controller using GDB.
To start the debugging session run `make debug`.
2016-01-29 12:12:04 +01:00
USB
---
The firmware offers serial communication over USB (using the CDC ACM device class).
This is mainly used to show the activity and help debugging to code.
Type `help` to get a list of additional available actions.
2016-01-29 12:12:04 +01:00
You can also reset the board by setting the serial width to 5 bits over USB.
To reset the board run `make reset`.
This only works if USB CDC ACM is running correctly and the micro-controller isn't stuck.