Compare commits
3 commits
fe7bf18989
...
e7735eb278
Author | SHA1 | Date | |
---|---|---|---|
e7735eb278 | |||
d7b42af20d | |||
efaeb1ee51 |
9 changed files with 300 additions and 1 deletions
137
.clang-format
Normal file
137
.clang-format
Normal file
|
@ -0,0 +1,137 @@
|
|||
Language: Cpp
|
||||
AccessModifierOffset: -1
|
||||
AlignAfterOpenBracket: Align
|
||||
AlignConsecutiveAssignments: false
|
||||
AlignConsecutiveDeclarations: false
|
||||
AlignEscapedNewlines: DontAlign
|
||||
AlignOperands: true
|
||||
AlignTrailingComments: true
|
||||
AllowAllParametersOfDeclarationOnNextLine: true
|
||||
AllowShortBlocksOnASingleLine: false
|
||||
AllowShortCaseLabelsOnASingleLine: false
|
||||
AllowShortFunctionsOnASingleLine: All
|
||||
AllowShortIfStatementsOnASingleLine: false
|
||||
AllowShortLoopsOnASingleLine: false
|
||||
AlwaysBreakAfterReturnType: None
|
||||
AlwaysBreakBeforeMultilineStrings: false
|
||||
AlwaysBreakTemplateDeclarations: MultiLine
|
||||
BinPackArguments: true
|
||||
BinPackParameters: true
|
||||
BraceWrapping:
|
||||
AfterClass: false
|
||||
AfterControlStatement: false
|
||||
AfterEnum: false
|
||||
AfterFunction: false
|
||||
AfterNamespace: false
|
||||
AfterObjCDeclaration: false
|
||||
AfterStruct: false
|
||||
AfterUnion: false
|
||||
AfterExternBlock: false
|
||||
BeforeCatch: false
|
||||
BeforeElse: false
|
||||
IndentBraces: false
|
||||
SplitEmptyFunction: true
|
||||
SplitEmptyRecord: true
|
||||
SplitEmptyNamespace: true
|
||||
BreakBeforeBinaryOperators: None
|
||||
BreakBeforeBraces: Attach
|
||||
BreakBeforeInheritanceComma: false
|
||||
BreakInheritanceList: BeforeColon
|
||||
BreakBeforeTernaryOperators: true
|
||||
BreakConstructorInitializersBeforeComma: false
|
||||
BreakConstructorInitializers: BeforeColon
|
||||
BreakAfterJavaFieldAnnotations: false
|
||||
BreakStringLiterals: true
|
||||
ColumnLimit: 120
|
||||
CommentPragmas: '^ IWYU pragma:'
|
||||
CompactNamespaces: false
|
||||
ConstructorInitializerAllOnOneLineOrOnePerLine: true
|
||||
ConstructorInitializerIndentWidth: 4
|
||||
ContinuationIndentWidth: 4
|
||||
Cpp11BracedListStyle: true
|
||||
DerivePointerAlignment: false
|
||||
DisableFormat: false
|
||||
ExperimentalAutoDetectBinPacking: false
|
||||
FixNamespaceComments: true
|
||||
ForEachMacros:
|
||||
- foreach
|
||||
- Q_FOREACH
|
||||
- BOOST_FOREACH
|
||||
IncludeBlocks: Preserve
|
||||
IncludeCategories:
|
||||
- Regex: '^<ext/.*\.h>'
|
||||
Priority: 2
|
||||
- Regex: '^<.*\.h>'
|
||||
Priority: 1
|
||||
- Regex: '^<.*'
|
||||
Priority: 2
|
||||
- Regex: '.*'
|
||||
Priority: 3
|
||||
IncludeIsMainRegex: '([-_](test|unittest))?$'
|
||||
IndentCaseLabels: true
|
||||
IndentPPDirectives: None
|
||||
IndentWidth: 2
|
||||
IndentWrappedFunctionNames: false
|
||||
KeepEmptyLinesAtTheStartOfBlocks: false
|
||||
MacroBlockBegin: ''
|
||||
MacroBlockEnd: ''
|
||||
MaxEmptyLinesToKeep: 1
|
||||
NamespaceIndentation: None
|
||||
PenaltyBreakAssignment: 2
|
||||
PenaltyBreakBeforeFirstCallParameter: 1
|
||||
PenaltyBreakComment: 300
|
||||
PenaltyBreakFirstLessLess: 120
|
||||
PenaltyBreakString: 1000
|
||||
PenaltyBreakTemplateDeclaration: 10
|
||||
PenaltyExcessCharacter: 1000000
|
||||
PenaltyReturnTypeOnItsOwnLine: 2000
|
||||
PointerAlignment: Right
|
||||
RawStringFormats:
|
||||
- Language: Cpp
|
||||
Delimiters:
|
||||
- cc
|
||||
- CC
|
||||
- cpp
|
||||
- Cpp
|
||||
- CPP
|
||||
- 'c++'
|
||||
- 'C++'
|
||||
CanonicalDelimiter: ''
|
||||
BasedOnStyle: google
|
||||
- Language: TextProto
|
||||
Delimiters:
|
||||
- pb
|
||||
- PB
|
||||
- proto
|
||||
- PROTO
|
||||
EnclosingFunctions:
|
||||
- EqualsProto
|
||||
- EquivToProto
|
||||
- PARSE_PARTIAL_TEXT_PROTO
|
||||
- PARSE_TEST_PROTO
|
||||
- PARSE_TEXT_PROTO
|
||||
- ParseTextOrDie
|
||||
- ParseTextProtoOrDie
|
||||
CanonicalDelimiter: ''
|
||||
BasedOnStyle: google
|
||||
ReflowComments: true
|
||||
SortIncludes: false
|
||||
SortUsingDeclarations: false
|
||||
SpaceAfterCStyleCast: true
|
||||
SpaceAfterTemplateKeyword: false
|
||||
SpaceBeforeAssignmentOperators: true
|
||||
SpaceBeforeCpp11BracedList: false
|
||||
SpaceBeforeCtorInitializerColon: true
|
||||
SpaceBeforeInheritanceColon: true
|
||||
SpaceBeforeParens: ControlStatements
|
||||
SpaceBeforeRangeBasedForLoopColon: true
|
||||
SpaceInEmptyParentheses: false
|
||||
SpacesBeforeTrailingComments: 2
|
||||
SpacesInAngles: false
|
||||
SpacesInContainerLiterals: false
|
||||
SpacesInCStyleCastParentheses: false
|
||||
SpacesInParentheses: false
|
||||
SpacesInSquareBrackets: false
|
||||
Standard: Auto
|
||||
TabWidth: 2
|
||||
UseTab: Never
|
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -2,3 +2,4 @@ secrets.yaml
|
|||
.cache/
|
||||
.esphome/
|
||||
dist/
|
||||
__pycache__/
|
||||
|
|
13
NOTES.md
13
NOTES.md
|
@ -1,6 +1,6 @@
|
|||
# autohuttli nodes
|
||||
|
||||
# AtomS3 Lite
|
||||
## AtomS3 Lite
|
||||
|
||||
<https://shop.m5stack.com/products/atoms3-lite-esp32s3-dev-kit>
|
||||
|
||||
|
@ -16,3 +16,14 @@ I/O:
|
|||
- IR LED on G4
|
||||
- WS2812 LED on G35
|
||||
- Port A on G1 and G2
|
||||
|
||||
## ADC I2C Unit v1.1 (ADS1110)
|
||||
|
||||
[Schematic](https://docs.m5stack.com/en/unit/Unit-ADC_V1.1)
|
||||
|
||||
[Datasheet](https://www.ti.com/lit/ds/symlink/ads1110.pdf)
|
||||
|
||||
Reference is 2.048V with a PGA of 1 to 8. Has a 510 k / 100 k voltage divider
|
||||
giving a 6.1 divisor or a FSD of 12.5 V.
|
||||
|
||||
Changed to a 75 / 39 k divider giving 2.92 divisor or FSD of 5.99 V.
|
||||
|
|
|
@ -16,6 +16,11 @@ esp32:
|
|||
framework:
|
||||
type: arduino
|
||||
|
||||
external_components:
|
||||
- source:
|
||||
type: local
|
||||
path: components
|
||||
|
||||
logger:
|
||||
|
||||
http_request:
|
||||
|
|
0
components/ads1110/__init__.py
Normal file
0
components/ads1110/__init__.py
Normal file
49
components/ads1110/ads1110.cpp
Normal file
49
components/ads1110/ads1110.cpp
Normal file
|
@ -0,0 +1,49 @@
|
|||
#include "ads1110.h"
|
||||
#include "esphome/core/log.h"
|
||||
#include "esphome/core/hal.h"
|
||||
|
||||
namespace esphome {
|
||||
namespace ads1110 {
|
||||
namespace {
|
||||
|
||||
const char *const TAG = "ads1110";
|
||||
|
||||
constexpr uint8_t ST = 0x80;
|
||||
constexpr uint8_t SC = 0x10;
|
||||
constexpr uint8_t DR_240SPS = 0 << 2;
|
||||
constexpr uint8_t DR_60SPS = 1 << 2;
|
||||
constexpr uint8_t DR_30SPS = 2 << 2;
|
||||
constexpr uint8_t DR_15SPS = 3 << 2;
|
||||
constexpr uint8_t PGA_1 = 0 << 0;
|
||||
constexpr uint8_t PGA_2 = 1 << 0;
|
||||
constexpr uint8_t PGA_4 = 2 << 0;
|
||||
constexpr uint8_t PGA_8 = 3 << 0;
|
||||
constexpr uint8_t PGA_MASK = 3 << 0;
|
||||
|
||||
constexpr double kVref = 2.048;
|
||||
|
||||
} // namespace
|
||||
|
||||
void ADS1110Sensor::setup() {
|
||||
uint8_t config = DR_15SPS | PGA_2;
|
||||
write(&config, 1);
|
||||
}
|
||||
|
||||
void ADS1110Sensor::dump_config() {
|
||||
LOG_SENSOR("", "ADS1110", this);
|
||||
LOG_I2C_DEVICE(this);
|
||||
LOG_UPDATE_INTERVAL(this);
|
||||
}
|
||||
|
||||
void ADS1110Sensor::update() {
|
||||
uint8_t data[3];
|
||||
if (read(data, sizeof(data)) == i2c::NO_ERROR && (data[2] & ST) == 0) {
|
||||
int16_t code = static_cast<int16_t>((data[0] << 8) | data[1]);
|
||||
double scale = kVref / 32768;
|
||||
scale /= 1 << (data[2] & PGA_MASK);
|
||||
this->publish_state(code * scale);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace ads1110
|
||||
} // namespace esphome
|
21
components/ads1110/ads1110.h
Normal file
21
components/ads1110/ads1110.h
Normal file
|
@ -0,0 +1,21 @@
|
|||
#pragma once
|
||||
|
||||
#include "esphome/components/i2c/i2c.h"
|
||||
#include "esphome/components/sensor/sensor.h"
|
||||
#include "esphome/core/automation.h"
|
||||
#include "esphome/core/component.h"
|
||||
|
||||
#include <cinttypes>
|
||||
|
||||
namespace esphome {
|
||||
namespace ads1110 {
|
||||
|
||||
class ADS1110Sensor : public sensor::Sensor, public PollingComponent, public i2c::I2CDevice {
|
||||
public:
|
||||
void setup() override;
|
||||
void update() override;
|
||||
void dump_config() override;
|
||||
};
|
||||
|
||||
} // namespace ads1110
|
||||
} // namespace esphome
|
31
components/ads1110/sensor.py
Normal file
31
components/ads1110/sensor.py
Normal file
|
@ -0,0 +1,31 @@
|
|||
from esphome import automation
|
||||
from esphome.automation import maybe_simple_id
|
||||
import esphome.codegen as cg
|
||||
from esphome.components import i2c, sensor
|
||||
import esphome.config_validation as cv
|
||||
from esphome.const import CONF_GAIN, CONF_ID, ICON_SCALE, STATE_CLASS_MEASUREMENT
|
||||
|
||||
CODEOWNERS = ["michaelh@juju.nz"]
|
||||
DEPENDENCIES = ["i2c"]
|
||||
|
||||
ads1110_ns = cg.esphome_ns.namespace("ads1110")
|
||||
ADS1110Sensor = ads1110_ns.class_(
|
||||
"ADS1110Sensor", sensor.Sensor, cg.PollingComponent, i2c.I2CDevice
|
||||
)
|
||||
|
||||
CONFIG_SCHEMA = (
|
||||
sensor.sensor_schema(
|
||||
ADS1110Sensor,
|
||||
accuracy_decimals=3,
|
||||
state_class=STATE_CLASS_MEASUREMENT,
|
||||
)
|
||||
.extend(cv.polling_component_schema("60s"))
|
||||
.extend(i2c.i2c_device_schema(0x48))
|
||||
)
|
||||
|
||||
|
||||
async def to_code(config):
|
||||
var = cg.new_Pvariable(config[CONF_ID])
|
||||
await cg.register_component(var, config)
|
||||
await i2c.register_i2c_device(var, config)
|
||||
await sensor.register_sensor(var, config)
|
44
pumper.yaml
Normal file
44
pumper.yaml
Normal file
|
@ -0,0 +1,44 @@
|
|||
substitutions:
|
||||
device_name: Pump monitor
|
||||
device_id: pumper
|
||||
project_name: juju.pumper
|
||||
project_version: "0.1"
|
||||
|
||||
packages:
|
||||
pumper:
|
||||
i2c:
|
||||
sda: 2
|
||||
scl: 1
|
||||
scan: true
|
||||
frequency: 400kHz
|
||||
|
||||
sensor:
|
||||
- platform: ads1110
|
||||
id: pressure_v
|
||||
name: "Raw sensor"
|
||||
unit_of_measurement: V
|
||||
device_class: voltage
|
||||
update_interval: 4s
|
||||
filters:
|
||||
- multiply: 2.92 # (75 + 39) / 39
|
||||
- exponential_moving_average:
|
||||
alpha: 0.1
|
||||
send_every: 5
|
||||
on_value:
|
||||
- sensor.template.publish:
|
||||
id: head
|
||||
state: !lambda 'return id(pressure_v).state;'
|
||||
|
||||
- platform: template
|
||||
id: head
|
||||
name: "Head"
|
||||
unit_of_measurement: m
|
||||
device_class: distance
|
||||
icon: mdi:water
|
||||
accuracy_decimals: 3
|
||||
filters:
|
||||
- calibrate_linear:
|
||||
- 0.5 -> 0
|
||||
- 4.5 -> 10.55 # 15 PSI
|
||||
|
||||
<<: !include atoms3_lite.yaml
|
Loading…
Reference in a new issue